Предпочтительный / Идиоматический метод для включения 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
Другие вопросы по тегам