Alpine Pkg Manager(Alpine系统包管理)

AI 摘要: 本文简要介绍了针对 Alpine 系统的包管理的基础和包内容检索。同时还介绍了 apk 命令的使用方法和包检索的相关信息。

针对 Alpine 系统的包管理简要使用

1. 相关 Alpine 包管理地址

  1. 包管基础:https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
  2. 包内容检索:https://pkgs.alpinelinux.org

2. apk 命令使用

2.1. 包检索

1
2
3
4
5
6
7
8
// 查看所有包
apk search -v

// 查看所有含acf的包
apk search -v 'acf*'

// 查看描述中含NTP的包
apk search -v --description 'NTP'

2.2. 包内容查看

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12

// 包命令提供
apk info -P bind-tools

// 包所有信息,涵盖cmd提供、安装大小、描述等
apk info -a zlib

// 包概要说明(描述、大小、官网)
apk info -v asterisk

// 列出apline已安装的包
apk -vv info|sort

2.3. 包缓存生成(通常不用处理)

Alpine 支持将下载的包缓存到一个指定的目录,方便其他 Alpine 复用(通过挂载)

1
2
3
4
5
6
apk add e2fsprogs
dd if=/dev/zero of=/apkcache.img bs=1M count=128
mkfs.ext2 -F /apkcache.img
mkdir -p /etc/apk/cache
mount -t ext2 /apkcache.img /etc/apk/cache
apk update

2.4. 包统计

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# apk stats
installed:
  packages: 28
  dirs: 155
  files: 3043
  bytes: 18485248
  triggers: 2
available:
  names: 24065
  packages: 10335
atoms:
  num: 7248

3. busybox 与 busybox-extra

busybox 是一款多功能的系统工具,支持许多 UNIX/Linux 命令,支持 shell 脚本,可以用在嵌入式系统中。

busybox-extra是 busybox 的一个扩展,它支持更多的 UNIX/Linux 命令,可以在更多的嵌入式系统中使用。

3.1. busybox 提供的可执行文件查看

BusyBox 是一个多调用的二进制程序,它结合了许多常见的 Unix 将实用程序转换为单个可执行文件。

大多数命令通过软链到 busybox:

1
2
3
4
5
...
lrwxrwxrwx    1 root     root            12 Jul 11 17:29 stat -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jul 11 17:29 stty -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jul 11 17:29 su -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jul 11 17:29 sync -> /bin/busybox
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 输入busybox命令查看定义的相关功能支持
$ busybox

Currently defined functions:
[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arch, arp, arping, ash,
    awk, base64, basename, bbconfig, bc, beep, blkdiscard, blkid, blockdev, brctl,
    bunzip2, bzcat, bzip2, cal, cat, chgrp, chmod, chown, chpasswd, chroot, chvt,
    cksum, clear, cmp, comm, conspy, cp, cpio, crond, crontab, cryptpw, cut, date,
    dc, dd, deallocvt, delgroup, deluser, depmod, df, diff, dirname, dmesg,
    ....

3.2. busybox-extras 支持的扩展内容查看

Busybox-extra 支持的扩展内容包括:

  1. 压缩和解压缩:gzip,bzip2,xz,lzma,lzop,lz4,zstd,zip,unzip,unrar,tar,cpio,p7zip,arj
  2. 文件系统:e2fsprogs,dosfstools,btrfs-progs,util-linux,xfsprogs,ntfs-3g
  3. 网络:curl,wget,iptables,iproute2,openssh
  4. 编程:gcc,g++,make,automake,autoconf,libtool
  5. 数据库:sqlite3
  6. 图形:X11,Xorg,mesa,libdrm,libX11,libXext,libXrender,libXdamage,libXfixes,libXcomposite,libXcursor,libXinerama,libXrandr,libXi,libXft,libXmu,libXpm,libXt,libXv,libXvMC,libXxf86vm
  7. 其他:nano,vim,emacs,bash,zsh,screen,tmux,dialog,ncurses,libpam,libcap,pam_unix,pam_pwdb,pam_krb5,pam_ldap,pam_cracklib,pam_debug,pam_selinux,pam_namespace,pam_mkhomedir,pam_issue,pam_motd,pam_loginuid,pam_shells,pam_timestamp,pam_umask,pam_deny,pam_limits,pam_env,pam_xauth,pam_access,pam_keyinit,pam_permit,pam_listfile,pam_userdb,pam_group,pam_wheel,pam_securetty,pam_rhosts,pam_migrate,pam_mail
1
2
3
4
$ busybox-extras
Currently defined functions:
    arch, dnsd, fakeidentd, ftpd, ftpget, ftpput, httpd, inetd, readahead, telnet,
    telnetd, tftp, tftpd, udhcpd

4. 基于 alpine 系统构建 Docker 镜像

4.1. 基于命令查询安装包

alpine 官方提供的包检索 Page 查询:https://pkgs.alpinelinux.org/contents?file=ss&path=&name=&branch=edge

4.2. alpine 常见网络调试工具

  • telnet
    • apk add busybox-extras
  • busybox 自带工具
    • nc
    • netstat
  • 需要安装:
    • curl (curl)
    • tcpdump (tcpdump)
    • dig (bind-tools)
  • 可选安装:
    • socat (socat)
    • ss (iproute2)
1
2
// 基于ss查看监听情况
ss -tan -4 -o state listening

4.3. 可能需要修改的 Mirror 仓库源

1
2
3
4
5
6
7
8
// 修改成阿里云镜像(https://developer.aliyun.com/mirror/alpine)
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

// 修改成清华的镜像
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories

// 增加testing仓库(默认只有main和community)
sed -i '$a@testing http://mirrors.tuna.tsinghua.edu.cn/alpine/edge/testing' /etc/apk/repositories

4.4. Dockerfile - 简单的 GO 服务 && 网络工具

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
FROM alpine:latest

# 环境变量
ENV VERSION=v0.0.1\
   BINARY=scf-robot

# 常见工具安装
RUN apk add --no-cache\
      bash-completion tree\
      bind-tools curl tcpdump\

# 二进制文件拷贝
WORKDIR /app/bin
COPY ./sh ~
COPY ./$BINARY /app/bin

# 命令执行
EXPOSE 80:8080
CMD ["sh", "-c", "/app/bin/$BINARY"]

4.5. Dockerfile - 软件编译 && 网络调试环境镜像构建

1
2
3
4
5
6
7
8
# 我这里选择了curl、dig、系统、网络调试、openssl等工具的集成
RUN apk update && apk add curl bind-tools \
    strace sysstat procps iproute2 \
    tcpdump \
    openssl ca-certificates \
    git tree \
    util-linux \
    perf@testing