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

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

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

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

目次

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

# apt-get install live-build live-boot live-config apt-cacher-ng

live-bootとlive-configはライブシステム用のpackageで、ホストシステム(ビルド作業用マシン) には不要ですが、特に害もないのでインストールしておきます。 ライブ起動時のスクリプトがどうなっているのか調べるときに便利です。

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

# apt-get install qemu wodim

lb config で設定

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

$ mkdir debian-live
$ cd debian-live

このディレクトリで必要な設定を行っていきます。 といっても実際には、

$ lb config && sudo lb build

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

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

まずプロキシの設定。プロキシを使わない場合は不要です。

$ lb config --apt-http-proxy "http://localhost:3142"

次にdebファイルをダウンロードするミラーサイトの設定。以下の ftp.jp.debian.org をお近くのミラーサイトに置き換えてください。指定しなければ、自動的に http://ftp.debian.org/debian/ になります。

$ 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/"

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

$ 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"

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

バイナリの形式は、デフォルトではiso-hybridになっていますので、CD,DVDだけでなくUSBメモリ用のイメージとしても使用できます。もし何らかの理由で起動に失敗する場合には、次のようにしてバイナリ形式を指定します。CD/DVDに焼く場合は、

$ lb config --binary-images iso

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

$ lb config --binary-images hdd

(iso-hybrid で問題なければ、この設定は不要です)

さらにセクション (main,contrib,non-free) を指定します。

$ lb config --parent-archive-areas "main contrib non-free"
$ lb config --archive-areas "main contrib non-free"

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

task-japanese
task-japanese-desktop
task-xfce-desktop
nqc
g++
openssh-client

のように指定しておけばxfceを使った日本語デスクトップ環境が揃います。 gnomeやKDEの場合は、task-xfce-desktop の代りに task-gnome-desktop や task-kde-desktop (と kde-l10n-ja) を追加しておけばよいでしょう。

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

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

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

$ 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/

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

lb build でビルド

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

$ sudo lb build

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

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

# lb clean --all
# lb build

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

qemuでテスト

$ qemu -cdrom binary.iso

または

$ qemu -hda binary.img

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

$ qemu -m 512 -hda binary.img

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

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

# wodim -eject binary.hybrid.iso

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

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

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

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

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

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

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

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

ちなみに /home だけでなく、/ 以下の変更をすべて保存しておきたい場合には、persistence.confに

/ union

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

その他のカスタマイズ

インストール終了後のhook

インストール終了後、シェルコマンドを走らせたい場合には、シェルスクリプトとして 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 というファイル名で保存しておきます(ファイル名は適当に決めてください)。

独自のリポジトリを追加

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

backports も含める

$ 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を設定してくれるようです。

起動メニューをカスタマイズする

てっとり早い方法は 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 も同様)。

参考リンク

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


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-11-10 (日) 10:36:08