软件仓库
软件仓库
Alpine Linux 中有三个软件包仓库
主仓库 (Main)
主仓库中的软件包是由 Alpine 核心团队直接支持和更新的软件。 Alpine Linux 尽量限制 main 中的软件包数量,仅包含基础系统软件包,即其他软件包需要的软件包或设置基本系统所需的软件包。 main 中的软件包不能依赖于其他仓库中的软件包。
主仓库中的软件包也有官方的特殊文档,始终可用于所有版本,如果某些软件包的上游不再维护,则会进行替换。 通常选择这些软件包是考虑到它们在保证上游可用性方面的责任和稳定性。 来自 community 或(极少数情况下)testing 的软件包可以被接受进入 main 仓库。
社区仓库 (Community)
社区仓库中的软件包是由用户与官方开发者团队共同制作的,并且与 Alpine 软件包流程密切相关。 它们由这些用户贡献者支持,如果用户停止贡献,则可能会终止支持; 由于上游作者缺乏支持,它们也可能在未来的版本中被删除。
社区仓库是在 Alpine Linux 版本 3.3.0 中引入的。 来自 testing 仓库的被接受的软件包会进入 community 仓库。
测试仓库 (Testing)
testing 仓库仅在 edge 分支(即开发分支)上可用,新软件包会首先进入这里。 这些软件包由 Alpine 的任何贡献者制作。 来自 testing 仓库的被接受的软件包会进入 community 仓库或(极少数情况下)main 仓库。 testing 中的软件包没有支持(仅为暂存),并且仅为 edge 构建。 如果它在这里停留足够长的时间,它将被移动到未维护/已清除(每 6 个月清理一次)。
在软件包可以从 testing 移动到 main 或 community 之前,必须满足以下要求
- 软件包必须正常工作,包括 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。
每个发布分支的 main 仓库通常支持 2 年。 任何发布分支的 community 仓库支持到下一个稳定版本发布,即六个月。 如果有可用的补丁,可以根据要求进行超出期限的安全修复。
要升级到最新的发布分支,请按照 升级 Alpine Linux 中的步骤进行操作。
Edge
edge 是 Alpine Linux 当前 开发树的名称。 edge 可以被认为是 Alpine Linux 的 滚动发布版本。 此版本包含所有可用的 Alpine Linux 软件包的最新构建。 这些软件包会定期更新。

由于 edge 是一个开发分支,许多更改没有经过严格的测试(或根本没有测试),edge 中的软件包可能会并且有时确实会在没有警告的情况下损坏。 然而,测试 edge 是一项非常有价值的活动,有助于 Alpine Linux 开发团队确保稳定版本的质量很高。 测试 edge 是为 Alpine Linux 开发做出贡献的好方法。
与 发布分支 类似,edge 由 main 和 community 仓库组成,此外还有第三个仓库,即 testing。
管理软件仓库
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 分支时,如果所需的软件包仅在 testing 仓库中可用,则可以添加 testing 仓库。
/etc/apk/repositories 的内容
升级到 edge 后,可以使用以下命令检查当前安装的 edge 版本
$ cat /etc/alpine-release
并参考附加到版本的构建日期。

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

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