Linuxのパッケージシステムを知ろう第3回(宮崎悟氏)
前回は、Debian/Ubuntuなどで使用されるパッケージシステムについて説明しました。今回はAlpine Linuxで使用されるパッケージを説明します。
Alpine Linuxとは
Alpine Linuxは、「Small, Simple, Secure」を謳ったディストリビューションです。OS全体のサイズが小さく(100MB程度)、パッケージ更新も早いのが特徴です。busyboxをベースにしていること・glibcの互換ライブラリmuslを使用しているところも、サイズを小さく出来る要因です。OSサイズが小さいことから、Docker イメージのベースとして使用されることが多いです。
APK
Alpine Linuxでは、パッケージシステムとしてAPK(Alpine Package Keeper )を使用しています。Androidで使われるAPK(Android application PacKage)とは別のパッケージシステムです。
APKは、ネットワーク経由でパッケージのインストールすることが前提のパッケージシステムです。これはRHEL系やDebian系のディストリビューションと異なる部分です。
APKの操作はすべてapk コマンドで実施します。
apk add
apk add
はパッケージをインストールするコマンドです。以下のようにインストールします。
# apk add man
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/2) Installing mdocml (1.14.5-r1)
(2/2) Installing man (1.14.5-r1)
Executing busybox-1.31.1-r8.trigger
OK: 6 MiB in 16 packages
apk del
apk del
は、パッケージをアンイストールするコマンドです。以下のようにアンイストールします。
# apk del man
(1/2) Purging man (1.14.5-r1)
(2/2) Purging mdocml (1.14.5-r1)
Executing mdocml-1.14.5-r1.post-deinstall
Executing busybox-1.31.1-r8.trigger
OK: 21 MiB in 15 packages
仮想パッケージ
apk add
の特徴は仮想パッケージです。apk add
に -t name
もしくは--virtual name
オプションを指定すると、その時インストールした複数のパッケージがname
という仮想パッケージになります。アンインストール対象として仮想パッケージを指定すると、仮想パッケージをインストールしたときのすべてのパッケージが削除されます。
# apk add -t .man man man-pages
(1/4) Installing mdocml (1.14.5-r1)
(2/4) Installing man (1.14.5-r1)
(3/4) Installing man-pages (5.04-r0)
(4/4) Installing .man (20200105.124244)
Executing busybox-1.31.1-r8.trigger
OK: 22 MiB in 18 packages
# apk del .man
(1/4) Purging .man (20200105.124244)
(2/4) Purging man (1.14.5-r1)
(3/4) Purging mdocml (1.14.5-r1)
Executing mdocml-1.14.5-r1.post-deinstall
(4/4) Purging man-pages (5.04-r0)
Executing busybox-1.31.1-r8.trigger
OK: 6 MiB in 14 packages
この仮想パッケージは、Dockerイメージを作成する際に役に立ちます。例えば、イメージ作成時のみ必要なパッケージを仮想パッケージにしておきます。最後に仮想パッケージを削除することで、イメージサイズの縮小に役立ちます。
apk update/upgrade/cache
apk update
は、パッケージキャッシュをアップデートします。
apk upgrade
は、更新可能なパッケージをアップデートします。
apk cache clean
は、パッケージキャッシュの削除を行います。
apk list
apk list
コマンドは、パッケージリポジトリ上の全パッケージ一覧を表示します。引数に文字列(ワイルドカード可)を指定することで、正規表現にマッチしたパッケージの一覧を表示します。
# apk list
vulkan-loader-1.1.130-r0 x86_64 {vulkan-loader} (Apache-2.0)
hwids-udev-20191025-r0 x86_64 {hwids} (BSD-3-Clause OR GPL-2.0-or-later)
mariadb-static-10.4.10-r0 x86_64 {mariadb} (GPL-2.0-or-later)
imapsync-doc-1.882-r0 x86_64 {imapsync} (custom)
evince-lang-3.34.2-r0 x86_64 {evince} (GPL-2.0-or-later)
php7-intl-7.3.13-r0 x86_64 {php7} (PHP-3.01 BSD LGPL-2.0-or-later MIT Zend-2.0)
haxe-3.4.7-r1 x86_64 {haxe} (GPL MIT LGPL)
(以下略)
# apk list 'sha*'
sharutils-lang-4.15.2-r0 x86_64 {sharutils} (GPL-3.0+)
shaderc-static-2019.0-r1 x86_64 {shaderc} (Apache-2.0)
sharutils-4.15.2-r0 x86_64 {sharutils} (GPL-3.0+)
shadow-4.7-r1 x86_64 {shadow} (BSD-3-Clause)
shards-0.9.0-r1 x86_64 {shards} (Apache-2.0)
shadow-dbg-4.7-r1 x86_64 {shadow} (BSD-3-Clause)
shards-doc-0.9.0-r1 x86_64 {shards} (Apache-2.0)
shared-mime-info-doc-1.15-r0 x86_64 {shared-mime-info} (GPL-2.0-or-later)
shared-mime-info-1.15-r0 x86_64 {shared-mime-info} (GPL-2.0-or-later)
shadow-doc-4.7-r1 x86_64 {shadow} (BSD-3-Clause)
shaderc-dev-2019.0-r1 x86_64 {shaderc} (Apache-2.0)
shadow-uidmap-4.7-r1 x86_64 {shadow} (BSD-3-Clause)
shaderc-2019.0-r1 x86_64 {shaderc} (Apache-2.0)
sharutils-doc-4.15.2-r0 x86_64 {sharutils} (GPL-3.0+)
shared-mime-info-lang-1.15-r0 x86_64 {shared-mime-info} (GPL-2.0-or-later)
apk info
apk info
は現在インストールされているパッケージ一覧を表示します。
-v
を指定するとバージョン番号入りで表示します。-R パッケージ名
を指定すると、指定したパッケージが依存しているパッケージを表示します-r パッケージ名
を指定すると、指定したパッケージに依存しているパッケージを表示します-P パッケージ名
を指定すると、指定したパッケージが提供している情報を表示します
# 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 -v
musl-1.1.24-r0
busybox-1.31.1-r8
alpine-baselayout-3.2.0-r3
alpine-keys-2.1-r2
libcrypto1.1-1.1.1d-r2
libssl1.1-1.1.1d-r2
ca-certificates-cacert-20191127-r0
libtls-standalone-2.9.1-r0
ssl_client-1.31.1-r8
zlib-1.2.11-r3
apk-tools-2.10.4-r3
scanelf-1.2.4-r0
musl-utils-1.1.24-r0
libc-utils-0.7.2-r0
# apk info -R busybox
busybox-1.31.1-r8 depends on:
so:libc.musl-x86_64.so.1
# apk info -r musl
musl-1.1.24-r0 is required by:
busybox-1.31.1-r8
musl-utils-1.1.24-r0
zlib-1.2.11-r3
apk-tools-2.10.4-r3
libssl1.1-1.1.1d-r2
alpine-baselayout-3.2.0-r3
libcrypto1.1-1.1.1d-r2
libtls-standalone-2.9.1-r0
scanelf-1.2.4-r0
ssl_client-1.31.1-r8
# apk info -P musl
musl-1.1.24-r0 provides:
so:libc.musl-x86_64.so.1=1
終わりに
今回はAlpine Linuxで使用されるパッケージを説明しました。Alpine Linuxはコンテナ時代に必要となってくるディストリビューションです。apk を上手に使いましょう。
パッケージシステムを知ろうという連載はこれで終わりとなります。次の連載をお楽しみにお待ち下さい。
さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。