软件仓库

来自 Alpine Linux

软件仓库

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 移动到 maincommunity 之前,必须满足以下要求

  1. 软件包必须正常工作,包括 init.d 脚本(如果提供)和默认配置。
  2. 软件包必须正确打包,文件安装在正确的位置,例如,配置文件位于 /etc/ 中,而不是 /usr/etc 中。
  3. 软件包依赖项得到正确处理。 Abuild 可以(并且应该)自动检测共享库,例如 sqlite-libs 提供 so:libsqlite3.so.0。 任何链接到 sqlite 的软件包都应该自动(由 abuild)添加 depend=so:libsqlite3.so.0,用户不应该手动在 APKBUILD 中添加 depend="sqlite-libs"
  4. 必须有一位维护者声明对软件包的维护负责,并且可以在未来出现问题时提供帮助修复。


发布分支

Alpine Linux 同时提供多个发布分支。 每年五月和十一月,我们会从 edge 创建一个发布分支。 Alpine Linux 的当前发布分支是 3.21

每个发布分支的 main 仓库通常支持 2 年。 任何发布分支的 community 仓库支持到下一个稳定版本发布,即六个月。 如果有可用的补丁,可以根据要求进行超出期限的安全修复。

注意:如果使用了 community 仓库中的软件包,则需要更新到最新的发布分支以继续获得支持。

要升级到最新的发布分支,请按照 升级 Alpine Linux 中的步骤进行操作。

Edge

edge 是 Alpine Linux 当前 开发树的名称。 edge 可以被认为是 Alpine Linux 的 滚动发布版本。 此版本包含所有可用的 Alpine Linux 软件包的最新构建。 这些软件包会定期更新。


警告:edge 处于持续开发中,因此在生产环境中使用时要小心。 edge 中的错误可能导致数据丢失或系统崩溃。


由于 edge 是一个开发分支,许多更改没有经过严格的测试(或根本没有测试),edge 中的软件包可能会并且有时确实会在没有警告的情况下损坏。 然而,测试 edge 是一项非常有价值的活动,有助于 Alpine Linux 开发团队确保稳定版本的质量很高。 测试 edge 是为 Alpine Linux 开发做出贡献的好方法。

发布分支 类似,edge 由 maincommunity 仓库组成,此外还有第三个仓库,即 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 的内容

/media/sda1/apks/

在一个正确配置的 Alpine Linux 系统中,默认设置看起来像这样

/etc/apk/repositories 的内容

#/media/cdrom/apks http://dl-cdn.alpinelinux.org/alpine/v3.21/main http://dl-cdn.alpinelinux.org/alpine/v3.21/community
注意:为了更好的安全性,您应该将 url 从 http 更改为 https。 某些 Alpine Linux 软件包镜像可能不支持 https。 如果是这种情况,您将需要更换镜像或恢复原状。 您可以在 https://mirrors.alpinelinux.org 上检查您的镜像是否支持 https

仓库置顶

您可以在 /etc/apk/repositories 中指定额外的“标记”仓库

/etc/apk/repositories 的内容

https://dl-cdn.alpinelinux.org/alpine/v3.18/main https://dl-cdn.alpinelinux.org/alpine/v3.18/community @personal https:/personal-repo.example.com/alpine-apks/

之后,您可以使用以下命令将依赖项“置顶”到这些标签

apk add application@personal

默认情况下,apk 将仅使用未标记的仓库,但是使用 @tag 添加软件包

1. 将优先选择具有该标签的仓库来查找指定的软件包,即使另一个仓库中提供了该软件包的更高版本

2. 允许 从标记的仓库中拉取标记软件包的依赖项(尽管它优先使用未标记的仓库来满足依赖项,如果可能的话)

升级到 edge

将 Alpine Linux 从稳定版本升级到滚动开发版本 edge 基本上需要与 升级到最新版本 相同的步骤。

关键的区别在于,在编辑 /etc/apk/repositories 文件时,其中引用的所有仓库版本(例如 v3.21latest-stable)都需要指向 edge

当使用 edge 分支时,如果所需的软件包仅在 testing 仓库中可用,则可以添加 testing 仓库。

注意:请记住,testing 仓库中的软件包没有支持。


/etc/apk/repositories 的内容

#/media/cdrom/apks http://dl-cdn.alpinelinux.org/alpine/edge/main http://dl-cdn.alpinelinux.org/alpine/edge/community http://dl-cdn.alpinelinux.org/alpine/edge/testing

升级到 edge 后,可以使用以下命令检查当前安装的 edge 版本

$ cat /etc/alpine-release

并参考附加到版本的构建日期。

警告:不要同时启用稳定仓库和 edge 仓库。 这可能会破坏您的系统。 请使用 edge 稳定仓库。 如果您混合使用稳定仓库和 edge 仓库,您将自行承担风险。


使用测试仓库

edge 分支中使用 maincommunity 仓库安装来自 testing 仓库的软件包,并提交 bug 报告 是为 Alpine Linux 贡献 的最佳方式之一。

但是,在 发布分支 中使用 maincommunity 仓库安装来自 edge 分支的 testing 仓库的软件包不能保证有效。

下面解释的方法是处理这种情况的一种方法。 仅当您需要 testing 仓库中才可用的软件包时才执行此操作。

警告:仅当您 100% 确定自己在做什么!并且您真的需要它 Alpine 不正式支持以这种方式混合分支。


编辑文件 /etc/apk/repositories 并添加(或取消注释)指向 “testing” 目录的行,同时 标记 仓库,例如

/etc/apk/repositories 的内容

https://dl-cdn.alpinelinux.org/alpine/v3.21/main https://dl-cdn.alpinelinux.org/alpine/v3.21/community @testing https://dl-cdn.alpinelinux.org/alpine/edge/testing

在这种情况下,标签是 @testing,它允许您从该仓库中拉取软件包,而不会(太糟糕地)搞砸您的安装

提示:在从标记的仓库安装软件包之前,请检查所讨论软件包的 软件包依赖项

# apk add wireguard-go@testing

参见