CMAKE/CPACK: я хочу, чтобы deb выполнял скрипт bash после установки, но он не работает

Я создаю пакет debian с помощью cmake/cpack. Я хочу, чтобы deb выполнил сценарий bash после того, как я установил deb. Я установил deb, используя sudo dpkg -i my.deb.if Я установил deb таким образом, пользователь установленной программы и группа является корневой. поэтому я хочу, чтобы deb автоматически выполнял скрипт bash, чтобы изменить пользователя и группу, используя текущего зарегистрированного пользователя и группу.

Я ищу информацию об этом с помощью Google. Я считаю, что SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA, ./script/postinst) может это сделать. Так я и делаю, но с этим ничего не поделаешь.

Я делаю так:

установить (PROGRAMS ${CMAKE_SOURCE_DIR}/script/postinst DESTINATION ./script)

набор (CPACK_GENERATOR "DEB")

набор (CPACK_PACKAGE_NAME "mydeb")

набор (CPACK_PACKAGE_VERSION "1.0")

набор (CPACK_DEBIAN_PACKAGE_MAINTAINER "Джордж")

набор (CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA,./script/postinst)

набор (CPACK_PACKAGING_INSTALL_PREFIX "usr")

включают в себя (CPack)

postinst - это сценарий bash для изменения пользователя и группы установленной программы текущими зарегистрированными пользователем и группой.

Если что-то не так? Мне нужна помощь

3 ответа

Я делаю это таким же образом. В моем случае я использую для настройки запуска службы systemd при загрузке.

И так же я использую set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA, ./script/prerm)чтобы полностью удалить службу из последовательности загрузки перед фактическим удалением пакета Debian.

Важным примечанием здесь является то, что вам НЕ нужно устанавливать эти файлы отдельно. set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA, ./script/postinst)достаточно, следовательно install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts/ DESTINATION ${SCRIPT_DESINATION}не требуется. Убедитесь, что разрешения этих дополнительных сценариев установлены правильно.

Как правило, сценарий postinst не должен изменять ничего, непосредственно связанного с одним пользователем, но должен завершить установку системы в целом. Например, если вам нужно создать файлы конфигурации на основе оборудования, присутствующего в системе, вы можете использовать сценарии postinst. Я не знаю, что может сделать ваш пользовательский скрипт, чтобы предложить возможную альтернативу.

Я решил это с

      # generate the shell script from template.                            #
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/contrib/postinst.in" "postinst" @ONLY IMMEDIATE)
# and 
# hook up the event postinst to run after install                       #
SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_BINARY_DIR}/postinst;")

Мне действительно не нужно было использовать шаблон, то есть файл .in, но если мне когда-нибудь понадобится что-то более сложное, у меня есть возможность@varname@гдеvarnameэто переменная cmake на данный момент мойpostinst.inявляется

      #!/usr/bin/env sh
/usr/sbin/ldconfig
# vim: set filetype=sh

в основном есть сценарий оболочки, а также сценарии оболочки, см. https://cmake.org/cmake/help/latest/cpack_gen/deb.html , но документы для cmake и cpack очень плохие. не уверен, когдаpostrmиprermслучиться, ноpostinstзапускается после установки, поэтому идеальное время для запускаldconfigпосле установки моего.soфайлы

Другие вопросы по тегам