做 CentOS 镜像的过程和去年写的那篇为 OpenStack Nova 制作 Ubuntu 镜像的步骤差不多,不过这半年 OpenStack 发展神速,比以前要稳定多了,有些步骤可以省了,而且有些命令工具、参数、功能都有改动,比如以前的 uec-publish-image 改成了现在的 cloud-publish-image,功能也有变化。下面的制作镜像步骤在 Ubuntu 11.10 + OpenStack Diablo Release 上完成。
安装 CentOS 镜像
下载要安装的 CentOS 版本,这里选用最新的 CentOS 6.2:
$ wget http://mirrors.kernel.org/centos/6.2/isos/x86_64/CentOS-6.2-x86_64-minimal.iso
创建一个 10GB 大小的 “硬盘”(raw 格式),最好用一个较小的 “硬盘”,体积太大提交到云里会花很长时间,而且每次运行实例也会花很长时间:
$ kvm-img create -f raw centos.img 10G Formatting 'centos.img', fmt=raw size=10737418240
使用刚才下载的 CentOS “安装盘” 和刚创建的 “硬盘” 引导启动系统,用 -vnc 参数打开 vnc 访问,这样可以从其他机器登录到这个界面安装系统:
$ sudo kvm -m 512 -cdrom CentOS-6.2-x86_64-minimal.iso \ -drive file=centos.img -boot d -net nic -net tap -nographic -vnc :0
用 vncviewer 登录后按照屏幕提示完成 CentOS 安装。需要注意的是在分区阶段把 10GB 硬盘全部划分成一个 ext4 root 分区,不要创建多个分区也不要创建 swap 区:
$ vncviewer 172.16.39.111:5900
安装完后会自动重启,如果没有重启的话按照下面的命令启动刚刚安装好的虚拟机镜像 centos.img,如果出现 failed to find romfile “pxe-rtf8139.bin” 的错误提示可以通过安装 kvm-pxe 解决:
$ sudo kvm -m 512 -drive file=centos.img -boot c -net nic -net tap \ -nographic -vnc :0 kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin" $ sudo apt-get install kvm-pxe
再次用 vnc 登录虚拟机镜像,安装一些必要工具(因为这个镜像将会是模板,所以最好保持最简最小化):
$ vncviewer 172.16.39.111:5900 # yum update # yum upgrade # yum install openssh-server # chkconfig sshd on
修改分区加载表(/etc/fstab),注释或删除以前的,加上 UUID=cec-rootfs 一行:
# vi /etc/fstab #UUID=47a90bea-2d88-4c82-a335-09c1533b1538 / ext4 defaults 1 1 LABEL=cec-rootfs / ext4 defaults 0 0
在网络接口配置里面注释或删除这行 #HWADDR= 一行,启用 DHCP:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" #HWADDR="00:11:22:12:34:56" #NM_CONTROLLED="yes" BOOTPROTO=dhcp ONBOOT="yes"
注射 ssh key 以便外界可以用 ssh -i mykey.priv root@host 的形式无密码登录到虚拟机实例,在 /etc/rc.local 文件中加入下面这些:
# vi /etc/rc.local ... mkdir -p /root/.ssh echo >> /root/.ssh/authorized_keys curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys echo "AUTHORIZED_KEYS:" echo "--------------------" cat /root/.ssh/authorized_keys echo "--------------------"
别忘了还需要修改 sshd 的配置实现无密码登录:
# vi /etc/ssh/sshd_config ... RSAAuthentication yes PubkeyAuthentication yes PermitRootLogin without-password ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no
需要关闭 SELINUX,否则即使上面 ssh 设定允许 root 无密码登录也无效:
# vi /etc/selinux/config SELINUX=disabled SELINUXTYPE=targeted
70-persistent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口,关闭虚拟机准备发布镜像:
# rm -rf /etc/udev/rules.d/70-persistent-net.rules # shutdown -h now
发布 CentOS 镜像
CentOS 镜像已经做好了,现在可以发布到云里了:
$ cloud-publish-image amd64 centos.img mybucket ami-00000007 mybucket/centos.img.manifest.xml
等待一段时间后出现 ami-00000008 mybucket/centos.img.manifest.xml 表示我们刚制作的 CentOS 镜像已经正式发布到云里,以后就可以以这个镜像为模板来快速生成虚拟机实例(instance)。可以通过 euca-describe-images 来查看:
$ euca-describe-images IMAGE ami-00000008 images/centos.img.manifest.xml available private x86_64 machine instance-store
第一个 CentOS 虚拟机实例
有了 CentOS 镜像(模板)以后我们就可以以这个 “镜像” 为模板来为云计算用户创建 n 个 CentOS 虚拟机(操作系统)实例,不过在运行实例之前需要 key:
$ euca-add-keypair mykey > mykey.priv $ chmod 600 mykey.priv $ euca-describe-keypairs KEYPAIR mykey 76:7d:93:88:a0:e5:3e:5d:4b:62:cd:85:c5:23:7a:05 $ euca-run-instances -k mykey -t m1.small ami-00000008 RESERVATION r-hzwwif81 vpseecloud default INSTANCE i-0000002a ami-00000008 pending vpsee (vpseecloud, None) 0 m1.small 2012-02-01T14:26:51Z unknown zone aki-00000001 ami-00000000
上面使用 euca-run-instances 创建一个实例后可以用 nova-manage 命令看到:
$ euca-describe-instances RESERVATION r-z973l7mm vpseecloud default INSTANCE i-0000002a ami-00000008 172.16.39.200 172.16.39.200 running vpsee (vpseecloud, cloud00) 0 m1.small 2012-02-01T13:56:02Z nova ami-00000000 ami-00000000
还记得在 Ubuntu 上安装和配置 OpenStack Nova 的创建网络部分吗?看看现在云里面 IP 的分配情况:
$ sudo nova-manage network list id IPv4 IPv6 start address DNS1 DNS2 VlanID project uuid 1 172.16.38.0/23 None 172.16.38.2 8.8.4.4 None None None None
刚才用 euca-run-instances 启动的一个 ubuntu 虚拟机实例的 IP 就是从 172.16.38.2 开始的,目前分配的 IP 是 172.16.39.200(从 euca-describe-instances 可以看出来),所以 ssh 登录这个 IP 就登上了我们的 CentOS 云虚拟机:
$ ssh -i mykey.priv root@172.16.39.200 [root@server-25 ~]#
想制作 Windows 虚拟机镜像的话可以看这篇:为 OpenStack Nova 制作 Windows 镜像。
原文:http://www.vpsee.com/2012/02/create-centos-kvm-image-for-openstack-nova/