ESXi上で仮想マシンテンプレートの構築 (その1 ALFSの実行)

作業日 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になるはずである。

Comments are closed.