《Linux基础_安装虚拟机》这篇文章讲述了如何安装虚拟机,但如果需要安装大量的虚拟机这种方法就会显得非常笨拙。所以我决定写一个脚本去完全实现虚拟机的安装过程,只要执行该脚本,不需要有任何的选择就可以得到一个全新的虚拟机。这时就需要一个软件的帮忙kickstart。
在安装虚拟机时,系统会提出很多问题需要用户选择,kickstart就是将这些所有问题的答案记录在一个脚本中,在系统安装时自动读取该文件,实现虚拟机的自动安装。
要安装虚拟机首先需要相应的镜像,并将其挂载,我将镜像和安装脚本放在了http的发布目录下,在安装时通过网络获取。如何将镜像挂载到http的发布目录下,请参考《Linux_网络yum源配置及常用命令》这篇文章。在确保可以通过网络获取到镜像之后就可以安装kickstart软件了。如下图,就是可以通过网络访问到172.25.254.80主机的镜像了:
kickstart软件在红帽发布的镜像中就有,所以在配置好yum源后可以直接安装。安装步骤如下:
[root@foundation80 iso7.2]# yum install system-config-kickstart
安装完成后执行以下命令:
[root@foundation80 iso7.2]# system-config-kickstart
执行该命令之后会看到如下窗口:
Default Language #操作系统的语言
Keyboard #键盘类型
Time Zone #时区
Root password #管理员密码
Encrypt root password #在选则了该选项之后,在生成的脚本中的管理员密码是进行加密的,否则为明文。
Target Architecture #操作系统架构
Reboot system after installtion #安装完成后重启
Perform installation in text mode(graphical is default)#不安装图形,不打对勾时为开启图形界面
然后选择Installation Method选项:
如上图,选择通过http网络获取安装源,安装源在172.25.254.80主机的/var/www/html/rhel7.2目录下挂载,因为/var/www/html目录为http的默认发布目录,所以不用写。
继续设置Boot Loader Options,选择install new boot loader,表示开启一个全新的引导,如下图:
编辑Partition Information,配置分区。
Master Boot Record #将之前的分区记录全部清除
Remove all existing partitions #将已经存在的分区全部清除
Initialize the disk label #初始化磁盘
然后点击Add添加分区
添加boot分区,200M
添加swap分区,500M
将剩余的空间全部给/分区
点击ok添加完成,添加网络设备,选择Network Configuration点击Add Network Device添加网卡
有什么网卡就写什么网卡,方式选择为DHCP模式,需要在同一网络中存在DHCP服务器,如何配置DHCP服务器请参考《Linux基础_dhcp动态获取IP》这篇文章。
添加完网卡如下图:
Authentication认证,不需要配置,保持默认就可以了
Firewall Configuration防火墙配置,将SELlinux内核级加强防火墙设置为Disabled,也可以保持默认。
点击Display Configuration,如图选择,表示不安装图形界面。
因为软件自身问题Package Selection不能选择。
Pre-Installation是在安装前做的事情,没有需要,所以么有写。
Post-Installation是在安装后所执行的命令,我配置了以下yum源,也可以不用写。
点击左上方的file,保存文件,将文件保存到/var/www/html/目录下,使可以通过网络获取到该脚本。
保存完成之后在/var/www/html/目录下就会产生一个ks.cfg文件,该文件名为自定义的文件名。
在浏览上测试,看是否可以通过网络查看到该脚本。
是否还记得Package Selection不能选择,如果不手动添加,那么在安装过程中还是需要回答问题,就违背了自动安装的目的,所以可以自行编辑该脚本。
[root@foundation80 html]# vim ks.cfg
%packages
@base #@符号表示一个组
lftp #lftp软件
%end
可以用以下命令检测该文件是否有语法上的错误。
[root@foundation80 html]# ksvalidator ks.cfg
ks.cfg这个文件中的内容就是将刚才选择的内容记录成脚本,在安装虚拟机的过程中自动获取该脚本,实现自动安装。文件内容如下:
[root@foundation80 html]# cat ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$zuvQz.oG$aHm3nzvLZrqJI5i9UAmdx.
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="http://172.25.254.80/rhel7.2"
# System language
lang en_US
# Firewall configuration
firewall --disabled
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled
# Network information
network --bootproto=dhcp --device=eth0
# Reboot after installation
reboot
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --size=200
part swap --fstype="swap" --size=500
part / --fstype="xfs" --grow --size=1
%post
rm -fr /etc/yum.repos.d/*
cat >> /etc/yum.repos.d/yum.repo<<EOF
[rhel7.2]
name=rhel7.2
baseurl=http://172.25.254.80/rhel7.2
gpgcheck=0
EOF
%end
%packages
@base
lftp
%end
下来编辑安装虚拟机的脚本:
[root@foundation80 mnt]# vim vm_create.sh
#!/bin/bash #执行环境
virt-install \ #安装虚拟机的命令
--name $1 \ #虚拟机的名字
--ram 1024 \ #内存大小
--vcpus 1 \ #cpu个数
--disk /var/lib/libvirt/images/$1.qcow2,size=9,bus=virtio \ #磁盘配置
--network source=br0,model=virtio \ #网络配置
--location http://172.25.254.80/rhel7.2 \ #安装源地址
--extra-args "ks=http://172.25.254.80/ks.cfg" #调取ks.cfg脚本
安装脚本完成之后,执行脚本,可以给vm_create1.sh执行权限用绝对路径执行脚本,也可以用sh执行脚本,如下:
[root@foundation80 mnt]# sh vm_create1.sh node2
执行完成之后就可以直接得到一个虚拟机。
因为没有安装图形界面,所以么有图形。在安装过程中如果在以下界面之前有错误,则是安装脚本vm_create1.sh的问题,如果在此页面出现错误,就是ks.cfg文件的错误。
使用脚本方式适用于大量的安装虚拟机,只需要执行一个命令就可以得到一个全新的虚拟机,大大减小了重复的工作,有效的提高了工作效率。