4

У меня есть специальный пакет Debian, который я создал для нашего программного обеспечения, который создает сервис systemd. Каков предпочтительный / идиоматический способ установки указанного пакета для включения / запуска службы во время установки?

Я добавил следующие три строки в мой скрипт postinst :

systemctl --system daemon-reload
systemctl enable my_service.service
systemctl start my_service.service

Это работало нормально до тех пор, пока мы не попытались включить загрузку этого пакета в наше начальное создание образа, запущенное под debootstrap в этот момент оказалось, что systemctl похоже, хочет настроить множество компонентов среды, которые обычно не выполняются в этом процессе.

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .