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

このページの内容はlenny用の古い情報なので、squeeze用のDebianLive/Build-HOWTOをごらんください

このページは、Debian Live System を使ったライブ・システム構築のメモです。 Debian GNU/Linux stable (lenny), testing (squeeze) あるいは unstable (sid) 上での作業を前提としています (squeeze,sid で作業する場合はこちらのメモもご覧ください)。 詳しくは本家の説明 や live-helper の manpage などを参考にしてください。 基本的には apt-get (あるいは aptitude) というコマンドを使ったことのある Debian あるいは Ubuntu のユーザ向けの情報ですが、「Debian って何???」という方はまず、Debian GNU/Linux のホームページあたりを読んでみてください。

簡易版を用意しました。うだうだした説明は必要ないという方はそちらをまずご覧ください。(2008-10-24)

目次

準備と練習

準備

live-helper のインストール

# apt-get install live-helper live-initramfs

live-helper をインストールすると lh_config や lh_build といったライブシステムをビルドするための一連のツールやマニュアルが使えるようになります。 live-helper だけでなく live-initramfs もインストールしておきます。

apt-cacher のインストール (オプショナル)

通常のインストールと同様に、ビルドを実行するとパッケージの自動ダウンロードから始まります。 このとき一つの作業ディレクトリで作業している限りは deb ファイルが自動的にキャッシュに残るので、たとえ設定&ビルドを繰り返す場合でもダウンロードは繰り返しませんが、例えば複数台のマシンで作業させたり、すでにダウンロードした deb ファイルがたくさんあってそれらを使いたい場合には、proxy ソフトの apt-cacher をインストールしておくと便利です。

# apt-get install apt-cacher

インストール後、/etc/default/apt-cacher というファイルを編集して AUTOSTARTの値を0から1に変更しておきます。

AUTOSTART=1

そして apt-cacher を再起動。

# /etc/init.d/apt-cacher restart

とりあえずこれで動くはずです。 ポートの変更やアクセス制限などの設定が必要であれば /etc/apt-cacher/apt-cacher.conf を編集します。

デフォルトの設定の場合、

http://localhost:3142/

にアクセスできればOK。

もし /var/cache/apt/archives/ 以下に deb ファイルを残していれば、ダウンロード時間の節約のために apt-cacher-import.pl という付属のツールで apt-cacher にインポートしておきます。

# /usr/share/apt-cacher/apt-cacher-import.pl -r /var/cache/apt/archives/

設定の問題なのかどうかわかりませんが apt-cacher 経由で cache にないパッケージをダウンロードするとスピードがかなり遅くなってしまうので、このツールはとても重宝します。 例えば筆者の場合、作業マシンの /etc/apt/sources.list にはあえてこの proxy を指定せず、作業マシンのアップデート後は apt-get clean ではなく apt-get autoclean でダウンロードした deb を残して apt-cacher にインポートしています (おそらくもっと快適な方法があるかもしれません)。

ところでデフォルトでは apt-cacher は WWWサーバのユーザ権限で (www-data として) 動くので、インポートした deb ファイルも一応 chown しておきます。

# chown -R  www-data:www-data /var/cache/apt-cacher/packages/

qemu のインストール (オプショナル)

できたイメージ を CD に焼き付ける前にテストしてみるために qemu もインストールしておきます。

# apt-get install qemu

wodim のインストール (オプショナル)

wodim は cdrecord の後継となる CD/DVD ライティング・ツールです。他のツールがすでにインストールされている場合や CD に焼き付けない場合には不要です。

# apt-get install wodim

試しにビルドしてみる

作業するためのディレクトリを適当に作って、そこに移動します。

$ mkdir debian-live
$ cd debian-live

ディレクトリ名は何でもかまいません。 以下は root で (あるいは sudo で) 作業します。

ここで「作業します」と書いたものの、実は

$ su
# lh_config && lh_build

という命令一発だけで、なんと Debian Live の ISO イメージができてしまいます。

しかし、せっかく apt-cacher もインストールしたので、ミラーサイトの設定をするまで lh_build でビルドするのは少しおあずけにします。 lh_build は root の権限が必要ですが、lh_config は一般ユーザでも実行可能です。

まず、

$ lh_config

を実行します。 これで、カレントディレクトリの下に config/ と scripts/ というディレクトリができているか確認します (以下のようにさらにオプションで種々の指定をする場合は、実はこのステップは必要ありません)。squeeze,sid上で作業している場合は、scripts/ の代わりに auto/ というディレクトリができます。

ところで squeeze, sidの live-helper ではコマンドが変更になり、lh_config の代わりに lh config になりました (lh_config や以下の lh_build, lh_clean などのコマンドが廃止されて lh lb というコマンドに統一され、config, build, clean などは lh lb の最初の引数になりました)。以下は lenny 用の説明ですが、squeeze,sid 上で作業する場合にはコマンドを適当に置き換えてください。 (2009年12月16日追加 2010年10月10日訂正)

config/ 以下にミラーサイトの設定を初め、ビルドのための種々の設定ファイルが置かれるわけですが、基本的にはそれらのファイルを直接編集しなくても lh_config コマンドだけで種々の設定が行えるようになっています。

テストビルドなので、とりあえずミラーサイトだけ指定しておきます。 以下の例ではローカルの apt-cacher 経由で ftp.jp.debian.org をミラーサイトに指定しています (近くのミラーサイトに置き換えてください)。

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

lh_config の後にオプションを続けて指定すれば、この例のように3回 lh_config を実行する必要はありません。最後の --mirror-binary オプションは出来上がったイメージでのミラーサイトの指定なので proxy を使わないで、直接ミラーサイトを指定しておきます。

これでビルドします。

$ su
# lh_build

少し時間がかかりますが、これでカレントディレクトリに binary.iso というファイルができればビルド成功です。(squeeze,sid上で作業する場合は lh_build の代わりに lh build lb build を使います)。

最近の Core2 Duo クラスのCPUを搭載したマシンの場合 (もちろんメモリ容量やハードディスクのスピードにもよりますが)、debファイルのダウンロード時間を除けば (つまりローカルのキャッシュに debファイルがあれば)、コーヒーブレイク程度の時間で終了するはずです。

イメージのテスト&焼き付け

できた ISOイメージを早速 qemu でテストしてみます。これはrootでなくてもできます。

$ qemu -m 256 -cdrom binary.iso

メモリの値は作業マシンのスペックを考慮して -m オプションで適当に指定してください (この例では 256MB)。デフォルトは 128MBなのでこれだとちょっと少ないかもしれません。 ちなみにマウスのフォーカスを元のマシンに戻すのは Ctrl+Alt 。

このISOイメージを wodim や cdrecord などのツールで CD に焼き付ければ、ライブCDのできあがりです。 例えば、

$ wodim -eject binary.iso

カスタマイズ

 各種パラメータの指定、パッケージの指定

言語の指定、ブート時のパラメータ指定

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

keyb=jp は X では有効ですがコンソールでは無視されてしまうようです。 また、kmodelの指定がないと xorg.conf で XkbModel として jp106 が採用されないようです。(squeeze では keyb や kmodel は無視され klayout=jp だとうまくいきました -- 2010年4月2日追記) (squeeze ではオプション名が変更になり keyboard=layouts=jp keyboard-model=jp とします。keyboard-layoutsが複数になっていることに注意。2010年10月10日訂正・追記)

ディストリビューション、セクションを指定

lenny上でsid のライブシステムを作りたい場合など、作業マシンのバージョンと違うバージョンのライブシステムを作りたい場合に必要です。 また contrib や non-free のパッケージをインストールする場合にはセクションも指定しておきます。

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

この例では sid を指定しました (lenny にしたい場合は lh_config --distribution lenny)。また、squeeze/sid上で作業する場合には、--categories の代わりに --archive-areas というオプションを使ってください。 g++ や nqc を使うだけであれば non-free は必要ないのですが、日本語のPDFファイルの閲覧には、non-free に属する Adobe CMAP データが必要です。

パッケージ、パッケージリストの指定とカスタマイズ

例えば、デスクトップ環境の KDE に加え NQC と g++ と w3m をインストールしたい場合は、

$ lh_config --packages-lists kde
$ lh_config --packages "nqc g++ w3m"

のように指定します。もちろん一度に

$ lh_config --packages-lists kde --packages "nqc g++ w3m"

のように指定しても大丈夫です。

この例のように --packages ではパッケージ名をスペースで区切って並べていけば複数個指定できますが、--packages-lists で指定できるファイル名 (リスト名) は一つだけです(--packages-lists でも同様に複数個指定できます)。 このリスト名は /usr/share/live-helper/lists/ にあるものから選ぶか、あるいはそれらを参考にして独自に作成することもできます。その場合にはリストファイルを、config/chroot_local-packageslists/ の下に適当な名前で保存しておきます。

また、--packages で個々のパッケージを指定する場合でも、lh_config --pakages="..." を走らせる度に設定が上書きされてしまうので、たくさんパッケージを指定したい場合には --packages-lists を使ったほうが便利です。

ところで /usr/share/live-helper/lists/ 以下の例をみても分かるように、リストは他のリストを include できます。

以下は、Debian Wiki の日本語環境の説明 http://wiki.debian.org/JapaneseEnvironment を参考にして作成した Xfce + NQC + 日本語環境 +α のオリジナル・リストの例です。

# DEBIANLIVE/config/chroot_local-packageslists/xfce-nqc-ja  - package list for live-helper(7)

## LH: Xfce Debian
#include <xfce>

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

# NQC, g++
nqc
g++

# japanese env
uim
uim-anthy
unifont
xfonts-a12k12
xfonts-intl-japanese
xfonts-intl-japanese-big
xfonts-unifont 
ttf-sazanami-gothic
ttf-sazanami-mincho
ttf-vlgothic
xpdf-japanese
w3m
lv
nkf

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

このリストを config/chroot_local-packageslists/xfce-nqc-ja というファイルに保存すれば

$ lh_config --packages-lists xfce-nqc-ja

でパッケージリスト指定ができます。 上で書いたように必要なパッケージをすべてこのリストに入れておくと --packages で追加パッケージを指定する必要はありません。

もちろん上記リストに含まれる日本語関連のパッケージだけを別リストとして config/chroot_local-packageslists/japanese というファイルに保存して config/chroot_local-packageslists/xfce-nqc-ja では単に

#include <xfce>
#include <japanese>
nqc
g++
...

のように japanese を include して使う、あるいは include せずに独立したパッケージリストとして複数のファイルに分けて保存して、

$ lh_config --packages-lists "xfce japanese mylist1 mylist2 ..."

のような感じで lh_configコマンドで直接複数のパッケージリストのファイル名を指定する、というのが正統な(?)方法だと思います。

独自のリポジトリを追加

debian公式パッケージ以外のパッケージをインストールしたい場合には、追加のリポジトリを指定します。以下は、wicdという無線LANの設定ツールを追加する場合の例です (wicd は sid には公式パッケージとして含まれますが、残念ながら lenny には含まれていません)。

まず、config/chroot_sources/ というディレクトリに、wicd.chroot と wicd.binary という名のファイルを作り、それぞれの中にリポジトリを指定します (どちらのファイルも中身は同じ)。

deb http://apt.wicd.net hardy extras

ファイル名は、foo.chroot, foo.binary のようなものであれば何でもかまいません。

次に、gpgキーを wicd.chroot.gpg, wicd.binary.gpg という名前でそのディレクトリにコピーします。これだけでそのリポジトリに含まれるパッケージを利用できます。

パッケージインストール後の設定

ローカルファイルのコピー

カスタマイズした設定ファイルや Debian のパッケージ管理ツールで管理されていないファイルは、あらかじめ config/chroot_local-includes/ というディレクトリにディレクトリ構造を保ったまま入れておきます。

例えば、カスタマイズした /etc/bash.bashrc (システムワイドな .bashrc ファイル) を使いたい場合には、config/chroot_local-includes/etc/ というディレクトリを作って config/chroot_local-includes/etc/bash.bashrc として保存しておきます。そうすればデフォルトの /etc/bash.bashrc が上書きされます。

この機能の応用として、ユーザの初期設定のファイルを config/chroot_local-includes/etc/skel/ の中に入れておいたり、非Debianパッケージを config/chroot_local-includes/usr/local/ の中に入れておけば、現在使用しているシステムを簡単にライブシステムに反映させることができます。

シェル・コマンドの実行

インストール終了後、シェルコマンドを走らせたい場合には、シェルスクリプトとして config/chroot_local-hooks/ というディレクトリの中に適当な名前をつけて保存しておきます。

例えば、uim の表示をパネル内に表示したい場合には

#!/bin/sh

test -x /usr/bin/im-switch || exit 0
im-switch -s uim-systray
update-alternatives --set xinput-ja_JP /etc/X11/xinit/xinput.d/uim-systray

のような中身のファイルを、 config/chroot_local-hooks/90-uim というファイル名で保存して

$ chmod +x config/chroot_local-hooks/90-uim

で実行可能にしておきます (ファイル名は適当に決めてください)。

再ビルド

設定をしたあと、再度ISOイメージをビルドする際には lh_clean というコマンドで作業ディレクトリをきれいにしておきます。 ただし lh_clean では config/ 以下のローカルファイルは削除されないので、不必要になったローカルな(=自分でコピーした)ファイルなどは手で削除する必要があります。

$ su
# lh_clean --all
# lh_build

これでオリジナルのライブCDのイメージ (binary.iso) ができるはずです。

USBメモリ用のライブシステムの作成

USBメモリ用のディスクイメージの作成

基本的な設定は ISOイメージの場合と同じです。

バイナリイメージとして usb-hdd を指定します (デフォルトでは iso になっています)。

$ lh_config --binary-images usb-hdd

ブート時のパラメータとして persistent を追加しておけばデータの保存が可能になります。

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

(quickrebootというオプションを指定することで再起動時にメディアの取り出しの確認を省略することができます)

ISOイメージを作成した後、usb-hdd のディスクイメージをビルドするには、

# lh_clean --binary
# lh_build

とします。lh_clean -all できれいに掃除するよりもビルドする時間が少し短縮されます。

ビルドに成功すると、今度は binary.iso のかわりに binary.img というファイルができます。

qemuでテスト

$ qemu -m 256 -hda binary.img

USBメモリへの書き込み

dd コマンドを使ってこのディスクイメージを USBメモリに書き込みます。 USBメモリ内のデータはすべて消去されてしまうので注意してください。 このとき USBメモリはマウントしていない状態で書き込みます。 もしUSBメモリのデバイス名が、/dev/sdb だとすると、

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

でイメージをコピーできます (bs=1024k などのオプションをつければコピーのスピードが速くなると思います)。このイメージはパーティション情報まで含んだイメージなので、書き込み先が /dev/sdb1 ではなくて /dev/sdb になっていることに注意してください。

イメージのコピーが終了した時点で、USBメモリには新しいパーティションが一つ切られて (例えば /dev/sdb1)、残りは空き領域となっています。 この状態でも、すぐにUSB起動ディスクとして使えますが、せっかくUSBメモリを使うので残りの領域を個人のデータ保存用にセットアップしておきましょう。

そのためには cfdisk などのツールを使ってその空き領域に Linux のパーティションを追加し、そのボリューム名を home-rw にします。そうすることで起動時にそのパーティションを /home として自動的にマウントしてくれます。

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

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

再び ISO イメージを作成する時には lh_build する前に

$ lh_config --binary-images iso

のあと

$ su
# lh_clean --binary

を忘れずに。

参考リンク

2008年10月21日からのこのページのだいたいの訪問者数: 本日1 昨日0 合計&counter([total|today|yesterday]);


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-05-11 (金) 10:47:13