使用 cpack 创建 deb 包后运行脚本

Posted

技术标签:

【中文标题】使用 cpack 创建 deb 包后运行脚本【英文标题】:run a script after deb package is created with cpack 【发布时间】:2015-05-24 05:50:26 【问题描述】:

我正在尝试使用 cpack 创建一个 deb 包。但是由于 cpack 中的一个错误,它正在创建具有错误权限的文件“md5sums”,并且在使用软件中心安装 deb 包时我收到警告。我有一个脚本,它将更改 deb 包中文件的权限。但是我对如何在打包后自动运行脚本感到困惑。

【问题讨论】:

【参考方案1】:

您可以像这样使用安装后脚本:

set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "$PROJECT_NAME/contrib/postinst;")

【讨论】:

你理解错了...我想更改包内文件的权限...例如 postint 脚本本身 CMake 的 INSTALL 命令具有 PE​​RMISSIONS 选项 - 它指定已安装文件的权限。您是如何解决问题的? 不,我们不能指定权限,因为该文件是由 cpack iteslf 创建的【参考方案2】:

我使用了以下方法

使用了具有以下内容的脚本

#!/bin/sh
set -e
mkdir fix_up_deb
dpkg-deb -x @CPACK_PACKAGE_FILE_NAME@.deb fix_up_deb
dpkg-deb --control @CPACK_PACKAGE_FILE_NAME@.deb fix_up_deb/DEBIAN
rm @CPACK_PACKAGE_FILE_NAME@.deb
chmod 0644 fix_up_deb/DEBIAN/md5sums
find -type d -print0 |xargs -0 chmod 755
fakeroot dpkg -b fix_up_deb @CPACK_PACKAGE_FILE_NAME@.deb
rm -rf fix_up_deb

然后使用配置它

CONFIGURE_FILE("$PROJECT_SOURCE_DIR/debian/fixup_deb.sh.in" "$CMAKE_CURRENT_BINARY_DIR/fixup_deb.sh" @ONLY IMMEDIATE)

然后在使用构建包后运行它(我没有测试过这一步)

add_custom_command(TARGET package POST_BUILD COMMAND bash fixup_deb.sh WORKING_DIRECTORY $CMAKE_CURRENT_BINARY_DIR )

或者从构建目录手动运行它

bash fixup_deb.sh

【讨论】:

以上是关于使用 cpack 创建 deb 包后运行脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何为使用 CPack 创建的 deb 包创建桌面图标?

CPACK_DEB_PACKAGE_COMPONENT 实际上做了啥?

制作 .deb 包时如何找出最低要求?

使用 cmake 创建多个 Debian 软件包

如何使用 CPACK_INSTALL_COMMANDS?

CPack 尝试构建所有目标