Как собрать FreeBSD pkg из приложения python с помощью скрипта rc.d?
У меня есть приложение на Python с его setup.py
это работает просто отлично, чтобы установить его через setuptools. Затем я упаковываю его в DEB и PKGNG, используя отличное управление пакетами Effing. Я также провел несколько быстрых тестов с помощью setuptools-pkg, и это тоже работает.
Теперь мне нужно распространять пакеты, включая сценарии инициализации, для запуска / остановки / управления службой. У меня есть свои скрипты инициализации в репозитории с исходным кодом, и, в соответствии с тем, что кажется наилучшим опытом, я ничего не делаю с ними в setuptools и обрабатываю их в специфичной для ОС упаковке: для систем на основе Debian я использую --deb-init
, --deb-upstart
а также --deb-systemd
Варианты FPM по мере необходимости.
Как я могу собрать пакет FreeBSD, который включает в себя правильный rc.d
скрипт, используя FPM или любым другим способом?
Все примеры, которые я видел, добавляют rc.d
скрипт при сборке пакета через коллекцию портов, но это внутреннее приложение, которое не будет опубликовано в портах или в PyPi. Я хочу иметь возможность проверить репозиторий в системе FreeBSD, запустить команду, которая дает мне пакет, распространить его на другие системы FreeBSD, установить его с помощью pkg
и мой скрипт инициализации правильно развернут в /usr/local/etc/rc.d/<myappname>
, Для этого не нужно продолжать использовать FPM, все работает, пока это дает мне хорошо сформированный пакет.
2 ответа
Я настоятельно рекомендую создать ваш пакет, как если бы это был какой-либо другой порт, будь то будет опубликован или нет.
Одно из преимуществ, которые вы можете унаследовать, заключается в том, что вы также можете включить все свои тесты и автоматизировать развертывание, имея готовую основу для дальнейшей настройки интеграции / доставки.
Проверьте poudriere. Вы могли бы действительно поддерживать набор пользовательских портов со своими собственными настройками и распределять их по своим средам без каких-либо хлопот:
pkg install -r your-poudriere yourpkg
В случае, если это, вероятно, слишком много или, возможно, не очень хорошо адаптируется к вашему варианту использования, вы всегда можете вернуться к ansible, где вы можете создать пользовательский rc.d
в шаблоне ответной роли.
Если вы просто хотите что-то построить и развернуть, скажем, микросервис, то, вероятно, pkg
это не лучший инструмент, может быть, вам просто нужен супервизор, который может работать на всех ваших платформах ( sysutils / immortal), чтобы вы могли просто распространять свой код и иметь единый рецепт для запуска / остановки службы.
Ответ nbari, вероятно, правильный способ сделать это, и я, вероятно, создам свой собственный «порт» и использую его для сборки пакета на центральном хосте.
Во время моего первоначального вопроса я использовал другой подход, о котором я сообщаю здесь для полноты картины.
Я все еще создаю пакет приложений (т.
myapp-1.0.0.txz
) с
fpm -s python -t freebsd
, который в основном использует инфраструктуру setuptools Python для получения необходимой информации, и я не включаю в него файл rc.d.
Я также создаю второй пакет, который я назову
myapp-init-1.0.0.txz
с типом исходного каталога (т.
fpm -s dir -t freebsd
), и я включаю в этот пакет только сценарий инициализации.
Оба пакета распространяются на хосты и устанавливаются, что решает мою проблему с распространением.