如何使用 virt-install 和 PXE 在 CentOS 6.0 主机服务器上安装 CentOS 6.0 KVM 客户机

如何使用 virt-install 和 PXE 在 CentOS 6.0 主机服务器上安装 CentOS 6.0 KVM 客户机

主机服务器(运行 CentOS 6.0)只有一个公共 IP 地址,并且将托管许多 KVM 客户机,因此需要在 NAT 模式下使用虚拟网络交换机配置。

我以前曾使用 pxelinux 进行物理机的自动安装,现在想继续使用 pxelinux 进行 KVM-guest 的安装。原因是我已经编写了一些生成 pxelinux 配置文件的脚本,我想重复使用它们。

有人可以提供如何在 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

答案1

首先安装一些必需的东西。(这可能比实际需要的多)

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 卷组创建并定义一个 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 已经配置了一个虚拟网络。它名为默认. 在此示例中,我们将重新定义该虚拟网络,以便可以将其用于 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:是: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:是:e4上面使用需要配置文件名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

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

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

现在运行 virt-install 来创建具有 20 Gb 磁盘空间的 KVM 客户机 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 

现在图形程序virt-viewer将弹出一个 X 窗口。在启动过程中看到“boot: ”时,请键入install

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

相关内容