zoukankan      html  css  js  c++  java
  • Alpine包管理工具apk使用介绍

    Alpine以它的小巧和实用深受总多开发者的喜爱,而提到Alpine的Linux,其包管理工具apk则是在Alpine中使用广泛的一个工具,这篇文章简要介绍一下常见的使用方式。

    什么是apk
    Alpine Linux的包管理工具主要包含两部分内容:

    包管理:提供安装/更新/删除包的功能
    系统备份恢复:将系统恢复至之前安装和配置的备份状态
    而具体实现上述两部分功能的工具则是apk和lbu

    功能 工具 缩写
    包管理 apk Alpine Linux package manager.
    系统备份恢复 lbu Alpine Local Backup
    这篇文章主要介绍包管理工具apk的使用方法。常见命令的使用说明如下所示:

    命令类别 子命令 命令说明
    包管理 add 添加指定包并确认所有依赖满足要求
    包管理 del 删除指定包
    系统维护 fix 在不改动主要的依赖的情况下进行包的修复或者升级
    系统维护 update 从远程仓库获取信息更新本地仓库索引
    系统维护 upgrade 对已安装了的包进行更新
    系统维护 cache 对缓存进行操作,比如对缺失的包进行缓存或者对于不需要的包进行缓存删除
    信息查询 info 对于指定的包进行包或者仓库的详细信息进行显示
    信息查询 list 按照指定条件进行包的列表信息显示
    信息查询 search 查询相关的包的详细信息
    信息查询 dot 生成依赖之间的关联关系图(使用箭头描述)
    信息查询 policy 显示包的仓库策略信息
    信息查询 stats 显示仓库和包的安装相关的统计信息
    仓库管理 index 使用文件生成仓库索引文件
    仓库管理 fetch 从全局仓库下载包到本地目录
    仓库管理 verify 验证包的完整性和签名信息
    仓库管理 manifest 显示package各组成部分的checksum
    环境准备
    在本文接下来的内容中将就上述命令的常见用法进行整理和总结,验证的环境为Alpine的官方镜像3.10.2,镜像信息如下所示

    [root@host132 ~]# docker pull alpine:3.10.2
    3.10.2: Pulling from library/alpine
    Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
    Status: Downloaded newer image for alpine:3.10.2
    [root@host132 ~]# docker images |grep alpine |grep 3.10.2
    alpine 3.10.2 961769676411 3 weeks ago 5.58MB
    [root@host132 ~]#

    Alpine容器版本的确认方法

    /etc/alpine-release的文件中记录了alpine的版本信息,将此文件的内容打印出来即可确认Alpine的版本

    执行示例信息如下所示:

    [root@host132 ~]# docker run -it --rm alpine:3.10.2 cat /etc/alpine-release
    3.10.2
    [root@host132 ~]#

    常用命令说明
    update
    命令类别 子命令 命令说明
    系统维护 update 从远程仓库获取信息更新本地仓库索引
    update命令用于更新本地索引,这样很多操作才能执行,否则会提示相关的WARNING

    [root@host132 ~]# docker run -it --rm alpine:3.10.2 sh
    / # apk search gcc
    WARNING: Ignoring APKINDEX.00740ba1.tar.gz: No such file or directory
    WARNING: Ignoring APKINDEX.d8b2a6f4.tar.gz: No such file or directory
    / #

    update命令会将上述提示的两个APKINDEX的文件从远端仓库下载到本地,在Alpine容器中,此文件会保存在/var/cache/apk:

    [root@host132 ~]# docker run -it --rm alpine:3.10.2 sh
    / # ls /var/cache/apk
    / #
    / # apk update
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
    v3.10.2-51-g21ccaac25b [http://dl-cdn.alpinelinux.org/alpine/v3.10/main]
    v3.10.2-42-g95d37f7648 [http://dl-cdn.alpinelinux.org/alpine/v3.10/community]
    OK: 10336 distinct packages available
    / #
    / # ls /var/cache/apk
    APKINDEX.00740ba1.tar.gz APKINDEX.d8b2a6f4.tar.gz
    / #

    索引文件一旦下载至本地,再次执行诸如apk search等命令则不会出现WARNING信息了

    / # apk search gcc
    gcc-zsh-completion-5.7.1-r0
    gcc-8.3.0-r0
    gccmakedep-1.0.3-r0
    gcc-objc-8.3.0-r0
    gcc6-6.4.0-r9
    libreoffice-common-6.2.7.1-r0
    gcc6-java-6.4.0-r9
    gcc6-doc-6.4.0-r9
    libgcj6-6.4.0-r9
    gcc-avr-8.3.0-r0
    gcc-gnat-8.3.0-r0
    gccmakedep-doc-1.0.3-r0
    libgc++-8.0.4-r0
    gcc-doc-8.3.0-r0
    gcc-avr-doc-8.3.0-r0
    libgcc-8.3.0-r0
    wine-dev-3.0.4-r1
    libstdc++6-6.4.0-r9
    / #

    search
    命令类别 子命令 命令说明
    信息查询 search 查询相关的包的详细信息
    常见用法:apk search
    使用场景:查询所有可用的apk的包的信息

    / # apk search |wc -l
    10329
    / #

    可以看到当前的3.10.2的索引之下,整体大概有1万以上apk的可用的包可供安装

    常见用法:apk search -v gcc 或者 apk search gcc
    使用场景:查询所有包名称中含有gcc的可用的apk的包的信息

    / # apk search -v gcc
    gcc-zsh-completion-5.7.1-r0 - Zsh completions for gcc
    gcc-8.3.0-r0 - The GNU Compiler Collection
    gccmakedep-1.0.3-r0 - Create dependencies in makefiles using 'gcc -M'
    gcc-objc-8.3.0-r0 - GNU Objective-C
    gcc6-6.4.0-r9 - The GNU Compiler Collection
    libreoffice-common-6.2.7.1-r0 - LibreOffice - Common files
    gcc6-java-6.4.0-r9 - Java support for GCC
    gcc6-doc-6.4.0-r9 - The GNU Compiler Collection (documentation)
    libgcj6-6.4.0-r9 - Java runtime library for gcc
    gcc-avr-8.3.0-r0 - The GNU Compiler Collection for AVR targets
    gcc-gnat-8.3.0-r0 - Ada support for GCC
    gccmakedep-doc-1.0.3-r0 - Create dependencies in makefiles using 'gcc -M' (documentation)
    libgc++-8.0.4-r0 - A garbage collector for C and C++
    gcc-doc-8.3.0-r0 - The GNU Compiler Collection (documentation)
    gcc-avr-doc-8.3.0-r0 - The GNU Compiler Collection for AVR targets (documentation)
    libgcc-8.3.0-r0 - GNU C compiler runtime libraries
    wine-dev-3.0.4-r1 - A compatibility layer for running Windows programs (development files)
    libstdc++6-6.4.0-r9 - GNU C++ standard runtime library
    / #

    policy
    命令类别 子命令 命令说明
    信息查询 policy 显示包的仓库策略信息
    使用policy可以查询包

    / # apk policy gcc
    gcc policy:
    8.3.0-r0:
    http://dl-cdn.alpinelinux.org/alpine/v3.10/main
    / #

    stats
    命令类别 子命令 命令说明
    信息查询 stats 显示仓库和包的安装相关的统计信息
    使用stats可以查询包整体的安装统计信息

    / # apk stats
    installed:
    packages: 14
    dirs: 88
    files: 78
    bytes: 6348800
    triggers: 1
    available:
    names: 24062
    packages: 10336
    atoms:
    num: 7243
    / #

    info & list
    命令类别 子命令 命令说明
    信息查询 info 对于指定的包进行包或者仓库的详细信息进行显示
    信息查询 list 按照指定条件进行包的列表信息显示
    可以通过list和info获得包的相关信息,以gcc为例,在安装之前可以做如下信息确认

    / # which gcc
    / # apk list gcc
    gcc-8.3.0-r0 x86_64 {gcc} (GPL LGPL)
    / #
    / # apk info gcc
    gcc-8.3.0-r0 description:
    The GNU Compiler Collection

    gcc-8.3.0-r0 webpage:
    http://gcc.gnu.org

    gcc-8.3.0-r0 installed size:
    75997184

    / #

    常见用法:apk info 或者 apk info -v
    使用场景:查询已经安装的所有包的信息

    可以看到这正是通过stats命令所列出的14个包与版本的详细信息

    / # apk info -v
    musl-1.1.22-r3
    busybox-1.30.1-r2
    alpine-baselayout-3.1.2-r0
    alpine-keys-2.1-r2
    libcrypto1.1-1.1.1c-r0
    libssl1.1-1.1.1c-r0
    ca-certificates-cacert-20190108-r0
    libtls-standalone-2.9.1-r0
    ssl_client-1.30.1-r2
    zlib-1.2.11-r1
    apk-tools-2.10.4-r2
    scanelf-1.2.3-r0
    musl-utils-1.1.22-r3
    libc-utils-0.7.1-r0
    / # apk info -v |wc -l
    14
    / #

    常见用法:apk info --who-owns 二进制文件名称
    使用场景:查询指定的二进制文件名所归属的包的信息

    / # which wget
    /usr/bin/wget
    / # apk info --who-owns /usr/bin/wget
    /usr/bin/wget symlink target is owned by busybox-1.30.1-r2
    / #

    add
    命令类别 子命令 命令说明
    包管理 add 添加指定包并确认所有依赖满足要求
    以安装gcc为例安装最新匹配版本的apk包的命令与执行日志示例如下所示

    / # apk add gcc
    (1/10) Installing binutils (2.32-r0)
    (2/10) Installing gmp (6.1.2-r1)
    (3/10) Installing isl (0.18-r0)
    (4/10) Installing libgomp (8.3.0-r0)
    (5/10) Installing libatomic (8.3.0-r0)
    (6/10) Installing libgcc (8.3.0-r0)
    (7/10) Installing mpfr3 (3.1.5-r1)
    (8/10) Installing mpc1 (1.1.0-r0)
    (9/10) Installing libstdc++ (8.3.0-r0)
    (10/10) Installing gcc (8.3.0-r0)
    Executing busybox-1.30.1-r2.trigger
    OK: 92 MiB in 24 packages
    / # which gcc
    /usr/bin/gcc
    / # gcc -v
    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-alpine-linux-musl/8.3.0/lto-wrapper
    Target: x86_64-alpine-linux-musl
    Configured with: /home/buildozer/aports/main/gcc/src/gcc-8.3.0/configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --build=x86_64-alpine-linux-musl --host=x86_64-alpine-linux-musl --target=x86_64-alpine-linux-musl --with-pkgversion='Alpine 8.3.0' --enable-checking=release --disable-fixed-point --disable-libstdcxx-pch --disable-multilib --disable-nls --disable-werror --disable-symvers --enable-__cxa_atexit --enable-default-pie --enable-default-ssp --enable-cloog-backend --enable-languages=c,c++,objc,fortran,ada --disable-libssp --disable-libmpx --disable-libmudflap --disable-libsanitizer --enable-shared --enable-threads --enable-tls --with-system-zlib --with-linker-hash-style=gnu
    Thread model: posix
    gcc version 8.3.0 (Alpine 8.3.0)
    / #

    安装之后,则可以看到,整体的stats和info都能看到从原来的14个已安装的包,变成了24个已安装的包

    / # apk info -v
    musl-1.1.22-r3
    busybox-1.30.1-r2
    alpine-baselayout-3.1.2-r0
    alpine-keys-2.1-r2
    libcrypto1.1-1.1.1c-r0
    libssl1.1-1.1.1c-r0
    ca-certificates-cacert-20190108-r0
    libtls-standalone-2.9.1-r0
    ssl_client-1.30.1-r2
    zlib-1.2.11-r1
    apk-tools-2.10.4-r2
    scanelf-1.2.3-r0
    musl-utils-1.1.22-r3
    libc-utils-0.7.1-r0
    binutils-2.32-r0
    gmp-6.1.2-r1
    isl-0.18-r0
    libgomp-8.3.0-r0
    libatomic-8.3.0-r0
    libgcc-8.3.0-r0
    mpfr3-3.1.5-r1
    mpc1-1.1.0-r0
    libstdc++-8.3.0-r0
    gcc-8.3.0-r0
    / # apk stats
    installed:
    packages: 24
    dirs: 125
    files: 866
    bytes: 96833536
    triggers: 1
    available:
    names: 24063
    packages: 10336
    atoms:
    num: 7245
    / #

    常见用法:apk add 二进制文件.apk
    使用场景:下载至本地apk安装文件,然后使用安装文件进行安装

    常见用法:apk add --no-network 包名
    使用场景:使用本地cache而不直接联网进行安装

    常见用法:apk add --no-cache 包名
    使用场景:不使用本地cache进行安装,比如在Dockerfile中为了避免生成cache产生无用的缓存安装文件

    常见用法:apk add gcc=8.3.0-r0
    使用场景:安装某包的指定版本(此示例为使用apk安装gcc的8.3.0-r0版本)

    注:包的版本可以从如下链接进行查询

    https://pkgs.alpinelinux.org/
    del
    命令类别 子命令 命令说明
    包管理 del 删除指定包
    以gcc的删除为例,可以看到连同安装的其他依赖一同删除,删除示例日志如下所示

    / # apk del gcc
    (1/10) Purging gcc (8.3.0-r0)
    (2/10) Purging binutils (2.32-r0)
    (3/10) Purging libatomic (8.3.0-r0)
    (4/10) Purging libgomp (8.3.0-r0)
    (5/10) Purging mpc1 (1.1.0-r0)
    (6/10) Purging mpfr3 (3.1.5-r1)
    (7/10) Purging isl (0.18-r0)
    (8/10) Purging gmp (6.1.2-r1)
    (9/10) Purging libstdc++ (8.3.0-r0)
    (10/10) Purging libgcc (8.3.0-r0)
    Executing busybox-1.30.1-r2.trigger
    OK: 6 MiB in 14 packages
    / # apk info
    musl
    busybox
    alpine-baselayout
    alpine-keys
    libcrypto1.1
    libssl1.1
    ca-certificates-cacert
    libtls-standalone
    ssl_client
    zlib
    apk-tools
    scanelf
    musl-utils
    libc-utils
    / # apk info |wc -l
    14
    / #

    总结
    Alpine作为一个非常小巧的Docker镜像,在很多场合得到了很好的应用,而apk作为Alpine的包管理工具,随着Alpine周遭生态的逐渐成熟,apk也发挥着越来越重要的作用。

    我们只需要努力,然后剩下的交给时间。
  • 相关阅读:
    svn环境搭建
    Svn正确的使用方法
    基于phpExcel写的excel类
    关于ecshop中jquery与js冲突解决的方案
    学习Javascript闭包(Closure)
    JS全局变量VAR和THIS
    python六十六课——单元测试(二)
    python六十五课——单元测试(一)
    python六十四课——高阶函数练习题(三)
    python六十四课——高阶函数练习题(二)
  • 原文地址:https://www.cnblogs.com/lgj8/p/14610504.html
Copyright © 2011-2022 走看看