文章目录
cpack是cmake提供的一个打包工具
CMakeLists.txt关于打包部分的设置
版本控制信息
#准备的版本设置
SET(MAJOR_VERSION 1)
SET(MINOR_VERSION 0)
SET(PATCH_VERSION 0)
#说明要生成的是deb包
SET(CPACK_GENERATOR "DEB")
##############设置debian/control文件中的内容###############
#设置版本信息
SET(CPACK_PACKAGE_VERSION_MAJOR "${MAJOR_VERSION}")
SET(CPACK_PACKAGE_VERSION_MINOR "${MINOR_VERSION}")
SET(CPACK_PACKAGE_VERSION_PATCH "${PATCH_VERSION}")
#设置安装包的包名,打好的包将会是packagename-version-linux.deb,如果不设置,默认是工程名
set(CPACK_PACKAGE_NAME "cn.net.pikachu.bulbasaur")
#设置程序名,就是程序安装后的名字
set(CPACK_DEBIAN_PACKAGE_NAME "bulbasaur")
#设置架构
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
#设置依赖
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6)")
#设置description
SET(CPACK_PACKAGE_DESCRIPTION "pro-cc service")
#设置联系方式
SET(CPACK_PACKAGE_CONTACT "support@pro.com")
#设置维护人
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "PikachuHy")
include(CPack)
添加一些额外的依赖文件
##############debian/control设置完成了,下面设置控制脚本,动态库,changelog等#################
#lib目录下保存这一些动态库和安装控制脚本(postinst、postrm、preinst、prerm)
#doc目录下是changelog和copyright等文件
SET(LIBS_DIR "$ENV{DBXML_DIR}/lib")
SET(DOCS_DIR ${CMAKE_SOURCE_DIR}/doc)
#将pro-cc.conf文件安装时copy到/etc/init下
INSTALL(FILES ${CMAKE_SOURCE_DIR}/pro-cc.conf DESTINATION /etc/init)
#将库文件安装到/usr/lib下
INSTALL(FILES ${LIBS_DIR}/libdb-4.8.so ${LIBS_DIR}/libdbxml-2.5.so ${LIBS_DIR}/libxerces-c-3.0.so ${LIBS_DIR}/libxqilla.so.5 ${LIBS_DIR}/libxqilla.so.5.0.2 DESTINATION /usr/lib)
其他选项
#设置section
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
#设置priority
set(CPACK_DEBIAN_PACKAGE_PRIORITY "Optional")
打包操作
#打开工程目录,即外层CMakeLists.txt所在的目录
$ mkdir build && cd build
$ cmake ..
$ make package
问题及解决方案
问题:deb包的描述不对
解决方案:
- SET(CPACK_PACKAGE_DESCRIPTION "描述内容")
+ SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "描述内容")
附:
control 文件字段解析
字段 | 用途 | 例子/其他 |
---|---|---|
Package | 程序名称 | 中间不能有空格 |
Version | 软件版本 | |
Description | 程序说明 | |
Section | 软件类别 | utils, net, mail, text, x11 |
Priority | 软件对于系统的重要程度 | required, standard, optional, extra等; |
Essential | 是否是系统最基本的软件包 | yes/no,若为yes,则不允许卸载(除非强制性卸载) |
Architecture | 软件所支持的平台架构 | i386, amd64, m68k, sparc, alpha, powerpc等 |
Source | 软件包的源代码名称 | |
Depends | 软件所依赖的其他软件包和库文件 | 若依赖多个软件包和库文件,采用逗号隔开 |
Pre-Depends | 软件安装前必须安装、配置依赖性的软件包和库文件 | 常用于必须的预运行脚本需求 |
Recommends | 推荐安装的其他软件包和库文件 | |
Suggests | 建议安装的其他软件包和库文件 |
preinst文件
在Deb包文件解包之前(即软件安装前),将会运行该脚本。可以停止作用于待升级软件包的服务,直到软件包安装或升级完成
postinst文件
负责完成安装包时的配置工作。如新安装或升级的软件重启服务
#软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行
#!/bin/sh
echo "my deb" > /root/mydeb.log
#!/bin/sh
if [ "$1" = "configure" ]; then
/Applications/MobileLog.app/MobileLog -install
/bin/launchctl load -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist
fi
prerm文件
该脚本负责停止与软件包相关联的daemon服务。它在删除软件包关联文件之前执行
#!/bin/sh
if [[ $1 == remove ]]; then
/Applications/MobileLog.app/MobileLog -uninstall
/bin/launchctl unload -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist
fi
postrm文件
负责修改软件包链接或文件关联,或删除由它创建的文件
#软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行
#!/bin/sh
rm -rf /root/mydeb.log
dpkg相关指令解析
#安装(解包并配置)
dpkg -i|--install <.deb file name>
#dpkg -i mydeb-1.deb
#强制安装
dpkg --force-depends -i mydeb-1.deb
#解包:该命令仅对 “mydeb-1.deb”进行解包操作,不会执行包配置工作
dpkg --unpack mydeb-1.deb
#卸载:删除包,但保留配置文件
dpkg -r|--remove <package>
# dpkg -r my-deb
#该命令删除包,且删除配置文件
dpkg -P|--purge my-deb
#查看deb包是否安装/deb包的信息
dpkg -s|--status <package>
# dpkg -s my-deb
#查看deb包文件内容
dpkg -c mydeb-1.deb
#查看当前目录某个deb包的信息
dpkg --info mydeb-1.deb
#解压deb中所要安装的文件
#第一个参数为所要解压的deb包,第二个参数为将deb包解压到指定的目录
dpkg -x mydeb-1.deb mydeb-1
#解压deb包中DEBIAN目录下的文件(至少包含control文件)
dpkg -e mydeb-1.deb mydeb-1/DEBIAN
#列出与该包关联的文件 dpkg -L|--listfiles <package>
dpkg -L my-deb
#配置软件包
dpkg --configure <package>
# dpkg --configure my-deb
#解压deb包中DEBIAN目录下的文件(至少包含control文件)
dpkg -e mydeb-1.deb mydeb-1/DEBIAN
#列出与该包关联的文件 dpkg -L|--listfiles <package>
dpkg -L my-deb
#配置软件包
dpkg --configure <package>
# dpkg --configure my-deb