如何从源代码构建 Debian 软件包

在这个分步指南中,让我们看看如何在 Debian、Ubuntu 和其他基于 APT 的系统(如 Linux Mint)上从源代码构建 debian 包。

Debian 和基于 Debian 的系统(如 Ubuntu)使用 高级封装工具, 或者 易于 简而言之,用于从命令行安装、更新、升级和删除软件。

通常,APT 包管理器将存储库列表存储在名为 /etc/apt/sources.list 并在任何带有后缀的文件中 .list 目录下 /etc/apt/sources.list.d/.

当我们安装一个包时, apt 命令从这些存储库中检索给定包的二进制或预编译版本。

除了安装二进制包,APT 还可以让你下载一个包的源代码。 因此,您可以在源代码中添加一些功能,从源代码构建包,最后安装包的修改版本。

内容

  1. 为什么我们要从源代码构建一个包?
  2. 安装必要的构建工具
  3. 启用源存储库
  4. 下载源码包
  5. 安装包的构建依赖项
  6. 修改一个 debian 包的源代码
  7. 从源代码构建 Debian 软件包
    1. 方法 1 – 使用 dpkg-buildpackage:
    2. 方法 2 – 使用 debuild
    3. 方法 3 – 直接下载并构建
      1. 安装 .deb 文件

为什么我们要从源代码构建一个包?

从源代码构建包可能有很多原因。 以下是我现在能想到的几个原因:

  • 检查源代码以查找错误。
  • 在不再积极开发的包中添加新功能。
  • 从源安装最新版本的软件包。 通常,官方存储库中的软件包可能有点旧。
  • 更重要的是 – 学习从源代码构建 Debian 软件包。

安装必要的构建工具

为了从源代码构建二进制包,首先我们需要安装必要的构建工具。 根据用于构建二进制包的命令行工具,您可能需要安装以下任一包:

  1. dpkg-dev
  2. 开发脚本

这些包提供了许多工具来从源代码构建二进制包。

安装 "dpkg-dev", 跑:

$ sudo apt install dpkg-dev

安装命令 "devscripts" 包是:

$ sudo apt install devscripts

启用源存储库

确保您已启用源存储库。

为此,打开 /etc/apt/sources.list 文件:

$ sudo vim /etc/apt/sources.list

您将看到其中的一些行,如下所示:

# See https://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb https://in.archive.ubuntu.com/ubuntu focal main restricted # deb-src https://in.archive.ubuntu.com/ubuntu focal main restricted [...]

在上面的文件中,所有以一两个哈希 (#) 开头的行都只是注释,仅供参考。 没有散​​列的行是 合适的存储库.

在 apt 存储库中,以“deb”开头的行是相对于二进制包的,用户可以使用 apt 包管理器安装它们。 以“deb-src”开头的行是相对于源包的。 这对开发人员很有用。 默认情况下,“deb-src”在源列表中被注释掉。

要下载源包,您需要取消注释“deb-src”行。 除掉 # 取消注释行的符号。 取消注释后,存储库行应如下所示:

# See https://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb https://in.archive.ubuntu.com/ubuntu focal main restricted deb-src https://in.archive.ubuntu.com/ubuntu focal main restricted [...]

Save 和 close 文件。 使用命令更新存储库列表:

$ sudo apt update

下载源码包

使用下载包的源 "apt source <package-name>" 命令。 例如,下面的命令将下载源代码 "Hello World!" 程序:

$ apt source hello

示例输出:

Reading package lists... Done Need to get 734 kB of source archives. Get:1 https://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (dsc) [1847 B] Get:2 https://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (tar) [726 kB] Get:3 https://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (diff) [6560 B] Fetched 734 kB in 2s (336 kB/s) dpkg-source: info: extracting hello in hello-2.10 dpkg-source: info: unpacking hello_2.10.orig.tar.gz dpkg-source: info: unpacking hello_2.10-2ubuntu2.debian.tar.xz
下载一个包的源代码

如您所见,我已经下载了 Hello World 程序的源代码。

$ ls hello-2.10 hello_2.10-2ubuntu2.debian.tar.xz hello_2.10-2ubuntu2.dsc hello_2.10.orig.tar.gz

查看源代码的实际内容:

$ ls hello-2.10/ ABOUT-NLS  ChangeLog    INSTALL      NEWS        README-release  aclocal.m4  configure     debian   lib       man  tests AUTHORS    ChangeLog.O  Makefile.am  README      THANKS          build-aux   configure.ac  doc      m4        po COPYING    GNUmakefile  Makefile.in  README-dev  TODO            config.in   contrib       hello.1  maint.mk  src

安装包的构建依赖项

接下来,我们还需要安装该包的依赖项。 为此,请运行:

$ sudo apt build-dep hello
安装构建依赖

我们现在已经下载了包的源代码并安装了构建这个包所需的依赖项。 接下来在源代码中进行更改。

修改一个 debian 包的源代码

cd 进入包含包源的目录。 在我们的例子中,它是 你好-2.10.

$ cd hello-2.10

根据需要修改代码。 代码在文件中 "hello.c" 在下面 "src" 目录。

$ vi src/hello.c

调整代码和/或进行任何更改。 编辑完代码后,保存并 close 文件。

现在是构建实际 .deb 包的时候了。

从源代码构建 Debian 软件包

我们下载了源代码并修改了代码。 让我们从源代码构建包。 我们可以通过三种方式做到这一点:

  1. 使用 "dpkg-buildpackage" 命令
  2. 使用 "debuild" 命令
  3. 下载源码直接编译

方法 1 – 使用 dpkg-buildpackage:

确保你已经安装 "dpkg-dev" 包裹。

然后运行以下命令从源代码构建包:

$ dpkg-buildpackage -rfakeroot -b -uc -us

这里,

  • dpkg-buildpackage – 从源代码构建二进制或源代码包的命令。
  • -rfakeroot – 创建 fakeroot 环境来模拟 root 权限(以避免所有权和权限问题)。
  • -b – 仅构建二进制包。
  • -uc – 不要对变更日志进行加密签名。 即不要签署 .buildinfo.changes 档案
  • -us – 不要签署源包。

请确保在源代码树的主目录中运行上述命令。 否则,它不会工作。

如果构建成功,您将看到如下消息:

[...] dpkg-deb: building package 'hello' in '../hello_2.10-2ubuntu2_amd64.deb'. dpkg-deb: building package 'hello-dbgsym' in 'debian/.debhelper/scratch-space/build-hello/hello-dbgsym_2.10-2ubuntu2_amd64.deb'.         Renaming hello-dbgsym_2.10-2ubuntu2_amd64.deb to hello-dbgsym_2.10-2ubuntu2_amd64.ddeb  dpkg-genbuildinfo --build=binary  dpkg-genchanges --build=binary >../hello_2.10-2ubuntu2_amd64.changes dpkg-genchanges: info: binary-only upload (no source code included)  dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included)
从源代码构建 debian 包从源代码构建 debian 包

恭喜! 我们已经成功地从源代码构建了一个 .deb 包。 现在,回到父目录,你会看到新建的 .deb 文件:

$ cd ..
$ ls

示例输出:

hello-2.10                             hello_2.10-2ubuntu2.dsc              hello_2.10-2ubuntu2_amd64.deb hello-dbgsym_2.10-2ubuntu2_amd64.ddeb  hello_2.10-2ubuntu2_amd64.buildinfo  hello_2.10.orig.tar.gz hello_2.10-2ubuntu2.debian.tar.xz      hello_2.10-2ubuntu2_amd64.changes

方法 2 – 使用 debuild

确保您已安装 "devscripts" 包裹。

然后,通过从源代码树运行以下命令来构建二进制包:

$ debuild -b -uc -us

构建成功后,结果 .deb 包将保存在父目录中。

方法 3 – 直接下载并构建

这是比上述两种方法最简单直接的方法。 在这个方法中,我们下载包的源代码并通过 "--compile" 在下面的单个命令行中构建二进制文件的选项:

$ sudo apt-get source --compile hello

上面的命令将下载源代码 "hello" 程序和构建 .deb 打包并保存在当前目录中。

安装 .deb 文件

前往 .deb 文件被保存并安装如下:

$ sudo dpkg -i hello_2.10-2ubuntu2_amd64.deb

如果您看到任何缺少依赖项的错误消息,请运行:

$ sudo apt install -f

如您所见,在 Linux 中从源代码构建 debian 包非常容易!

相关阅读:

  • 如何使用 CheckInstall 从源代码构建包
  • 如何轻松地为多个平台构建 Linux 包
  • 重新创建已安装在系统上的 Debian 二进制包
  • 如何使用 Alien 转换 Linux 软件包
  • 如何将 DEB 包转换为 Arch Linux 包

希望这可以帮助。

APT构建 debian 包从源构建包DebianLinuxLinux 命令Linux howtoPackage managementUbuntu