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
файлы