HDDからのcasperブートの最適化
“casperブートは大変便利”でメモしたように、/casperというディレクトリとその下にfilesystem.dirというシンボリックファイルを作るだけでHDDからcasperブートが可能となる。しかし、casperはLiveCD等のために作られていてHDDからブートして使うことを前提としていないため、起動時に幾つか余計な設定もしてしまう。
そこで、casperをHDDからのブート用にカスタマイズする方法をメモしておく。(“casperブートは大変便利”に追加しても良いのだが、長くなるのでこちらに別記する。)
■ 余計なスクリプトの削除
apt-get install casper でインストールすると、/usr/share/initramfs-tools/scripts/casper-bottomというディレクトリの下にcasperブート時にinitramfsで実行するスクリプトが入っている。標準だと次のような感じ:
root@ubuntu-804:/usr/share/initramfs-tools/scripts/casper-bottom# ls 01integrity_check 20xconfig 33enable_apport_crashes 02timezone 22gnome_panel_data 34disable_kwallet 05mountpoints 22screensaver 35fix_language_selector 10adduser 23etc_modules 36disable_trackerd 12fstab 23networking 38disable_restricted_manager 13swap 24preseed 40install_driver_updates 14locales 25configure_init 41apt_cdrom 15autologin 30accessibility 42disable_apparmor 18hostname 31disable_update_notifier 43disable_updateinitramfs 19keyboard 32disable_hibernation 44pk_allow_ubuntu root@ubuntu-804:/usr/share/initramfs-tools/scripts/casper-bottom#
OSのバージョン等によっても若干異なるが、まぁ、大体こんな感じ。この殆どはLiveCDを起動するための設定を行っている。例えば 01integrity_check はCDに書き込まれたファイルに問題ないか確かめるものでHDDからの起動には必要ない、等である。そこで、次の様に幾つかファイルを残して削除してしまう。
root@ubuntu-804:/usr/share/initramfs-tools/scripts/casper-bottom# rm -f \ 01integrity_check 15autologin 22gnome_panel_data 22screensaver 23etc_modules \ 30accessibility 31disable_update_notifier 32disable_hibernation \ 33enable_apport_crashes 34disable_kwallet 35fix_language_selector \ 36disable_trackerd 38disable_restricted_manager 40install_driver_updates \ 41apt_cdrom 42disable_apparmor 43disable_updateinitramfs 44pk_allow_ubuntu root@ubuntu-804:/usr/share/initramfs-tools/scripts/casper-bottom# ls 02timezone 10adduser 13swap 18hostname 20xconfig 24preseed 05mountpoints 12fstab 14locales 19keyboard 23networking 25configure_init root@ubuntu-804:/usr/share/initramfs-tools/scripts/casper-bottom#
残ったスクリプトも必要ないものがあるかも知れないが、まぁ、大体こんな感じだろう。この後書くが、10adduserに関してはユーザが登録されている通常のLinux環境であれば、これも削除して置く。(Thin Client環境を作る場合などには残しておき、ブート時に動的にユーザをシステムへ登録する。)
■ スクリプトの変更
HDDから起動を前提として 05mountpoints、10adduser、18hostname に変更を加える。05mountpointsと10adduserは大した変更ではないが、18hostnameは大幅な変更が必要となる。
■ 05mountpoints
casperのベースとなるルートファイルシステムのマウントポイントを“/root/cdrom”以外に変更する(2ヶ所)。私の場合は“/root/casper_root”にしてある。変更後は次のようになる(変更箇所のみ):
mkdir -p /root/casper_root mount -n -o move /cdrom /root/casper_root
(disklessのルートファイルシステムをマウントする場合は“nfs_root”という名前の方がピッタリくるかもしれない。)
■ 10adduser
casperで追加される“ubuntu”ユーザのデフォルトのパスワードを変更する。多くの場合(ユーザIDが1000以上のユーザが存在する場合)、このスクリプトは大した意味を持たなくなるが、Thin Clientのベースとする場合など“ubuntu”ユーザを追加する場合は変更しておいた方が良い。
デフォルトのパスワードは暗号化された状態で“U6aMy0wojraho”となっていて、これは“Enterだけ”(つまり“空行”)のパスワードとなっている。このままだとsshで他のマシンから入れない。そこでパスワードを“ubuntu”にしておく。(sshの設定を変更してパスワード無しのユーザでもアクセスできるようにする方法もあるが、そちらは手を加えずにここを変更して置く方が正解だろう。)“ubuntu”の暗号化されたパスワードは“agBuRffX36TXQ”。従って次のように変更する(変更箇所近辺のみ):
# agBuRffX36TXQ is "ubuntu" chroot /root debconf-communicate -fnoninteractive casper > /dev/null <<EOF set passwd/root-password-crypted * set passwd/user-password-crypted agBuRffX36TXQ
(勿論、“ubuntu”ではなく、任意に自分の好きなパスワードにすれば良い。)
■ 18hostname
現在使っているホスト名(やネットワーク環境)がcasper環境でも使えるように変更する。次の内容と入れ替える。
#! /bin/sh # Written by Adsaria Mood, 2010/02/15 # for casper boot from HDD or network PREREQ="" DESCRIPTION="Setting hostname..." . /scripts/casper-functions prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac log_begin_msg "$DESCRIPTION" HOSTNAME=ubuntu IPV4ADDR=127.0.1.1 DNSDOMAIN=localdomain WRITEOUT= if [ -e /root/etc/hosts ] ; then if [ -r /root/etc/hostname ]; then TEMP_STRING=$(cat /root/etc/hostname) [ "$TEMP_STRING" ] && HOSTNAME=$TEMP_STRING fi else WRITEOUT=true fi # read from /netboot.config, rather than /tmp/net-*.config CONFIG=/netboot.config if [ -r "$CONFIG" ]; then NET_CONFIG=$(cat $CONFIG) TEMP_STRING=$(echo $NET_CONFIG | sed -ne 's/.* host : \([^ ]*\) .*/\1/p' ) [ "$TEMP_STRING" ] && HOSTNAME=$TEMP_STRING TEMP_STRING=$(echo $NET_CONFIG | sed -ne 's/.* address: \([0-9.]*\) .*/\1/p' ) [ "$TEMP_STRING" ] && IPV4ADDR=$TEMP_STRING # resolv.conf will be configured later, by "23networking". rm -f /root/etc/resolv.conf WRITEOUT=true fi if [ $WRITEOUT ] ; then echo "$HOSTNAME" > /root/etc/hostname cat > /root/etc/hosts <<EOF 127.0.0.1 localhost $IPV4ADDR $HOSTNAME # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts EOF fi hostname "$HOSTNAME" log_end_msg
■ initrdの更新
以上の変更を加えたら initrdを更新する。
root@ubuntu-804:~# dpkg-reconfigure casper