软件仓库

来自 Alpine Linux
(重定向自 启用社区仓库

软件仓库

Alpine Linux 中有三个软件包仓库

主仓库 (Main)

主仓库中的软件包是由 Alpine 核心团队直接支持和更新的软件。Alpine Linux 尝试限制 主仓库 中的软件包数量,仅包含基础系统软件包,即其他软件包需要的软件包或设置基本系统所需的软件包。主仓库 中的软件包不能依赖于其他仓库。

主仓库中的软件包还具有官方的特殊文档,始终可用于所有版本,如果某些软件包的上游停止维护,将会有替代品。通常选择这些软件包是因为它们对上游可用性的责任和稳定性。来自 community 或(极少数情况下)testing 的软件包可以被接受到 main 仓库中。

社区仓库 (Community)

社区仓库中的软件包是由用户与官方开发者团队合作制作的,并且与 Alpine 软件包流程密切相关。它们由这些用户贡献者支持,如果用户停止贡献,则可能会终止支持;由于上游作者缺乏支持,它们也可能在未来的版本中被移除。

社区仓库是在 Alpine Linux 3.3.0 版本中引入的。来自 testing 仓库中被接受的软件包会进入 community 仓库。

测试仓库 (Testing)

testing 仓库仅在 edge 分支(即开发分支)上可用,并且是新软件包的存放地。这些软件包由 Alpine 的任何贡献者制作。来自 testing 仓库中被接受的软件包会进入 community 仓库或(极少数情况下)main 仓库。testing 仓库中的软件包没有支持(仅为暂存),并且仅为 edge 构建。如果它在这里停留足够长的时间,它将被移动到 unmaintained/purged(每 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 仓库都支持到下一个稳定版本发布,即六个月。超出此期限的安全修复可以在有可用补丁的情况下应要求进行。

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

要升级到最新的发布分支,请按照 升级 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

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

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


使用 testing 仓库

edge 分支中使用 maincommunity 仓库安装来自 testing 仓库的软件包,并提交 错误报告 是为 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

参见