checkinstall - 打包篇
简介
最近涉及到一些打包相关的,之前都是打包脚本打包,涉及到的相关依赖文件打包到同一目录。在执行安装脚本部署。这次涉及到服务部署,需要打成deb包,有对应的deb打包脚本,但是在实际测试中,感觉打包脚本的编写还有测试比较麻烦。就找了一下有没有对应的打包工具,就查找到了这个打包工具。checkinstall
之前的ldd打包脚本:
代码语言:javascript复制#本条命令是将所有依赖库打到指定的包,但是路径未拷贝。
ldd ./client | cut -d ">" -f 2 |grep lib|cut -d "(" -f 1|xargs tar -zchvf depends.tar.gz
#本条命令是将所有依赖文件拷贝到指定目录且拷贝对应的文件目录结构
cp --parents `ldd ./client | cut -d ">" -f 2 |grep lib|cut -d "(" -f 1|xargs` lib/
- checkinstall
Track installation of local software, and produce a binary manageable with your package management software.
checkinstall is a program that monitors an installation procedure (such as make install, install.sh ), and creates a standard package for your distribution (currently deb, rpm and tgz packages are supported) that you
can install through your distribution's package management system (dpkg, rpm or installpkg).
Note that for most useful actions, checkinstall must be run as root.
对于安装步骤,单步讲解就不做说明,网上大多数都是这个讲解。
执行
前置条件:注意在Makefile,所在的目录执行。
下述是笔者的一个Demo。编译 pulseaudio-module-xrdp
代码语言:javascript复制cd subprojects/pulseaudio-module-xrdp
./bootstrap
./configure PULSE_DIR=${libfolder}/subprojects/pulseaudio
make -j${cpus}
checkinstall --pkgname=pulseaudio-module-xrdp --pkgversion=0.5 --pkgrelease=1 --pkglicense=GPL --pkggroup=root --maintainer=Troila --pakdir=${libfolder}/Output -y
利用 checkinstall --help
命令查看使用方法。
checkinstall [options] [install command]
checkinstall [配置属性] [安装命令]
再网上查到的相关方法都是,按照步骤一步一步执行选择。如果只出一次包或者手动,当然这种方法没什么问题。但是在实际的项目开发中有一个问题,现在采用的都是脚本或者jenkins自动化出包,无法手动操作。
根据上述 checkinstall 执行命令,经过测试,得到了相关命令,格式如下:
代码语言:javascript复制checkinstall --pkgname=name --pkgversion=1.0.0 --pkgrelease=1 --pkglicense=GPL --pkggroup=root --pkgarch=arm64 --maintainer=name --pakdir=path -y
详细释义:
checkinstall 涉及到的配置如下:
代码语言:javascript复制Package type selection # 包类型选择
Install options # 安装配置
Scripting options # 脚本配置
Info display options # 信息显示配置
Cleanup options # 清除配置
上述命令主要涉及到的是脚本配置
代码语言:javascript复制-y, --default Accept default answers to all questions #需要选择的地方,按照默认选择
--pkgname=<name> Set name #包名
--pkgversion=<version> Set version #版本
--pkgrelease=<release> Set release # 设置release or debug
--pkglicense=<license> Set license # 开源证书
--pkggroup=<group> Set software group # 设置软件组
-A, --arch, --pkgarch=<arch> Set architecture # 设置平台信息 建议最好手动设置,不要选择默认,在ARM平台或者一些特定系统可能没有那么好使
--maintainer=<email addr> The package maintainer (.deb) #联系地址
--pakdir=<directory> The new package will be saved here # 安装包输出路径,默认在当前目录即Makefile所在目录
在手动安装过程,最后涉及到的相关配置如下:
代码语言:javascript复制0 - Maintainer: [ root@user-KVM ]
1 - Summary: [ Package created with checkinstall 1.6.2 ]
2 - Name: [ name ]
3 - Version: [ 0.9.14 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ root ]
7 - Architecture: [ arm64 ]
8 - Source location: [ build ]
9 - Alternate source location: [ no ]
10 - Requires: [ ]
11 - Provides: [ build ]
12 - Conflicts: [ ]
13 - Replaces: [ ]
上述配置的 8 项相关,全部都是必须项,其他的5项配置可以按照默认选择。
注意,上述选择是会在你的编译环境默认安装,主要原因是,在编译环境,在后续编译过程中,可能会依赖目前你的编译,所以默认选择了在本地安装,如果不需要可以添加配置 --install=<yes|no>
选择 no,但是 最后不用管,按照默认安装来执行,保证编译的顺利运行。
其他
- 包选择类型
-t,--type=<-t=debian|rpm|debian> Choose packaging system
-S Build a Slackware package
-R Build a RPM package
-D Build a Debian package
在实际编译过程中,默认会生成和当前环境相同的包,不需要手动选择。如果需要特指在上述命令中添加:
代码语言:javascript复制-D or -t=debian #deb
-R or -t=rpm #rpm
-S or -t=-t=debian #Slackware
结尾语
如果有疑问或者笔者有遗漏/错误的地方,欢迎讨论。 其他配置打包相关:请查看笔者前几篇博文。 Cmake打包工具-CPACK autotools-自动化编译构建 根据CMakelist.txt 或者 configure 配置好相关安装属性,最后生成Makefile,checkinstall,再根据Makefile信息生成安装包。 随后笔者补上 qmake打包配置博文。