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

このページは、[[Debian Live System を使ったライブ・システム構築のメモ>DebianLive/Build-HOWTO]]の簡易版です。
Debian GNU/Linux stable (lenny), testing (squeeze) あるいは unstable (sid) 上での作業を前提としています。
詳しくは[[本家の説明:http://wiki.debian.org/DebianLive]] や live-helper の manpage などを参考にしてください。

wheezy用に書き直しました(2013-03-20)

このページはDebianライブシステムの構築のメモです。
Debian GNU/Linux wheezy上での作業を前提としています。
lenny用やsqueeze用の古いメモは、[[lenny用>DebianLive/Build-HOWTO-for-the-Impatient-lenny]]や[[squeeze用>DebianLive/Build-HOWTO-for-the-Impatient-squeeze]]をご覧ください。

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


目次
#contents

* 必要なツールのインストール [#z4a79440]
* 必要なツールのインストール [#x3452cb4]

 # apt-get install live-helper live-initramfs qemu wodim
 # apt-get install live-build live-boot live-config apt-cacher-ng

ビルドに必要なツールは live-helper と live-initramfs というパッケージに含まれています。qemu はビルドしたイメージをテストするためのエミュレータ、wodim は CDやDVDにイメージを焼くためのツールです。
live-bootとlive-configはライブシステム用のpackageで、ホストシステム(ビルド作業用マシン)
には不要ですが、特に害もないのでインストールしておきます。
ライブ起動時のスクリプトがどうなっているのか調べるときに便利です。

* lh_config で設定 [#gf17bbbc]
また apt-cacher-ng はプロキシソフトで、複数回ビルドするときには(通常1回では済まない)あると便利です。イメージをテストしたり、CDやDVDにイメージを焼くためにはさらに、qemuなどもインストールしておきましょう。

 # apt-get install qemu wodim

* lb config で設定 [#he3ea5ba]

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

 $ mkdir debian-live
 $ cd debian-live

このディレクトリで lh_config というツールを使って必要な設定を行っていきます。
lh_config を実行する際には同時に複数のオプションを指定することができますが、以下では説明をわかりやすくするため一つの設定(一つのオプション)に対して lh_config を一回ずつ走らせています。
このディレクトリで必要な設定を行っていきます。
といっても実際には、

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

 $ 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/"
でイメージができあがってしまいます。基本的には lb config で設定、 lb build でビルドするだけです(ビルドは管理者権限で)。ただ、デフォルトのままだと日本語パッケージが入りません。以下の例では、日本のミラーサイトを使い、日本語の標準的なデスクトップ環境に加え、nqc と g++ を追加してUSBメモリ用のイメージを作る例を示します。

言語やブート時のパラメータを指定します。
lb config を実行する際には同時に複数のオプションを指定することができますが、以下では説明をわかりやすくするため一つの設定(一つのオプション)に対して lb config を一回ずつ走らせています。(ただし同じオプションを再度指定すると前の設定が上書きされるの注意)

 $ lh_config --language ja
 $ lh_config --bootappend-live "locale=ja_JP.UTF-8 keyb=jp kmodel=jp106"
まずプロキシの設定。プロキシを使わない場合は不要です。

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

 $ lh_config --bootappend-live "locale=ja_JP.UTF-8 keyb=jp kmodel=jp106 persistent quickreboot"
次にdebファイルをダウンロードするミラーサイトの設定。以下の ftp.jp.debian.org をお近くのミラーサイトに置き換えてください。指定しなければ、自動的に http://ftp.debian.org/debian/ になります。

バイナリの形式を指定します。CDに焼く場合は、
 $ lb config --parent-mirror-bootstrap "http://ftp.jp.debian.org/debian/"
 $ lb config --parent-mirror-binary "http://ftp.jp.debian.org/debian/"
 $ lb config --mirror-bootstrap "http://ftp.jp.debian.org/debian/"
 $ lb config --mirror-binary "http://ftp.jp.debian.org/debian/"
 $ lb config --mirror-chroot "http://ftp.jp.debian.org/debian/"

 $ lh_config --binary-images iso
ロケールやキーボードなどの設定はブート時のパラメータとして指定します。

一方、USBメモリの場合は、
 $ lb config --bootappend-live \
       "boot=live config persistence noeject live-config.utc=no \
        live-config.locales=ja_JP.UTF-8 \
        live-config.keyboard-model=jp106 \
        live-config.keyboard-layouts=jp"

 $ lh_config --binary-images usb-hdd
USBメモリなどにデータ(ライブイメージとの差分)を保存できるように persistence オプションもブートパラメータにいれておきます。ついで noeject というオプションを指定しておくと再起動時のメディアの取り外しの確認が省略されます。

さらにディストリビューション (lenny, squeeze または sid)、セクションを指定します。
バイナリの形式は、デフォルトではiso-hybridになっていますので、CD,DVDだけでなくUSBメモリ用のイメージとしても使用できます。もし何らかの理由で起動に失敗する場合には、次のようにしてバイナリ形式を指定します。CD/DVDに焼く場合は、

 $ lh_config --distribution lenny
 $ lh_config --categories "main contrib non-free"
 $ lb config --binary-images iso

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

 $ lh_config --packages-lists リスト名
 $ lb config --binary-images hdd

と指定すれば良いのですが、これだと日本語関連のパッケージが入らないので((japanese-desktop を tasksel で指定する方法もあります (lh_config --tasks "japanese-desktop")。ただ、japanese-desktop は標準的なデスクトップ環境を想定しているようで openoffice や iceweasel なども一緒にインストールされてしまうので、イメージのサイズを気にしなければならない場合には少し使いづらいかもしれません。))、次のようにしてパッケージリストを自作することにします。
(iso-hybrid で問題なければ、この設定は不要です)

自作のリストは作業ディレクトリの下にある config/chroot_local-packageslists/ に保存します。
さらにセクション (main,contrib,non-free) を指定します。

あらかじめ以下の例のような日本語関連で必要そうなパッケージのリストを japanese というファイル名でこのディレクトリに作成しておくと便利です。 
とりあえず以下のリストをコピーして、他のリストからインクルードしておけば、anthy + uim による日本語入力なども可能になります (日本語化については http://wiki.debian.org/JapaneseEnvironment にまとまった情報があります)。
 $ lb config --parent-archive-areas "main contrib non-free"
 $ lb config --archive-areas "main contrib non-free"

 # 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
 #ifdef CATEGORIES non-free
 xpdf-japanese
 #endif
ライブシステムに含めたいパッケージは、作業ディレクトリの下にある config/package-lists/ というディレクトリに .list.chroot という拡張子をつけたファイルに指定します。この時、言語環境も一緒に指定しておくと便利です。
たとえば、xfce-japanese.list.chroot というファイルに

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

 #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
 task-japanese
 task-japanese-desktop
 task-xfce-desktop
 nqc
 g++
 openssh-client
 xpdf

このリストを config/chroot_local-packageslists/xfce-ja というファイル名で保存して、lh_config でこのパッケージリストを指定します。
のように指定しておけばxfceを使った日本語デスクトップ環境が揃います。
gnomeやKDEの場合は、task-xfce-desktop の代りに task-gnome-desktop や
task-kde-desktop (と kde-l10n-ja) を追加しておけばよいでしょう。 

 $ lh_config --packages-lists xfce-ja
パッケージリストはいくつあってかまいません。メンテしやすいように適当に分類しておきましょう。
とにかく .list.chroot という拡張子のついたファイルを config/packages-lists/ に保存しておけば自動的に読み込まれてインストールされます。

この例では、xfce-ja から japanese というリストを include しましたが、別の方法として include せずに
ちなみに上記の task-japanese-desktop を指定しない場合には、あらかじめ日本語関連で必要そうなパッケージのリストを japanese.list.chroot というファイル名でこのディレクトリに作成しておくと便利です (日本語化については http://wiki.debian.org/JapaneseEnvironment にまとまった情報があります)。

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

のように独立した複数のパッケージリストを一緒に指定することもできます。まあ、パッケージリスト間の依存性・独立性の度合いから判断してメンテナンスしやすいほうの方法を選べばよいと思います。

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

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

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

次にカスタマイズした設定ファイルや Debian のパッケージ管理ツールで管理されていないファイルを config/chroot_local-includes/ 以下にコピーします
次にカスタマイズした設定ファイルや Debian のパッケージ管理ツールで管理されていないファイルを config/includes.chroot/ 以下にコピーします
(デフォルトの設定のままでよい場合にはこの作業は不要です)。
例えば、現在使っている /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/
 $ mkdir -p config/includes.chroot/etc/
 $ cp /etc/bash.bashrc config/includes.chroot/etc/
 $ cp -a /etc/skel/ config/includes.chroot/etc/
 $ mkdir -p config/includes.chroot/usr/local/
 $ cp -a /usr/local/bin/ config/includes.chroot/usr/local/

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

* lh_build でビルド [#i11729a2]
* lb build でビルド [#w2dfaaf0]

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

 $ su
 # lh_build
 $ sudo lb build

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

ちなみに、2008年9月に某ストアで12,800円で購入した激安サーバ (Celeron 430 - 1.8GHz, 512MB RAM, HD 80GB) を使ってここで紹介した設定例のままビルドした場合、deb ファイルのダウンロード時間を除いて20分程度かかりました((メモリを8GBに増設してRAMディスク上で作業すると12分程度に大幅に短縮されました。パッケージの展開やインストールは劇的に速くなりました。さらに CPUを Q8200に乗せ替えると squashfs を作成する時間が短縮され、6分半ほどでビルドが完了しました))。一方 X61 (T7500 - 2.2GHz, 4GB RAM) では、12分程度でした。
出来上がったディスクイメージは約400MB、作業ディレクトリはこのイメージを含めて最終的に約2.4GBになりました。
//ちなみに、2008年9月に某ストアで12,800円で購入した激安サーバ (Celeron 430 - 1.8GHz, 512MB RAM, HD 80GB) を使ってここで紹介した設定例のままビルドした場合、deb ファイルのダウンロード時間を除いて20分程度かかりました((メモリを8GBに増設してRAMディスク上で作業すると12分程度に大幅に短縮されました。パッケージの展開やインストールは劇的に速くなりました。さらに CPUを Q8200に乗せ替えると squashfs を作成する時間が短縮され、6分半ほどでビルドが完了しました))。一方 X61 (T7500 - 2.2GHz, 4GB RAM) では、12分程度でした。
//出来上がったディスクイメージは約400MB、作業ディレクトリはこのイメージを含めて最終的に約2.4GBになりました。

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

 # lh_clean --all
 # lh_build
 # lb clean --all
 # lb build

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

* qemuでテスト [#q1c91f17]
* qemuでテスト [#a2b72dbf]

 $ qemu -cdrom binary.iso

または

 $ qemu -hda binary.img

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

 $ qemu -m 256 -hda binary.img
 $ qemu -m 512 -hda binary.img

* CD や USBメモリへの書き込み [#fafc9c28]
* CD や USBメモリへの書き込み [#oca7e445]

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

 # wodim -eject binary.iso
 # wodim -eject binary.hybrid.iso

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

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

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

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

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

さらに persistence.conf というファイルをそのボリュームとトップに置きます。
中身は保存したいディレクトリを指定します。例えば

 # mount /dev/sdb2 /mnt
 # echo "/home" > /mnt/persistence.conf
 # umount /mnt

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

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

* 参考リンク [#n52d67d1]
 / union

- http://wiki.debian.org/DebianLive (本家)
と書いておきます。
これでイメージとの差分が保存されるので、パッケージを追加したい場合や /usr/local/ をカスタマイズしたい場合には便利です。 


* その他のカスタマイズ [#o272eb32]

** インストール終了後のhook [#e7e0e415]

インストール終了後、シェルコマンドを走らせたい場合には、シェルスクリプトとして config/hooks/ というディレクトリの中に .chroot (chroot環境で走らせる場合) または .binary (binary構築時に走らせる) という拡張子をつけて保存しておきます。

例えば、iceweaselをデフォルトのブラウザにしたい場合には

 #!/bin/sh
 
 # default browser
 update-alternatives --set x-www-browser /usr/bin/iceweasel

のような中身のファイルを、 config/hooks/90-custom.sh.chroot というファイル名で保存しておきます(ファイル名は適当に決めてください)。

** 独自のリポジトリを追加 [#k1c52cda]

config/archives/以下に foo.list.chroot と foo.list.binary のように .list.chroot、.list.binaryという拡張子をつけたファイル(中身は deb ライン)を置きます。内容は共に同じ。さらにGPGキーは foo.key.binary と foo.key.chroot としてコピーします。

** backports も含める [#yde63fbe]

 $ lb config --backports true

とした上で、config/apt/preferences に
 Package: *
 Pin: release n=wheezy-backports
 Pin-Priority: 600
のようなエントリを入れておけばよいでしょう。
このPINの設定をしておかないと、wheezy-backportsのパッケージへ自動的にアップグレードをしてくれません。

ミラーは、
 $ lb config --parent-mirror-chroot-backports URL
 $ lb config --parent-mirror-binary-backports URL
 $ lb config --mirror-chroot-backports URL
 $ lb config --mirror-binary-backports URL
として設定できますが、これらを設定しない場合には通常のwheezy用に設定したミラーから自動的にURLを設定してくれるようです。


** 起動メニューをカスタマイズする [#a4b680dd]

てっとり早い方法は binary/isolinux/live.cfg や binary/syslinux/live.cfg を上書きする方法です。
そのためにはカスタマイズしたlive.cfg (あるいは menu.cfg) を config/includes.binary/syslinux/live.cfg (あるいはconfig/includes.binary/syslinux/menu.cfg) として保存しておきます(isoの場合は config/includes.binary/isolinux/ 以下に)。

例えば、起動時に言語を選択できるようにするためには、live.cfgに起動パラメタを変更したエントリを複数書いておけばよいでしょう。

 label live-english-us
         menu label ^Live English (US)
         menu default
         linux /live/vmlinuz
         initrd /live/initrd.img
         append boot=live config live-config.locales=en_US.UTF-8 ...
 
 label live-japanese
         menu label ^Live Japanese
         linux /live/vmlinuz
         initrd /live/initrd.img
         append boot=live config live-config.locales=ja_JP.UTF-8 ...

ただし、複数のカーネルが存在している場合(486と686-paeなど)は、カーネルのファイル名が /live/vmlinuz1, /live/vmlinuz2, ... となるので注意が必要です(/live/initrd.img も同様)。

* 参考リンク [#d4fae620]

- http://live.debian.net/ (本家)
//- http://wiki.debian.org/DebianLive (本家の古いwiki)
//- [[Debian Live 3分クッキング:http://cliplife.jp/clip/?content_id=d068osmn]]
- [[Debian Live 3分クッキング:http://cliplife.goo.ne.jp/play/clip/2hT8dT1Y0CXL]] (Debian開発者のやまねさんによるプレゼン --- とてもわかりやすいです)
//- [[Debian Live 3分クッキング:http://cliplife.goo.ne.jp/play/clip/2hT8dT1Y0CXL]] 
- [[Debian Live 3分クッキング:http://wiki.debian.org/HidekiYamane/material?action=AttachFile&do=get&target=debianlive3minites.pdf]] (Debian開発者のやまねさんによるプレゼン --- とてもわかりやすいです)
- http://www.nofuture.tv/linux/debianlive (のがじゅんさん)
- http://www.sakopc.info/hiki/hiki.cgi?Devian+Live (ksakoさん)
- http://www.mathlibre.org/ (数学ソフト満載のライブシステム)
- http://www.gfd-dennou.org/arch/cc-env/live-usb-dvd/index.htm (数値計算実習用のライブシステム)
- http://tokyodebian.alioth.debian.org/pdf/debianmeetingresume200906-kansai.pdf (関西 Debian 勉強会 資料)

2008年10月24日からのこのページのだいたいの訪問者数:
本日&counter(today);
昨日&counter(yesterday);
合計&counter(all);


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS