如何在具有virt-install和PXE的CentOS 6.0主机服务器上安装CentOS 6.0 KVM来宾

主机服务器(运行CentOS 6.0)只有一个公共IP地址,将承载多个KVM客户机,因此需要在NAT模式下使用虚拟networking交换机configuration。

我以前使用pxelinux来自动安装物理机器,并希望继续使用pxelinux来安装KVM客人机器。 原因是我已经写了一些脚本来生成pxelinuxconfiguration文件,我想重复使用它们。

有人可以提供如何在CentOS 6.0主机伺服器上安装CentOS 6.0 KVM客人的循序渐进指示吗?

我想尽可能地使用命令行,所以我更喜欢virt-install到virt-manager。

主机服务器只有一个LVM卷组:vg0

[root@server ~]# vgs VG #PV #LV #SN Attr VSize VFree vg0 1 3 0 wz--n- 8.18t 97.90g 

首先安装一些要求。 (这可能比实际需要更多)

 yum -y groupinstall "X Window System" yum -y groupinstall "Virtualization Client" yum -y groupinstall "Virtualization" yum -y groupinstall "Virtualization Platform" yum -y groupinstall "Virtualization Tools" yum -y groupinstall "Desktop" yum -y install xorg-x11-fonts-100dpi yum -y install xorg-x11-fonts-75dpi yum -y install xorg-x11-fonts-Type1 xorg-x11-font-utils yum -y install man yum -y install emacs 

正如问题所述,我们已经有一个LVM卷组

 [root@server ~]# vgs VG #PV #LV #SN Attr VSize VFree vg0 1 3 0 wz--n- 8.18t 97.90g 

首先,我们从该LVM卷组创build并定义一个libvirt存储池

 [root@server ~]# cat /tmp/foobar <pool type='logical'> <name>pool0</name> <target> <path>/dev/vg0</path> </target> </pool> [root@server ~]# virsh pool-define /tmp/foobar Pool pool0 defined from /tmp/foobar [root@server ~]# virsh pool-start pool0 Pool pool0 started [root@server ~]# virsh pool-autostart pool0 Pool pool0 marked as autostarted [root@server ~]# virsh pool-list Name State Autostart ----------------------------------------- pool0 active yes 

默认的libvirt已经configuration了虚拟networking。 它被命名为默认 。 在这个例子中,我们将重新定义该虚拟networking,以便我们可以将其用于PXE安装。

 [root@server ~]# virsh net-list Name State Autostart ----------------------------------------- default active yes [root@server ~]# emacs /tmp/default.xml [root@server ~]# cat /tmp/default.xml <network> <name>default</name> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0' /> <ip address='10.0.0.1' netmask='255.255.0.0'> <tftp root='/var/lib/dnsmasq/tftpboot' /> <dhcp> <range start='10.0.0.2' end='10.0.255.255' /> <host mac='02:54:00:13:be:e4' name='virt1.example.com' ip='10.0.0.2' /> <host mac='02:52:2c:a3:11:42' name='virt2.example.com' ip='10.0.0.3' /> <bootp file='/pxelinux.0' /> </dhcp> </ip> </network> 

上面看到的MAC地址02:54:00:13:be:e402:52:2c:a3:11:42只是一些随机的MAC地址。 (请参阅serverfault问题: 如何从Linux命令行生成随机MAC地址 )

 [root@server ~]# virsh net-destroy default Network default destroyed [root@server ~]# virsh net-undefine default Network default has been undefined [root@server ~]# virsh net-define /tmp/default.xml Network default defined from /tmp/default.xml [root@server ~]# virsh net-start default Network default started [root@server ~]# virsh net-autostart default Network default marked as autostarted [root@server ~]# mkdir /var/lib/dnsmasq/tftpboot [root@server ~]# ls -lZd /var/lib/dnsmasq/tftpboot drwxr-xr-x. root root unconfined_u:object_r:dnsmasq_lease_t:s0 /var/lib/dnsmasq/tftpboot [root@server ~]# yum install syslinux [root@server ~]# rpm -ql syslinux | grep pxelinux.0 /usr/share/syslinux/gpxelinux.0 /usr/share/syslinux/pxelinux.0 [root@server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/dnsmasq/tftpboot/ [root@server ~]# cd /var/lib/dnsmasq/tftpboot/ [root@server tftpboot]# wget -O centos-6-vmlinuz.x86_64 http://ftp.funet.fi/pub/Linux/mirrors/centos/6.0/os/x86_64/images/pxeboot/vmlinuz [root@server tftpboot]# wget -O centos-6-initrd.img.x86_64 http://ftp.funet.fi/pub/Linux/mirrors/centos/6.0/os/x86_64/images/pxeboot/initrd.img [root@server tftpboot]# mkdir /var/lib/dnsmasq/tftpboot/pxelinux.cfg [root@server tftpboot]# cd /var/lib/dnsmasq/tftpboot/pxelinux.cfg 

上面使用的MAC地址02:54:00:13:be:e4需要configuration文件名01-02-54-00-13-be-e4 。 换句话说,预先安装01-并将其转换为-

 [root@server pxelinux.cfg]# emacs 01-02-54-00-13-be-e4 [root@server pxelinux.cfg]# cat 01-02-54-00-13-be-e4 default local prompt 1 timeout 50 label local localboot 0 label install kernel /centos-6-vmlinuz.x86_64 append initrd=/centos-6-initrd.img.x86_64 ks=http://www.example.com/kickstart-files/virt1.example.com.txt device=eth0 ramdisk_size=9216 lang= devfs=nomount [root@server pxelinux.cfg]# cd 

这里我们假定virt1.example.com的kickstart文件可以从http://www.example.com/kickstart-files/virt1.example.com.txt下载&#x3002;

现在我们运行service libvirtd reload 。 这似乎是dnsmasq tftpserver正常运行所必需的。

 [root@server ~]# service libvirtd reload Reloading libvirtd configuration: [ OK ] 

现在运行virt-install来创build具有20 Gb磁盘空间的KVM guest虚拟机virt1.example.com。

 [root@server ~]# virt-install --debug --hvm --vnc --name virt1.example.com --os-type=linux --os-variant=rhel6 --pxe --network network=default,model=e1000,mac=02:54:00:13:be:e4 --disk pool=pool0,size=20 --ram 1024 --vcpus=1 

现在,graphics程序virt-viewer会popup一个X窗口。 当在启动顺序中看到“boot:”时,请键入install

关于virt-install命令行选项的说明:使用model=virtio对我不起作用,但幸运的是, model=e1000工作得很好。