Я использовал для сборки пакетов Debian (quilt), он поддерживает применение патчей в процессе сборки. Патчи хранятся в папке debian/patches
и обычно используются для добавления исправлений, еще не зафиксированных в исходный код, или для настройки конкретной платформы.
В моем случае это пакет, для которого требуется стандартная команда сборки:
make build; make install_api; make install_desktop
вместо стандартного способа:
make; make install
В настоящее время предлагается следующее решение:
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? Я открыт для любого другого решения / обходного пути.
Это звучит как хороший случай для «скриплетов» снэпкрафта . Раздел build:
позволит вам заменить шаг сборки вашими собственными командами оболочки (make build; make install_api; make install_desktop
).
В идеальном случае привязка поддерживается в восходящем направлении, поэтому в их интересах принять патчи в восходящем направлении, возможно, скорректировав их, чтобы они были более общими.
Если апстрим не хочет поддерживать оснастку, а вы делаете это как участник сообщества, я бы предложил сделать развилку оригинального проекта и применить там свои патчи. Мне вилка кажется более понятной, чем держать ряд патчей вокруг себя. Это способ 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
Это хорошо работает в случае биткойнов. Но это всего лишь эксперимент, а не документированные лучшие практики. Так что комментарии и идеи, чтобы сделать его лучше, приветствуются.