EQQ.jp

Index


Alpine linux

Alpine linux (https://alpinelinux.org) は、省サイズながらソフトウェアパッケージのインストールが容易なリナックスディストリビューションとして注目されています。
特に、コンテナ用のベース OS として利用されています。

以下に、主だったベースディストリビューションとDockerイメージのサイズを挙げます。

ディストリビューションサイズ
BusyBox 0.8M
Alpine 2.8M
Ubuntu 27.8M
CentOS 74.2M

BusyBox は、ソフトウェアパッケージのインストールが容易でないので、拡張するのに手間がかかります。
Ubuntu や CentOS は、広く普及しており、拡張性もあるのですが、省サイズでは、Alpine にかないません。

Alpine は、apk という alpine package manager を使って、ソフトウェアパッケージを管理できます。
Linux の基本コマンドには BusyBox を用い、省サイズ化を図っています。
標準Cライブラリとして、musl を利用しており、他の多くのディストリビューションが利用している glibc とは異なっています。musl は、静的リンクなのに対し、glibc は動的リンクです。これは乱暴に言えば、musl で構築したアプリケーションの方が、様々なディストリビューションで動作しやすいということになります(gcc -static オプションを付けた場合)。

 

apk パッケージ管理

Alpine では、apk でソフトウェアパッケージを管理します。

apk について詳しくは、以下などを参照して下さい。
https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management

Alpine で利用できるソフトウェアパッケージは、https://pkgs.alpinelinux.org/ を参照してください。
リポジトリは、/etc/apk/repositories に書かれています。

主な、apk コマンドのオプションを挙げます。

apk オプション 内容
update リポジトリの内容更新
upgrade インストール済みパッケージ更新
list パッケージ一覧表示
info インストー済みのパッケージ一覧表示
stats パッケージ数などの情報表示
info -W FILE ファイルの属しているパッケージ表示
search PACKAGE パッケージを検索
info PACKAGE パッケージ情報表示
info -L PACKAGE パッケージに含まれるファイル表示
add PACKAGE パッケージ追加
del PACKAGE パッケージ削除
-sv fix インストール済みパッケージの修復
cache clean ローカルキャッシュのクリア

 

Singularity での環境構築の流れ

Singularity で alpine の環境を構築する場合、典型的には以下の様な流れになります。

Docker hub から、alpine のベースとなるディストリビューションをダウンロードして、サンドボックスを作成します。

$ sudo singularity build --fix-perms --sandbox alpine docker://alpine

サンドボックスを書き込み可能で起動します。

$ sudo singularity shell --writable alpine

必要な環境設定を行い、動作確認を行います。

Singularity> apk update
Singularity> apk upgrade
Singularity> apk add tzdata
Singularity> cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
Singularity> date
Singularity> exit

サンドボックスをイメージファイルに変換します。

$ sudo singularity build alpine.sif alpine

実行は、管理者でなくユーザ権限でも行えます。

$ singularity shell alpine.sif
Singularity> date

サンドボックスは、利用しなければ $ sudo rm -rf alpine などとして削除することができます。
イメージファイルから、サンドボックスを作ることも可能です。

$ sudo singularity build --sandbox alpine alpine.sif

構築をやり直したい場合は、イメージファイルを削除すればよいです。

環境構築の手順はファイルにして、一気に実行することができます。

上述手順と同じ内容を定義ファイル例(alpine.def)として作成します。

Bootstrap: docker
From: alpine

%post
        apk update
        apk upgrade
        apk add tzdata
        cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

構築は、fakeroot を使って、ユーザ権限で実行可能です。

$ singularity build --fakeroot alpine.sif alpine.def
$ singularity shell alpine.sif
Singularity> date

 

環境構築の部分を変えれば、様々な環境向けのシステムが容易に作成できます。

 

Alpine linux での構築例

以下、環境構築例の定義ファイルを挙げます。

[C 言語で SDL の開発環境例]

Bootstrap: docker
From: alpine
%post
	apk add alpine-sdk
	apk add linux-headers
	apk add xeyes
	apk add sdl-dev

 

[Jupyter notebook と Jupyter-lab の実行環境例]
Bootstrap: docker
From: alpine
%post
	apk add build-base
	apk add python3 py3-pip
	apk add python3-dev
	apk add libffi-dev
	pip install notebook
	pip install jupyterlab

$ singularity shell jupyterlab.sif
Singularity> jupyter notebook
Singularity> jupyter-lab