使用pxe和kickstart进行无人值守批量安装centos7
1.概述
本篇博客主要通过在虚拟化环境试验:使用pxe引导方式,配合自应答配置kickstart,进行无人值守批量安装centos7.9操作系统。
操作系统的安装过程一般是这样的:
- 让裸机从本地或者网络加载引导程序
- 引导程序在本地或者网络加载操作系统和自应答配置文件
2. 部署过程
此过程在一台kvm虚拟机node17上操作。主要包括:
- dhcp服务。负责为client分配ip,指定next-server和filename
- tftp服务。负责为client配置操作系统类型,引导文件等
- xinetd软件。负责指定tftp根目录
- syslinux软件。产生pxe引导所需要的引导文件。
- vsftpd/httpd/nfs-utils。存放操作系统镜像或者ks.cfg文件
- system-config-kickstart。用于生成ks.cfg文件
2.1 dhcp服务
安装dhcp服务器,yum -y install dhcp
配置dhcpd.conf,vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 259200;
max-lease-time 518400;
option routers 192.168.80.1;
option domain-name-servers 192.168.80.1;
subnet 192.168.80.0 netmask 255.255.255.0 {
range 192.168.80.51 192.168.80.59;
option subnet-mask 255.255.255.0;
next-server 192.168.80.17;
filename "pxelinux.0";
}
启动dhcpd服务
systemctl start dhcpd && systemctl enable dhcpd
2.2 tftp/xinetd服务
安装tftp,yum -y install tftp-server xinetd
启动:systemctl start tftp && systemctl enable tftp
查询:netstat -tupln|egrep 69
udp 0 0 0.0.0.0:69 0.0.0.0:* 1/systemd
安装syslinux,yum -y install syslinux
从syslinux安装目录/usr/share/syslinux
中拷贝所需要的文件到tftp根目录/var/lib/tftpboot
cp -a /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0} /var/lib/tftpboot
在tftp服务根目录下创建两个目录:centos7.9
和pxelinux.cnf
mkdir -p /var/lib/tftpboot/{centos7.9,pxelinux.cfg}
挂载centos7.9的镜像,拷贝所需要的引导文件
mkdir -p /mnt/cdrom
mount -o loop CentOS-7-x86_64-Minimal-2009.iso /mnt/cdrom/
cd /mnt/cdrom/isolinux/
cp vmlinuz initrd.img /var/lib/tftpboot/centos7.9/
cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
目录结构如下:
[root@node17][/var/lib/tftpboot]
$ pwd
/var/lib/tftpboot
[root@node17][/var/lib/tftpboot]
$ tree .
.
├── centos7.9
│ ├── initrd.img
│ └── vmlinuz
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vesamenu.c32
修改pxelinux.cfg下面default文件内容:
default vesamenu.c32
timeout 600
display boot.msg
menu clear
menu background splash.png
menu title CentOS 7 menu
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13
menu color border * #00000000 #00000000 none
menu color sel 0 #ffffffff #00000000 none
menu color title 0 #ff7ba3d0 #00000000 none
menu color tabmsg 0 #ff3a6496 #00000000 none
menu color unsel 0 #84b8ffff #00000000 none
menu color hotsel 0 #84b8ffff #00000000 none
menu color hotkey 0 #ffffffff #00000000 none
menu color help 0 #ffffffff #00000000 none
menu color scrollbar 0 #ffffffff #ff355594 none
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none
label linux
menu label ^Install CentOS 7.9 through pxe
kernel ./centos7.9/vmlinuz
append initrd=./centos7.9/initrd.img inst.stage2=ftp://192.168.80.17 quiet net.ifnames=0 biosdevname
default是比较重要的一个文件,主要是定义了引导界面的内容
而lable则是定义了操作系统的各类引导参数,包括kernal
和各种内核参数
2.3 安装vsftpd
执行安装:yum -y install vsftpd
配置vsftpd,vim /etc/vsftpd/vsftpd.conf,保证能够匿名访问。非匿名也可以,不过没有必要。
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
启动vsftpd:systemctl start vsftpd && systemctl enable vsftpd
把操作系统解压的文件,拷贝到vsftpd目录
cp -r /mnt/cdrom/* /var/ftp/
执行ftp测试:curl ftp://192.168.80.17
,能够看到操作系统的镜像解压后的文件
2.4 编辑ks.cfg文件
ks.cfg文件可以自行编辑,也可以用图像化生成。
install
url --url="ftp://192.168.80.17"
text
auth --enableshadow --passalgo=sha512
firewall --disabled
firstboot --disabled
ignoredisk --only-use=vda
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --onboot=yes --bootproto=dhcp --device=eth0 --noipv6 --activate
reboot
rootpw --iscrypted $6$dJiqrlRIoif61j3g$ECII6Ne7.Nni52/s4.4mcoY/c1hwOFNjDRPosLhGpjtI.W.e76IuQ3mvCG8CVDR8nRdUjG4EF74XQOgH8dJva0
services --disabled="chronyd"
selinux --disabled
timezone Asia/Shanghai --isUtc --nontp
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=vda
clearpart --none --initlabel
part /boot --fstype="xfs" --ondisk=vda --size=250
part swap --fstype="swap" --size=250
part / --fstype="xfs" --ondisk=vda --size=19979
%packages
@^minimal
@core
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
把ks.cfg文件放到ftp目录下,并把文件权限改为644
cp ks.cfg /var/ftp && chmod 644 /var/ftp/ks.cfg
3. 测试部署
virt-manager配置一台虚拟机,测试成功