1
0

More than 3 years have passed since last update.

Alpine LinuxでLive USBを作る

Posted at

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入れたら何でもありな気が……。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0