环境说明:

VMware中的centos7做kvm虚拟化实验必须的设置,否则无法正常使用kvm虚拟化功能:

虚拟机centos 7 如何设置语言_System

#kvm虚拟化一键安装和启动的脚本(已测OK)

 #说明:此脚本实现kvm虚拟化平台的一键安装,并且创建一台新的虚拟机vmx0,给vmx0全自动安装系统。

    本文是通过脚本在centos7系统中全自动化安装和配置kvm虚拟化平台,并通过脚本创建一台新虚拟机vmx0,并且自动安装centos7系统.本案脚本创建的虚拟机vmx0配置了vnc和console控制功能.本文附带了mininal和gnome桌面安装的ks自动安装应答文件.测试都能正常运行.欢迎大家来试用.


网络环境:
 kvm+vsftpd服务器:192.168.10.7

 vi   kvmx.sh   脚本代码如下
 #!/bin/bash
setenforce   0
 getenforce
 sed  -i    '/^SELINUX=/c\SELINUX=disable'   /etc/selinux/config
 grep   ^SELINUX    /etc/selinux/config

systemctl   stop   firewalld
 systemctl   disable   firewalld

 read  -p    'selinux和firewalld已关闭,按回车键继续配置本地yum源...'

 #准备本地yum源
mkdir  -pv  /dvd
 mount   /dev/cdrom   /dvd
 chmod  +x  /etc/rc.d/rc.local
 grep  dvd   /etc/rc.d/rc.local || echo   'mount   /dev/cdrom   /dvd'  > /etc/rc.d/rc.local
 source   /etc/rc.d/rc.local
 cd  /etc/yum.repos.d
 mkdir  -pv  bak/
 mv  -v  *.repo  bak/
 cat  > dvd.repo <<EOF
 [centos73]
 name=centos linux 7.3 local
 baseurl=file:///dvd
 enabled=1
 gpgcheck=0

 EOF
 yum  clean  all
 yum  repolist
mkdir   -pv   /var/ftp/ks/

read  -p    '请务必先用vi   /var/ftp/ks/7text.ks手动创建自动应答文件,7text.ks文件内容见下文,然后按回车键安装并配置vsftpd文件共享服务...'

 #vsftpd文件共享环境准备
yum  install  -y  vsftpd  lftp  ftp  elinks  curl
 systemctl  restart  vsftpd 
 systemctl  enable  vsftpd 
 mkdir  -pv  /var/ftp/dvd/
 mount   /dev/cdrom   /var/ftp/dvd
 curl   ftp://127.0.0.1/ grep  ftp   /etc/rc.d/rc.local || echo   'mount   /dev/cdrom   /var/ftp/dvd'  > /etc/rc.d/rc.local
 source   /etc/rc.d/rc.local

read  -p    '按回车键安装并配置kvm虚拟化平台...'

 #安装kvm虚拟化平台软件
egrep '(vmx|svm)' --color=always /proc/cpuinfo

yum  install    -y  qemu-kvm  qemu-img  libvirt
yum  install    -y  virt-install  libvirt-python  virt-manager  python-virtinst  python-virtualenv   libvirt-client  virt-viewer    virt-top   bridge-utils
yum  install    -y  libguestfs-tools  bash-completion
systemctl   restart   libvirtd
systemctl   enable   libvirtd
systemctl   status    libvirtd

 #说明:libguestfs-tools是对kvm虚拟机镜像中的文件进行管理的程序(如virt-ls、virt-copy-in、virt-copy-out等命令)
 #说明:bash-completion是tab键实现命令补全的软件

virsh  list  --all

 #创建用console安装系统的kvm虚拟机。
mkdir  -pv  /vmdisk

 read  -p    '注意:二选一操作.按ctrl+c退出脚本,创建新虚拟机按回车键继续...'
read  -p    '请务必先用vi   /var/ftp/ks/7text.ks手动创建自动应答文件,7text.ks文件内容见下文,然后按回车键创建一台新虚拟机...'
 ens33_ip=$(ifconfig ens33|awk 'NR==2{print $2}')
 vm_name=vmx0
 vm_port=5910
 ftp_ips=ftp://${ens33_ip}/dvd
 #http_ip=http://${ens33_ip}/dvd
 ftp_ks=ftp://${ens33_ip}/ks

 read  -p   '请输入kvm虚拟机名称,如vmx0:'  vm_name
 read  -p   '请输入kvm虚拟机vnc端口号,如5910:'  vm_port
 #read  -p   '请输入centos7系统安装包ftp服务器地址,如ftp://192.168.10.7/dvd/:'  vftp

 #创建vmx0虚拟机(mininal最小版,已测OK)
 virt-install \
    --name  ${vm_name} \
    --ram 1200 \
    --disk path=/vmdisk/${vm_name}.img,size=3,format=qcow2,sparse  \
    --vcpus 1 \
    --os-type linux \
    --os-variant rhel6 \
    --graphics vnc,listen=0.0.0.0,port=${vm_port},keymap='en-us'  \
    --console pty,target_type=serial \
    --location=${ftp_ips} \
    --extra-args "console=ttyS0,115200n8 serial  ks=${ftp_ks}/7text.ks" \
    --noautoconsole  --autostart

 virsh  list  --all

 #在创建虚拟机时指定ks自动安装的应答文件(本例未用ks功能)
 #ks应答文件参考7text.ks这一节的内容。
 #virt-install    --extra-args="ks=ftp://192.168.10.7/ks/7text.ks"

 echo  <<EOF
 然后依次选择创建分区、软件环境、设置root用户密码、时区这3个主要的系统安装参数,最后按b开始安装系统。
 技巧:virsh   console   vmx0进入到console控制台后,如何退出console控制台?
 方法:用 ctrl+]  快捷键即可.
 EOF

 virsh  list  --all

 read  -p  '按回车键继续管理${vm_name}虚拟机...'

 virsh  console  ${vm_name}


 #virt  start  vm01  --console    #启动虚拟机并进入console控制台
 #virt-console   vm01     #进入vm01虚拟机控制台,按ctrl+]退出
 #virt-viewer   vm01  &
 #virt-manager  &

 #脚本完毕###

 #测试脚本的运行:
 chmod   kvmx.sh
 sh  kvmx.sh-------------------------------------------------------------------------
#创建vm01虚拟机(mininal最小版,已测OK)sparse
 virt-install \
    --name  vm01 \
    --ram 1200 \
    --disk path=/vmdisk/vmx01.img,size=3,format=qcow2,sparse  \
    --vcpus 1 \
    --os-type linux \
    --os-variant rhel6 \
    --graphics vnc,listen=0.0.0.0,port=5951,keymap='en-us'  \
    --console pty,target_type=serial \
    --location=ftp://192.168.10.7/dvd/ \
    --extra-args 'console=ttyS0,115200n8 serial  ks=ftp://192.168.10.7/ks/7text.ks' \
    --noautoconsole  --autostart

 创建vm02虚拟机(gnome桌面版)
 virt-install \
    --name  vm02 \
    --ram 1200 \
    --disk path=/vmdisk/vm02.img,size=8,format=qcow2,sparse  \
    --vcpus 1,maxcpus=10 \
    --os-type linux \
    --os-variant rhel6 \
    --graphics vnc,listen=0.0.0.0,port=5952,keymap='en-us' \
    --console pty,target_type=serial \
    --location=ftp://192.168.10.7/dvd/ \
    --extra-args 'console=ttyS0,115200n8 serial  ks=ftp://192.168.10.7/ks/7gnome.ks' \
    --noautoconsole  --autostart

 创建vm03虚拟机(gnome桌面版)
 virt-install \
    --name  vm03 \
    --ram 1200 \
    --disk path=/vmdisk/vm03.img,size=8,format=qcow2,sparse  \
    --vcpus 1,maxcpus=10 \
    --os-type linux \
    --os-variant rhel6 \
    --graphics vnc,listen=0.0.0.0,port=5953,password=123,keymap='en-us' \
    --console pty,target_type=serial \
    --location=http://mirrors.163.com/centos/7.3.1611/os/x86_64/ \
    --extra-args 'console=ttyS0,115200n8 serial  ks=ftp://192.168.10.7/ks/7gnome.ks' \
    --noautoconsole  --autostart

 ----------------------------------------
 临时测试
virt-install \
    --name  vm08 \
    --ram 1200 \
    --disk path=/vmdisk/vm08.img,size=3,format=qcow2,sparse  \
    --vcpus 1 \
    --os-type linux \
    --os-variant rhel6 \
    --graphics vnc,listen=0.0.0.0,port=5958,keymap='en-us'  \
    --console pty,target_type=serial \
    --location=ftp://192.168.10.7/dvd/ \
    --extra-args 'console=ttyS0,115200n8 serial  ks=ftp://192.168.10.7/ks/7text.ks' \
    --noautoconsole  --autostart

 ----------------------------------------###修改7text.ks脚本中的IP地址命令如下###
 ks_file=/var/ftp/ks/7text.ks
 ens33_ip=$(ifconfig ens33|awk 'NR==2{print $2}')
 echo  ${ens33_ip}
 sed   -i  "s/192.168.10.7/${ens33_ip}/"   ${ks_file}
 grep  ${ens33_ip}   ${ks_file}##7text.ks自动安装的应答文件创建方法##
#cat   /root/anaconda-ks.cfg
 #mkdir   -pv  /var/ftp/ks/
 #vi   /var/ftp/ks/7gnome.ks
#7text.sk是安装mininal最小版的自动安装应答文件(已测OK,直接复制内容即可)
 #version=DEVEL
 # System authorization information
 auth --enableshadow --passalgo=sha512
 # Use network installation
 #nfs --server=192.168.10.7 --dir=/var/ftp/dvd
 url --url="ftp://192.168.10.7/dvd/" #url --url="http://192.168.10.7/dvd/"
 # Use text mode install
 text
 # Run the Setup Agent on first boot
 firstboot --enable
 ignoredisk --only-use=vda
 # Keyboard layouts
 keyboard --vckeymap=us --xlayouts=''
 # System language
 lang en_US.UTF-8
 reboot

 # Network information
 network  --bootproto=dhcp --device=eth0 --ipv6=auto --activate
 network  --hostname=localhost.localdomain

 # Root password
 rootpw --iscrypted $6$S7A0lg2zIUxWkI36$j9tYy5n3NDc/j.DTyJU0lE7VHcBxyRkFLDDME85f5.xvWtEMFRwrkacBctHLcw8e7.bVbLbzZ2CCUR6NVbRGt.
 # System services
 services --enabled="chronyd"
 # Do not configure the X Window System
 skipx
 # System timezone
 timezone Asia/Shanghai --isUtc
 # System bootloader configuration
 #bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=vda
 bootloader --append=" crashkernel=auto" --location=mbr
 autopart --type=lvm
 # Partition clearing information
 #clearpart --all --initlabel --drives=vda
 clearpart --all --initlabel

 #安装后会执行的脚本
 %post
 useradd   tom
 echo  redhat | passwd  --stdin  tom
 echo  redhat | passwd  --stdin  root
 systemctl  start   acpid
 systemctl  enable   acpid
 #wget  ftp://${sip}/ftp.repo  /mnt/sysimage/etc/yum.repos.d/
 cd   /etc/yum.repos.d
 mkdir   bak
 mv  *.repo   bak/
 cat  > /etc/yum.repos.d/ftp.repo <<EOF
 [centos73]
 name=centos linux 7.3 ftprepo
 baseurl=ftp://192.168.122.1/dvd
 enabled=1
 gpgcheck=0

 EOF
 #设置开机欢迎信息
 echo "Welcome to Red Hat Linux learning classroom!" >>  /etc/issue
 echo -e "Please login as 'root' with password 'redhat'.\n" >>  /etc/issue
 #useradd redhat &> /root/postinstall.log
 #systemctl set-default  graphical.target
 #systemctl set-default  multi-user.target
 %end

 %packages
 @core
 chrony
 kexec-tools
 acpid
 net-tools
 bridge-utils
 openssh-server
 openssh-clients
 %end

 %addon com_redhat_kdump --enable --reserve-mb='auto'

 %end

 %anaconda
 pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty
 pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty
 pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --notempty
 %end

 ##应答文件内容完毕##----------------------------------------
###修改7gnome.ks脚本中的IP地址命令如下###
 ks_file=/var/ftp/ks/7gnome.ks
 ens33_ip=$(ifconfig ens33|awk 'NR==2{print $2}')
 echo  ${ens33_ip}
 sed   -i  "s/192.168.10.7/${ens33_ip}/"   ${ks_file}
 grep  ${ens33_ip}   ${ks_file}

 ------------------------------------------------------------------------------
 ##7gnome.ks自动安装的应答文件创建方法##
#cat   /root/anaconda-ks.cfg
 #mkdir   -pv  /var/ftp/ks/
 #vi   /var/ftp/ks/7gnome.ks
#7gnome.sk是安装gnome桌面版的自动安装应答文件(已测OK,直接复制内容即可)
 #version=DEVEL
 # System authorization information
 auth --enableshadow --passalgo=sha512
 # Use network installation
 #nfs --server=192.168.10.7 --dir=/var/ftp/dvd
 url --url="ftp://192.168.10.7/dvd/" #url --url="http://192.168.10.7/dvd/"
 # Use text mode install
 text
 # Run the Setup Agent on first boot
 firstboot --enable
 ignoredisk --only-use=vda
 # Keyboard layouts
 keyboard --vckeymap=us --xlayouts=''
 # System language
 lang en_US.UTF-8
 reboot

 # Network information
 network  --bootproto=dhcp --device=eth0 --ipv6=auto --activate
 network  --hostname=localhost.localdomain

 # Root password
 rootpw --iscrypted $6$Nn/OvD1hEX3eHqfZ$/LnT7TAvDh3fg3/ZUsPJjLfzVcr4pBI6XU2rt1Qw5pN8HqB9axtCyilzPRPaPJm3.yvqpjw4.zBh2GIOOAz.O/
 # System services
 services --enabled="chronyd"
 # Do not configure the X Window System
 skipx
 # System timezone
 timezone Asia/Shanghai --isUtc
 user --groups=wheel --name=flyer --password=$6$0Ue3/KLR7YuxMK6H$tKc7CdKreRtXc0BKTeecVGJ3/lh7ETgi3Wu0FN.vByDAiVU7x7YrYua2CrVK.A4jg9zUnf3dN4a                                                                                                                                           6DZEhxOLnv. --iscrypted --gecos="flyer"
 # X Window System configuration information
 xconfig  --startxonboot
 # System bootloader configuration
 #bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=vda
 bootloader --append=" crashkernel=auto" --location=mbr
 autopart --type=lvm
 # Partition clearing information
 #clearpart --all --initlabel --drives=vda
 clearpart --all --initlabel

 #安装后会执行的脚本
 %post
 useradd   tom
 echo  redhat | passwd  --stdin  tom
 echo  redhat | passwd  --stdin  root
 systemctl  start   acpid
 systemctl  enable   acpid
 #wget  ftp://${sip}/ftp.repo  /mnt/sysimage/etc/yum.repos.d/
 cd   /etc/yum.repos.d
 mkdir   bak
 mv  *.repo   bak/
 cat  > /etc/yum.repos.d/ftp.repo <<EOF
 [centos73]
 name=centos linux 7.3 ftprepo
 baseurl=ftp://192.168.122.1/dvd
 enabled=1
 gpgcheck=0

 EOF
 #设置开机欢迎信息
 echo "Welcome to Red Hat Linux learning classroom!" >>  /etc/issue
 echo -e "Please login as 'root' with password 'redhat'.\n" >>  /etc/issue
 #useradd redhat &> /root/postinstall.log
 systemctl set-default  graphical.target
 #systemctl set-default  multi-user.target
 %end

 %packages
 @base
 @core
 @desktop-debugging
 @dial-up
 @directory-client
 @fonts
 @gnome-desktop
 @guest-agents
 @guest-desktop-agents
 @input-methods
 @internet-browser
 @java-platform
 @multimedia
 @network-file-system-client
 @networkmanager-submodules
 @print-client
 @x11
 chrony
 kexec-tools
 acpid

 %end

 %addon com_redhat_kdump --enable --reserve-mb='auto'

 %end

 %anaconda
 pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty
 pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty
 pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --notempty
 %end
 ##应答文件内容完毕##











51CTO博客,原文链接:http://blog.51cto.com/1364952/1965213