Как собрать 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), и я включаю в этот пакет только сценарий инициализации.

Оба пакета распространяются на хосты и устанавливаются, что решает мою проблему с распространением.

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