Предпочтительный / Идиоматический метод для включения systemd.service из установки пакета Debian
У меня есть специальный пакет Debian, который я создал для нашего программного обеспечения, который создает сервис systemd. Каков предпочтительный / идиоматический способ установки указанного пакета для включения / запуска службы во время установки?
Что я сделал, так это добавил следующие три строки в мой postinst
сценарий:
systemctl --system daemon-reload
systemctl enable my_service.service
systemctl start my_service.service
Это работало нормально, пока мы не попытались включить загрузку этого пакета в наше первоначальное создание образа под управлением debootstrap
в этот момент оказалось, что systemctl
Похоже, что нужно много настроек среды, которые обычно не включаются в этот процесс.
1 ответ
Я смотрю на похожую ситуацию, я хочу настроить службы в rootfs debootstrap. Похоже на то systemctl enable
просто читает цели в [Install]
раздел файла модуля и создает правильные символические ссылки. Поэтому, если вы знаете, какие сервисы вы хотите запускать и под какими целями, я думаю, что правильным ответом может быть просто создание правильных символических ссылок. например
ln -s /etc/systemd/system/multi-user.target.wants/ssh.service \
/lib/systemd/system/ssh.service
Два других шага (daemon-reload
а также start
) вы не хотите делать это при установке в chroot debootstrap, но тогда я предполагаю, что ваша проблема заключается в том, как просто сделать символическую ссылку в env debootstrap и обычным способом...
Редактировать для debootstrap
Как это происходит, я также использую debootstrap
и я нашел systemctl enable
звонки работают нормально, пока вызывающий пользователь root
(чтобы избежать Failed to connect to bus
предупреждение.) daemon-reload
а также start
вероятно, не имеет смысла во время установки под chroot, поскольку вы не находитесь в живом окружении. Так что ваши postinst
вероятно, хочет обнаружить chroot и пропустить эти строки. Или установите переменную env или передайте какой-нибудь флаг, который может прочитать ваш установочный скрипт.
IM_DEBOOTSTRAPPING=yes dpkg -i mypackage.deb # tells postinst to skip systemctl start