Показать статистику
0 голосов
от (2.3тыс. баллов)

Я пытаюсь сгенерировать пакет debian через cpack, который учитывает конфигурацию системы (например, не запускайте службу, если администратор этого не хочет) и не вызывает ошибок при установке в среде, свободной от systemd (как в некоторых образах докеров).

Моя текущая установка состоит из файла postinst и файла prerm, которые просто передаются cpack через файлы CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA. Эти вызовы systemctl enable/start/stop/disable в обоих сценариях.

Из того, что я собрал, следует вызвать dh_installsystemd --name=foo foo.service для запуска службы.

Однако замена systemctl enable foo.serviceэтим в моем файле postinst вызывает ошибку:

dh_installsystemd: error: "debian/control" not found. Are you sure you are in the correct directory?
dpkg: error processing package foo (--configure):
 installed foo package post-installation script subprocess returned error exit status 255
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
Errors were encountered while processing:
 foo

Должен признаться, что я несколько потерялся в том, как с этим обращаться. Как правильно добавить службу systemd в пакет Debian через CPack?

464 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

Лучшее решение, которое пришло на ум, — разобрать другой пакет и использовать те же команды, которые генерирует dh_installsystemd.

В результате получается файл postinst, например:

# End automatically added section
# Based on output by dh_installsystemd/13.5.2

if [ \"$1\" = \"configure\" ] || [ \"$1\" = \"abort-upgrade\" ] || [ \"$1\" = \"abort-deconfigure\" ] || [ \"$1\" = \"abort-remove\" ] ; then

    # was-enabled defaults to true, so new installations run enable.
    if deb-systemd-helper --quiet was-enabled 'foo.service'; then
        # Enables the unit on first installation, creates new
        # symlinks on upgrades if the unit file has changed.
        deb-systemd-helper enable 'foo.service' >/dev/null || true
    else
        # Update the statefile to add new symlinks (if any), which need to be
        # cleaned up on purge. Also remove old symlinks.
        deb-systemd-helper update-state 'foo.service' >/dev/null || true
    fi
fi
if [ \"$1\" = \"configure\" ] || [ \"$1\" = \"abort-upgrade\" ] || [ \"$1\" = \"abort-deconfigure\" ] || [ \"$1\" = \"abort-remove\" ] ; then
    if [ -z \"${DPKG_ROOT\:-}\" ] && [ -d /run/systemd/system ]; then
        systemctl --system daemon-reload >/dev/null || true
        deb-systemd-invoke restart 'foo.service' >/dev/null || true
    fi
fi

Поскольку эти инструкции являются статическими, обновления в макросах необходимо применять вручную.

...