DebianLive/Build-HOWTO-for-the-Impatient

松本成司 Seiji Matsumoto (matsu AT johnen.shinshu-u.ac.jp)

このページは、Debian Live System を使ったライブ・システム構築のメモの簡易版です。 Debian GNU/Linux stable (lenny), testing (squeeze) あるいは unstable (sid) 上での作業を前提としています (squeeze,sid で作業する場合はこちらのメモもご覧ください)。

詳しくは本家の説明 や live-helper の manpage などを参考にしてください。 感想やお気づきの点があれば松本まで連絡をいただけると幸いです。

目次

必要なツールのインストール

# apt-get install live-helper live-initramfs qemu wodim

ビルドに必要なツールは live-helper と live-initramfs というパッケージに含まれています。qemu はビルドしたイメージをテストするためのエミュレータ、wodim は CDやDVDにイメージを焼くためのツールです。

lh_config で設定

まず作業ディレクトリを用意してそこに移動します。 以下の例では debian-live というディレクトリ名になっていますが、何でもかまいません。 700MBくらいのイメージを作成する場合には、最低でも 4GB くらいの空き容量が必要です。

$ mkdir debian-live
$ cd debian-live

このディレクトリで lh_config というツールを使って必要な設定を行っていきます。 (ただし squeeze, sidの live-helper live-build ではコマンドが変更になり、lh_config の代わりに lb config になりました。同様に以下の lh_build, lh_clean などのコマンドも廃止されて lb というコマンドに統一され、config, build, clean などは lb の最初の引数になりました -- 2009年12月16日追記,2010年10月6日訂正)

lh_config を使えば個々の設定ファイルを手で編集する必要はありません。 lh_config を実行する際には同時に複数のオプションを指定することができますが、以下では説明をわかりやすくするため一つの設定(一つのオプション)に対して lh_config を一回ずつ走らせています。

まずdebファイルをダウンロードするミラーサイトを指定します。 以下の ftp.jp.debian.org をお近くのミラーサイトに置き換えてください。

$ lh_config --mirror-bootstrap "http://ftp.jp.debian.org/debian/"
$ lh_config --mirror-chroot "http://ftp.jp.debian.org/debian/"
$ lh_config --mirror-binary "http://ftp.jp.debian.org/debian/"

言語やブート時のパラメータを指定します。

$ lh_config --language ja
$ lh_config --bootappend-live "locale=ja_JP.UTF-8 keyb=jp kmodel=jp106"

(squeeze では keyb や kmodel は無視され klayout=jp だとうまくいきました -- 2010年4月2日追記)

USBメモリのライブイメージを作成する場合には、データを保存できるように persistent オプションもブートパラメータにいれておきます (ついでに noprompt も quickreboot というオプションを指定しておくと再起動時のメディアの取り外しの確認が省略されます*1 )。もちろんCD用イメージの作成時でも、別途データ保存用のメディアを用意する場合には persistent オプションを指定しておきます。

$ lh_config --bootappend-live "locale=ja_JP.UTF-8 keyb=jp kmodel=jp106 persistent quickreboot"

バイナリの形式を指定します。CDに焼く場合は、

$ lh_config --binary-images iso

一方、USBメモリの場合は、

$ lh_config --binary-images usb-hdd

さらにディストリビューション (lenny, squeeze または sid) とセクション (main,contrib,non-free) を指定します。

$ lh_config --distribution lenny
$ lh_config --categories "main contrib non-free"

(ただし squeeze,sid 上でのセクション指定のオプションは --categories のかわりに --archive-areas を使ってください。-- 2010年2月26日追記)

つぎにパッケージリストを指定します。 gnome, kde, lxde, xfce など、 /usr/share/live-helper/lists/ に用意されているリストをそのまま使う場合には、単に

$ lh_config --packages-lists リスト名

と指定します。複数のリストを指定する場合には"(ダブルコーテーション)で囲みます。

ところで、日本語関連のパッケージについては、日本語taskを使って

$ lh_config --tasks "japanese-desktop"

のように指定すれば通常のインストールと同様に日本語デスクトップ環境が揃います。 ただ、japanese-desktop 自体は標準的なデスクトップ環境を想定しているようで openoffice や gnome なども一緒にインストールされてしまうので、イメージのサイズを気にしなければならない場合には少し使いづらいかもしれません。そこで、以下では japanese-desktop を使わずにパッケージリストを自作する方法を紹介します。他のリストを自作する場合も同じです。

自作のリストは作業ディレクトリの下にある config/chroot_local-packageslists/ に保存します。

あらかじめ以下の例のような日本語関連で必要そうなパッケージのリストを japanese というファイル名でこのディレクトリに作成しておくと便利です (squeeze,sid 上では パッケージリスト名には japanese.list のように .list という拡張子をつけることになりました 2010年2月26日追記)。 とりあえず以下のリストをコピーして、他のリストからインクルードしておけば、anthy + uim による日本語入力なども可能になります (日本語化については http://wiki.debian.org/JapaneseEnvironment にまとまった情報があります)。

# japanese env
# save this file as "config/chroot_local-packageslists/japanese"

uim
uim-anthy
unifont
xfonts-a12k12
xfonts-intl-japanese
xfonts-intl-japanese-big
xfonts-unifont 
ttf-sazanami-gothic
ttf-sazanami-mincho
ttf-vlgothic
lv
nkf
#if CATEGORIES non-free
xpdf-japanese
#endif

次にデスクトップ環境やインストールしたいパッケージを指定します。 例えば Xfce を使う場合には、/usr/share/live-helper/lists/ の中に xfce というファイルあるので、これを include した次のようなファイルを作り、 config/chroot_local-packageslists/xfce-ja として保存します (名前は適当に)。squeeze, sid では xfce-ja.list などにしてください。 他のデスクトップ環境 (gnome や kde) の場合も同様です (リストを自作する際には /usr/share/live-helper/lists/ の中にあるサンプルを参考に)。 先ほど作成した japanese も include しておきます (#include で指定できるのは /usr/share/live-helper/lists/ と config/chroot_local-packageslists/ 内のファイル)。ただし、squeeze/sid 上で作業している場合は、config/chroot_local-packageslist/ 内にある *.list というファイルはすべて自動的に登録されるのでわざわざ include する必要はありません。

#include <xfce>
#include <japanese>

# miscellaneous Xfce4 packages
xfce4-goodies
xfce4-places-plugin 
thunar-volman
xfmedia

# misc
iceweasel-l10n-ja
mozilla-plugin-gnash
w3m
xterm
less
openssh-client
xpdf

このリストを config/chroot_local-packageslists/xfce-ja というファイル名で保存して、lh_config でこのパッケージリストを指定します。

$ lh_config --packages-lists xfce-ja

(ただし squeeze,sid 上では、このローカルディレクトリにあるリストは自動的にすべて登録されるのでこの操作は不要です。2010年2月26日追記)。

この例では、xfce-ja から japanese というリストを include しましたが、別の方法として include せずに

$ lh_config --packages-lists "xfce japanese mylist ... "

のように独立した複数のパッケージリストを一緒に指定することもできます。まあ、パッケージリスト間の依存性・独立性の度合いから判断してメンテナンスしやすいほうの方法を選べばよいと思います。いずれにしてもこの操作は、squeeze,sid 上では不要になり、このコマンドを使うのはデフォルトで配布されているリストを使うときだけのようです (2010年2月26日追記)。

あとリストに入れなかったパッケージでインストールしたいものがあれば追加します。例えば

$ lh_config --packages "nqc g++ wodim"

これらのコマンドは一度走らせると、前の設定を上書きしてしまうので注意してください。

次にカスタマイズした設定ファイルや Debian のパッケージ管理ツールで管理されていないファイルを config/chroot_local-includes/ 以下にコピーします (デフォルトの設定のままでよい場合にはこの作業は不要です)。 例えば、現在使っている /etc/bash.bashrc や /etc/skel/ 以下の初期設定ファイル、 /usr/local/bin/ 以下のファイルなどをビルドするイメージにも入れておきたい場合には、

$ mkdir -p config/chroot_local-includes/etc/
$ cp /etc/bash.bashrc config/chroot_local-includes/etc/
$ cp -a /etc/skel/ config/chroot_local-includes/etc/
$ mkdir -p config/chroot_local-includes/usr/local/
$ cp -a /usr/local/bin/ config/chroot_local-includes/usr/local/

のような感じでコピーします。

lh_build でビルド

root になって次のコマンドを一発たたくと、それだけでディスクイメージをビルドしてくれます。

$ su
# lh_build

これでDebian LiveのCDのイメージ (binary.iso) あるいは USBメモリのイメージ (binary.img) がカレントディレクトリにできるはずです。

ちなみに、2008年9月に某ストアで12,800円で購入した激安サーバ (Celeron 430 - 1.8GHz, 512MB RAM, HD 80GB) を使ってここで紹介した設定例のままビルドした場合、deb ファイルのダウンロード時間を除いて20分程度かかりました*2。一方 X61 (T7500 - 2.2GHz, 4GB RAM) では、12分程度でした。 出来上がったディスクイメージは約400MB、作業ディレクトリはこのイメージを含めて最終的に約2.4GBになりました。

設定を変更して再度ビルドする際には、ビルドの前に lh_clean を実行してください。 ただし lh_clean では config/ 以下のローカルファイルは削除されないので、不必要になったローカルな(=自分でコピーした)ファイルなどは手で削除する必要があります。

# lh_clean --all
# lh_build

また --all オプションをつけてもダウンロードした deb ファイルは cache/packages_chroot/ に残っているので 2回目以降はダウンロード時間が短縮されるはずです。

qemuでテスト

$ qemu -cdrom binary.iso

または

$ qemu -hda binary.img

デフォルトでは qemu が使用するメモリは 128MB ですが、作業マシンに余裕があれば以下のように 256MBくらいは用意したほうが快適なエミュレーションができます。

$ qemu -m 256 -hda binary.img

CD や USBメモリへの書き込み

CDに書き込む場合は、例えば、

# wodim -eject binary.iso

とします。一方USBメモリに書き込む場合は、マウントしていない状態で、例えば

# dd if=binary.img of=/dev/sdb

のように of= で書き込み先のUSBメモリのデバイス名を指定します (この例では /dev/sdb)。 このときUSBメモリ内のデータはすべて消去されてしまうので注意してください。 (dd で bs=1024k などのオプションをつければコピーのスピードが速くなると思います)。 このイメージはパーティション情報まで含んだイメージなので、書き込み先が /dev/sdb1 ではなくて /dev/sdb になっていることに注意してください。

ddでイメージを書き込むと、USBメモリには新しいパーティションが一つ切られて (例えば /dev/sdb1)、残りは空き領域となっています。 ユーザのデータもこのUSBメモリに保存したい場合には、 この後に home 用のパーティションを追加します。 そのためには cfdisk などのツールを使ってその空き領域に Linux のパーティション (ext3 など) を追加し、そのボリューム名を home-rw にします (別のUSBメモリなどのストレージでもボリューム名を home-rw にしておけばOKです)。 そうすることで起動時にそのパーティションを /home として自動的にマウントしてくれます。

# cfdisk /dev/sdb
# mkfs.ext3 /dev/sdb2 -L home-rw

これでライブUSBメモリのできあがりです。簡単!

ちなみに /home だけでなく、/ 以下の変更をすべて保存しておきたい場合には、ボリューム名を live-rw にします。これでイメージとの差分が保存されるので、パッケージを追加したい場合や /usr/local/ をカスタマイズしたい場合には便利です。

参考リンク

2008年10月24日からのこのページのだいたいの訪問者数: 本日1 昨日0 合計1318


*1 CDの場合には noprompt というオプションを指定しておけばCDの取り出し確認はされません
*2 メモリを8GBに増設してRAMディスク上で作業すると12分程度に大幅に短縮されました。パッケージの展開やインストールは劇的に速くなりました。さらに CPUを Q8200に乗せ替えると squashfs を作成する時間が短縮され、6分半ほどでビルドが完了しました

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-03-31 (日) 11:39:24 (2338d)