Live manual

Live Systems

<< previous toc next >>

Live システムマニュアル

実行時の挙動の独自化

10. 実行時の挙動の独自化

実行時に行われる設定は全て live-config により行われます。ユーザが関心を持つであろう live-config の最も一般的なオプションから一部を説明します。オプションの全容は live-config の man ページにあります。

10.1 live ユーザの独自化

重要な検討事項が1つあり、live ユーザはブート時に live-boot により作成され、ビルド時に live-build により作成されるのではないということです。この影響は Live/chroot ローカルインクルード で説明しているように、ビルドで live ユーザに関連する内容が導入されるところだけにはとどまらず、live ユーザに関連するグループや権限にも影響します。

live-config を設定できる複数の方法で live ユーザの所属する追加のグループを指定できます。例えば live ユーザを fuse グループに追加するには config/includes.chroot/etc/live/config/user-setup.conf ファイルに

LIVE_USER_DEFAULT_GROUPS="audio cdrom dip floppy video plugdev netdev powerdev scanner bluetooth fuse"

を追加するかブートパラメータとして live-config.user-default-groups=audio,cdrom,dip,floppy,video,plugdev,netdev,powerdev,scanner,bluetooth,fuse と指定します。

デフォルトのユーザ名「user」やデフォルトのパスワード「live」を変更することもできます。何らかの理由で変更したい場合は以下のようにして簡単に変更できます:

デフォルトのユーザ名を変更するには単に設定で指定します:

$ lb config --bootappend-live "boot=live components username=live-user"

デフォルトのパスワードを変更できる1つの方法は ブート時フック で説明しているフックを使います。そのためには /usr/share/doc/live-config/examples/hooks から「passwd」を使い、適当な名前 (例えば 2000-passwd) で保存してそれを config/includes.chroot/lib/live/config/ に追加します。

10.2 ロケールと言語の独自化

Live システムがブートする際、2つの段階で言語が関わってきます:

Live システムをビルドする際のデフォルトのロケールは locales=en_US.UTF-8 となっています。生成したいロケールの定義には lb config--bootappend-live オプションで locales パラメータを指定します。例えば

$ lb config --bootappend-live "boot=live components locales=de_CH.UTF-8"

ロケールをコンマで区切って複数指定することもできます。

このパラメータも以下に示すキーボード設定用パラメータと同様にカーネルコマンドラインで指定できます。ロケールは 言語_国 (デフォルトのエンコーディングを使う場合) または完全な 言語_国.エンコーディング の形式で指定できます。サポートしているロケールやそれぞれで利用されるエンコーディングの一覧は /usr/share/i18n/SUPPORTED にあります。

コンソールとXキーボードの設定はどちらも live-config により console-setup パッケージを使って行われます。設定には --bootappend-live オプション経由で keyboard-layoutskeyboard-variantskeyboard-optionskeyboard-model ブートパラメータを利用します。それぞれの有効なオプションは /usr/share/X11/xkb/rules/base.lst にあります。ある言語向けのレイアウトや配列を見つけるには、その言語の英語名やその言語が話されている国を検索してみてください。例:

$ egrep -i '(^!|german.*switzerland)' /usr/share/X11/xkb/rules/base.lst
! model
! layout
   ch              German (Switzerland)
! variant
   legacy          ch: German (Switzerland, legacy)
   de_nodeadkeys   ch: German (Switzerland, eliminate dead keys)
   de_sundeadkeys  ch: German (Switzerland, Sun dead keys)
   de_mac          ch: German (Switzerland, Macintosh)
! option

それぞれの配列の説明に、適合するレイアウトが示されていることに注意してください。

レイアウトだけを設定する必要があることはよくあります。例えばXで利用するドイツ語のロケールファイル及びスイスのドイツ語のキーボードレイアウトを利用する場合:

$ lb config --bootappend-live "boot=live components locales=de_CH.UTF-8 keyboard-layouts=ch"

非常に具体的な事例ですが他のパラメータを同時に指定することもできます。例えばフランス語のシステムを用意して TypeMatrix EZ-Reach 2030 USB キーボードで (Bepo と呼ばれる) フランス語用の Dvorak 配置を使う場合:

$ lb config --bootappend-live \
     "boot=live components locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-variants=bepo keyboard-model=tm2030usb"

値を1つだけ受け付ける keyboard-model は例外ですが、他の keyboard-* オプションではそれぞれに値をコンマで区切って複数指定することもできます。XKBMODELXKBLAYOUTXKBVARIANTXKBOPTIONS 変数の詳細や例については keyboard(5) man ページを見てください。keyboard-variants に複数の値を指定した場合、1つずつ keyboard-layouts の値 (setxkbmap(1)-variant オプション参照) との照合が行われます。空白の値も使えます。例えばデフォルトとして米国向けの QWERTY、それとは別に米国向けの Dvorak、の2つの配列を指定する場合:

$ lb config --bootappend-live \
     "boot=live components keyboard-layouts=us,us keyboard-variants=,dvorak"

10.3 保持機能

典型的なライブCDというものは CD-ROM 等の読み取り専用メディアから起動するインストール済みシステムで、書き込みや変更は起動したホストハードウェアの再起動により消え去ります。

Live システムはそれを一般化したものであり、CD以外のメディアもサポートしますが、デフォルトの挙動としては読み取り専用であり、そのシステムで実行時に行ったことは全てシャットダウンにより失われるものだと考えるべきです。

「保持機能」というのは、実行時にシステムに行ったことの一部あるいは全てを保存し、リブート後に引き継ぐための様々な策の共通の呼び名です。それが機能する仕組みを理解するためには、読み取り専用メディアからブート、実行している場合でもファイルやディレクトリへの変更が書き込み可能メディア、標準的にはRAMディスク (tmpfs) に書かれ、RAMディスクのデータはリブート後には残らないのだ、ということを知っておくと良いでしょう。

このRAMディスクに保存されるデータは、ローカルストレージメディアやネットワーク共有、あるいはマルチセッションで (再)書き込み可能な CD/DVD のセッション等の書き込み可能な保持用メディアに保存する必要があります。こういったメディアは Live システムで様々な方法でサポートされています。また、特別なブートパラメータ persistence をブート時に指定する必要があるということも重要です。

ブートパラメータ persistence がセットされている (と同時に nopersistence がセットされていない) 場合、保持用ボリューム用のローカルストレージメディア (例えばハードディスクやUSBドライブ) がブート中に調査されます。live-boot(7) man ページで説明している特定のブートパラメータを指定することにより、利用する保持用ボリュームの種類を制限できます。保持用ボリュームは以下のどれかになります:

オーバーレイ用のボリュームラベルは persistence でないといけません。さらにその最上位に、ボリュームの保持を完全に制御するのに利用する persistence.conf というファイルが置かれていない限り無視されます。これは言うに及ばず、リブート後に保持用ボリュームに保存する対象となるディレクトリを指定します。さらなる詳細については persistence.conf ファイル を見てください。

保持用に利用するボリュームを用意する方法についていくつか例を示します。これは例えばハードディスクやUSBメモリに例えば

# mkfs.ext4 -L persistence /dev/sdb1

により作成した ext4 パーティションを利用できます。 USBメモリの空きスペースの利用 も見てください。

デバイスに既存のパーティションがある場合は以下に示すどれかによりラベルを変更するだけで準備は終わりです:

# tune2fs -L persistence /dev/sdb1 # for ext2,3,4 filesystems

保持用に利用する ext4 ベースのイメージファイルの作成例:

$ dd if=/dev/null of=persistence bs=1 count=0 seek=1G # for a 1GB sized image file
$ /sbin/mkfs.ext4 -F persistence

イメージファイル作成後、例えば /usr を保持させる場合に、保存するのはディレクトリに対する変更だけで、/usr の内容を丸ごと保存したいわけではない、という場合、「union」オプションを利用できます。イメージファイルがホームディレクトリに置かれている場合はハードドライブのファイルシステム最上位にコピーして /mnt にマウントします:

# cp persistence /
# mount -t ext4 /persistence /mnt

それから、内容を追加する persistence.conf ファイルを作成してイメージファイルのマウントを解除します。

# echo "/usr union" >> /mnt/persistence.conf
# umount /mnt

ブートパラメータ「persistence」を指定して Live メディアでリブートします。

10.3.1 persistence.conf ファイル

persistence のラベルを付けられたボリュームは persistence.conf ファイルを使って、任意のディレクトリを保持するように設定します。ボリュームのファイルシステム最上位に置かれているこのファイルは保持するディレクトリや方法を制御します。

独自のオーバーレイマウントの設定方法は persistence.conf(5) man ページで詳細に説明されていますが、ほとんどの場合簡単な例で十分なはずです。/dev/sdb1 パーティションの ext4 ファイルシステムにホームディレクトリとAPTキャッシュを保持させる場合:

# mkfs.ext4 -L persistence /dev/sdb1
# mount -t ext4 /dev/sdb1 /mnt
# echo "/home" >> /mnt/persistence.conf
# echo "/var/cache/apt" >> /mnt/persistence.conf
# umount /mnt

それからリブートします。最初のブート中に /home/var/cache/apt の内容が保持用ボリュームにコピーされ、以後のこのディレクトリへの変更は全て保持用ボリュームに残ります。persistence.conf ファイルに列挙するパスには空白文字や特別なパス構成要素 . and .. を含めることは一切できないことに注意してください。また、/lib/lib/live (はそのサブディレクトリを含めて)、/ は独自マウントを使って保持させることができません。この制約の回避策として、persistence.conf ファイルに / union を追加すると完全な保持を実現できます。

10.3.2 保持先を複数使いたい場合

複数の保存先を使う方法は複数あります。目的の明確な例として、複数のボリュームを同時に使う場合と1つだけを選択して使う場合を取り上げます。

異なる (個別の persistence.conf ファイルを利用する) 独自オーバーレイボリュームを複数同時に利用できますが、同一のディレクトリを保持させる設定のボリュームが複数ある場合はその中から1つだけが利用されます。ある2つのマウントが「入り組んでいる」(つまり他にマウントしたディレクトリ以下のサブディレクトリとしてマウントする) ような場合には子孫側ディレクトリよりも前に親側ディレクトリがマウントされるため、他のマウントにより見えなくなるマウントは発生しません。入り組んでいる独自マウントが同一の persistence.conf ファイルで指定されている場合は問題があります。そういった状況が実際に必要な場合の処理方法については persistence.conf(5) man ページを見てください (ヒント: 通常は必要ありません)。

ありそうな事例: ユーザデータ、つまり /home とスーパーユーザのデータ、つまり /root を異なるパーティションに保存するため persistence ラベルの付いたパーティションを2つ作成し、それぞれに persistence.conf ファイルを1つはユーザのファイルを保存する最初のパーティション向けに # echo "/home" > persistence.conf、もう1つはスーパーユーザのファイルを保存する2つ目のパーティション向けに # echo "/root" > persistence.conf として作成します。最後に、ブートパラメータとして persistence を使います。

別の位置やテストのために例えば privatework のようにして同一の種類で複数の保持先が必要な場合、ブートパラメータ persistence と合わせてブートパラメータ persistence-label を使うと、複数でそれぞれ一意となる保持用メディアを使えるようになります。例として、ブラウザのブックマークその他の個人用データ用に private のラベルを付けられた保持用パーティションを使いたい場合、ブートパラメータとして persistence persistence-label=private を使います。そして文書や研究プロジェクトその他の仕事関係のデータ用にはブートパラメータとして persistence persistence-label=work を使います。

各ボリューム private 及び work にはそれぞれ最上位に persistence.conf ファイルが必要だということは重要ですので覚えておいてください。古い名前でこういったラベルを使う方法についてさらなる情報が live-boot man ページにあります。

10.3.3 暗号化した保持先の利用

保持機能を使うことには重要なデータが漏洩する危険がいくらか存在します。特に保持するデータがUSBメモリや外付ハードドライブ等のポータブル機器に保存される場合は。そういった場合には暗号化が便利です。手順が多いために全体として複雑に見えるかもしれませんが、live-boot で暗号化したパーティションを扱うのは実際には簡単です。サポートしている luks という種類の暗号化を利用するためには、暗号化したパーティションを作成する側と暗号化した保持用パーティションを利用する Live システムの両方のマシンに cryptsetup をインストールする必要があります。

マシンへの cryptsetup のインストール:

# apt-get install cryptsetup

Live システムに cryptsetup をインストールするには、パッケージ一覧に追加します:

$ lb config
$ echo "cryptsetup" > config/package-lists/encryption.list.chroot

cryptsetup を備えた Live システムが出来たら、基本的に必要なのは新しいパーティションを作成して暗号化し、persistencepersistence-encryption=luks パラメータを指定してブートするだけです。既にこの段階を予測し、通常の手順に沿ったブートパラメータを追加してあります:

$ lb config --bootappend-live "boot=live components persistence persistence-encryption=luks"

暗号化についてよく理解していない人たちのために詳細を見て行きましょう。以下の例では /dev/sdc2 に対応するUSBメモリ上のパーティションを利用します。自分で使う際にはどのパーティションになるのか判断する必要があることに注意してください。

最初の段階はUSBメモリを接続してそれがどのデバイスになるのか判断することです。live-manual で推奨するデバイス一覧方法では ls -l /dev/disk/by-id を使います。それから新しいパーティションを作成、さらにパスフレーズを使って暗号化します:

# cryptsetup --verify-passphrase luksFormat /dev/sdc2

仮想デバイスマッパーから luks パーティションを開きます。好きな名前を使ってください。ここでは例として live を使います:

# cryptsetup luksOpen /dev/sdc2 live

次の段階はファイルシステムを作成する前にデバイスをゼロで埋めることです:

# dd if=/dev/zero of=/dev/mapper/live

これでファイルシステムを作成する準備ができました。ラベル persistence の指定を追加しているためこのデバイスはブート時に保持用としてマウントされるということに注意してください。

# mkfs.ext4 -L persistence /dev/mapper/live

準備を続けるにはデバイスをマウントする必要があります。例として /mnt にマウントします。

# mount /dev/mapper/live /mnt

そしてパーティション最上位に persistence.conf ファイルを作成します。これは前に説明したように必ず必要です。 persistence.conf ファイル を見てください。

# echo "/ union" > /mnt/persistence.conf

それからマウントポイントのマウントを解除します:

# umount /mnt

オプションですがパーティションに追加したばかりのデータを安全にしておくと良いでしょう。デバイスを閉じます:

# cryptsetup luksClose live

手順をまとめます。これまでに、暗号化を有効化した Live システムを作成しました。これは ISO hybrid イメージのUSBメモリへのコピー で説明しているようにUSBメモリにコピーできます。暗号化したパーティションも作成しました。これは同一のUSBメモリに置いて持ち運べます。保持先として利用する暗号化パーティションを設定しました。あと必要なのは Live システムをブートするだけです。ブート時に live-boot は保持用として利用する暗号化したパーティションのパスフレーズを質問し、マウントします。


<< previous toc next >>