作者:轩然 | 来源:互联网 | 2014-05-27 21:08
折腾了几天,总算把自动化部署虚拟机实现了,特此记录备忘。裸机是CentOS6.3的系统,安装KVM过程如下:yuminstallkvmlibvirtpython-virtinstqemu-kvmyuminstallbridge-utils然后注意需要配置桥接网卡,将默认的网卡配置复制一份为ifcfg-br0后再行
折腾了几天,总算把自动化部署虚拟机实现了,特此记录备忘。
裸机是 CentOS 6.3 的系统,安装 KVM 过程如下:
yum install kvm libvirt python-virtinst qemu-kvm
yum install bridge-utils
然后注意需要配置桥接网卡,将默认的网卡配置复制一份为 ifcfg-br0 后再行修改:
vi /etc/sysconfig/network-scripts/ifcfg-br0
------
DEVICE=br0
NM_COnTROLLED=yes
OnBOOT=yes
TYPE=Bridge
DNS2=218.85.152.99
DNS1=192.168.12.12
IPV6INIT=no
USERCTL=no
IPADDR=192.168.12.28
PREFIX=24
NETMASK=255.255.255.0
GATEWAY=192.168.12.1
DEFROUTE=yes
NAME="System br0"
------
注意还需要更改之前默认网卡的设置,注意需加上 BRIDGE=br0 的内容
vi /etc/sysconfig/network-scripts/ifcfg-em1
------
DEVICE=em1
BOOTPROTO=none
HWADDR=90:b1:1c:44:f8:39
NM_COnTROLLED=yes
OnBOOT=yes
TYPE=Ethernet
UUID="02801faa-9472-433f-a44c-6720fa43e983"
IPV6INIT=no
USERCTL=no
DEFROUTE=yes
NAME="System em1"
BRIDGE=br0
------
重启网络服务,这里可能需要略等待几十秒才能生效。
service network restart
ifconfig
继续安装 askpass 等
yum install qemu-system-x86 openssh-askpass
配置自动安装文件 ks.cfg,将 ks.cfg
需要放置到网络某个web服务器下,当时因为这点耗费了大量的时间,因为网上都没有此处的详细说明,原本我以为 ks.cfg
在本地磁盘应该就没有问题的,看到官方的站点也有 ks.cfg 文件放置本地的相关选项说明。结果在实际安装中,却发现毫无反应,最后接上
VNC
看到屏幕提示才恍然大悟,在虚拟机安装的环境下获得的磁盘路径与外部是不同的,故此无法直接访问到原始磁盘上的文件,故此将其放置到网络的某个web服务器下是相对简单的方法。
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto static --ip 192.168.12.42 --netmask 255.255.255.0 --gateway 192.168.12.1 --nameserver 192.168.12.12 --noipv6
rootpw --iscrypted $6$q/FN6W/H53u7VUng$IgfhSe.nsxqc//ggSYisTfUzoME3MLyJeMDA9uEgCKR0OuXrvd8M9YCItnxgPDf9OIH3HFEckvxU4EttrVwXW/
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --size=200
part swap --size=512
part / --fstype=ext4 --grow --size=200
reboot
%packages
@core
@additional-devel
@base
@development
@server-policy
@system-admin-tools
libXinerama-devel
xorg-x11-proto-devel
startup-notification-devel
libgnomeui-devel
libbonobo-devel
libXau-devel
libgcrypt-devel
popt-devel
libXrandr-devel
libxslt-devel
libglade2-devel
gnutls-devel
sgpio
mtools
jpackage-utils
%post
(
sed -i 's/LABEL=\//& cOnsole=ttyS0/' /boot/grub/grub.conf
echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >> /etc/inittab
echo "ttyS0" >> /etc/securetty
) 1>/root/post_install.log 2>&1
将安装镜像传到本地磁盘,然后开始自动安装过程:
virt-install --autostart --name VM01 -r 2048 --vcpus=1 --os-variant=rhel6 --accelerate -v -w bridge:br0 --disk path=/var/lib/libvirt/images/VM01.img,size=12 -l /var/lib/libvirt/images/CentOS-6.3-x86_64-bin-DVD1.iso --extra-args "ks=http://192.168.12.1/ks.cfg ksdevice=eth0 ip=192.168.12.42 netmask=255.255.255.0 dns=192.168.12.1 gateway=192.168.12.1" --vnc --vncport=5901 --noautoconsole
不出意外的话,等待十来分钟,应该就能通过预设的密码连接到刚安装的 192.168.12.42 服务器上了,其间也可以通过 vnc
客户端连接到服务器来查看安装过程图形界面,但注意需修改 qemu.conf。
vi /etc/libvirt/qemu.conf
------
vnc_listen = "0.0.0.0"
vnc_password = "ABCD1234"
------
service libvirtd restart
疑难解答:
Q:使用 virsh console VM01 时卡在 Escape character is ^]
的提示信息处而无法连接
A:之前的 ks.cfg 中是在 /etc/grub.conf 中添加 cOnsole=ttyS0,在 CentOS 6 中,应该修改
/boot/grub/grub.conf
文件,并且在虚拟机中系统安装时的链接文件都变成了单独的文件,需注意要在正确的地方修改。
Q:使用 virsh start VM01 这样的命令启动虚拟机时,出现如下错误提示:
error: Failed to start domain VM01
error: Unable to read from monitor: Connection reset by peer
A:执行以下命令,再次重启即可。
virsh managedsave-remove VM01
Q:重启后网络无法访问,只有同网段的服务器之间能够访问
A:由于两块网卡都设置了网关,加载顺序是 eth0,eth1,eth1 设置的内网网关路由会覆盖掉 eth0
的默认路由,导致网络无法使用。删除 eth1 网卡的 gateway 项设置即可解决。
参考页面:
Install CentOS / RHEL Using Kickstart File
Virtualization With KVM On A CentOS 6.3 Server
Kickstart/Anaconda实现自动化安装原理探究
Last update by nowo 2012/10/16