Вы можете использовать предварительные настройки systemd, чтобы указать, будет ли служба systemd по умолчанию включена или отключена во время установки.
По умолчанию предустановки Debian включают все службы по мере их установки, поэтому вам нужно только отправить предустановку на рабочие станции разработки (поведение по умолчанию соответствует тому, что вы хотите получить в рабочей среде), отправив файл, например, /etc/systemd/system-preset/80-foo.preset
содержащий строку, которая говорит
disable foo.service
Если вы управляете своими рабочими станциями разработчика с помощью таких систем, как Puppet, Chef, Ansible и т. Д., Вы можете использовать их для доставки такой предустановленной конфигурации systemd, которая облегчит вам применение политики только к рабочим станциям разработчика, а не к рабочей среде. машины.
Ваш пакет .deb должен использовать systemctl preset
команду для включения службы, так как эта команда будет учитывать предварительно заданную конфигурацию.
Как указывают @JdeBP и @sourcejedi , макросы Debian в deb-помощниках (таких как dh_systemd_enable
) уже делают это, они вызывают, deb-systemd-helper
который будет использовать systemctl preset
по умолчанию (с небольшим предупреждением, что если вы удалите (но не очистите) пакет, и затем снова установить его, он будет не включить службу, даже если вы удалите файл предустановленный) См. этот комментарий в deb-systemd-helper
«s enable
операции :
# We use 'systemctl preset' on the initial installation only.
# On upgrade, we manually add the missing symlinks only if the
# service already has some links installed. Using 'systemctl
# preset' allows administrators and downstreams to alter the
# enable policy using systemd-native tools.
Для получения дополнительной информации о функции пресетов systemd см. Справочную страницу пресетов systemd и команды, systemctl preset
которая ее реализует.
*.preset
файлы как часть этого пакета.deb-systemd-helper
первой установке пакета. После этого к параллельной базе данных, поддерживаемой инструментами Debian, обращаются, пока пакет не будет очищен. news.ycombinator.com/item?id=18320131deb-systemd-helper
похоже, использовать пресеты. И это должно работать без необходимости предварительно заданной команды systemctl внутри пакета .deb. Специфика Debian - это то, что происходит, если вы удаляете (но не удаляете) пакет. Если позже вы переустановите пакет, он не включит службу, даже если вы удалите предустановленный файл. salsa.debian.org/debian/init-system-helpers/blob/debian/1.56/…Если вы хотите предложить пользователю во время установки, вы должны использовать
debconf
. Это имеет ряд преимуществ, даже если вы находитесь вне контекста, в котором важна политика Debian: она обеспечивает согласованное взаимодействие с конечным пользователем, с поддержкой множества внешних интерфейсов; поддерживает разные «уровни»; поддерживает предпосевную обработку. Предварительное заполнение означает, что пакет может быть предварительно настроен, и в этом случае он вообще не будет запрашивать. Различные уровни означают, что приглашение может быть настроено на показ только при определенных обстоятельствах; После этого вы можете установить пакет без запроса по умолчанию (для встроенных целей) и дать указание своим разработчикам соответствующим образом настроить свой внешний интерфейс при установке пакета, чтобы они увидели приглашение.Тем не менее, я думаю, что лучше избегать подсказок, когда это возможно. Это особенно верно для сервисов, у которых есть другие способы работы с предпочтениями конечного пользователя, и где работа с пользовательскими настройками усложняет сценарии сопровождающего (смотрите созданные сценарии в вашем пакете, они уже решают ряд тонких проблем, используя
deb-systemd-helper
- вы пришлось бы повторить все это, с вашими предпочтениями).Если вашим разработчикам никогда не нужно запускать службу, они могут замаскировать ее перед установкой пакета, и служба никогда не будет включена:
Если вашим разработчикам иногда нужно запускать сервис, используя модуль systemd, они могут отключить его после первой установки пакета, и последующие установки запомнят это:
Тогда по умолчанию будет включена служба.
источник
debconf
похоже, что я имел в виду, но я согласен, что лучше избегать подсказок, когда это возможно. Я знал об этомsystemctl disable
, но я пытался помочь пользователю избежать «пропуска шага» во время установки.*.presets
Решение было предложено Filippe решает эту проблему.