仓库
仓库
Alpine Linux 中有三个软件包仓库
主仓库
主仓库中的软件包是由 Alpine 核心团队直接支持和更新的软件。Alpine Linux 尝试限制 主仓库 中的软件包数量,仅包含基础系统软件包,即其他软件包需要的软件包或设置基本系统所需的软件包。主仓库 中的软件包不能依赖于其他仓库。
主仓库中的软件包还具有官方的特殊文档,始终可用于所有版本,并且如果某些软件包不再由上游维护,将会有替代品。通常,选择这些软件包是考虑到它们对于上游可用性的责任和稳定性。来自社区或(极少数情况)测试仓库的软件包可以被接受进入主仓库。
社区仓库
社区仓库中的软件包是由用户与官方开发者团队合作制作的,并且接近 Alpine 软件包流程。它们由这些用户贡献者支持,如果用户停止贡献,则可能会终止支持;由于上游作者缺乏支持,它们也可能在未来的版本中被移除。
社区仓库是在 Alpine Linux 版本 3.3.0 中引入的。来自测试仓库且被接受的软件包会进入社区仓库。
测试仓库
测试仓库仅在 edge 分支(即开发分支)上可用,这是新软件包的去处。这些软件包由 Alpine 的任何贡献者制作。来自测试仓库且被接受的软件包会进入社区仓库或(极少数情况)主仓库。测试仓库中的软件包没有支持(仅为暂存),并且仅为 edge 构建。如果软件包在此处停留足够长的时间,它将被移动到未维护/已清除(每 6 个月清理一次)。
在软件包可以从 测试 移动到 主仓库 或 社区仓库 之前,必须满足以下要求
- 软件包必须工作正常,包括 init.d 脚本(如果提供)和默认配置。
- 软件包的打包必须正确完成,文件安装在正确的位置,例如,配置文件在
/etc/
中,而不是在/usr/etc
中。 - 软件包依赖项已正确处理。Abuild 可以(并且应该)自动检测共享库,例如 sqlite-libs 提供了 so:libsqlite3.so.0。任何链接到 sqlite 的软件包都应该自动(由 abuild)添加
depend=so:libsqlite3.so.0
,用户不应手动在 APKBUILD 中添加depend="sqlite-libs"
。 - 需要有一位维护者声明对软件包的维护负责,并且可以在未来出现问题时帮助修复。
发布分支
Alpine Linux 同时提供多个发布分支。每年五月和十一月,我们会从 edge 创建一个发布分支。Alpine Linux 当前的发布分支是 3.21。
每个发布分支的 主仓库 通常支持 2 年。任何发布分支的 社区仓库 支持到下一个稳定版本发布,即六个月。超出此期限的安全修复可以在有补丁可用时按需进行。
要升级到最新的发布分支,请按照升级 Alpine Linux 中的步骤进行操作。
Edge
edge 是 Alpine Linux 当前 开发树 的名称。edge 可以被认为是 Alpine Linux 的 滚动发布版本。此版本包含所有可用的 Alpine Linux 软件包的最新构建。这些软件包会定期更新。

由于 edge 是一个开发分支,许多更改没有经过严格的测试(或根本没有测试),并且 edge 中的软件包可能并且有时会在没有警告的情况下损坏。但是,测试 edge 是一项非常有价值的活动,有助于 Alpine Linux 开发团队确保稳定版本的质量。测试 edge 是为 Alpine Linux 开发做出贡献的好方法。
与 发布分支 类似,edge 由 主仓库 和 社区仓库 以及第三个仓库(即 测试仓库)组成。
管理仓库
apk
用于检索软件包文件以进行安装的软件包仓库在文件 /etc/apk/repositories 中指定。要自动配置仓库文件 /etc/apk/repositories,请使用 setup-apkrepos 脚本
# setup-apkrepos -cf
在更改 /etc/apk/repositories 后,您应该使用以下命令更新软件包索引
# apk update
/etc/apk/repositories 的每一行都指定一个软件包仓库的位置,每行一个仓库,并且可以选择性地包含标签。以井号字符 (#) 开头的行将被忽略。
位置可以是 http://
或 https://
URL,也可以是本地文件系统上目录的路径。标记的 仓库以 @tag
说明符作为前缀,后跟一个空格和仓库位置。
如果您从 USB 驱动器 (/media/sda1) 或 CD-ROM (/media/cdrom) 启动,则您的仓库文件可能看起来像这样
/etc/apk/repositories 的内容
在正确配置的 Alpine Linux 系统中,默认设置将如下所示
/etc/apk/repositories 的内容
仓库置顶
您可以在 /etc/apk/repositories 中指定额外的“标记”仓库
/etc/apk/repositories 的内容
之后,您可以使用以下命令将依赖项“置顶”到这些标签
apk add application@personal
默认情况下,apk 将仅使用未标记的仓库,但是使用 @tag 添加软件包
1. 将优先选择具有该标签的仓库来查找指定的软件包,即使另一个仓库中提供了更高版本的软件包
2. 允许 从标记的仓库中拉取标记软件包的依赖项(尽管它优先使用未标记的仓库来满足依赖项,如果可能的话)
升级到 edge
将 Alpine Linux 从稳定版本升级到滚动开发版本 edge,基本上需要与 升级到最新版本 相同的步骤。
关键的区别在于,在编辑 /etc/apk/repositories 文件时,其中引用的所有仓库版本(例如 v3.21
或 latest-stable
)都需要指向 edge
。
当使用 edge 分支时,如果所需的软件包仅在 测试 仓库中可用,则可以添加 测试 仓库。
/etc/apk/repositories 的内容
升级到 edge 后,可以使用以下命令检查当前安装的 edge 版本
$ cat /etc/alpine-release
并参考附加到版本的构建日期。

使用测试仓库
在 edge 分支中使用 主仓库 和 社区仓库 安装 测试 仓库中的软件包,并提交 缺陷报告 是 贡献 Alpine Linux 的最佳方式之一。
但是,在 发布分支 中使用 主仓库 或 社区仓库 安装 edge 分支的 测试 仓库中的软件包,不能保证有效。
下面解释的方法是处理这种情况的一种方法。仅当您需要 测试 仓库中才可用的软件包时才执行此操作。

编辑文件 /etc/apk/repositories 并添加(或取消注释)指向“testing”目录的行,同时 标记 仓库,例如
/etc/apk/repositories 的内容
在这种情况下,标签是 @testing
,这允许您从该仓库中拉取软件包,而不会(太糟糕地)搞砸您的安装
# apk add wireguard-go@testing