■2013/02/17追記
CentOSコミュニティで公式AMIを提供しはじめましたのでそちらを使ったほうがよいと思います。
CentOS 6.0 x86_64のAMIベースになるディスクイメージを作成してみました。
CentOS 5.0用を作ったときと違ってcloud-initも最初から入れちゃいます。
- 作業用のRed Hat 6系列Linuxを環境を準備(EC2上に用意)
- 2GiBのEBSボリュームを用意してCentOS 6.0を最小構成インストール
- PV-GRUBでブートできるようにinitrdやgrub.confを構成
- 仕上がったEBSボリュームのスナップショットを取得しAMIとして登録
5.0のときと違って、最初から最後までEC2上で作業していきます。
今回参考にした情報は以下です。
From a Loopback – Amazon Elastic Compute Cloud
Enabling Your Own Linux Kernels – Amazon Elastic Compute Cloud
作業用マシン準備
EC2標準のRHEL6(x86_64)を起動します。
EBSボリュームマウント先として/mnt/ec2-fsを作成します。
[root@localhost ~]# mkdir /mnt/ec2-fs
selinux関連パッケージにエラーになるため、作業マシンでは無効化しておきます。
[root@localhost ~]# setenforce 0
EBS準備
2GiBのEBSボリュームを用意して/dev/xvdjにマウントします。xvdjにしているのはRHEL6でデバイスファイルが用意されていたから。
[root@localhost ~]# mkfs.ext4 /dev/xvdj [root@localhost ~]# mount /dev/xvdj /mnt/ec2-fs
yumインストール用の設定ファイルを作成
6.0素の最小構成しますので、baseリポジトリのみ有効(updatesは無効)にしています。
6.0のリポジトリは既にvaultに移っていますので、baseurlではそちらを指定します。
[root@localhost ~]# vi centos-6-0-x86_64-yum.conf [root@localhost ~]# cat centos-6-0-x86_64-yum.conf [main] cachedir=/var/cache/yum debuglevel=2 logfile=/var/log/yum.log exclude=*-debuginfo gpgcheck=0 obsoletes=1 reposdir=/dev/null [base] name=CentOS-6.0 - Base baseurl=http://vault.centos.org/6.0/os/x86_64/ [updates] name=CentOS 6.0 - Updates baseurl=http://vault.centos.org/6.0/updates/x86_64/ enabled=0
必要最低限のパッケージをインストール
パッケージグループCoreをインストールします。
パッケージkerel-xenをインストールします。
[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y groupinstall Core : Install 181 Package(s) Total download size: 88 M Installed size: 324 M :
展開サイズは324Mですので、2GiBのEBSでも十分足ります。
/etc/fstab作成
kernelパッケージのインストール時にinitrdが生成されますが、その際fstabの記述に従ってrootパーティションのマウント指定が決定されますので記述を用意します。
ちなみに作業マシンのRHEL6とほぼ同じになります。
[root@localhost ~]# vi /mnt/ec2-fs/etc/fstab [root@localhost ~]# cat /mnt/ec2-fs/etc/fstab LABEL=_/ / ext4 defaults 1 1 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0
fstab指定に合わせてLABELを作成します。
[root@localhost ~]# e2label /dev/xvdj _/ [root@localhost ~]# e2label /dev/xvdj _/
/etc/modprobe.conf作成
こちらもfstab同様にkernelインストール前に実施しておき、initrdイメージにxen関連のモジュールが含まれるようにします。
[root@localhost ~]# cat >> /mnt/ec2-fs/etc/modprobe.conf << EOF alias eth0 xennet alias scsi_hostadapter xenblk EOF [root@localhost ~]# tail -2 /mnt/ec2-fs/etc/modprobe.conf alias eth0 xennet alias scsi_hostadapter xenblk
パッケージkernelをインストールします。
[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y install kernel
クリーンアップ
[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs clean all
デバイスファイルの作成
[root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x console [root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x null [root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x zero
/boot/grub/grub.conf作成
EBS内のkernelで起動できるように用意しておきます。
[root@localhost ~]# vi /mnt/ec2-fs/boot/grub.conf [root@localhost ~]# cat /mnt/ec2-fs/boot/grub.conf default=0 timeout=0 hiddenmenu title CentOS (2.6.32-71.el6) root (hd0) kernel /boot/vmlinuz-2.6.32-71.el6.x86_64 root=LABEL=_/ ro initrd /boot/initramfs-2.6.32-71.el6.x86_64.img [root@localhost ~]# cd /mnt/ec2-fs/boot [root@localhost boot]# ln -s grub.conf menu.lst [root@localhost boot]# cd
/etc/sysconfig/network作成
[root@localhost ~]# vi /mnt/ec2-fs/etc/sysconfig/network [root@localhost ~]# cat /mnt/ec2-fs/etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no
/etc/sysconfig/network-scripts/ifcfg-eth0作成
[root@localhost ~]# vi /mnt/ec2-fs/etc/sysconfig/network-scripts/ifcfg-eth0 [root@localhost ~]# cat /mnt/ec2-fs/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=on
/etc/resolv.conf作成
[root@localhost ~]# touch /mnt/ec2-fs/etc/resolv.conf
SELinux無効化
/etc/selinux/configのSELINUXをdisabledに変更します。
[root@localhost ~]# vi /mnt/ec2-fs/etc/selinux/config [root@localhost ~]# grep ^SELINUX= /mnt/ec2-fs/etc/selinux/config SELINUX=disabled
cloud-initパッケージ導入用にEPELリポジトリ設定をインストールし、AMI構築用のyum設定ファイルに結合します。
[root@localhost ~]# rpm --root=/mnt/ec2-fs -Uvh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-7.noarch.rpm [root@localhost ~]# cat /mnt/ec2-fs/etc/yum.repo.d/epel.repo >> centos-6-0-x86_64-yum.conf
cloud-initパッケージをインストールします。
[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y install cloud-init
EPELリポジトリは通常利用しないよう無効化しておきます。
[root@localhost ~]# vi /mnt/ec2-fs/etc/yum.repos.d/epel.repo [root@localhost ~]# grep ^enabled /mnt/ec2-fs/etc/yum.repos.d/epel.repo enabled=0 enabled=0 enabled=0
ec2-user作成
cloud-initのデフォルト構成で初回ログインユーザーになるec2-userを作成します。
[root@localhost ~]# chroot /mnt/ec2-fs /usr/sbin/useradd ec2-user [root@localhost ~]#
EBSボリュームのアンマウント
[root@localhost ~]# umount /mnt/ec2-fs
アンマウントしたEBSボリュームのスナップショットを取得し、AMI登録すれば完了なはず。
Sorry, the comment form is closed at this time.