package.init не устанавливается - PullRequest
6 голосов
/ 26 мая 2009

У меня есть файл project.init в каталоге debian (вместе с rules, control и т. Д.), И в моем файле rules (в правиле binary-arch) есть dh_installinit.

Когда dpkg-buildpackage завершается, сценарий инициализации был скопирован в debian/project/etc/init.d/project, и были созданы различные сценарии pre / post.

Однако, когда я на самом деле устанавливаю .deb (с dpkg -i), сценарий init.d не устанавливается, поэтому я должен пропустить часть этого процесса. « Руководство нового сопровождающего » довольно мало в деталях init.d (в основном говорится, что их не следует использовать, потому что они слишком продвинуты).

Подробный вывод команды dh_installinit:

dh_installinit
    install -p -m755 debian/project.init debian/project/etc/init.d/project
    echo "# Automatically added by dh_installinit">> debian/project.postinst.debhelper
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/postinst-init >> debian/project.postinst.debhelper
    echo '# End automatically added section' >> debian/project.postinst.debhelper
    echo "# Automatically added by dh_installinit">> debian/project.prerm.debhelper
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/prerm-init >> debian/project.prerm.debhelper
    echo '# End automatically added section' >> debian/project.prerm.debhelper
    echo "# Automatically added by dh_installinit">> debian/project.postrm.debhelper
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/postrm-init >> debian/project.postrm.debhelper
    echo '# End automatically added section' >> debian/project.postrm.debhelper

Ответы [ 5 ]

8 голосов
/ 20 сентября 2012

Есть ли в вашем пакете запись для вашего сценария инициализации в блоке Conffiles в /var/lib/dpkg/status, например,

Package: <project>
...
Conffiles:
 /etc/init.d/<project> d41d8cd98f00b204e9800998ecf8427e

и содержит ли /var/lib/dpkg/info/<project>.conffiles /etc/init.d/<project>?

Вот что происходит ...

сценарии инициализации по умолчанию помечены как файлы конфигурации, так как они находятся в /etc. 1

Я предполагаю, что вы установили пакет, удалили файл инициализации и переустановили пакет.

В этом случае удаление файла инициализации считается его изменением 2 , а dpkg отказывается «перезаписать» «файл конфигурации».

Вы сможете исправить проблему, удалив раздел Conffiles из /var/lib/dpkg/status.

Примечания:

  1. conffiles - Руководство нового сопровождающего Debian
  2. Пустой файл имеет сумму MD5 d41d8cd98f00b204e9800998ecf8427e, но любая несоответствующая контрольная сумма вызовет такое же поведение
2 голосов
/ 10 сентября 2009

Полагаю, вам следует взглянуть на служебный скрипт "update-rc.d", который заботится о создании / удалении символических ссылок в /etc/init.d/.

Используйте этот сценарий в файлах управления DEBIAN "postinst" и "postrm".

например. для 'postinst': update-rc.d mswitch start 20 2 3 4 5. остановка 0 1 6.

например. для 'postrm': update-rc.d mswitch удалить

1 голос
/ 03 июня 2009

На этом этапе я проверю содержимое создаваемого файла .deb. Для этого вы можете использовать dpkg-deb -c.

Если скрипт инициализации находится в .deb, он должен быть установлен в /etc/init.d, вот так:

...
drwxr-xr-x root/root         0 2009-06-03 14:01 ./etc/
drwxr-xr-x root/root         0 2009-06-03 14:01 ./etc/init.d/
-rwxr-xr-x root/root      2558 2009-02-13 11:27 ./etc/init.d/balance
...

Если вы используете последнюю версию Debian, содержимое вашего пакета может быть сгенерировано из debian / tmp, а не из debian / project, как вы ожидаете. Вы можете переместить файлы из debian / projet в debian / tmp, используя dh_install.

0 голосов
/ 17 февраля 2014

У меня был успех, когда я только помещал файл project.init в папку debian, а не не добавлял никаких особых ограничений в файл правил. После того, как этот шаг сработает, протестируйте, чтобы добавить свои особые ограничения.

Для контроля успеха в папке debian cat *.postinst.debhelper содержит:

# Automatically added by dh_installinit
if [ -x "/etc/init.d/<packagename>" ]; then
    if [ ! -e "/etc/init/<packagename>.conf" ]; then
        update-rc.d <packagename> defaults >/dev/null
    fi
    invoke-rc.d <packagename> start || exit $?
fi
0 голосов
/ 11 июня 2009

Скорее всего, вы используете опцию -P для других сценариев dh_ *, но не для этого? Если вы используете эту опцию, вам нужно использовать ее во всех сценариях dh_ *.

...