通过 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
请在下面的终端中尝试运行该命令:
运行 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 缓存目录,最后生成密钥对。
现在我们已经成功配置了 abuild,接下来就可以开始构建第一个 APKBUILD 文件了。