| .. Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information# |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| http://www.apache.org/licenses/LICENSE-2.0 |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| |
| Importing Amazon Machine Images |
| ------------------------------- |
| |
| The following procedures describe how to import an Amazon Machine Image |
| (AMI) into CloudStack when using the XenServer hypervisor. |
| |
| Assume you have an AMI file and this file is called CentOS\_6.2\_x64. |
| Assume further that you are working on a CentOS host. If the AMI is a |
| Fedora image, you need to be working on a Fedora host initially. |
| |
| You need to have a XenServer host with a file-based storage repository |
| (either a local ext3 SR or an NFS SR) to convert to a VHD once the image |
| file has been customized on the Centos/Fedora host. |
| |
| .. note:: |
| When copying and pasting a command, be sure the command has pasted as |
| a single line before executing. Some document viewers may introduce |
| unwanted line breaks in copied text. |
| |
| To import an AMI: |
| |
| #. Set up loopback on image file: |
| |
| .. code:: bash |
| |
| # mkdir -p /mnt/loop/centos62 |
| # mount -o loop CentOS_6.2_x64 /mnt/loop/centos54 |
| |
| #. Install the kernel-xen package into the image. This downloads the PV |
| kernel and ramdisk to the image. |
| |
| .. code:: bash |
| |
| # yum -c /mnt/loop/centos54/etc/yum.conf --installroot=/mnt/loop/centos62/ -y install kernel-xen |
| |
| #. Create a grub entry in /boot/grub/grub.conf. |
| |
| .. code:: bash |
| |
| # mkdir -p /mnt/loop/centos62/boot/grub |
| # touch /mnt/loop/centos62/boot/grub/grub.conf |
| # echo "" > /mnt/loop/centos62/boot/grub/grub.conf |
| |
| #. Determine the name of the PV kernel that has been installed into the |
| image. |
| |
| .. code:: bash |
| |
| # cd /mnt/loop/centos62 |
| # ls lib/modules/ |
| 2.6.16.33-xenU 2.6.16-xenU 2.6.18-164.15.1.el5xen 2.6.18-164.6.1.el5.centos.plus 2.6.18-xenU-ec2-v1.0 2.6.21.7-2.fc8xen 2.6.31-302-ec2 |
| # ls boot/initrd* |
| boot/initrd-2.6.18-164.6.1.el5.centos.plus.img boot/initrd-2.6.18-164.15.1.el5xen.img |
| # ls boot/vmlinuz* |
| boot/vmlinuz-2.6.18-164.15.1.el5xen boot/vmlinuz-2.6.18-164.6.1.el5.centos.plus boot/vmlinuz-2.6.18-xenU-ec2-v1.0 boot/vmlinuz-2.6.21-2952.fc8xen |
| |
| Xen kernels/ramdisk always end with "xen". For the kernel version you |
| choose, there has to be an entry for that version under lib/modules, |
| there has to be an initrd and vmlinuz corresponding to that. Above, |
| the only kernel that satisfies this condition is |
| 2.6.18-164.15.1.el5xen. |
| |
| #. Based on your findings, create an entry in the grub.conf file. Below |
| is an example entry. |
| |
| .. code:: bash |
| |
| default=0 |
| timeout=5 |
| hiddenmenu |
| title CentOS (2.6.18-164.15.1.el5xen) |
| root (hd0,0) |
| kernel /boot/vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/xvda |
| initrd /boot/initrd-2.6.18-164.15.1.el5xen.img |
| |
| #. Edit etc/fstab, changing “sda1” to “xvda” and changing “sdb” to |
| “xvdb”. |
| |
| .. code:: bash |
| |
| # cat etc/fstab |
| /dev/xvda / ext3 defaults 1 1 |
| /dev/xvdb /mnt ext3 defaults 0 0 |
| none /dev/pts devpts gid=5,mode=620 0 0 |
| none /proc proc defaults 0 0 |
| none /sys sysfs defaults 0 0 |
| |
| #. Enable login via the console. The default console device in a |
| XenServer system is xvc0. Ensure that etc/inittab and etc/securetty |
| have the following lines respectively: |
| |
| .. code:: bash |
| |
| # grep xvc0 etc/inittab |
| co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav |
| # grep xvc0 etc/securetty |
| xvc0 |
| |
| #. Ensure the ramdisk supports PV disk and PV network. Customize this |
| for the kernel version you have determined above. |
| |
| .. code:: bash |
| |
| # chroot /mnt/loop/centos54 |
| # cd /boot/ |
| # mv initrd-2.6.18-164.15.1.el5xen.img initrd-2.6.18-164.15.1.el5xen.img.bak |
| # mkinitrd -f /boot/initrd-2.6.18-164.15.1.el5xen.img --with=xennet --preload=xenblk --omit-scsi-modules 2.6.18-164.15.1.el5xen |
| |
| #. Change the password. |
| |
| .. code:: bash |
| |
| # passwd |
| Changing password for user root. |
| New UNIX password: |
| Retype new UNIX password: |
| passwd: all authentication tokens updated successfully. |
| |
| #. Exit out of chroot. |
| |
| .. code:: bash |
| |
| # exit |
| |
| #. Check `etc/ssh/sshd_config` for lines allowing ssh login using a |
| password. |
| |
| .. code:: bash |
| |
| # egrep "PermitRootLogin|PasswordAuthentication" /mnt/loop/centos54/etc/ssh/sshd_config |
| PermitRootLogin yes |
| PasswordAuthentication yes |
| |
| #. If you need the template to be enabled to reset passwords from the |
| CloudStack UI or API, install the password change script into the |
| image at this point. See :ref:`adding-password-management-to-templates`. |
| |
| #. Unmount and delete loopback mount. |
| |
| .. code:: bash |
| |
| # umount /mnt/loop/centos54 |
| # losetup -d /dev/loop0 |
| |
| #. Copy the image file to your XenServer host's file-based storage |
| repository. In the example below, the Xenserver is "xenhost". This |
| XenServer has an NFS repository whose uuid is |
| a9c5b8c8-536b-a193-a6dc-51af3e5ff799. |
| |
| .. code:: bash |
| |
| # scp CentOS_6.2_x64 xenhost:/var/run/sr-mount/a9c5b8c8-536b-a193-a6dc-51af3e5ff799/ |
| |
| #. Log in to the Xenserver and create a VDI the same size as the image. |
| |
| .. code:: bash |
| |
| [root@xenhost ~]# cd /var/run/sr-mount/a9c5b8c8-536b-a193-a6dc-51af3e5ff799 |
| [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# ls -lh CentOS_6.2_x64 |
| -rw-r--r-- 1 root root 10G Mar 16 16:49 CentOS_6.2_x64 |
| [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# xe vdi-create virtual-size=10GiB sr-uuid=a9c5b8c8-536b-a193-a6dc-51af3e5ff799 type=user name-label="Centos 6.2 x86_64" |
| cad7317c-258b-4ef7-b207-cdf0283a7923 |
| |
| #. Import the image file into the VDI. This may take 10–20 minutes. |
| |
| .. code:: bash |
| |
| [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# xe vdi-import filename=CentOS_6.2_x64 uuid=cad7317c-258b-4ef7-b207-cdf0283a7923 |
| |
| #. Locate a the VHD file. This is the file with the VDI’s UUID as its |
| name. Compress it and upload it to your web server. |
| |
| .. code:: bash |
| |
| [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# bzip2 -c cad7317c-258b-4ef7-b207-cdf0283a7923.vhd > CentOS_6.2_x64.vhd.bz2 |
| [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# scp CentOS_6.2_x64.vhd.bz2 webserver:/var/www/html/templates/ |