ESXi上で仮想マシンテンプレートの構築 (その2 カーネルのコンパイルとGrubのインストール)

Image

本記事の以下の作業は、chroot環境で実行する。chroot環境で無い場合は、

sudo /mnt/lfs/chroot.sh

を実行する。

Linuxカーネルのコンパイル

まずは、コンパイルの準備。

cd /sources &&
tar Jxf linux-3.5.2.tar.xz &&
cd linux-3.5.2 &&
make mrproper &&
make defconfig

make defconfig で一般的なカーネルの設定を呼び出す。

次に、設定を編集する。

make LANG=C LC_ALL= menuconfig

ALFSの時と同様に、文字列が入力できない場合で、文字列の入力が必要な場合は、コンソールから実行するか、設定ファイルをテキストエディタで編集する。

Enable loadable module support
を無効に

Processor type and features -> Processor family
は、環境に合わせて、設定する。
Core 2/Newer Xeon

VMwareでは、SCSIは、
LSI Logic /Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
として認識されている。
Device Drivers -> Fusion MPT device support を有効にする。
展開して、
Fusion MPT ScsiHost drivers for SPI
Fusion MPT ScsiHost drivers for FC
Fusion MPT ScsiHost drivers for SAS
Fusion MPT misc device (ioctl) driver
の4つを有効にする。

VMwareでは、NICは、
AMD PCnet32 PCI
として認識されている。
Device Drivers -> Network device support -> Ethernet driver support ->
AMD PCnet32 PCI support
有効にする。
ついでに、
Device Drivers -> Network device support -> VMware VMXNET3 ethernet driver
も有効にした。

Device Drivers —>
Generic Driver Options —>
Maintain a devtmpfs filesystem to mount at /dev
を有効に

File system —> Second extended fs support
を有効にする。さらに出てくる子要素を全て有効にする。

File systems —>
Network File Systems:
NFS Client support 
とその子要素の適当なものが選択されていることを確認する。
NFS server support —>
NFS server support for NFS version 3 —>
NFS server support for the NFSv3 ACL protocol extension
NFS server support for NFS version 4 (EXPERIMENTAL)
を有効にする。

File systems —>
Kernel automounter version 4 support
が選択されていることを確認する
Network File Systems —>
CIFS support
を有効にする。子要素はチェックしない。

コンパイルの実行。

make &&
cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.5.2 &&
cp -v System.map /boot/System.map-3.5.2 &&
cp -v .config /boot/config-3.5.2 &&
install -d /usr/share/doc/linux-3.5.2 &&
cp -r Documentation/* /usr/share/doc/linux-3.5.2 &&
cd ../ &&
rm -rf linux-3.5.2

コンパイルしたカーネルや設定ファイルのバックアップを作成する。

mkdir /boot/backup-3.5.2-`date +%Y%m%d` &&
cp /boot/{vmlinuz-3.5.2,System.map-3.5.2,config-3.5.2} /boot/backup-3.5.2-`date +%Y%m%d`

GRUBのセットアップ

8.4. Using GRUB to Set Up the Boot Process に従って、GRUBをセットアップする。

grub-install /dev/sdb &&
cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0,1)

menuentry "GNU/Linux, Linux 3.5.2" {
        linux /boot/vmlinuz-3.5.2 root=/dev/sda1 ro
}
EOF

後始末

9.1. The End に従って、LFSのバージョンをメモしておく。

echo "SVN-20120821 jhalfs" > /etc/lfs-release

rootパスワードを作成

passwd

ALFS構築用のソースファイルをバックアップする。ソースファイルは、ファイルサーバーのどこかに置いてあればよく、個別のVMに保存する必要は無い。chroot環境の外から

cp -R /mnt/lfs/sources ~/src-lfs-svn20120814 &&
cd ~ && tar Jcf src-lfs-svn20120814.tar.xz src-lfs-svn20120821 &&
scp src-lfs-svn20120821.tar.xz 192.168.0.11:~

最後にLFS環境構築用の一時ファイルを削除する。chroot環境で

rm -rf /jhalfs /sources /src-lfs /tools

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

作業日 2012/09/02

ESXi上で動かす仮想マシンのテンプレートを作成する。
手順としては、ALFSを利用してLFSシステムをセットアップした後、どのような用途の仮想マシンでも必要と思われるパッケージをインストールする。
今回の記事では、ALFSを実行し、設定ファイルの一部を編集するまで。

ホストとなるLinuxディストリビューションのインストール

LFSのセットアップには、ホストとなるLinuxシステムが必要である。
今回は、Ubuntu 12.04 Server 32bitを使用する。

まず、ESXi上にホストとなる仮想マシンを作成する。
仮想ディスクを2つ割り当て、片方はホストUbuntuのインストールに使用し、もう片方にLFSをセットアップする。
仮想デバイスノードに関しては、Utuntu用仮想ディスクは”SCSI (0:0)”を、LFS用仮想ディスクは”SCSI (0:1)”を設定。
今回、LFS用のディスクはデフォルト16GBを割り当てた。
実際に仮想マシンとして動作させる時には、ファイルをコピーして使用するので、ここでのディスクサイズは何でも良い。
ただ、あまり小さいとLFSのセットアップ中にいっぱいになる。2GBだとだめだった

Ubuntuのインストールは、”OpenSSH Server”を選択する。
言語やタイムゾーンは日本を選択した方が無難。

セットアップ後、IPアドレスを確認し、SSHで接続する。
以後は、SSH越しに操作。

ALFSの実行準備

まず、ALFSの実行に必要なパッケージをインストールする。

sudo apt-get -y install build-essential bison gawk texinfo subversion libncurses-dev 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 を Branch or stable book に
BOOK Settings —> Book Version を 7.2 に
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にコピーする。

もし、上記で BOOK Settings —> Book Version を SVN にした場合は、記録を残しておくために、実行したLFS Book自体もダウンロードしておく。

svn co svn://svn.linuxfromscratch.org/LFS/trunk/BOOK/ ~/LFS-SVN

そして、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クライアントをインストールする際に設定するので今回はスキップ。

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