目标

使用KS文件进行自动化的linux系统安装,无需有人进行安装时的配置操作,提前写好配置文件,在linux启动之前进行内核命令加载,装好系统后无需进行配置和调整,直接ssh进行正常运维操作

连接关系

虚拟连接关系

+------+ +-----+
Internet --> | eth1 | <==> | br1 | -> KVM VMs connected to the Inernet
+------+ +-----+
192.168.122.X/24 桥接到NAT网卡

使用到的一些virt-install选项

--noautoconsole \     # 加入这个参数告诉virt-install不跟踪系统安装的过程
--initrd-inject ks-1.cfg # 自动部署的配置文件(可含路径)
--extra-args="ks=file:/ks-1.cfg" # 注入vm后的文件名,不要含路径

-x --extra-args 参数的用来在客户机安装的时候传入额外的内核命令行到安装程序。ks选项指定ks文件位置和其他网络选项,用来让安装程序知道从哪里获取ks.cfg进行自动化的安装

步骤

  • 准备KS文件


text
network
lang en_US
keyboard us
network --bootproto dhcp
url --url=https://mirrors.mit.edu/centos/7.9.2009/os/x86_64/
zerombr
bootloader --location mbr
timezone America/Denver
auth --enablemd5 --enableshadow
selinux --disabled
rootpw Asdfzxcv1@
firewall --disabled
skipx
clearpart --all --initlabel
autopart
reboot

%packages
%end

测试如下命令

virt-install \
--name=vm01 \
--ram 1200 \
--virt-type kvm \
--vcpus=2 \
--disk path=/images/testdrive01,size=20 \
--vnc --vncport=5911 --vnclisten=0.0.0.0 \
--cdrom /images/isos/CentOS-7-x86_64-Minimal-2009.iso \
-x ks-vm04.ks
--network bridge=virbr0 \

错误:ERROR Kernel arguments are only supported with location or kernel installs.
问题:不可以使用cdrom参数进行内核参数注入!

👉​这篇 文章介绍了如果通过cdrom启动时无法修改内核启动参数的,也就是说无法加载ks文件中的内容,建议通过PXE形式启动,加载配置文件和对应iso。这样可以正确进行安装,也就是还是通过pxe的内核启动进行ks文件的加载 (这是一个解决方法)

将KS参数引入

virt-install \
--name=vm01 \
--ram 2048 \
--virt-type kvm \
--vcpus=2 \
--noautoconsole \
--disk path=/images/testdrive01,size=20 \
--vnc --vncport=5900 --vnclisten=0.0.0.0 \
--location=https://mirrors.mit.edu/centos/7.9.2009/os/x86_64/ \
--network bridge=virbr0 \
--initrd-inject /images/ks/ks-vm01.ks \
--extra-args="ks=file:ks-vm01.ks"

👉如果再内核参数配置了console则使用virsh console vm01 连接到客户机, ctrl + ] 退出

问题总结

🧨内核参数 调用 --extra-args="ks=file:ks-vm04.ks",文件前不可以加路径,此文件使给initrd初始化时提供的文件,他找不到宿主机的文件路径!!!


最后的成功

采用mit.edu的centos镜像(成功)

virsh destroy vm01
virsh undefine vm01
rm -f /images/testdrive01
virt-install \
--name=vm01 \
--ram 2048 \
--virt-type kvm \
--vcpus=2 \
--noautoconsole \
--disk path=/images/testdrive01,size=20 \
--vnc --vncport=5900 --vnclisten=0.0.0.0 \
--location=https://mirrors.mit.edu/centos/7.9.2009/os/x86_64/ \
--network bridge=virbr0 \
--initrd-inject /images/ks/ks-vm04.ks \
--extra-args="ks=file:ks-vm04.ks"

# 附加成功的ks文件

text
network
lang en_US
keyboard us
network --bootproto dhcp
url --url=https://mirrors.mit.edu/centos/7.9.2009/os/x86_64/
zerombr
bootloader --location mbr
timezone America/Denver
auth --enablemd5 --enableshadow
selinux --disabled
rootpw Asdfzxcv1@
firewall --disabled
skipx
clearpart --all --initlabel
autopart
reboot

%packages
%end



遇到的问题

  • 网卡需要统一命名,不然脚本无法判定网卡编号
  • ip需要提前想好,不然每个虚机的ip是不一样的,除非在分配IP的时候使用dhcp进行分配
  • cdrom无法加载ks参数,使用内核模式即--location传入iso路径