Logo
Section 1 / 3

通过 Docker 安装 abuild

学习并实践如何安装 Alpine Linux 的包构建工具 abuild。

导入

通过 Docker 安装 abuild

学习并实践如何安装 Alpine Linux 的包构建工具 abuild。

前言

现在我们已经掌握了 Alpine Linux 的基础知识,可以开始练习如何构建软件包。

设置 Docker 容器

使用 Alpine Linux 最简单的方式是通过 Docker。我们可以利用本课程内置的终端小工具来使用 Docker。在这些小工具中,可以运行任何常规 Alpine Linux Docker 容器中能执行的命令。让我们在下面的终端中运行 cat /etc/os-release,看看当前使用的 Alpine Linux 版本!

1cat /etc/os-release

请在下面的终端中尝试运行该命令:

Terminal

运行 Alpine Linux

上面的终端小工具已经为我们运行了 Alpine Linux Docker 容器。如果我们以后想在本地计算机上启动一个 Docker 容器,可以使用以下命令。这将在 Alpine Linux 容器中启动一个 ash shell:

1docker run --interactive --tty --name educative-alpine alpine:3.15

让我们逐一分析上述命令的各个部分:

  • run 表示要启动指定的容器镜像(alpine:3.15)。
  • --interactive 表示希望在容器中运行一个交互式会话,以便在 shell 中输入命令。
  • --tty 在容器启动时打开一个终端。由于 --interactive 和 --tty 通常一起使用,因此在后续课程中将使用简写形式 -it 来同时启用这两个选项。
  • --name 为容器设置名称,以便之后可以通过名称与容器进行交互。
  • alpine:3.15 指定了要运行的容器镜像。这里我们希望运行版本为 3.15 的 Alpine Linux。

程序执行后,我们将进入容器中的 shell。可以在该 shell 中运行命令:

1cat /etc/os-release

这将产生如下输出:

1NAME="Alpine Linux" 2ID=alpine 3VERSION_ID=3.15.0 4PRETTY_NAME="Alpine Linux v3.15" 5HOME_URL="https://alpinelinux.org/" 6BUG_REPORT_URL="https://bugs.alpinelinux.org/"

可以通过在终端中输入 exit 来退出容器。

配置 abuild

完成初始设置后,我们可以通过在终端中输入 docker start -ai educative-alpine 重新进入我们的 Alpine Linux 容器,或者使用下面的终端小工具。这将恢复该容器之前的会话。我们使用 -a 参数将容器的输出连接到终端(以便查看我们输入命令所产生的输出),并使用 -i 参数使容器能够接收我们从终端输入的内容。

接下来我们可以安装 abuild,但在此之前必须先安装 alpine-sdk。后者包含了几乎所有软件包构建所需的编译依赖项,例如 C 编译器:

1apk add abuild alpine-sdk sudo

安装完成后,我们需要设置 distfiles(构建过程中下载的文件)的缓存目录:

1mkdir -p /var/cache/distfiles

然后,生成用于对构建的软件包进行加密签名以确保完整性的私钥和公钥:

1$ abuild-keygen -ain 2/ # abuild-keygen -ain 3>>> Generating public/private rsa key pair for abuild 4Enter file in which to save the key [/root/.abuild/-61d19ddf.rsa]: 5Generating RSA private key, 2048 bit long modulus (2 primes) 6.........................................................+++++ 7....................................................+++++ 8e is 65537 (0x010001) 9writing RSA key 10>>> Installing /root/.abuild/-61d19ddf.rsa.pub to /etc/apk/keys... 11>>> 12>>> Please remember to make a safe backup of your private key: 13>>> /root/.abuild/-61d19ddf.rsa 14>>>

让我们再次回顾 abuild-keygen 的参数含义:

  • -a:自动将生成的密钥设为默认签名密钥。
  • -i:自动安装公钥。
  • -n:以非交互模式运行,自动采用 abuild 的默认设置。

如输出所示,公钥已写入 /etc/apk/keys。正如其名,这个目录应供所有使用我们仓库的人访问,因为 apk 会在下载软件包后使用该密钥进行验证。由于我们指定了 -i,abuild-keygen 已经将公钥正确安装到对应位置,因此目前无需额外操作。稍后我们会讨论如何分发软件包。我们可以查看 RSA 密钥的格式:

1$ cat /etc/apk/keys/-61d19ddf.rsa.pub 2-----BEGIN PUBLIC KEY----- 3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0NMR5WZ1EZdBQOFZDahV 4+c84bxT7o8B5rVkW5Ds4usuRHFlFkCKVsjTkr5AtWn61U7qxmCLutoH/z1XlXjJS 5Plg0fvFWep7jNSpikPJSZ8OTzZXhhb58no1yA1NTy28afTBDewy3mjfyRvZIJECO 6ZBI/RWEdem6vULRl5B05D0BLfVKG/LryxYz8Ye5OTl+Kp20j0wYiTqptcTu8+kDM 7c2puTB0o+6yJ5xi8Z9VVrDn/goRF9sDtZhusrRq7Vn87K554Mb0nXohvNNepFVYT 8QctLyhu6xrYBJ1QUmdl4HFhtdCL/kYD8lekkUnS8aLfQaCcFO6QAD+efZGIeb9TV 9NQIDAQAB 10-----END PUBLIC KEY-----

abuild-keygen 也为我们生成了私钥。我们可以用它来签署构建的软件包。该私钥必须严格保密,因为一旦他人获取,他们就能冒充我们的软件包构建。

请在下面的终端中按照步骤完成配置过程:

1apk add abuild alpine-sdk sudo 2mkdir -p /var/cache/distfiles 3abuild-keygen -ain

第一条命令安装了所需软件包,包括:

  • abuild 提供 abuild-keygen 命令用于生成密钥对。
  • alpine-sdk 是使用 abuild 所必需的依赖项。
  • sudo 由 abuild 用于安装密钥对。

随后,我们使用 mkdir 创建 distfiles 缓存目录,最后生成密钥对。

Terminal

现在我们已经成功配置了 abuild,接下来就可以开始构建第一个 APKBUILD 文件了。

简介

使用 abuild 构建 APKBUILD