因為Ubuntu12.10 剛發布,立刻試一下。這次安裝KVM的時候,有點不同。就是安裝Ubuntu server的時候,選中了virtual server。
這樣會導致ubuntu-virt-server和kvm-ipxe已經被在系統安裝時裝好。
因此,進入系統後,只需要安裝:
apt-get install python-vm-builder
之後並不需要退出重新登入。這個對自動化部署很有協助,因此還是推薦在安裝Ubuntu系統的時候選中virtual server。
bridge-utils 也已經安裝好了。同樣不需要安裝。
順便說一下,現在使用新的命令重啟網路:
service networking restart
注意,現在host機器仍然不能連外網,用
dhclient br0 命令也不行,而且報錯:RTNETLINK answers: File exists
檢查route表:
ip route listdefault via 10.112.18.1 dev br0 10.112.18.0/24 dev br0 proto kernel scope link src 10.112.18.161 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
發現和12.04不同的是,default規則已經有了,但是網關的IP地址錯了,應該是254.所以用下面的語句刪除後再添加正確的規則:
route del defaultroute add default gw 10.112.18.254 br0
好,外網聯通了。
繼續思考,為什麼gateway設定成了10.112.18.1, 是不是因為從網上複製的網卡設定的資訊不加修改的弄過來造成的。
果然不假,修改/etc/network/interfaces檔案中br的配置:
auto br0iface br0 inet static address 10.112.18.161 network 10.112.18.0 netmask 255.255.255.0 broadcast 10.112.18.255 gateway 10.112.18.254 dns-nameservers 8.8.8.8 8.8.4.4 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12
現在gateway設定成了254,我們公司內部的正確網關IP地址。
不需要什麼route del/add操作了。
複製有害,:)
vmbuilder的詳細選項只能看原始碼了。通過man或者這個連結可以看到一部分參數介紹:
http://manpages.ubuntu.com/manpages/precise/man1/vmbuilder.1.html
然後可以安裝了,為了簡化起見,我寫了一個自動化建立vm的指令碼,
建立時需要傳遞vm_name和ip作為參數:
#!/bin/bash source ../common/tool.sh# check input parameters if [ -z $1 ]then echo "command usage: ./install.sh vm_name ip_address" exit 0fiif [ $1 = "--help" ]then echo "command usage: ./create_vm.sh vm_name ip_address" exit 0fiif [ -z $2 ]then echo "command usage: ./create_vm.sh vm_name ip_address" echo "the 2nd parameter is required" exit 0firemoveFolder "/var/lib/libvirt/images/$1/"removeFile "/etc/libvirt/qemu/$1"mkdir -p "/var/lib/libvirt/images/$1/mytemplates/libvirt"cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/$1/mytemplates/libvirt/cp vmbuilder.partition /var/lib/libvirt/images/$1/cd /var/lib/libvirt/images/$1/echo `vmbuilder kvm ubuntu --suite=quantal --flavour=virtual --arch=amd64 --proxy=http://10.112.18.178:3142 -o --libvirt=qemu:///system --ip=$2 --gw=10.112.18.254 --part=vmbuil\der.partition --templates=mytemplates --user=carrier --name=carrier --pass=123456 --addpkg=openssh-server --mem=2048 --hostname=$1 --bridge=br0 --debug --verbose`echo `virsh define /etc/libvirt/qemu/$1.xml`echo `virsh start $1`
這裡proxy參數指定了我在公司內網建立的ubuntu apt-cacher 伺服器,
記憶體預設指定2G.
運行方法就是
create_vm.sh vm1 10.112.18.191
但是會收到錯誤:
Selecting previously unselected package linux-image-virtual.Unpacking linux-image-virtual (from .../linux-image-virtual_3.5.0.17.19_amd64.deb) ..., stderr: grep: /proc/cpuinfo: No such file or directory
這個是Ubuntu 12.10內建的vmbuilder的bug,原因是沒有mount /proc目錄,這裡討論了這個問題,並提供了臨時解決方案:
https://bugs.launchpad.net/ubuntu/+source/vm-builder/+bug/1037607
下面通過我的命令打上臨時的補丁:
wget https://launchpadlibrarian.net/120169451/usr_share_pyshared_VMBuilder_plugins_ubuntu_dapper.py.diffcp /usr/share/pyshared/VMBuilder/plugins/ubuntu/dapper.py ./dapper.py_bkpatch /usr/share/pyshared/VMBuilder/plugins/ubuntu/dapper.py ./usr_share_pyshared_VMBuilder_plugins_ubuntu_dapper.py.diff
再運行:
create_vm.sh vm1 10.112.18.191
成功建立。
進入虛擬機器後,需要調整時區:
dpkg-reconfigure tzdata
然後選擇Asia/Harbin 即可。