仓库

来自 Alpine Linux
(重定向自 Edge

仓库

Alpine Linux 中有三个软件包仓库

主仓库

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

主仓库中的软件包还具有官方的特殊文档,始终可用于所有版本,并且如果某些软件包不再由上游维护,将会有替代品。通常,选择这些软件包是考虑到它们对于上游可用性的责任和稳定性。来自社区或(极少数情况)测试仓库的软件包可以被接受进入主仓库

社区仓库

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

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

测试仓库

测试仓库仅在 edge 分支(即开发分支)上可用,这是新软件包的去处。这些软件包由 Alpine 的任何贡献者制作。来自测试仓库且被接受的软件包会进入社区仓库或(极少数情况)主仓库测试仓库中的软件包没有支持(仅为暂存),并且仅为 edge 构建。如果软件包在此处停留足够长的时间,它将被移动到未维护/已清除(每 6 个月清理一次)。

在软件包可以从 测试 移动到 主仓库社区仓库 之前,必须满足以下要求

  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

每个发布分支的 主仓库 通常支持 2 年。任何发布分支的 社区仓库 支持到下一个稳定版本发布,即六个月。超出此期限的安全修复可以在有补丁可用时按需进行。

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

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

Edge

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


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


由于 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 的内容

/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 分支时,如果所需的软件包仅在 测试 仓库中可用,则可以添加 测试 仓库。

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


/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 分支中使用 主仓库社区仓库 安装 测试 仓库中的软件包,并提交 缺陷报告贡献 Alpine Linux 的最佳方式之一。

但是,在 发布分支 中使用 主仓库社区仓库 安装 edge 分支的 测试 仓库中的软件包,不能保证有效。

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

警告:仅当您 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

参见