作業日 2013/04/29
ESXi上で動かす仮想マシンのテンプレートを作成する。
手順としては、ALFSを利用してLFSシステムをセットアップした後、どのような用途の仮想マシンでも必要と思われるパッケージをインストールする。
今回の記事では、ALFSを実行し、設定ファイルの一部を編集するまで。
ホストとなるLinuxディストリビューションのインストール
LFSのセットアップには、ホストとなるLinuxシステムが必要である。
今回は、Ubuntu 12.04LTS Server 32bitを使用する。
まず、ESXi上にホストとなる仮想マシンを作成する。
仮想ディスクを2つ割り当て、片方はホストUbuntuのインストールに使用し、もう片方にLFSをセットアップする。
仮想デバイスノードに関しては、Utuntu用仮想ディスクは”SCSI (0:0)”を、LFS用仮想ディスクは”SCSI (0:1)”を設定。
今回、ディスクサイズは8GBをThin Provisionで割り当てた。
実際に仮想マシンとして動作させる時には、ファイルをコピーして使用するので、ここでのディスクサイズは何でも良い。
ただ、あまり小さいとLFSのセットアップ中にいっぱいになる。2GBだとだめだった
Ubuntuのインストールは、”OpenSSH Server”を選択する。
タイムゾーンは日本を選択した方が無難。
セットアップ後、IPアドレスを確認し、SSHで接続する。
以後は、SSH越しに操作。
ALFSの実行準備
まず、ALFSの実行に必要なパッケージをインストールする。
sudo apt-get -y install build-essential bison gawk texinfo subversion libncurses-dev libxml2-utils libxml2-dev xsltproc
次に、LFSをセットアップする仮想ディスクを準備する。
sudo fdisk -l
でLFS用仮想ディスクが割り当てられたデバイスファイル名を確認する。
今回は、/dev/sdbだった。
sudo fdisk /dev/sdb
全域を使ってプライマリパーティションを作成する。
そして、フォーマットとマウント。
sudo mkfs.ext3 /dev/sdb1 &&
sudo mkdir /mnt/lfs &&
sudo mount /dev/sdb1 /mnt/lfs &&
sudo chmod 777 /mnt/lfs
マウントは、ホスト仮想マシンを再起動すると解除されるので、その都度
sudo mount /dev/sdb1 /mnt/lfs &&
を実行する必要がある。
JHALFSをダウンロード。リリース版は古すぎて最新のLFSには対応していないので、SVNを使用して開発版をダウンロードする。
cd ~ &&
svn co svn://svn.linuxfromscratch.org/ALFS/jhalfs/trunk jhalfs
ALFSの実行
mkdir /tmp/src-lfs &&
cd ~/jhalfs &&
make
makeを実行すると、カーネルのコンパイル時のような設定エディタが出てくる。内容を下記のように編集する。Poderosa等、一部のターミナルからだとキーボードから文字列が入力できない場合がある。その場合、コンソールからログインして操作するか、configファイルを後でテキストエディタで編集する。
BOOK Settings —> Release はSVNのまま
General Settings —> Build Directory を /mnt/lfs に
General Settings —> Retrieve source files をオンに
General Settings —> Package Archive Directoryを /tmp/src-lfs に設定
General Settings —> Retry on ‘connection refused’ failure をオンに
Build Settings —> Tests level を All final system testsuites に
Build Settings —> Create a log of installed files for each package をオンに
Build Settings —> DO NOT use/display progress_bar をオンに(screenではうまく表示されないので)
Build Settings —> TimeZone を Asia/Tokyo に
Build Settings —> Language を ja_JP.UTF-8 に
Build Settings —> Groff page size を A4 に
設定をセーブし、確認画面でyを押すと、LFS Bookのダウンロードと、ソースのダウンロードを開始する。ここで、ダウンロードされないパッケージがあった場合は、ダウンロード先のサーバーが落ちている場合等なので、時間をおいてやり直すか、手動で別のサーバーからダウンロードして/tmp/src-lfsにコピーする。
記録を残しておくために、実行したLFS Book自体もダウンロードしておく。
svn co svn://svn.linuxfromscratch.org/LFS/trunk/BOOK/ ~/LFS-SVN-20130429
そして、ALFSを実行する。screen上でやった方が無難。
cd /mnt/lfs/jhalfs &&
make
実行中は、何回かsudo用のパスワードを入力する必要がある。
ALFSの後始末と基本的な設定
chroot環境に入るためのスクリプトを作成する。
sudo sh -c "
cat > /mnt/lfs/root/chroot.sh << "EOF"
#!/bin/bash
mount -v --bind /dev /mnt/lfs/dev
mount -vt devpts devpts /mnt/lfs/dev/pts
mount -vt tmpfs shm /mnt/lfs/dev/shm
mount -vt proc proc /mnt/lfs/proc
mount -vt sysfs sysfs /mnt/lfs/sys
chroot /mnt/lfs /usr/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/bin/bash --login +h
umount /mnt/lfs/sys
umount /mnt/lfs/proc
umount /mnt/lfs/dev/shm
umount /mnt/lfs/dev/pts
umount /mnt/lfs/dev
EOF" &&
sudo chmod +x /mnt/lfs/root/chroot.sh
以後、chroot環境に入るときは、
sudo /mnt/lfs/root/chroot.sh
を実行する。本記事の以後の操作は、全てchroot環境で実行する。
基本的な環境設定
これらの設定は、新しいLFS仮想マシンを起動した後、使用したい環境に合わせて再設定する。ここでは、とりあえず問題なく起動できる状態にすることを目指している。
7.2.2. Creating Network Interface Configuration Files は、IPアドレス等のNICの設定だが、これは後ほどDHCPクライアントをインストールする際に設定するので今回はスキップ。
Udevの新しいバージョンでは、NICをeth0みたいな名前ではなく、enp2s0みたいな名前に勝手に変えてしまう。それを避けるために下記を実行。
ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules
詳しくは、下記URLを参照。
http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames
7.2.3. Creating the /etc/resolv.conf Fileも、DHCPクライアントが自動的に作成するので本来は不要だが、chroot環境でwgetを実行するために当面必要なので作成する。
cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf
nameserver 192.168.0.1
# End /etc/resolv.conf
EOF
7.3. Customizing the /etc/hosts File に従って、/etc/hostsを作成する。
cat > /etc/hosts << "EOF"
# Begin /etc/hosts
127.0.0.1 localhost newvm.example.net newvm
# End /etc/hosts
EOF
IPアドレスはDHCPで取得するので/etc/hostsにはIPアドレスは書かない。
7.8. Configuring the system hostnameに従って、ホスト名を設定。
echo "HOSTNAME=newvm" > /etc/sysconfig/network
8.2. Creating the /etc/fstab Fileに従って、/etc/fstabを作成。
cat > /etc/fstab << "EOF"
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
/dev/sda1 / ext3 defaults 1 1
#/dev/sda2 swap swap pri=1 0 0
proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /run tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0
# End /etc/fstab
EOF
LFS用のディスクが/dev/sda1に割り当てられていることを仮定している。ESXiの設定で、仮想デバイスノードをSCSI (0:0)に設定すると、/dev/sdaになるはずである。