:B~ 実行時の挙動の独自化

1~customizing-run-time-behaviours 実行時の挙動の独自化

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

2~ live ユーザの独自化

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

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

code{

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

}code

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

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

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

code{

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

}code

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

2~customizing-locale-and-language ロケールと言語の独自化

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

_* ロケール生成

_* キーボードの設定

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

code{

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

}code

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

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

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

code{

$ 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

}code

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

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

code{

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

}code

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

code{

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

}code

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

code{

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

}code

2~persistence 保持機能

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

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

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

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

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

_* GPT名により識別されるパーティション

_* ファイルシステムラベルにより識別されるファイルシステム

_* 読み取り可能な任意のファイルシステム (異質のOSの NTFS パーティションも利用可)
の最上位に置かれている、ファイル名により識別されるイメージファイル

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

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

code{

 # mkfs.ext4 -L persistence /dev/sdb1

}code

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

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

code{

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

}code

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

code{

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

}code

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

code{

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

}code

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

code{

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

}code

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

3~persistence-conf persistence.conf ファイル

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

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

code{

 # 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

}code

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

3~ 保持先を複数使いたい場合

複数の保存先を使う方法は複数あります。目的の明確な例として、複数のボリュームを同時に使う場合と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}# を使います。

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

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

3~ 暗号化した保持先の利用

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

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

code{

 # apt-get install cryptsetup

}code

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

code{

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

}code

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

code{

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

}code

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

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

code{

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

}code

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

code{

 # cryptsetup luksOpen /dev/sdc2 live

}code

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

code{

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

}code

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

code{

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

}code

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

code{

 # mount /dev/mapper/live /mnt

}code

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

code{

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

}code

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

code{

 # umount /mnt

}code

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

code{

 # cryptsetup luksClose live

}code

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