用CMake打包deb包流程完整版(带字段解析)


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
  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值