自分で構築した独自のLinux環境を起動する Live-Helperに
ついて書きたいと思います。
この手のツールにはRemastersysやその他のツールがあるようです
が、Live-Helperの良いところは
【最小構成の軽量Linux環境を独自にカスタマイズ出来る】
という点です。
現在Live-Helperは情報が雑然としており、バージョンアップ
による仕様変更が多発し、本家の英語ドキュメント(公式)
さえも間に合っていない程活発に開発されているようです。
以前作業環境として、Debianをインストールして、Debian上で
Live-Helperを動かしてみたんですが、上手くいかずに挫折した
ので、今回はUbuntu 10.10(Desktop版)を使用して見ることに
しました。結果上手くいったので手順を載せてみます。
1. Live-Helperのインストール
下記コマンド一発で楽々インストール
apt-get -y install live-helper
2. バージョンの確認
前述のとおりバージョンによって仕様が違う為確認しておきます。
Ubuntuのバージョン
cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=10.10 DISTRIB_CODENAME=maverick DISTRIB_DESCRIPTION="Ubuntu 10.10"
次にLive-Helperのバージョン
dpkg -l | grep live-helper ii live-helper 2.0~a21-1 Debian Live - System Build Scripts (transitional package)
Live-Helperはapt-getでいれたものです。
☆注意
Debian(lenny)のLive-Helperはバージョンが古く、
lh_config コマンド(アンダーバーが間にくる)や
lh_build コマンドになっています。
UbuntuのLive-Helperはバージョンが新しく、
lh config コマンド(スペースが間にくる)や
lh build コマンドになっています。
3. 作業環境の構築
私は /root/ 直下に work というディレクトリを作成してrootで作業しました。
mkdir -v /root/work cd /root/work/
UbuntuからLive-Helperを利用すると、Ubuntu Live USB Linuxを
作成するか、Debian Live USB Linuxを作成するか選べます。
最初Ubuntu Live USB Linuxを作成してみたのですが、なぜか
原因不明ですがテスト起動した際に正常に起動できず
(initramfs)> みたいなプロンプト表示になってしまったので
諦めてDebian Live USB Linuxを作成してみました。
4. 最小限の構成でテスト
以下のコマンドで最小構成のDebian Live USB Linuxが出来上がります。
lh config --mode debian -b usb-hdd lh build
たった上記2コマンド。
-b usb-hdd の指定は、USBメモリから起動できるイメージを作成する
際に利用する引数です。VMware Player等の仮想環境でとりあえず
テストして、上手くいったらUSBメモリ用のイメージを作成する
という作り方をすれば、いちいち本物のUSBメモリに書き込んで
テストする手間が省けるため、通常は上記ではなく下記で
テストします。
lh config --mode debian -b iso lh build
カレントディレクトリ内に [binary.iso] というファイルが出来上がる
ので、このイメージファイルを仮想環境でテスト起動してみます。
上手くいけばとりあえず第一段階はクリアです。
5. カスタマイズ
4.の要領でビルド出来るようになったら、今度は自分好みにカスタマイズ
してみます。
以後は、ビルド(lh build)しなおす度にビルド直前に下記コマンドを実行してからビルドします。
lh clean
カスタマイズする方法は色々あるようですが、私はなるべくシンプルに
出来るように、設定をシェルスクリプトに全部書くことにしました。
vim /root/setup.sh
#!/bin/sh # --mode ubuntu は上手くいかないので --mode debian でテスト lh config --language ja --bootappend-live \ "locale=ja_JP.UTF-8 klayout=jp quickreboot" \ --packages "screen partimage vim less ssh lsof" \ --mode debian \ --distribution lenny \ --username falcon \ --hostname falcon-system \ --mirror-bootstrap "http://ftp.jp.debian.org/debian/" \ --mirror-binary "http://ftp.jp.debian.org/debian/" \ --mirror-chroot "http://ftp.jp.debian.org/debian/" \ --mirror-chroot-security "http://security.debian.org/" \ --mirror-binary-security "http://security.debian.org/" \ --iso-volume falconLive \ --syslinux-timeout 10 \ --syslinux-splash "config/binary_syslinux/falcon.jpg" \ --binary-images usb-hdd \ --archive-areas "main contrib non-free"
chmod a+x ../setup.sh
lh config コマンドの引数について順次説明します。
【省略形】|【フルスペル】
説明 or コメント
の要領で書きます。
-l|--language ja
言語設定を日本語に設定。
--bootappend-live "locale=ja_JP.UTF-8 klayout=jp quickreboot"
Live Linux起動時のBootパラメータ指定。
locale=ja_JP.UTF-8 で日本語のロケールを設定
klayout=jp ←非常に重要。情報が混乱している為
サイトによっては kmodel=ja keyb=jp106 等があるが
今回のバージョンでは、日本語のキーレイアウトに設定
したいなら、klayout=jpのみを指定する。
この指定により、下記コマンドと同等の効果が得られる模様
dpkg-reconfigure console-data
[qwerty]→[jp106]キーボードを選択
起動後のLive Linuxで適切なキーマップになる。
quickreboot で再起動時のメディアの取り外しの確認を省略できる。
ちなみに persistent をつけてしまうとBug#500672
に遭遇し、正常に起動することができない。←ハマりました。
-p|--packages "screen partimage vim less ssh lsof"
Live Linux環境へインストールするパッケージを記述。
とりあえずテストで適当にいれてみた。 ssh を入れることで
Live Linux起動時に自動的にsshサーバが立ち上がるので遠隔ログイン可能に。
--mode debian
"debian"と"emdebian"と"ubuntu"が指定可能。今回はdebianで。
-d|--distribution lenny
今回は--mode debianなので、 lenny or squeeze or sid のどれかを指定出来ると思う。
--mode ubuntu だとUbuntuの開発コードネームを指定するのかなと。
安定した環境で構築したいので現在の安定版 lenny を選択する。
--username falcon
Live Linux起動時に自動的にログインするユーザ名。falconにしましたw
なお、パスワードは自動的に "live" になります。このパスワードを変更してビルドする方法
はちょっとまだ調べきれていません。知っている人教えてください><
--hostname falcon-system
Live Linuxのホスト名を設定する。falcon-systemにしましたw
Sambaをインストールすれば NetBIOS経由でLAN内でホスト名による名前解決が出来そうですね。
-m|--mirror-bootstrap "http://ftp.jp.debian.org/debian/"
--mirror-binary "http://ftp.jp.debian.org/debian/" --mirror-chroot "http://ftp.jp.debian.org/debian/" --mirror-chroot-security "http://security.debian.org/" --mirror-binary-security "http://security.debian.org/"
Live-Helperスクリプトからパッケージを拾いに行くサーバの指定
及びLive Linux起動時の /etc/apt/sources.list ファイルの内容指定。
この辺は --mode debian を選んだなら日本のdebianサイトを指定。
--mode ubuntu の場合はUbuntuの日本サイトを指定する。
--iso-volume falconLive
メディアにコピーした際のボリューム名の指定。
この引数そのものを省略すると
(--modeで指定した値) (--distributionで指定した値) (イメージ作成時の日付)
という形で名前がつけられます。お好みで。
--syslinux-timeout 10
この引数を省略すると、Live Linux起動時にEnterキーを押下しない限りブートシーケンス
が走らない。放置してても自動的にKernelを起動する秒数を指定する。
--syslinux-splash "config/binary_syslinux/falcon.jpg"
この引数は省略して問題ありません。
Live Linux起動時の背景となる壁紙を指定します。
syslinuxなのでsyslinuxの壁紙に設定できる条件を満たした壁紙ファイルを作成する必要があります。
条件: 640x480 解像度で、 256色 .jpg or .png 画像だったかな。
-b|--binary-images usb-hdd
この引数を省略すると、自動的に iso が指定されたことになります。
ビルド時に、CD(光学メディア)焼き用のイメージファイルを作成するか
USBメモリコピー用のイメージファイルを作成するか、その他にも
iso-hybrid or net or tar
等が指定できるようですが、isoとusb-hdd だけ抑えておけばいいかなと。
今回はUSBメモリ用をつくるので、 usb-hdd を指定する。
--archive-areas "main contrib non-free"
apt-getで拾ってくる際のリポジトリ範囲にどのカテゴリに属する
ソフトウェアを含めるかを指定する。
この引数を省略すると main のみが指定されたことになります。
多くのソフトが欲しいのでフル指定しています。
重要:古いバージョンでは --categories という引数でしたが
今回のバージョンでは --archive-areas に変更されています
とりあえず現状はこんな感じです。
これで、ビルドする際は下記コマンドで
cd /root/work lh clean ../setup.sh lh build
これで、/root/work/の下に binary.img ファイルが生成されます。
--binary-images iso 指定していた場合は binary.iso が生成されます。
後は binary.iso の場合はライティングソフトでCDにISO焼きすれば出来上がり。
binary.img の場合は ddコマンドで
dd if=binary.img of=
とすれば書き込めます。USBメモリのデバイスの指定は
例えば
/dev/sdb
等になります。
/dev/sdb1
等とパーティション番号まで指定してしまわないようにご注意ください。
※USBメモリの中身は全て消えてしまいます。
Live Linux起動時に "home-rw" という名前のラベルがついたパーティションは
自動的に /home に書き込み可能でマウントされるという情報や
"live-rw"という名前のラベルがついたパーティションは
/ 以降全ての領域に書き込み可能で差分を保存できるという情報も
ネット上にはあるのですが、なぜか上手くいきませんでした。
既存のデータを削除せずラベル名だけ付けるには
tune2fs -L live-rw /dev/sdb2
パーティションをフォーマットする際にラベルをつけるには
mkfs.ext3 -L live-rw /dev/sdb2
等とします。
でも自動的にマウントしてくれないので、現状はfstabにラベル指定でごまかしています。
他にも色々テクニックがあるようですが、とりあえず今回はこの辺まで・・・。
【追記】
--mode debian
等の、ハイフン ハイフン とハイフンを2個連続で書くとブログの仕様で
ハイフンが1個に化けてしまっている箇所がありますのでご注意下さい。
記述ミスではありません。