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

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

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

Мне нравится это:

установить(ПРОГРАММЫ ${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 для изменения пользователя и группы установленной программы с текущим зарегистрированным пользователем и группой

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


person George    schedule 19.02.2014    source источник


Ответы (2)


Я делаю это таким же образом. В моем случае я использую set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA, ./script/postinst) для запуска службы 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} не требуется. Убедитесь, что разрешения этих дополнительных сценариев установлены правильно.

person Bruno Hendrickx    schedule 13.01.2021

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

person saiarcot895    schedule 19.02.2014
comment
поэтому, если я установлю свой deb следующим образом: sudo dpkg -i my.deb, пользователем и группой программы будет root. Я не хочу изменять руководство пользователя и группы программы после установки. Я хочу, чтобы deb делал это. Я обнаружил, что postinst выполняется после установки deb. Поэтому я просто хочу, чтобы скрипт postinst изменил пользователя и группу с помощью chown - person George; 19.02.2014
comment
Изменить что и почему chown? В общем, все, что устанавливает deb, не должно принадлежать пользователю; он должен принадлежать корню. - person saiarcot895; 19.02.2014
comment
но, если он принадлежит root, он может работать только с root. Я хочу, чтобы текущий зарегистрированный пользователь запускал его. Я хочу, чтобы deb был установлен, пользователь двоичных файлов программы - текущий зарегистрированный пользователь. - person George; 19.02.2014
comment
Владение и работоспособность - две разные вещи. Например, в Терминале запустите stat /usr/bin/wget (инструмент для выполнения HTTP/FTP-запросов). Обратите внимание, что двоичный файл принадлежит пользователю root/root (пользователю и группе). Тем не менее, вы можете запустить его. Это определяется ограничениями доступа, которые должны быть 0755. Это означает, что пользователь-владелец может читать, записывать и запускать его («7»), группа-владелец может читать и запускать его (первая «5»), и все остальные могут читать и запускать его (вторая цифра «5») (см. также chmod wiki . - person saiarcot895; 19.02.2014
comment
Каждый пакет, который вы загружаете из репозиториев (apt-get, Центр программного обеспечения, какой бы метод вы ни использовали, который фактически одинаков), будет иметь двоичные файлы и библиотеки в этом пакете, принадлежащие root, и будет либо 0644 (для библиотек и других файлов которые не являются исполняемыми) или 0755 (для каталогов (которые должны быть 0755) и исполняемых файлов). - person saiarcot895; 19.02.2014
comment
спасибо, я вас понимаю. я знаю 0755. если мне это нравится, программа не идеальна. вы когда-нибудь устанавливали базу данных mysql. я вижу, что владельцем mysql является текущий зарегистрированный пользователь и группа. я просто хочу, чтобы моя программа могла делать так . - person George; 19.02.2014
comment
Интересно. Теперь, когда я думаю об этом, это может быть чтение списка файлов пользователей (которого я не знаю, где находится) и добавление всех пользователей, присутствующих в файле, в качестве разрешенных пользователей базы данных. - person saiarcot895; 19.02.2014