dpkg-buildpackage 实际上是一个perl脚本,它封装了从源代码解压,应用补丁,编译,测试,安装,打包一系列过程。它也通过调用其他debian维护工具,来完成制作补丁等过程。简单的说,在满足软件包各种依赖的前提下,使用dpkg-buildpackage能完成debian源代码包的编译和打包整个过程,是debian构建系统的一个基础工具。
cmake 是个构建工具,最早在kde源码构建上使用,相对于autotools工具,配置更趋自动化,编译过程有进度显示,并提供了更友好的错误提示。
这个流水账大致分以下几个过程:
一、获取debian源代码包
以loongnix为例,它基于debian 10构建,因为debian有个backport策略,提供了适合在debian 10上运行的软件的较新版本,所以要使用新版cmake,先要获取源代码包。
相关的配置是:
修改 /etc/apt/sources.list 文件,加入以下行
deb-src http://mirrors.ustc.edu.cn/debian buster main
deb-src http://mirrors.ustc.edu.cn/debian buster-updates main
deb-src http://mirrors.ustc.edu.cn/debian buster-backports main
备注:buster是debian 10的代号,“mirrors.ustc.edu.cn"是 debian 的国内镜像
然后运行以下命令:
sudo apt update // 更新,和 mirrors.ustc.edu.cn 保持同步
cd 一个有写权限的目录
apt source cmake // 下载源代码包,并进行解压和应用内含的补丁
二、安装”构建cmake软件包“所需要的各种依赖软件包
在终端输入如下命令:
sudo apt build-dep cmake
这个命令会在系统的源码包数据库里面,查找cmake包所记录的依赖,并把系统没安装的,进行安装。
因为用户的现有系统环境,软件包环境不同,软件包的数目会有变化,可能会很多,可能一个也不需要。
如果cmake构建所依赖的软件包都正常安装,就可以进行到下一步。
三、使用 dpkg-buildpackage 进行编译
在终端提示符下输入如下命令:
cd cmake-3.18.4
dpkg-buildpackage -uc -us
从截图可以看到,当前目录下,有三个文件和一个目录:
- cmake-3.18.4 这个目录是 apt source cmake 时,自动生成的。
- 当前目录下运行 dpkg-source -x cmake_3.18.4-2+deb11u1bpo10+1.dsc 重建这个目录
- orig字样压缩包是cmake的源码包
- debian字样压缩包是用于生成 cmake-3.18.4/debian 目录,里面包含编译控制和补丁等
- dsc字样文件是一个重要的基础信息文件,里面包含上述两个包的校验信息
过程大致分为以下过程:
对当前目录里面的代码进行make clean ,重新建立源码包,然后读取 debian/rules 文件,进行解压、打补丁、配置、编译、测试、打包等过程。
这其中的每个过程都可能出错,需要定位错误,消除错误,直至编译通过。
因为cmake这个软件,需要根据处理器架构确定一些环境变量和变量的内容,需要对源代码进行修改
所以第一次运行dpkg-buildpackage会有错误提示。
通过查看它的报错,基本可以定位要修改的代码
备注:经过充分测试的源码包编译,整个buildpackage过程是不会报错的,可以观察到整个过程
dpkg-buildpackage -uc -us 2>&1 | tee ../build.log
上述命令,可以保存一个log到父目录里面,注意:不要往当前目录里面添加任何不相关内容,避免对编译构建产生干扰。
四、处理报错和进行一些修改,并自动制作补丁
根据“报错信息”进行一些更改,然后重新运行dpkg-buildpackage,这个程序在重新制作源码包的时候,进行一些比较,尤其在软件代码上有修改时,会提示源码已经修改,调用一个工具软件,形成一个补丁,然后把补丁放到debian/patches目录下面,重新进行debian包封装。
这个过程可能反复多次,每次对源码的修改都会生成补丁,直至编译通过,在父目录下生成1个或多个deb包
注意:对debian目录下文件所作的修改,不会提示生成补丁,可能在版本后缀上,有所体现