BSDユーザーによるAlpine Linux挑戦記
(rubenerd.com)-
Alpine Linuxの歴史
- Alpine Linuxは独立した非商用の汎用Linuxディストリビューションであり、セキュリティ、単純さ、リソース効率を重視するパワーユーザー向けに設計されている
- すべてのuserlandバイナリはPIE(Position Independent Executables)としてコンパイルされ、stack smashing protectionが適用されており、zero-day脆弱性などに関する攻撃クラス全体のエクスプロイトを事前に防いでいる
- 2005年にNatanael Copaがプロジェクトの開始を議論し、BSDと同様に組み込みシステム、ルーター、モバイル機器だけでなく、汎用サーバーやデスクトップでも使われている
- コンパクトなサイズと限定的な依存関係により、Linuxコンテナのベースとしても人気がある
chroot(8)で簡単に実行できるツールチェーンも提供されており、NetBSD chroots(8)やFreeBSD jailを広く使っている人には興味深い
-
Alpine Linuxのインストール
- ARM、PPC64、x86、x86_64向けビルドを含む複数のバージョンが提供されている
- インストール手順は非常に単純で、ライブ環境で
rootとしてログインし、setup-alpineを実行すればよい - キーマップ、ネットワーク、タイムゾーン、root認証などの基本的な質問を受け、最初からSSH鍵を注入することもできるため、オーケストレーションツールでVMやサーバー群を展開したり、メディアが提供されないホスティング事業者へ配備したりする際に便利である
- 好みのOpenSSHやopenntpdを選べるいくつかのSSHサーバーとNTPクライアントから選択でき、Xen上で動作していることも正確に識別する
- LVMを構成することもできるが、現時点では
ext4を使うAlpine標準のsysパーティションに従っている
-
インストール後の探索
- Alpineを最初に起動すると、特別な理由がわかる:
dmesg(1)がOpenRCを実行中だと教えてくれる - 移植性があり、小さく、速く、効率的で、透明性があり、安全である
- rcスクリプトを書くことに慣れたBSDユーザーには非常に親しみやすい
/etc/rc.confとcrond(8)の存在はうれしい- Devuan、Gentoo、AlpineなどのLinuxディストリビューションでこれが使われているのは非常に歓迎すべきことで、Linuxを再び楽しいものにしてくれる
- OpenRCに加えてmuslとbusyboxが同梱されており、基本システムのサイズと攻撃対象領域をさらに縮小している
- llvmと、好みの対話型シェルの1つであるMirBSD Kornシェルも利用できる
- Alpineを最初に起動すると、特別な理由がわかる:
-
パッケージ
- Alpineの標準パッケージマネージャーはapkで、Linuxで一般的なように基本システムとすべてのパッケージを分けずに更新を扱う
- BSDのように非特権コピーを実行できるか確認してみたいが、まだ試しておらず、pkgsrcもあるので問題にはならない
- 設定は
/etc/apk/repositoriesにあり、インストーラーが提示した2つ目のURLのコメントを外せばcommunityリポジトリを有効化できる - Alpineには
testingリポジトリもあり、独自のリポジトリを追加することもできる - 使い方は簡単だが、古い癖のせいで今でも
apk addの代わりにapt installと打ち間違えてしまう - 公式Webインターフェースがあり、Alpineのリポジトリはpkgs.orgにも掲載されている
- zfsパッケージが最も驚きで、カーネルモジュールのインストールとロードに必要だったのはたった2つのコマンドだけだった(ZFS rootはもっと複雑だろう)
-
結論
- まだ表面を少し触れただけだが、テストやサーバー向けの主要なLinuxディストリビューションとして切り替えることを真剣に検討するのに十分な理由がある
htop(1)とlsof(1)に認識されるプロセスがごく少ないこと、OpenRCを使っていること、パッケージ管理が簡単そうなこと、設定が非常に単純なことが気に入っている- モダンで実用的な「OccamのLinux」がどのようなものか気になっていたが、まさにこれだった
- busybox以上のものが必要ならuutilsが動くか確認してみたいが、サーバー用途では疑わしい
GN⁺の意見
-
Alpine Linuxはコンテナベースの配備に最適化されており、Dockerのようなコンテナプラットフォームで広く使われています。コンテナを活用したマイクロサービスアーキテクチャを実装する際に検討する価値のあるディストリビューションだと思います。
-
デフォルトでmusl libcを使う点は長所にも短所にもなり得ます。muslはglibcに比べて軽量でセキュリティ面に強みがありますが、一部のアプリケーションでは互換性の問題が起こる可能性があります。そのため、利用するアプリケーションの互換性を事前に確認しておく必要があります。
-
デフォルトシェルとしてashを使うのも特徴的です。ashはbashに比べて機能は限定的ですが、非常に軽量で高速なシェルであり、組み込みシステムのようなリソース制約のある環境では有用そうです。一方で、一般ユーザーにはやや不便かもしれません。
-
BSD系OSを主に使っている人にとっては、なじみやすい環境を提供するAlpine Linuxは魅力的に感じられるでしょう。ただ、現時点ではデスクトップ環境のサポートがまだ不十分に見えるため、サーバーや組み込み用途に適していそうです。
-
全体としてAlpine Linuxは軽量でセキュリティ重視のディストリビューションとして独自の存在感を持っているようです。ただし、独自エコシステムはそれほど大きくないため、問題発生時のコミュニティサポートがやや不足する可能性は考慮すべきでしょう。それでも、時間の経過とともにAlpine Linuxの利点によって、ますます多くのユーザーを獲得していくことが期待されます。
1件のコメント
Hacker Newsのコメント
要約:
LinuxバイナリはPIE(Position Independent Executable)としてコンパイルされており、セキュリティが高い
GLIBCはヒープ実装が最も堅牢化されており、二重解放などのヒープ脆弱性に対する緩和機能がより多い
Alpineはmuslを使用するため、GLIBCと比べてセキュリティが劣る。小さく理解しやすいシステムであることはセキュリティの助けになる
Illumos(OpenSolaris)は、数十年Linuxを使った後だと、あらゆるものがよりシンプルに感じられる
Solaris 10で動いていたものの大半は、少し手を加えるだけで現在でも適用できる
zoneはDockerコンテナより10倍優れており、ZFSサポートが組み込まれている
SMFでサービスを管理。XMLで構成するのが唯一の欠点
OmniOSとSmartOSサーバーの利用経験を共有
BSDユーザーとして、bhyveでAlpineを初めて動かしてみた
busyboxベースで、/bin、/sbinユーティリティが分離されたバイナリである必要がなく、ユーザー空間が小さく起動が速い
tmux、zshでほとんどのUnix用途には十分
多くのapkインストールが必要だったが、全体として最高のLinux体験だった
ZFSが組み込まれ、bhyve向けvirtioバインディングをサポートしてくれるとよい
Void LinuxもBSDユーザーにおすすめ。NetBSD開発者が作り、glibc/musl版がある。initシステムとしてrunitを使う
xbps-srcでソースからパッケージをビルドできるAlpineにはデフォルトでmanページが含まれていないため、使うのをためらう
パッケージインストール時にドキュメントを自動でインストールするオプションがあるのか気になる
DockerでのAlpineの性能に関する投稿がいくつかあった。Debian/Ubuntuの使用を推奨
この内容がまだ有効なのか気にしている
OpenRCなどが魅力的な理由が分からない。監督ベースの選択肢のほうがPIDファイル管理より優れていると思う
自動再起動しないことが利点だという点は認める
syslogに大きく依存するのも80年代の技術
複数ツールのイベント順序を知るための集中ビュー改善の必要性には同意
Alpineの利点: Nixなしで
/etc/apk/worldを編集した後、apk fixで宣言的なパッケージ管理が可能SlackwareはBSDとLinuxの折衷案。Unixらしく複雑ではない。Slackbuildsで豊富なportsツリーを提供
muslはpthread_attr_setaffinity_npをサポートしていないため、PyTorchなど一部ソフトウェアが実行できない