alpinelinux的包管理
Alpine Linux 使用 apk
作为其包管理工具,它是一个轻量级的命令行工具,用于安装、更新、删除和管理Alpine Linux中的软件包。
apk 命令的使用需要用户是root或者拥有sudo权限的用户。
以下是 apk
的一些基本使用实例:
更新软件包索引:
localhost:~# apk update
fetch http://mirrors.ustc.edu.cn/alpine/v3.20/main/x86_64/APKINDEX.tar.gz
fetch http://mirrors.ustc.edu.cn/alpine/v3.20/community/x86_64/APKINDEX.tar.gz
v3.20.3-146-g5472acf50d5 [http://mirrors.ustc.edu.cn/alpine/v3.20/main]
v3.20.3-145-g2f494ccc7f8 [http://mirrors.ustc.edu.cn/alpine/v3.20/community]
OK: 24164 distinct packages available
搜索软件包:
apk search <package_name>
例:搜索docker的软件包
localhost:~# apk search docker
docker-26.1.5-r0
docker-bash-completion-26.1.5-r0
docker-cli-26.1.5-r0
docker-cli-buildx-0.14.0-r3
docker-cli-compose-2.27.0-r3
docker-credential-ecr-login-0.7.1-r20
docker-credential-ecr-login-doc-0.7.1-r20
docker-doc-26.1.5-r0
docker-engine-26.1.5-r0
docker-fish-completion-26.1.5-r0
docker-openrc-26.1.5-r0
docker-registry-2.8.3-r7
docker-registry-openrc-2.8.3-r7
docker-rootless-extras-26.1.5-r0
docker-zsh-completion-26.1.5-r0
lazydocker-0.23.1-r5
openscap-docker-1.3.10-r1
openvswitch-2.17.9-r1
podman-docker-5.2.4-r0
podman-docker-doc-5.2.4-r0
py3-docker-py-7.1.0-r0
py3-docker-py-pyc-7.1.0-r0
py3-dockerpty-0.4.1-r8
py3-dockerpty-pyc-0.4.1-r8
py3-pytest-docker-tools-3.1.3-r0
py3-pytest-docker-tools-pyc-3.1.3-r0
rootlesskit-docker-proxy-2.1.0-r3
rsyslog-imdocker-8.2404.0-r0
可以发现,搜索的结果包含了docker相关包以及包名中含有docker
字符串的软件包都会输出。
安装软件包:
apk add <package_name>
例:安装git服务
localhost:~# apk add git
(1/8) Installing brotli-libs (1.1.0-r2)
(2/8) Installing c-ares (1.33.1-r0)
(3/8) Installing nghttp2-libs (1.62.1-r0)
(4/8) Installing libpsl (0.21.5-r1)
(5/8) Installing libcurl (8.10.1-r0)
(6/8) Installing libexpat (2.6.3-r0)
(7/8) Installing git (2.45.2-r0)
(8/8) Installing git-init-template (2.45.2-r0)
Executing busybox-1.36.1-r29.trigger
OK: 498 MiB in 98 packages
例:下载软件包及其依赖项并离线安装
localhost:~# apk fetch -R nginx
Downloading busybox-1.36.1-r29
Downloading busybox-binsh-1.36.1-r29
Downloading libcrypto3-3.3.2-r0
Downloading libssl3-3.3.2-r0
Downloading musl-1.2.5-r0
Downloading nginx-1.26.2-r0
Downloading pcre-8.45-r3
Downloading ssl_client-1.36.1-r29
Downloading zlib-1.3.1-r1
localhost:~# ls
busybox-1.36.1-r29.apk libssl3-3.3.2-r0.apk pcre-8.45-r3.apk
busybox-binsh-1.36.1-r29.apk musl-1.2.5-r0.apk ssl_client-1.36.1-r29.apk
libcrypto3-3.3.2-r0.apk nginx-1.26.2-r0.apk zlib-1.3.1-r1.apk
localhost:~# apk add ./*.apk
(1/4) Installing pcre (8.45-r3)
(2/4) Installing nginx (1.26.2-r0)
Executing nginx-1.26.2-r0.pre-install
Executing nginx-1.26.2-r0.post-install
(3/4) Installing nginx-openrc (1.26.2-r0)
(4/4) Installing nginx-vim (1.26.2-r0)
Executing busybox-1.36.1-r29.trigger
OK: 552 MiB in 109 packages
安装特定版本的软件包:
apk add <package_name>=<version>
例:安装nginx的1.26.2-r0版本
localhost:~# apk add nginx=1.26.2-r0
(1/4) Installing pcre (8.45-r3)
(2/4) Installing nginx (1.26.2-r0)
Executing nginx-1.26.2-r0.pre-install
Executing nginx-1.26.2-r0.post-install
(3/4) Installing nginx-openrc (1.26.2-r0)
(4/4) Installing nginx-vim (1.26.2-r0)
Executing busybox-1.36.1-r29.trigger
OK: 500 MiB in 102 packages
列出已安装的软件包:
apk info
如果apk info
后面没有跟包名,则列出所有的已安装包的列表:
localhost:~# apk info
alpine-base
alpine-baselayout
alpine-baselayout-data
alpine-conf
alpine-keys
alpine-release
apk-tools
busybox
busybox-binsh
busybox-mdev-openrc
busybox-openrc
busybox-suid
ca-certificates
ca-certificates-bundle
chrony
…… 略 ……
openssl
p11-kit
pcre2
runc
scanelf
ssl_client
tini-static
vim
vim-common
xxd
xz-libs
zlib
zstd-libs
如果后面有指定包名,则仅列出指定包的信息:
localhost:~# apk info openrc
openrc-0.54-r1 description:
OpenRC manages the services, startup and shutdown of a hostopenrc-0.54-r1 webpage:
https://github.com/OpenRC/openrcopenrc-0.54-r1 installed size:
1636 KiB
查看特定文件属于哪个软件包:
apk info --who-owns <file_path>
例:查看/usr/bin/git
文件属于哪个包
localhost:~# apk info --who-owns /usr/bin/git
/usr/bin/git is owned by git-2.45.2-r0
查看软件包的依赖关系:
apk info -R <package_name>
例:查看git的依赖关系
localhost:~# apg info -R git
-sh: apg: not found
localhost:~# apk info -R git
git-2.45.2-r0 depends on:
so:libc.musl-x86_64.so.1
so:libcurl.so.4
so:libexpat.so.1
so:libpcre2-8.so.0
so:libz.so.1
升级所有已安装的软件包:
如果后面没有跟包的名字将更新所有可以更新的软件包
localhost:~# apk upgrade
Upgrading critical system libraries and apk-tools:
(1/1) Upgrading apk-tools (2.14.4-r0 -> 2.14.4-r1)
Executing busybox-1.36.1-r29.trigger
Continuing the upgrade transaction with new apk-tools:
(1/1) Upgrading linux-lts (6.6.52-r0 -> 6.6.54-r0)
Executing busybox-1.36.1-r29.trigger
Executing kmod-32-r0.trigger
Executing mkinitfs-3.10.1-r0.trigger
==> initramfs: creating /boot/initramfs-lts for 6.6.54-0-lts
Executing grub-2.12-r5.trigger
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-lts
Found initrd image: /boot/initramfs-lts
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
OK: 490 MiB in 90 packages
需要更新指定的软件包则需要再后面跟包的名字
localhost:~# apk upgrade apk-tools
fetch http://dl-cdn.alpinelinux.org/alpine/v3.20/main/x86_64/APKINDEX.tar.gz
(1/1) Upgrading apk-tools (2.14.4-r0 -> 2.14.4-r1)
Executing busybox-1.36.1-r29.trigger
OK: 256 MiB in 101 packages
删除软件包:
apk del <package_name>
例:删除上面安装的nginx
localhost:~# apk del nginx
(1/4) Purging nginx-openrc (1.26.2-r0)
(2/4) Purging nginx-vim (1.26.2-r0)
(3/4) Purging nginx (1.26.2-r0)
(4/4) Purging pcre (8.45-r3)
Executing busybox-1.36.1-r29.trigger
OK: 498 MiB in 98 packages
清理缓存:
localhost:~# apk cache clean
修复损坏的软件包:
localhost:~# apk fix
OK: 498 MiB in 98 packages
查看软件包信息:
apk info <package_name>
例:查看软件包git的信息:
localhost:~# apk info git
git-2.45.2-r0 description:
Distributed version control systemgit-2.45.2-r0 webpage:
https://www.git-scm.com/git-2.45.2-r0 installed size:
6468 KiB
apk命令的详细选项,可以通过apk --help
进行查看,下面是系统给出的命令输出结果:
localhost:~# apk --help
apk-tools 2.14.4, compiled for x86_64.usage: apk [<OPTIONS>...] COMMAND [<ARGUMENTS>...]Package installation and removal:add Add packages to WORLD and commit changesdel Remove packages from WORLD and commit changesSystem maintenance:fix Fix, reinstall or upgrade packages without modifying WORLDupdate Update repository indexesupgrade Install upgrades available from repositoriescache Manage the local package cacheQuerying package information:info Give detailed information about packages or repositorieslist List packages matching a pattern or other criteriadot Render dependencies as graphviz graphspolicy Show repository policy for packagessearch Search for packages by name or descriptionRepository maintenance:index Create repository index file from packagesfetch Download packages from repositories to a local directorymanifest Show checksums of package contentsverify Verify package integrity and signatureMiscellaneous:audit Audit system for changesstats Show statistics about repositories and installationsversion Compare package versions or perform tests on version stringsThis apk has coffee making abilities.
For more information: man 8 apk
如果想看看某个选项中还可以配搭什么参数,可以使用命令apk <选项名> --help
,例如下面是查看info
选项的用法和参数,这里命令的内容输出比较多,请自行实验。