Alpine“稳定”版本在保持软件包版本相同的意义上是否稳定?

Alpine“稳定”版本在保持软件包版本相同的意义上是否稳定?

我正在寻找 Alpine Linux 的记录方法来在指定的稳定 Alpine 版本中保留/升级单个软件包版本。

因此,假设我正在构建一个图像(例如 docker),我从以下开始:

FROM alpine:3.13.1
RUN apk add python3 py3-numpy

然后...

  1. 是否可以安全地假设这将始终安装相同的 python3 和 numpy 的主要/次要版本。
  2. 这些会收到安全补丁吗(如果我重建图像)
  3. 3.13如果我只固定说而不是3.13.1. (#1 和 #2) 有什么不同?

答案1

除了以下事实之外,我不知道有任何明确的文档描述这一点稳定版本仅修复错误:

稳定版本顾名思义:最初是包存档的时间点快照,但随后仅通过错误修复进行维护,以保持稳定的环境。

但是,一些实验表明安装并未固定到它们所基于的补丁版本:

$ docker run -it --rm alpine:3.13.0
/ # apk add php8
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
(1/9) Installing php8-common (8.0.2-r0)
(2/9) Installing argon2-libs (20190702-r1)
(3/9) Installing ncurses-terminfo-base (6.2_p20210109-r0)
(4/9) Installing ncurses-libs (6.2_p20210109-r0)
(5/9) Installing libedit (20191231.3.1-r1)
(6/9) Installing pcre2 (10.36-r0)
(7/9) Installing xz-libs (5.2.5-r0)
(8/9) Installing libxml2 (2.9.10-r6)
(9/9) Installing php8 (8.0.2-r0)
Executing busybox-1.32.1-r0.trigger
OK: 13 MiB in 23 packages
/ # 

— 索引是“v3.13”,安装后php8我们得到 8.0.2,它被列为3.13.2

进一步的实验表明:

  • 用作alpine:3.13基础映像会产生最新的补丁版本;
  • 用作alpine:3.13.x基础映像会导致作为映像一部分的那些软件包(muslzlibapk-toole)发布特定的补丁版本,但安装任何内容都会安装通用版本中的最新可用版本;
  • 无论如何,你都需要apk upgrade --available确保你找到了核心包的修复程序。

因此,似乎没有一种方法可以确保重建映像始终会产生相同的软件包和版本集。

如果您想保持一组一致的软件包和版本,您可以构建并标记您自己的映像(但随后放弃安全修复)。

答案2

我向 Alpine 用户邮件列表提出了类似的问题并收到了Natanael Copa 的回复:

...剪断

是的。我们提供安全更新。

是否会发布全新版本的软件包?

有点取决于。如果更新不太可能破坏任何内容,我们可能会将软件包更新到新版本。我们可能会通过补丁向后移植安全修复程序。

目标是您应该能够使用稳定的分支,并且不要害怕apk upgrade获取安全更新。

所以如果我从 alpine 3.12 开始并且apk 添加 python3 py3-numpy,是否可以安全地假设我将始终获得相同版本的 *numpy”(尽管进行了安全修复)?

现阶段,alpine 3.12 将仅获得安全更新。因此,除非存在安全问题(或报告了其他重大错误),否则您将始终获得相同的版本。

除了安全修复之外,alpine 3.13 可能还会修复错误,但新版本不会自动添加到 3.13。

在这两种情况下,您应该能够apk add python3 py3-numpy并且安全地确保 apk 升级时不会出现问题。我们不应该将 API 或 ABI 重大更改推送到稳定分支。 (有一些例外)

此时3.13是最新的。

相关内容