為 OpenStack Nova 制作 CentOS 鏡像
做 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/