长篇分享

Debian 打包入门指南

最近笔者忙于为一些 Debian 衍生发行版打包软件包,这些发行版往往都会使用 deb 包作为默认的软件包,作为 Linux 世界两大软件包格式之一(另一个是 RedHat 系的 rpm 包),deb 包的使用场景非常广泛,本篇文章就来教各位读者如何修改现有的软件包并重新构建自己的 deb 包。

环境准备

在开始打包之前,首先需要准备好必须的各种工具,只需要打开终端并输入如下命令:

 sudo apt-get install build-essential fakeroot devscripts

这条命令会将 build-essential、fakeroot 和 devscripts 安装到我们的电脑上,之后我们会用到这些软件。

获取软件包

在准备好必须的工具之后,我们还需要获取准备修改的原始软件包,有两种途径可以获取:

  1. 直接从软件源网站上下载
  2. 配置 apt 源 并使用 apt source 下载

笔者更喜欢用第一种方式(因为比较方便),不过更正规的方式是使用 apt source 下载,因此接下来就向各位介绍这种方法。

首先,我们需要修改 apt 的软件源列表,因为在默认情况下,apt 不会下载原始软件包。打开 /etc/apt/sources.list 文件,并检查下面的这行代码是否已经取消注释:

deb-src http://httpredir.debian.org/debian unstable main

如果没有,去掉这行的注释,保存并退出,之后运行:

sudo apt update

apt 就会更新刚才取消注释的软件源,以便之后进行下载。

选取软件包

本次我们选取 node-pretty-ms 作为演示,首先使用 apt source 将该软件包下载至本地:

apt source node-pretty-ms

下载完成后,使用 ls 命令查看当前目录,应该会多出三个文件:

node-pretty-ms_7.0.1-1.debian.tar.xz
node-pretty-ms_7.0.1-1.dsc
node-pretty-ms_7.0.1.orig.tar.gz

这三个文件共同构成了 deb 包,其中第一个压缩包中包含了 deb 包的补丁、打包规则等,第二个文件是 deb 包的元数据文件,第三个压缩包则是原始上游源码,要对这个包进行修改,我们可以使用如下命令:

dpkg-source -x node-pretty-ms_7.0.1-1.dsc

这条命令会在当前目录下生成一个名为 node-pretty-ms-7.0.1 的子目录,使用 cd 命令进入该子目录后再使用 ls 命令,即可看到原始 deb 包的结构,最核心的就是 debian 目录,其中包含了制作一个 deb 包所需的各种文件。

lrzlin@LionBattery:~/article/node-pretty-ms-7.0.1/debian$ ls
changelog  control  copyright  docs  gbp.conf  patches  rules  salsa-ci.yml  source  tests  upstream  watch

其中我们要关注的是下面四个文件:

  1. changelog 中包含了每次修改的作者、修改内容、时间等信息
  2. control 中则包含了软件包的名称、维护者、构建依赖等信息
  3. patches 目录中包含了软件包作者们对上游代码进行的修改
  4. rules 中是该软件包的构建脚本

这些文件基本就是 deb 包的核心部分,也是我们之后对软件包进行修改主要涉及的部分。

初次构建

浏览完软件包的整体结构之后,我们就可以尝试对该软件包进行构建了,不过在此之前,我们首先需要安装它所需的各种构建依赖,使用如下命令即可:

sudo apt build-dep node-pretty-ms

apt 会自动按照软件包 control 文件中描述的构建依赖帮助我们安装需要的依赖,下载安装完成之后,使用 debuild 命令进行构建:

debuild -b -uc -us

等待命令运行完成后,即可在上级目录找到编译完成的 deb 包。

修改源码

当然,我们本次的目标并不止于原封不动的重新编译 deb 包,毕竟如果这样的话为什么不直接从服务器下载呢?我们要做的是对源码进行修改并重新编译:

cd node-pretty-ms-7.0.1
vim index.js

将其中的

throw new TypeError('Expected a finite number');

修改为

throw new TypeError('Expected a finite number!');

保存并退出,使用如下命令编写日志

dch -i -Dunstable

此处的 unstable 指的是软件发行通道,同时因为我们并非官方的维护者,因此由我们做出的更改会默认加入 * Non maintainer upload. 这样的说明,我们需要在下一行写明我们对源码做的修改:

写完 changelog 之后,就可以退出编辑器,使用如下命令生成补丁:

dpkg-source -b . --commit

输入补丁名称并确认,这条命令就会将我们之前所做的修改保存至 debian/patches 目录下,并在编译源码时自动应用。

完成上述的修改之后,使用如下命令重新生成 dsc 源码

dpkg-source -b .

再次回到上级目录,即可看到新生成的 .dscdebian.tar.xz 文件,这些就是应用了我们之前的修改的新 deb 包,要重新编译,只需要回到源码子目录,并重新输入:

debuild -b -uc -us

接下来坐等收包就好啦!

进阶技巧

使用上面的方式直接进行编译虽然方便,但当我们大规模进行打包的时候就会出现问题了:不同包的依赖不同,反复安装不仅非常麻烦,有时还可能造成依赖计算错误——明明不需要依赖的软件包却成了必须依赖,这样你打出来的软件包可能在本机运作一切正常,可放在别人的机器上却没法正常编译和安装了,这就轮到 pbuildersbuild 出场了:这些工具可以帮助我们建立一个隔离的环境,类似 chroot 或者 docker,不过对打包做了更多的特定优化,以下就以 pbuilder 为例作为演示,

要安装 pbuilder,只需要在终端输入如下指令:

sudo apt install pbuilder

安装完成之后,使用如下命令创建编译环境

sudo pbuilder create

这一步会为我们配置一个完整的环境用于之后的编译,等待创建完成之后,运行如下的命令即可完成编译

pbuilder build node-pretty-ms_7.0.1-1.dsc

这就是关于 deb 打包的简短教程了,至于 pbuilder 更加进阶的用法,就等各位读者进一步挖掘了。

参考文章:
https://wiki.debian.org/BuildingTutorial
https://www.cnblogs.com/Gui-Yue/articles/16967031.html

对这篇文章感觉如何?

太棒了
0
不错
0
爱死了
0
不太好
0
感觉很糟
0

You may also like

Leave a reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

More in:长篇分享

信息安全

深度解析shellcode原理及编码技术

本篇文章深度探讨了Shellcode的原理,同时对64位和32位系统下的shellcode进行了详细解读。并详细介绍了Shellcode的编码技术,其中包括手写Shellcode的两种思路。对于编码Shellcode,本文列举了几种常见的解码器的实现,如FNSTENV XOR解码器和JMP/CALL解码器。最后,本文列举了几种常见的字符集以及Shellcode编码工具,并推荐了两个可查找现成Shellcode的数据库。
教程

将USB设备连接到WSL2:分步教程

这篇教程详细地介绍了如何在Windows Subsystem for Linux 2(WSL2)中使用USB设备。首先,我们需要安装在Windows上共享USB设备的软件usbipd-win,并进行相应的设置。接下来,我们会在WSL内部安装USB/IP的用户空间工具和USB硬件标识符的数据库。再接下来的步骤是配置udev规则以允许非root用户访问设备。最后,我们将通过使用usbipd的WSL便利命令来连接设备。在连接或断开设备后,我们可以在WSL内部检查已连接的USB设备。