长篇分享

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设备。
开源评论

CTF比赛中的网络安全:从一场“失控”的比赛中吸取教训

在一次CTF(Capture The Flag)比赛中,出题方使用了一个真实的勒索病毒作为比赛题目,导致许多参赛者的磁盘被锁定,资料无法恢复。这一事件突显出网络安全比赛在题目设置和比赛环境管理方面的严重缺陷,因此,需要重新审视和改进比赛的设计和实施。对于组织者,他们应建立严格的题目审查制度,创建安全的比赛环境,并提供清晰的比赛规则和应急响应机制。对于参赛者,他们应持续学习并提高网络安全知识和技能,使用专用设备和网络环境,并定期备份重要数据。这样,我们可以从中吸取教训,防止类似事件的再次发生,同时提高我们的网络安全技能。