orenoblog

エンジニアになりたいExcel方眼紙erの物語

イメージを自作する(ubuntu)

こんにちは。
前回構築した環境で稼働させるイメージを作りたいと思います。
公式ドキュメントを参考にしています。

イメージの保存先:server2@/mnt/data/images
ゲストOS:Ubuntu 11.04
ホスト名:ubuntu
0.イメージ保存先の作成

server2$ mkfs -t ext4 /dev/sdc1
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
19537920 inodes, 78142160 blocks
3907108 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
2385 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
server2$ sudo mkdir /mnt/data
server2$ sudo mount /dev/sdc1 /mnt/data

1.OSインストール&セットアップ
KVMでイメージを作成します。

server2$ cd /mnt/data
server2$ sudo mkdir images
server2$ cd images
server2$ wget http://releases.ubuntu.com/natty/ubuntu-11.04-server-amd64.iso
server2$ kvm-img create -f raw ubuntu.img 10G
Formatting 'ubuntu.img', fmt=raw size=10737418240 
server2$ sudo kvm -m 512 -cdrom ubuntu-11.04-server-amd64.iso -drive file=ubuntu.img,if=scsi,index=0 -boot d -net nic -net user -nographic -vnc :1

パーティションレイアウトは[/]のみのシングル構成にします。

server2$ sudo kvm -m 512 -drive file=ubuntu.img,if=scsi,index=0,boot=on -boot c -net nic -net user -nographic -vnc :1

OSインストール後,セットアップを行います。
ssh-server,cloud-initをインストールし、udevのルールを削除します。

ubuntu$ sudo apt-get update
ubuntu$ sudo apt-get upgrade
ubuntu$ sudo apt-get install openssh-server cloud-init
ubuntu$ sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
ubuntu$ sudo shutdown -h -y now
server2$ cd /mnt/data/images
server2$ sudo losetup -f ubuntu.img
server2$ sudo losetup -a
/dev/loop0: [0821]:2097154 (/mnt/data/images/ubuntu.img)
 sudo fdisk -cul /dev/loop0

ディスク /dev/loop0: 10.7 GB, 10737418240 バイト
ヘッド 255, セクタ 63, シリンダ 1305, 合計 20971520 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00071e03

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/loop0p1   *        <span class="deco" style="font-weight:bold;font-style:italic;">2048</span>    20969471    10483712   83  Linux
※開始セクタ番号を取得します
server2$ sudo losetup -d /dev/loop0

イメージのオフセットを設定します。
先ほどメモした開始セクタ番号*512バイトブロックを設定します。
server2$ sudo losetup -f -o 1048576 ubuntu.img
server2$ sudo losetup -a
server2$ sudo dd if=/dev/loop0 of=ubuntu-server.img
20969472+0 記録始め
20969472+0 記録終わり
10736369664 バイト (11 GB) コピー終了, 103.035 s, 104 MB/s
server2$ mkdir /mnt/data/images/ubuntu-server
server2$ sudo mount -o loop /mnt/data/images/ubuntu-server.img /mnt/data/images/ubuntu-server
server2$ sudo vi ubuntu-server/etc/fstab
UUID=4f688ab3-6c4a-476f-9b1e-550b3e910936 /               ext4    errors=remount-ro 0       1UUID=uec-rootfs /               ext4    defaults 0       0
server2$ cd /mnt/data/images/ubunt-server/boot
server2$ sudo cp vmlinuz-2.6.38-8-server initrd.img-2.6.38-8-server /mnt/data/images
server2$ cd /mnt/data/images
server2$ sudo umount ubuntu-server
server2$ sudo tune2fs -L uec-rootfs ubuntu-server.img 

※イメージ登録の前に
今回イメージを作成する為に利用した[server2]にはeuca2oolsがインストールされていません。
uec-publish-image等を利用できないので、準備します。

server2$ sudo apt-get install euca2ools
--インストール後,以前server1で作成しておいたnovacreds.zipを取得して、設定

イメージの登録
作成したイメージを登録します。

※10/30今回はここまで
イメージ登録中にImageService(Glance)を稼働させていたserver1のディスクがパンクしてしまい失敗。
ImageService(Glance)稼働サーバを変更してからリトライしたいと思います。

server2$ sudo -i
server2# uec-publish-image -t image --kernel-file vmlinuz-2.6.38-8-server --ramdisk-file initrd.img-2.6.38-8-server amd64 ubuntu-server.img bucket
server2# euca-describe-images
※登録完了
IMAGE	ami-00000006	bucket/ubuntu-server.img.manifest.xml		untarring	private		x86_64	machine	aki-00000004	ari-00000005	instance-store
IMAGE	ari-00000005	bucket/initrd.img-2.6.38-8-server.manifest.xml		available	private		x86_64	ramdisk	 	 	instance-store
IMAGE	aki-00000004	bucket/vmlinuz-2.6.38-8-server.manifest.xml		available	private		x86_64	kernel	 	 	instance-store
IMAGE	ami-00000003	demo/tty (ami-tty)		available	public	x86_64	machine	aki-00000001	ari-00000002	instance-store
IMAGE	ari-00000002	nova/tty-ramdisk (ari-tty)		available	public		x86_64	ramdisk	 	 	instance-store
IMAGE	aki-00000001	nova/tty-kernel (aki-tty)		available	public		x86_64	kernel	 	 	instance-store
# euca-run-instances ami-6
※起動に失敗
ApiError: Image must be available

※参考:原因調査
ImageServiceが稼動しているサーバ(server1)にログイン

server1$ sudo -i
server1# glance index
※登録したはずのイメージはGlanceには登録されていない。
ID               Name                           Disk Format          Container Format     Size          
---------------- ------------------------------ -------------------- -------------------- --------------
3                ami-tty                        ami                  ami                        25165824
2                ari-tty                        ari                  ari                         5882349
1                aki-tty                        aki                  aki                         4404752

※なんとfilesystem full
# df -m
Filesystem           1M-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/vg00--ubuntu-root
                         13139     12416        56 100% /
none                      3967         1      3967   1% /dev
none                      3975         0      3975   0% /dev/shm
none                      3975         1      3975   1% /var/run
none                      3975         0      3975   0% /var/lock