从源代码构建软件包的想法可能不是我们在 Debian 上下文中经常听到的。 它更像是一个 Arch-y 的东西,但在这个模块中,我们将学习如何在任何基于 Debian 的发行版上做同样的事情。
在 Debian 中从源代码构建软件包的步骤
让我们直接进入在 Debian 中从源代码构建软件包的步骤。
第 1 步:设置先决条件
首先,我们需要一些包,它们将在整个构建过程中帮助我们。 所有这些都可以使用以下 apt 命令安装:
$ sudo apt install dpkg-dev devscripts
第 2 步:从源中获取包
要获取我们的源包,首先,我们需要在我们的 /etc/apt/sources.list 启用它们。 因此,将所述文件打开到您最喜欢的文本编辑器并注释所有行乞求 deb-src 像这样 :
前
# Generated by distrobuilder deb https://deb.debian.org/debian bullseye main # Additional line for source packages # deb-src https://deb.debian.org/debian bullseye main
后
# Generated by distrobuilder deb https://deb.debian.org/debian bullseye main # Additional line for source packages deb-src https://deb.debian.org/debian bullseye main
这允许我们从 易于 存储库直接通过 CLI。 完成更改并使用以下命令更新存储库:
$ sudo apt update
但是为什么要做出这样的改变呢?
以“开头的行德布“ 是 二进制包 并且可以直接安装 易于 包管理器。 另一方面,以“deb-src”将帮助我们获取将在一分钟内派上用场的源包。
第 3 步:获取源包
现在我们已经准备好了我们的武器库,我们现在可以进入真正的部分了。 首先从存储库中获取一个源包:
$ sudo apt source <package-name>
对于我们的示例,我们将获取一个简单的“你好世界” 程序:
$ sudo apt source hello
这应该会在当前工作目录中为我们获取以下 3 个文件和一个文件夹:
- hello-2.10(文件夹)
- 你好_2.10-2.dsc
- hello_2.10-2.debian.tar.xz
- hello_2.10.orig.tar.gz
使用 ls 命令查看文件夹内的源代码:
$ ls ABOUT-NLS config.in doc maint.mk README TODO aclocal.m4 configure GNUmakefile Makefile.am README-dev AUTHORS configure.ac hello.1 Makefile.in README-release build-aux contrib INSTALL man src ChangeLog COPYING lib NEWS tests ChangeLog.O debian m4 po THANKS
这些是主要的源代码内容,它们将帮助我们启动和运行我们的应用程序。
第 4 步:安装构建依赖项
我们尝试构建的应用程序可能需要一些额外的包才能正常运行。 应用程序经常需要一些共享库,而这些库在大多数系统上都不是本机可用的。
为了确保我们拥有我们尝试构建的应用程序所需的所有各种依赖项,我们可以输入:
$ sudo apt build-dep <package-name>
按照我们的例子,对我们来说这应该是这样的:
$ sudo apt build-dep hello
如果我们缺少任何库,这应该为我们安装它。 有了这个,我们就可以进入下一步了。
第 5 步:调整我们的源文件(可选)
接下来,我们可以根据我们的要求调整我们的代码以进行必要的更改,这是从源代码构建包的主要优势之一。
我们可以调整位于 源文件 主源目录的子文件夹。 就像在我们的示例中一样,我们发现以下内容:
$ cd hello-2.10/src/ $ ls hello.c system.h
看着我们的 hello.c
文件,我们在第 60 行稍作修改,只是为了我们的 PoC 目的:
前 :
greeting_msg = _("Hello, world");
后 :
greeting_msg = _("Compiled From Source !");
笔记 如果你以任何方式改变源代码,你必须处理 测试 也相应地。 因此,请务必在“测试“ 目录。
第 6 步:构建包
现在是时候建立我们的 .deb 使用源代码打包。 我们可以通过以下两种方式之一做到这一点:
方法一:使用 解构
要构建我们的包,只需转到源的父目录并键入:
$ sudo debuild -b -uc -us
让我们稍微分解一下我们的命令:
- sudo: 以root权限运行命令
- debuild:这是名称 Perl 脚本 这将帮助我们构建一个包
- -b:仅构建二进制包
- -uc:防止链日志签名
- -us:防止对源代码进行签名
这应该给我们一个 .deb 文件可以在源文件夹所在的同一文件夹中找到。
注意:您可能会发现“数据库符号” 包,它基本上包含了一些可能对开发人员有用的调试信息。
方法二:使用 dpkg-buildpackage
在源代码树的主目录中,键入以下内容来构建您的包:
$ sudo dpkg-buildpackage -b -uc -us
这里也使用的标志与前一个相同,这也将给我们我们的 .deb 包裹 !
注意 – 如果您没有对源包进行任何更改,您可以直接生成您的 .deb 文件:
$ sudo apt-get source --compile <package-name>
第 7 步:安装软件包
现在我们有一个 .deb 文件,我们可以简单地安装它:
$ sudo dpkg -i <package-name>
就是这样! 有了这个,我们应该能够安装我们刚刚构建的包! 如果缺少任何依赖项,我们可以通过以下方式修复它们:
$ sudo apt install -f
回到我们的示例,我们使用以下命令安装它:
$ sudo dpkg -i hello_2.10-2_amd64.deb
有了这个,我们可以通过以下方式检查包是否成功构建:
$ hello Compiled From Source!
它反映了我们修改后的源代码!
结论
因此,我们成功地从 Debian 中的源代码构建了我们的软件包! 这使我们可以完全控制我们的应用程序,允许根据需要进行调整,并且从源代码构建确实非常容易!