A Debian GNU/Linux Wheezy Beta 2 AMI is uploaded to OpenStack. It really is an Ext4 file system that OpenStack will resize to use all the size of the primary disk of the instance. An AMI is made of three files, the kernel (the AKI), the ramdisk (the ARI) used at boot time and the file system to boot from (the AMI). In OpenStack, the AMI is specified to the nova boot … –image command line.
# glance index name='Debian GNU/Linux Wheezy Beta2' ID ------------------------------------ a8f86804-3927-419e-9612-ad35cbafefa0 Name Disk Format Container Format ------------------------------ -------------------- -------------------- Debian GNU/Linux Wheezy Beta2 ami ami
It contains references to the required AKI and ARI, as shown below:
# nova image-show a8f86804-3927-419e-9612-ad35cbafefa0 +---------------------+--------------------------------------+ | Property | Value | +---------------------+--------------------------------------+ | created | 2012-09-30T15:26:43Z | | id | a8f86804-3927-419e-9612-ad35cbafefa0 | | metadata kernel_id | 2e714ea3-45e5-4bb8-ab5d-92bfff64ad28 | | metadata ramdisk_id | 6458acca-24ef-4568-bb2b-e52322a5a11c | | minDisk | 0 | | minRam | 0 | | name | Debian GNU/Linux Wheezy Beta2 | | progress | 100 | | status | ACTIVE | | updated | 2012-09-30T15:26:45Z | +---------------------+--------------------------------------+
A 1G disk image is initialized with:
# kvm-img create -f raw server.img 1G
The wheezy ISO image is downloaded:
# wget http://cdimage.debian.org/cdimage/wheezy_di_beta2/amd64/iso-cd/debian-wheezy-DI-b2-amd64-netinst.iso
It is booted with kvm:
# kvm -m 256 -cdrom debian-wheezy-DI-b2-amd64-netinst.iso \ -drive file=server.img,if=scsi,index=0 -boot d -net nic \ -net user -vnc :0
And installed interactively with
# xtightvncviewer :0
so that it uses a single primary partition of the disk. There is no need to setup the users, the user key will be injected in the /root/.ssh/authorized_key file by OpenStack itself. The partition is then extracted with:
# kpartx -av server.img # dd if=/dev/mapper/loop0p1 of=wheezy.tmp
The minimum size of the partition is calculated, to further reduce the size of the image with:
# resize2fs -P wheezy.tmp resize2fs 1.42.5 (29-Jul-2012) Estimated minimum size of the filesystem: 148279
and the file is cropped accordingly with
# dd if=wheezy.tmp of=wheezy count=148279 bs=4k
and checked for consistency with:
# fsck.ext4 -f wheezy e2fsck 1.42.5 (29-Jul-2012) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information wheezy: 21808/40880 files (0.5% non-contiguous), 141610/148458 blocks # ls -lh wheezy -rw-r--r-- 1 root root 580M Sep 30 17:48 wheezy
The file system is then mounted to get access to the files it contains:
# mount wheezy /mnt
The kernel and the initrd files are first uploaded to glance with:
# mount /var/lib/nova/wheezy /mnt # glance add is_public=true name='initrd-3.2.0-3-amd64' \ disk_format=ari container_format=ari < /mnt/boot/initrd.img-3.2.0-3-amd64 Uploading image 'initrd-3.2.0-3-amd64' Added new image with ID: 6458acca-24ef-4568-bb2b-e52322a5a11c
# glance add is_public=true name='vmlinuz-3.2.0-3-amd64' \
disk_format=aki container_format=aki \
< /mnt/boot/vmlinuz-3.2.0-3-amd64
Uploading image 'vmlinuz-3.2.0-3-amd64'
Added new image with ID: 2e714ea3-45e5-4bb8-ab5d-92bfff64ad28
# umount /mnt
and associated to the file system contained in the wheezy file with:
# glance add is_public=true name='Debian GNU/Linux Wheezy Beta2' \ disk_format=ami container_format=ami \ kernel_id=2e714ea3-45e5-4bb8-ab5d-92bfff64ad28 \ ramdisk_id=6458acca-24ef-4568-bb2b-e52322a5a11c \ < /var/lib/nova/wheezy Uploading image 'Debian GNU/Linux Wheezy Beta2' Added new image with ID: a8f86804-3927-419e-9612-ad35cbafefa0
And check that all is set as expected with
# nova image-list | grep 3.2.0 | 2e714ea3-45e5-4bb8-ab5d-92bfff64ad28 | vmlinuz-3.2.0-3-amd64 | ACTIVE | | | 6458acca-24ef-4568-bb2b-e52322a5a11c | initrd-3.2.0-3-amd64 | ACTIVE | | # nova image-show a8f86804-3927-419e-9612-ad35cbafefa0 +---------------------+--------------------------------------+ | Property | Value | +---------------------+--------------------------------------+ | created | 2012-09-30T15:26:43Z | | id | a8f86804-3927-419e-9612-ad35cbafefa0 | | metadata kernel_id | 2e714ea3-45e5-4bb8-ab5d-92bfff64ad28 | | metadata ramdisk_id | 6458acca-24ef-4568-bb2b-e52322a5a11c | | minDisk | 0 | | minRam | 0 | | name | Debian GNU/Linux Wheezy Beta2 | | progress | 100 | | status | ACTIVE | | updated | 2012-09-30T15:26:45Z | +---------------------+--------------------------------------+
It is then used to create a new instance and check that it actually works:
# nova boot --image a8f86804-3927-419e-9612-ad35cbafefa0 \ --flavor 7 --key_name loic --availability_zone=bm0002 --poll razor # nova list +--------------------------------------+-------+--------+------------------------+ | ID | Name | Status | Networks | +--------------------------------------+-------+--------+------------------------+ | d4bde55e-87e0-4c9e-adf7-35a294e02485 | razor | ACTIVE | novanetwork=10.145.6.3 | +--------------------------------------+-------+--------+------------------------+ # ssh -t -A root@bm0002.the.re ssh root@10.145.6.3 Linux wheezy 3.2.0-3-amd64 #1 SMP Mon Jul 23 02:45:17 UTC 2012 x86_64 ... root@wheezy:~# df -h Filesystem Size Used Avail Use% Mounted on rootfs 10G 693M 9.4G 7% / udev 10M 0 10M 0% /dev tmpfs 50M 156K 50M 1% /run /dev/vda 10G 693M 9.4G 7% / tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 100M 0 100M 0% /run/shm root@wheezy:~#