Как наложить патч на исходный код при сборке Snapcraft?

Я использовал для сборки пакетов Debian (quilt), он поддерживает применение патчей в процессе сборки. Патчи хранятся в папке debian/patches и обычно используются для добавления исправлений, еще не зафиксированных в исходный код, или для настройки конкретной платформы.

В моем случае это пакет, для которого требуется стандартная команда сборки:

make build; make install_api; make install_desktop

вместо стандартного способа:

make; make install

В настоящее время предлагается следующее решение:

    [ 118] изменить Makefile и добавить default: & amp; install: записей.

Ошибка, полученная при запуске snapcraft --no-parallel-build без изменения источника:

make install DESTDIR=/home/username/Desktop/sandbox/alfanous-snap/parts/alfanous-git/install
make: *** No rule to make target 'install'.  Stop.
Command '['/bin/sh', '/tmp/tmp_f_u1ktl', 'make', 'install', 
 'DESTDIR=/home/username/Desktop/sandbox/alfanous-snap/parts/alfanous-git/install']'
 returned non-zero exit status 2

Итак, есть ли способ добавить патч для сборки Snapcraft? Я открыт для любого другого решения / обходного пути.

5
задан 17 April 2017 в 16:17

2 ответа

Это звучит как хороший случай для «скриплетов» снэпкрафта . Раздел build: позволит вам заменить шаг сборки вашими собственными командами оболочки (make build; make install_api; make install_desktop).

0
ответ дан 17 April 2017 в 16:17

В идеальном случае привязка поддерживается в восходящем направлении, поэтому в их интересах принять патчи в восходящем направлении, возможно, скорректировав их, чтобы они были более общими.

Если апстрим не хочет поддерживать оснастку, а вы делаете это как участник сообщества, я бы предложил сделать развилку оригинального проекта и применить там свои патчи. Мне вилка кажется более понятной, чем держать ряд патчей вокруг себя. Это способ GitHub, и я предпочитаю его способу Debian.

Но, конечно, это субъективное мнение, и Snapcraft должен быть достаточно гибким, чтобы позволить вам следовать любому процессу, который вы считаете лучшим для вашего проекта. Итак, с помощью биткойнов мы немного изучили патчи. Вы можете найти метаданные привязки здесь: https://github.com/elopio/blockchain-snaps/tree/master/bitcoin/snap

В snapcraft.yaml вы найдете часть для патчей . Он просто копирует каталог патчей в каталог stage и следит за тем, чтобы эти файлы не попали в оснастку. Если вы проверите этот каталог, вы найдете один файл .patch, сгенерированный с помощью git diff.

Затем, также в snapcraft.yaml вы найдете, что биткойн-часть применяет патч в подготовительном скрипте .

Важные части snapcraft.yaml:

parts:
  bitcoin:
    source: https://github.com/bitcoin/bitcoin
    source-type: git
    prepare: git apply $SNAPCRAFT_STAGE/default_data_dir.patch

  patches:
    source: snap/patches
    plugin: dump
    prime:
      - -*

Структура папки моментальных снимков:

.
├── patches
│   └── default_data_dir.patch
└── snapcraft.yaml

Это хорошо работает в случае биткойнов. Но это всего лишь эксперимент, а не документированные лучшие практики. Так что комментарии и идеи, чтобы сделать его лучше, приветствуются.

0
ответ дан 17 April 2017 в 16:17

Другие вопросы по тегам:

Похожие вопросы: