apk
1.1、apk简介

apk(Alpine Package Manager)

apkAlpine Linux的包管理工具。

1.2、apk仓库
1.2.1、apk仓库的结构

apk仓库就是一种文件的组织方式,其结构如下:

alpine
├── MIRRORS.txt
├── v3.8
│   ├── community
│   │   ├── x86
│   │   │   ├── APKINDEX.tar.gz
│   │   │   ├── mm-2.8.1-r0.apk
│   │   │   └── mm-doc-2.8.1-r0.apk
│   │   └── x86_64
│   │       ├── APKINDEX.tar.gz
│   │       ├── nn-2.8.1-r0.apk
│   │       └── nn-doc-2.8.1-r0.apk
│   ├── main
│   │   ├── x86
│   │   │   ├── APKINDEX.tar.gz
│   │   │   ├── xx-2.8.1-r1.apk
│   │   │   └── xx-doc-2.8.1-r1.apk
│   │   └── x86_64
│   │       ├── APKINDEX.tar.gz
│   │       ├── yy-2.8.1-r1.apk
│   │       └── yy-doc-2.8.1-r1.apk
│   └── release
└── v3.9
    │

apk仓库的地址格式:${sourceURL}/alpine/${version}/${repositoryName}

上面的${sourceURL}/alpine/v3.8/main${sourceURL}/alpine/v3.8/community是两个仓库。

1.2.2、apk仓库的存储

apk仓库可以存放在任何地方,下面是两个例子:

  • 我们可以把它存储在CD-ROM中,通过把CD-ROM挂载到操作系统中,再配置一下仓库地址就可以了。
  • 我们可以通常把它存储在网络中的某个地方,通过网络进行访问,再配置一下仓库地址就可以了。
1.2.3、apk仓库的镜像

apk仓库的镜像就是对原始仓库的一个完整克隆,镜像存在的目的就是使得网络访问速度加快。

https://mirrors.alpinelinux.org里列出了官方认证的镜像。

下面是国内用户使用最多的镜像:

名称地址
官方源dl-cdn.alpinelinux.org
阿里云的镜像mirrors.aliyun.com
科大的镜像mirrors.ustc.edu.cn
1.2.4、创建自己的apk仓库的镜像

1、从官方源中拉取maincommunity两个仓库:

wget -r -np -nH http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/
wget -r -np -nH http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/

2、安装nginx

3、将alpine目录整体移动到/usr/local/nginx/html目录下:

mv ~/alpine /usr/local/nginx/html/

4、启动nginx

nginx

得到仓库地址:

http://your_host_ip/alpine/v3.8/main
http://your_host_ip/alpine/v3.8/community
1.2.5、apk仓库的配置

apk仓库的配置文件是/etc/apk/repositories

apk支持从多个仓库下载软件,在/etc/apk/repositories里可以配置很多个仓库的地址, 下面是我的配置:

http://mirrors.aliyun.com/alpine/v3.8/main
http://mirrors.aliyun.com/alpine/v3.8/community

如果您修改了/etc/apk/repositories,修改完之后,必须使用apk update命令进行更新仓库的索引, 否则配置不会生效。

1.3、apk命令
1.3.1、apk update

apk update命令用于更新配置在/etc/apk/repositories中的所有apk仓库中软件的索引。 修改了/etc/apk/repositories之后一定要执行此命令。

apk update命令会从各个仓库根目录下载APKINDEX.tar.gz,存储到本地的/var/cache/apk目录中。

1.3.2、apk upgrade

升级当前已经安装了的包(包括内核)。

1.3.3、apk search <queryStr>

查询给定名字的包。

示例1 - 展示描述信息:

apk search -v vim

示例2 - 在描述信息中匹配:

apk search -d vim
1.3.4、apk add <apkName>

从仓库中安装最新软件包,并自动安装必须的依赖包。

示例1:

apk add vim

示例2:

apk add openssh openntp

示例3:

apk add --no-cache mysql-client

示例4:

apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.4/main/ --allow-untrusted

示例5 - 安装指定版本软件包:

apk add asterisk=1.6.0.21-r0
apk add 'asterisk<1.6.1'
apk add 'asterisk>1.6.1'

示例5 - 升级指定软件包:

apk add --upgrade busybox
1.3.5、apk del <apkName>

卸载给定名字的包。

1.3.6、apk info [apkName]

显示软件包的信息。

示例1 - 列出所有已安装的软件包:

apk info

示例2 - 显示完整的软件包信息:

apk info -a vim

示例3 - 显示指定文件所属的包:

apk info --who-owns /sbin/lbu
1.3.7、apk cache sync | clean | download

维护本地缓存的包仓库。

1.3.8、apk version

对比已安装和可用的包之间的不同之处。

1.3.9、apk index

从包列表创建仓库的索引。

1.3.9、apk fetch <apkName>

下载但不安装包。

1.3.10、apk audit <apkName>

从原始包安装状态向文件系统列表更改。

1.3.11、apk verify <apkFilePath>

验证包签名。

示例:

apk verify openrc-0.35.5-r5.apk
1.3.12、apk fix [apkName]

尝试修复或者升级已安装的包。

1.4、apk包的本质

apk包的本质就是.tar.gz包,我们可以通过tar zvxf xx.apk -C xx/进行解压,就可以看到里面的内容了。