Alpine Linuxとは
なんでもbusyboxにやらせてしまう軽量Linuxです。軽量なのでDockerのコンポーネントに使われることも多いです。GUI?知らない子です。
※ この記事はWindows PC上での動作を想定しています。
Alpine LinuxのISOイメージ
Alpine Linuxのイメージは以下にあります。
通常はStandard ISOイメージを利用します。オフラインインストールの場合は、Extendを使うと良いでしょう。仮想OSにはVirtual ISOを使います。Virtualのイメージは40MBと桁外れに小さいです。
Alpine Linuxの特徴
メインのコマンドがbusyboxのシンボリックリンク
busyboxは組込用のコマンドで、lsもcpもなんでもかんでもbusyboxのシンボリックにすることでファイルサイズを小さくしています。実はこれは罠があります(挙動が若干異なります)
ちなみにinitramfsの/binの下を見るとshとbusyboxしかない。
シェルはbashではない。
Alpine Linuxは、ashと言うシェルを使っています。shと互換がありますが、bashと互換がありません。bash依存のスクリプトを動かしたい場合は、別途bashをインストールする必要あります。
Live USBを作る
- Windowsの場合、rafusでISOモードで書き込みます。
- Linuxは、公式参照
試しに拾ってきた1GBのUSB入れてみましたが十分動きます。
インストールする
Alpine Linuxはインストーラーの自動起動をしません。起動するとlogin画面が起動するだけです。rootでログインしてから、コマンドラインから
setup-alpine
――と打ち込むとインストール出来ますが、今回はしません。
Live USBに更新を反映させる
ここからが本番。
Alpine LinuxにはAlpine local backupと言うシステムがあります。Ubuntuのlive usbのperticient(casper-rw)と似たような事ができますが、
lbu commit
と打ち込まないと更新が反映されません。更新される範囲も/etc 他一部だけで、/rootとか/binなどは反映されないみたいです(/etc/lbu以下の設定を変えたり、lbu includeを使う方法があります)。lbuを動かす時は、最初に/etc/lbu/lbu.confを書き換える必要があります。
この更新ファイルは、ルートに localhost.apkov.tar.gzなどと言う名前で吐き出されるので手で直せます。これをカスタマイズに利用します。casper-rwと違いマウントが必要なく、tar.gzなので簡単に書き直せます。さらに同期しないので軽量です。
まず、日本の環境で実行する為には以下を実行。
## キーマップを変更
# setup-keymap
##タイムゾーンを変更
# setup-timezone
## 変更を保存
# lbu commit
日本語?知らない子
お手軽カスタムLive USB
空きメディアにapkファイルをぶち込みます。USBは/media/usbにマウントされます、
そこで/etc/inittab を書き換えます。
変更前
tty1::respawn:/sbin/getty 38400 tty1
変更後
tty1::respawn:/bin/sh /media/usb/init.sh 38400 tty1
先ほど書いた通り、lbu commitを実行しないと更新は反映されません。
それからinit.shに実行させるスクリプトを書きます(/media/usbはread onlyモードなので直接書き換えられません)。ここでは/media/usbを呼び出していますが、/etcの配下に於いてしまえば、起動後USBメモリを抜いても動作します。
ただし一回メモリを抜いてしまうと/media/usb以下は空になってしまうので注意。
- 起動後挙動がおかしい場合CTRL+ALT+F2でターミナルを切り替えて処理
これで面倒なカスタマイズ無しにHDDクリーナーなどが簡単に出来ます。
注意事項
例えば、ディスクシュレッダー擬きを作る時にshredを使いますが、Alpine Linuxのshredは、busyboxのシンボリックリンクです。busyboxのshredはファイルの消去以外が出来ませんしオプションも異なります。そこでGNU coreutilsを別途インストールする必要があります。
Alpine Linuxのパッケージマネージャーはapkで、インストールするときはaddを使います。
apk add coreutils
――とするとbusyboxではないGNU shredが使える様になります。
Alpine Linuxは軽量な分、ユーティリティを動かそうとするとライブラリが足りないケースがあると思われます
だが、それらのapkは起動時にインストールしてしまえば良い。小さいバイナリならインストール時間は誤差範囲(/etc/lbu以下の設定を変える方法もあります)
USBにextraフォルダを作成し、インストールするapkを投げ込んでおきます。
apk add --no-network --allow-untrusted --force-non-repository /media/usb/extra/*.apk
こうやってinit.shから強引にインストールしてしまうのです(パッケージが無いものは作るしかないけど)カスタマイズしないのでお気楽LiveUSBが作れます。
lbu package使うのが正しいやりかたな気もする……
※ ここでdockerとdocker-compose入れたら何でもありな気が……。