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

wheezy用はDebianLive/Build-HOWTO-for-the-Impatientをご覧ください (2013-03-20)

一応squeeze用に書き直しました。お気づきの点があれば松本まで (2012-05-07)

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

詳しくは本家の説明 や live-config などの manpage などを参考にしてください。 基本的には apt-get (あるいは aptitude) というコマンドを使ったことのある Debian あるいは Ubuntu のユーザ向けの情報ですが、「Debian って何???」という方はまず、Debian GNU/Linux のホームページあたりを読んでみてください。

このメモの簡易版はこちら

目次

準備と練習

準備

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

# apt-get install live-boot live-config live-build live-manual

(lenny時代はlive-helperという名のツールでした)

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://locaost: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
# lb config && lb build

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

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

まず、

$ lb config

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

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

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

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

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

なおproxyの指定は次のように--apt-http-proxyオプションでもできるようです(筆者はまだ試していません)。

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

これでビルドします。

$ su
# lb build

少し時間がかかりますが、これでカレントディレクトリに binary-hybrid.iso というファイルができればビルド成功です。

最近のマシンの場合 (もちろんメモリ容量やハードディスクのスピードにもよりますが)、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

カスタマイズ

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

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

$ lb config --language ja
$ lb config --bootappend-live \
   "live-config.locales=ja_JP.UTF-8 live-config.utc=no \
    live-config.timezone=Asia/Tokyo live-config.keyboard-model=jp106 \
    live-config.keyboard-layouts=jp persistent quickreboot"

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

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

$ lb config --distribution sid
$ lb config --archive-areas "main contrib non-free"

g++ や nqc を使うだけであれば non-free は必要ないのですが、contrib や non-free のパッケージを使用する場合にはこのように指定しておきます。

日本語環境

日本語のデスクトップ環境の task を使えば簡単に設定できます。

$ lb config --tasks "japanese-desktop"

ただし、japanese-desktop を使用すると、gnome関連が全部入るので、イメージサイズを気にして他のデスクトップ環境を選びたいときには、以下を参考に、日本語入出力に必要なパッケージをリストとして指定します。

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

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

$ lb config --packages-lists "kde"
$ lb config --packages "nqc g++ w3m"

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

$ lb config --packages-lists "kde" --packages "nqc g++ w3m"

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

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

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

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

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

# DEBIANLIVE/config/chroot_local-packageslists/xfce-ja  - package list

## LH: Xfce Debian
#include <xfce>

# miscellaneous Xfce4 packages
xfce4-goodies
xfce4-places-plugin 
xfce4-xkb-plugin
xfce4-dict
xfce4-mpc-plugin
thunar-volman

# NQC, g++, ruby, python, etc.
nqc
g++ ruby python make automake

# 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
otf-ipafont
ttf-umefont
ttf-umeplus
okular
w3m
lv
nkf

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

このリストを config/chroot_local-packageslists/xfce-ja.list というファイルに保存すれば、ビルド時に自動的に読んでくれます。

もちろん上記リストに含まれる日本語関連のパッケージだけを別リストとして config/chroot_local-packageslists/japanese.list というファイルに保存しておけば、別のデスクトップ環境を指定する場合も容易でしょう。

独自のリポジトリを追加

(wicdの説明は lenny用ですが、基本的な設定方法はsqueezeでも同じです) 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 という名前でそのディレクトリにコピーします。これだけでそのリポジトリに含まれるパッケージを利用できます。

同様に、squeezeにiceweaselの最新版をインストールしたい場合には、http://mozilla.debian.net/ の説明を参考に、

deb http://backports.debian.org/debian-backports squeeze-backports main
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

と書いたファイルを chroot_sources/iceweasel.chroot および chroot_sources/iceweasel.binary として保存し、 GPGキー http://mozilla.debian.net/archive.asc を chroot_sources/iceweasel.chroot.gpg と chroot_sources/iceweasel.binary.gpg として保存します。そしてさらに次の squeeze-backports の説明にあるPINの設定 (config/chroot_apt/preferences) も同時に行うと、最新の iceweaselが liveイメージに組み込まれるはずです。

squeeze-backports も含める

squeezeになくて squeeze-backportsにbackportされているパッケージをインストール することもできます。

lb config --backports true \
 --mirror-binary-backports "http://ftp.jp.debian.org/debian-backports/" \
 --mirror-chroot-backports "http://localhost:3142/ftp.jp.debian.org/debian-backports/"

ただし、squeezeにも含まれているパッケージの場合には、 これだけではsqueeze-backportsの新しいバージョンをインストールしてくれません。

squeeze-backportsに含まれているバージョンを使いたい場合にはPINを使って明示的に指定する必要があります。そのためには、config/chroot_apt/preferences というファイルに優先順位を書いておきます。例えば、squeeze-backports に新しいバージョンが存在するパッケージについてはすべて新しいバージョンを使う場合には、このファイルに

Package: *
Pin: release a=squeeze-backports
Pin-Priority: 1000

のような感じで指定しておけばよいでしょう。特定のパッケージだけの場合は、* の部分をパッケージ名(複数可)に変更してください。詳しくは man apt_preferences を参考に。パッケージ名を指定する場合には、依存関係に注意して必要なパッケージを全部指定しないといけないようなので、少し面倒かもしれません(ちゃんとした方法があるのかも?)

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

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

カスタマイズした設定ファイルや 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/ というディレクトリの中に適当な名前をつけて保存しておきます。

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

#!/bin/sh

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

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

$ chmod +x config/chroot_local-hooks/90-custom.sh

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

再ビルド

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

$ su
# lb clean --all
# lb build

これでオリジナルのライブCD,DVDのイメージ (binary_hybrid.iso) ができるはずです。 このhybridイメージはUSBメモリ用として使えますが、Biosがその起動に対応していない場合には下の usb-hdd イメージを作成してください。

ライブUSBメモリの作成

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

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

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

$ lb config --binary-images usb-hdd

ブート時のパラメータとして--bootappend-live のオプションで persistent も追加しておけばデータの保存が可能になります。

また--bootappend-live のオプションで quickreboot を追加しておけば再起動時にメディアの取り出しの確認を省略することができます。

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

# lb clean --binary
# lb build

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

ビルドに成功すると、今度は binary-hybrid.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 イメージを作成する時には lb build する前に

$ lb config --binary-images iso-hybrid

のあと

$ su
# lb clean --binary

を忘れずに。

参考リンク

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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-03-20 (水) 22:31:21