使用 Alpine Package Keeper (apk
)
apk
是 Alpine Package Keeper - 该发行版的软件包管理器。它用于管理系统的软件包(软件或其他)。它是安装额外软件的主要方法,并在 apk-tools
软件包中提供。
正常用法
仓库、发行版和镜像
apk
从各种镜像获取关于可用软件包的信息以及软件包本身,这些镜像包含各种仓库。有时,这些术语可以互换使用。以下是相关定义的摘要
镜像 |
一个托管仓库的网站。 |
发行版 |
各种仓库快照的集合。 |
仓库 |
一类软件包,通过某些属性联系在一起。 |
目前,存在三个仓库
- main (主仓库)
-
官方支持的软件包,合理预期会出现在基本系统中。
- community (社区仓库)
-
来自测试并已测试过的软件包。
- testing (测试仓库)
-
新的、损坏的或过时的需要测试的软件包。仅在
edge
分支上可用。
存在两种类型的发行版
- stable (稳定版) (例如 3.16)
-
每 6 个月发布一次。支持包括针对给定功能版本的安全补丁。每个稳定版发行版都有其自己的
main
和community
仓库。main
仓库支持 2 年。community
仓库仅在其各自发行版的 6 个月内受到支持。当其main
仓库的支持到期时,发行版被视为 EOL(生命周期结束)。 - edge (边缘版)
-
滚动发行分支。它包括从 aports 仓库的
master
分支构建的最新软件包。它不如稳定版分支稳定,但对于日常使用来说足够稳定,并且对于开发或如果您需要最新的软件很有用。它有自己的main
和community
仓库,就像稳定版发行版一样。它还具有testing
仓库,这显著增加了可用软件包的数量。
从技术上讲,可以混合不同的分支,也就是说在使用稳定版的 main 和 community 仓库时启用 testing 仓库。但是,不鼓励这种方法,并且会导致损坏。 |
仓库在 /etc/apk/repositories
文件中配置。每行对应一个仓库。格式如下
[@tag] [protocol][/path][/release]/repository
# comments look like so. valid examples below
http://dl-cdn.alpinelinux.org/alpine/edge/main (1)
@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing (2)
/var/apk/my-packages (3)
1 | 在这种情况下,http:// 是协议,dl-cdn.alpinelinux.org/alpine 是路径,edge 是发行版,main 是仓库。 |
2 | 在这种情况下,@testing 是标签。有关更多信息,请参阅 安装软件包。 |
3 | 在这种情况下,仓库是个人仓库,可在机器的文件系统上使用。 |
此示例使用 http:// 协议。也支持 ftp:// 和 https:// 协议。 |
当您安装 alpine 时,此文件应该已经部分填充。 |
搜索软件包
为了知道要安装什么软件包,必须能够找到软件包。Alpine 有一个专门的 Web 界面,专门用于查找各种可用的软件包。但是,apk
也提供了内置的搜索机制。您可以使用 apk search
子命令来调用它。您可以潜在地搜索软件包索引中的任何内容,其中包括提供的二进制文件和库)。此外,支持 globbing。因此,以下是一些搜索示例
apk search libsqlite3.so (1)
apk search consul (2)
apk search -e vim (3)
apk search -e so:libsqlite3.so.* (4)
1 | 您可以搜索部分库名称。 |
2 | 您也可以搜索二进制文件名称。 |
3 | 您可以使用 -e 排除部分匹配项。 |
4 | 您可以指定您要搜索的是库,使用 so: 前缀(或命令使用 cmd: 前缀,pkg-config 文件使用 pc: 前缀) - 它将与 -e 一起使用(实际上,如果使用 -e ,则此用例需要前缀)。 |
安装软件包
安装软件包意味着软件包本身将从仓库(在 /etc/apk/repositories
中指定)下载并解压到系统。现有文件将被覆盖。/etc
中的配置文件是例外,它们将被保留。配置文件(来自软件包)将被重命名为 *.apk-new
。
Apk 的 add
命令比 search
命令更严格 - 例如,通配符不可用。但是,cmd:
、so:
和 pc:
前缀仍然可用。
虽然 |
虽然 |
以下是一些添加软件包的示例
apk add busybox-extras (1)
apk add bash zsh (2)
apk add cmd:bash cmd:zsh (3)
apk add so:libmpack.so.0 (4)
apk add pc:msgpack (5)
1 | 您必须指定确切的软件包名称。 |
2 | 您可以一次添加多个软件包。 |
3 | 这应该等同于前面的示例,但指定了您感兴趣的命令。 |
4 | 可以指定特定的所需库,但不建议这样做。 |
5 | 最后,可以指定 pkg-config 依赖项。 |
如果 apk add 找到多个匹配的软件包(例如,多个 cmd: 匹配项),它将选择版本号最高的那个。 |
升级软件包
使用 apk 更新系统非常简单。只需运行 apk upgrade
。从技术上讲,这是两个步骤:apk update
,然后是真正的 apk upgrade
。第一步将从仓库下载更新的软件包索引,而第二步将更新 World 中的所有软件包及其依赖项。
apk
将避免覆盖您可能已更改的文件。这些文件通常位于 /etc
目录中。每当 apk
想要安装文件,但意识到可能已编辑的文件已经存在时,它会将其文件写入该文件名,并附加 .apk-new
。您可以手动处理这些文件,但存在一个名为 update-conf
的实用程序。只需正常调用它,即可向您展示两个文件之间的差异,并提供处理冲突的各种选择。
apk update 仅在您的缓存失效后运行一次,默认情况下每 4 小时发生一次。 |
查询软件包信息
在某些情况下,检查软件包或文件以查看各种详细信息可能很有用。为此,存在 info
子命令。它可以用于任何软件包,无论是否已安装,尽管后者的信息将更有限。它也可以与文件上的特定标志一起使用。默认情况下,info
将列出软件包描述、网页和已安装大小。有关更多详细信息(例如子命令支持的标志列表),您可以使用 apk info -h
输出的“Info options”部分或查看手册页。
高级用法
World (世界文件)
您想要显式安装的软件包列在“世界文件”中,该文件位于 /etc/apk/world
。可以安全地手动编辑它。如果您手动编辑了它,您可以运行不带参数的 apk add
以使软件包选择达到一致状态。
像 cmd: 、so: 和 pc: 这样的虚拟软件包将以这种形式出现在您的世界文件中 - 这就是为什么不鼓励使用 so: - soname 可能会被提升! |