Alpine Linuxのapkコマンドでインストール可能なパッケージを検索する方法

2021-05-23Bash,Docker,Linux

はじめに

dig コマンドや nmap をつかって、サーバの外部からの見え方を調査する必要がありました。
軽量でクリーンなLinux環境がほしかったので、 Alpine Linux を使ってみたのですが、パッケージの探し方について yumapt との違いが理解できていませんでした。

特に導入したいコマンドを含むパッケージをどうやって探すかについて知らなかったので調べてみました。

検証環境

$ uname -moi
x86_64 MacBookPro16,1 Darwin

$ bash -version | head -n 1
GNU bash, version 5.1.8(1)-release (x86_64-apple-darwin20.3.0)

まずは "Alpine Linux" の起動

docker コマンドを使って、 "Alpine Linux" を起動します。
以下のコマンドを実行すれば初回実行時のみ、 "Docker Hub" からイメージファイルがダウンロードされます。
ダウンロードが完了していれば、直ちに "Alpine Linux" コンテナが起動し、ログイン済み状態となります。

$ docker run -i -t --rm alpine
/ #

1. 「インストール可能なパッケージ」をWebから検索する方法

"Alpine Linux" で使えるパッケージは Alpine Linux packages というサイトから検索できる。

"File" という入力エリアに dig を入力して "Search" ボタン を押します。

bind-tools というパッケージをインストールすれば良いことがわかります。

2. 「インストール可能なパッケージ」をコマンドから検索する方法

apk コマンドのヘルプを確認します。

/ # apk --help
apk-tools 2.12.5, compiled for x86_64.

usage: apk [<OPTIONS>...] COMMAND [<ARGUMENTS>...]

Package installation and removal:
  add        Add packages to WORLD and commit changes
  del        Remove packages from WORLD and commit changes

System maintenance:
  fix        Fix, reinstall or upgrade packages without modifying WORLD
  update     Update repository indexes
  upgrade    Install upgrades available from repositories
  cache      Manage the local package cache

Querying package information:
  info       Give detailed information about packages or repositories
  list       List packages matching a pattern or other criteria
  dot        Render dependencies as graphviz graphs
  policy     Show repository policy for packages

Repository maintenance:
  index      Create repository index file from packages
  fetch      Download packages from global repositories to a local directory
  manifest   Show checksums of package contents
  verify     Verify package integrity and signature

Miscellaneous:
  audit      Audit system for changes
  stats      Show statistics about repositories and installations
  version    Compare package versions or perform tests on version strings

This apk has coffee making abilities.
For more information: man 8 apk

apk search コマンドのヘルプを確認してみます。

/ # apk search --help
apk-tools 2.12.5, compiled for x86_64.

Global options:
  -f, --force           Enable selected --force-* options (deprecated)
  -i, --interactive     Ask confirmation before performing certain
                        operations
  -p, --root <ROOT>     Manage file system at ROOT
  -q, --quiet           Print less information
  -U, --update-cache    Alias for '--cache-max-age 1'
  -v, --verbose         Print more information (can be specified twice)
  -V, --version         Print program version and exit
  -X, --repository <REPO>
                        Specify additional package repository
  --allow-untrusted     Install packages with untrusted signature or no
                        signature
  --arch ARCH           Temporarily override architecture, to be combined
                        with --root
  --cache-dir CACHEDIR  Temporarily override the cache directory
  --cache-max-age AGE   Maximum AGE (in minutes) for index in cache before
                        it's refreshed
  --force-binary-stdout
                        Continue even if binary data will be printed to the
                        terminal
  --force-broken-world  Continue even if WORLD cannot be satisfied
  --force-non-repository
                        Continue even if packages may be lost on reboot
  --force-old-apk       Continue even if packages use unsupported features
  --force-overwrite     Overwrite files in other packages
  --force-refresh       Do not use cached files (local or from proxy)
  --keys-dir KEYSDIR    Override directory of trusted keys
  --no-cache            Do not use any local cache path
  --no-network          Do not use the network
  --no-progress         Disable progress bar even for TTYs
  --print-arch          Print default arch and exit
  --progress            Show progress
  --progress-fd FD      Write progress to the specified file descriptor
  --purge               Delete modified configuration files on package
                        removal and uninstalled packages from cache on cache
                        clean
  --repositories-file REPOFILE
                        Override system repositories, see repositories
  --wait TIME           Wait for TIME seconds to get an exclusive repository
                        lock before failing

apk search を使ってパッケージを検索する

早速、 dig コマンドが内包されているパッケージを探してみます。
( 先程もWebから検索した結果からわかるとおり、 apk では bind-tools というパッケージに dig コマンドが内包されていました。 )

/ # apk search dig
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: No such file or directory
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/community: No such file or directory

警告が表示されてしまいました。
apk search コマンドを利用するためには、一度 apk update してパッケージ情報を更新する必要があるようです。

/ # apk search dig
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: No such file or directory
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/community: No such file or directory
/ # apk update
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
v3.13.5-127-g92dd8b922b [https://dl-cdn.alpinelinux.org/alpine/v3.13/main]
v3.13.5-127-g92dd8b922b [https://dl-cdn.alpinelinux.org/alpine/v3.13/community]
OK: 13888 distinct packages available

/ # apk search dig
vboot-utils-6310032-r4
djvulibre-3.5.28-r0
perl-digest-sha1-doc-2.13-r13
perl-digest-hmac-1.03-r2
apache2-utils-2.4.46-r3
alsa-tools-1.2.2-r0
perl-digest-md5-doc-2.58-r0
alsa-tools-gui-1.2.2-r0
ntpsec-1.2.0-r1
vis-0.7-r0
kup-0.8.0-r1
perl-digest-md5-2.58-r0
perl-digest-sha1-2.13-r13
pdns-tools-4.3.1-r2
bind-tools-9.16.15-r1
cyrus-sasl-digestmd5-2.1.27-r10
xapian-omega-1.4.17-r0
perl-digest-jhash-0.10-r1
libselinux-utils-2.8-r0
knot-utils-3.0.5-r0
rt4-4.4.4-r3
perl-digest-hmac-doc-1.03-r2
perl-digest-bubblebabble-doc-0.02-r4
sofia-sip-1.13.2-r0
perl-digest-jhash-doc-0.10-r1
heimdal-libs-7.7.0-r4
nagios-plugins-dig-2.3.2-r1
perl-digest-bubblebabble-0.02-r4
xbps-0.59.1-r0
perl-digest-perl-md5-1.9-r3
perl-digest-perl-md5-doc-1.9-r3
freeradius-3.0.21-r7
john-1.9.0-r2

bind-tools が検索結果として見つかりましたね。めでたしめでたし(と言いたいところですが、結果が見にくいですね^^;)。

apk search の検索結果をもう少し詳しく・見やすくする

このままだとどのパッケージが最適かわかりにくいため、 --verbose オプションを付与します。

/ # apk search --verbose dig
vboot-utils-6310032-r4 - Chromium OS vboot utilities
djvulibre-3.5.28-r0 - Utilities and Libraries for the DjVu image format
perl-digest-sha1-doc-2.13-r13 - Perl interface to the SHA-1 algorithm (documentation)
perl-digest-hmac-1.03-r2 - Keyed-Hashing for Message Authentication Perl module
apache2-utils-2.4.46-r3 - Apache utility programs for webservers
alsa-tools-1.2.2-r0 - Advanced tools for certain sound cards
perl-digest-md5-doc-2.58-r0 - Perl interface to the MD-5 algorithm (documentation)
alsa-tools-gui-1.2.2-r0 - Advanced tools for certain sound cards (GUI tools)
ntpsec-1.2.0-r1 - NTP reference implementation, refactored for security
vis-0.7-r0 - Modern, legacy free, simple yet efficient vim-like editor
kup-0.8.0-r1 - A KDE bup backup software for helping people to keep up-to-date backups
perl-digest-md5-2.58-r0 - Perl interface to the MD-5 algorithm
perl-digest-sha1-2.13-r13 - Perl interface to the SHA-1 algorithm
pdns-tools-4.3.1-r2 - PowerDNS Authoritative Server
bind-tools-9.16.15-r1 - The ISC DNS tools
cyrus-sasl-digestmd5-2.1.27-r10 - Cyrus SASL plugin for digestmd5
xapian-omega-1.4.17-r0 - Indexers and CGI search frontend for Xapian
perl-digest-jhash-0.10-r1 - Perl extension for 32 bit Jenkins Hashing Algorithm
libselinux-utils-2.8-r0 - SELinux libselinux utilies
knot-utils-3.0.5-r0 - Knot and DNS client utilities shipped with the Knot DNS server
rt4-4.4.4-r3 - Request Tracker - issue and bug tracker
perl-digest-hmac-doc-1.03-r2 - Keyed-Hashing for Message Authentication Perl module (documentation)
perl-digest-bubblebabble-doc-0.02-r4 - Create bubble-babble fingerprints (documentation)
sofia-sip-1.13.2-r0 - RFC3261 compliant SIP User-Agent library
perl-digest-jhash-doc-0.10-r1 - Perl extension for 32 bit Jenkins Hashing Algorithm (documentation)
heimdal-libs-7.7.0-r4 - Heimdal libraries
nagios-plugins-dig-2.3.2-r1 - Nagios plugin check_dig
perl-digest-bubblebabble-0.02-r4 - Create bubble-babble fingerprints
xbps-0.59.1-r0 - The X Binary Package System
perl-digest-perl-md5-1.9-r3 - Perl Implementation of Rivest's MD5 algorithm
perl-digest-perl-md5-doc-1.9-r3 - Perl Implementation of Rivest's MD5 algorithm (documentation)
freeradius-3.0.21-r7 - RADIUS (Remote Authentication Dial-In User Service) server
john-1.9.0-r2 - John the Ripper password cracker

少しだけ加工してやることで随分見やすくなります。

/ # apk search --verbose dig | while read -r P _ O; do printf "%-50s\\t%s\\n" "${P}" "${O}"; done
vboot-utils-6310032-r4                                  Chromium OS vboot utilities
djvulibre-3.5.28-r0                                     Utilities and Libraries for the DjVu image format
perl-digest-sha1-doc-2.13-r13                           Perl interface to the SHA-1 algorithm (documentation)
perl-digest-hmac-1.03-r2                                Keyed-Hashing for Message Authentication Perl module
apache2-utils-2.4.46-r3                                 Apache utility programs for webservers
alsa-tools-1.2.2-r0                                     Advanced tools for certain sound cards
perl-digest-md5-doc-2.58-r0                             Perl interface to the MD-5 algorithm (documentation)
alsa-tools-gui-1.2.2-r0                                 Advanced tools for certain sound cards (GUI tools)
ntpsec-1.2.0-r1                                         NTP reference implementation, refactored for security
vis-0.7-r0                                              Modern, legacy free, simple yet efficient vim-like editor
kup-0.8.0-r1                                            A KDE bup backup software for helping people to keep up-to-date backups
perl-digest-md5-2.58-r0                                 Perl interface to the MD-5 algorithm
perl-digest-sha1-2.13-r13                               Perl interface to the SHA-1 algorithm
pdns-tools-4.3.1-r2                                     PowerDNS Authoritative Server
bind-tools-9.16.15-r1                                   The ISC DNS tools
cyrus-sasl-digestmd5-2.1.27-r10                         Cyrus SASL plugin for digestmd5
xapian-omega-1.4.17-r0                                  Indexers and CGI search frontend for Xapian
perl-digest-jhash-0.10-r1                               Perl extension for 32 bit Jenkins Hashing Algorithm
libselinux-utils-2.8-r0                                 SELinux libselinux utilies
knot-utils-3.0.5-r0                                     Knot and DNS client utilities shipped with the Knot DNS server
rt4-4.4.4-r3                                            Request Tracker - issue and bug tracker
perl-digest-hmac-doc-1.03-r2                            Keyed-Hashing for Message Authentication Perl module (documentation)
perl-digest-bubblebabble-doc-0.02-r4                    Create bubble-babble fingerprints (documentation)
sofia-sip-1.13.2-r0                                     RFC3261 compliant SIP User-Agent library
perl-digest-jhash-doc-0.10-r1                           Perl extension for 32 bit Jenkins Hashing Algorithm (documentation)
heimdal-libs-7.7.0-r4                                   Heimdal libraries
nagios-plugins-dig-2.3.2-r1                             Nagios plugin check_dig
perl-digest-bubblebabble-0.02-r4                        Create bubble-babble fingerprints
xbps-0.59.1-r0                                          The X Binary Package System
perl-digest-perl-md5-1.9-r3                             Perl Implementation of Rivest's MD5 algorithm
perl-digest-perl-md5-doc-1.9-r3                         Perl Implementation of Rivest's MD5 algorithm (documentation)
freeradius-3.0.21-r7                                    RADIUS (Remote Authentication Dial-In User Service) server
john-1.9.0-r2                                           John the Ripper password cracker

ひとこと

当エントリは 一度バージョン 2.10.4 を利用していた内容で書かれていましたが、、バージョン 2.12.5 を利用した内容に変更してあります。
コマンドオプションやヘルプで表示される情報が大きく変更になっていました。

2021-05-23Bash,Docker,Linux