08-无人值守自动批量安装系统(上)
之前我们安装系统都还是用光盘,后来光驱逐渐被淘汰,也就顺应时事,开始使用U盘安装;但是在企业中,这个方式需要将刻录好系统的U盘插在每台需要安装系统的服务器上;所以,为了更加便捷快速,节约时间;也就开始使用批量安装系统,并行网络安装
无人值守自动批量安装系统(上)中需要使用到的服务:PXE + Kickstart + DHCP + TFTP + FTP
其原理相对来说也还是较为简单的,以下这幅图就可大致了解:
整个架构:PXE + Kickstart + DHCP + TFTP + FTP
PXE;PXE 并不是一种安装方式,而是一种引导的方式,所以需要网卡支持网络引导
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的技术,工作于Client/Server的网络模式,
PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;
KickStart:是一个项目,不是软件
工作原理就是记录安装过程中所需人工干预填写的各种参数,并生成一个名为 ks.cfg的文件;然后在安装过程中当出现要求填写参数的情况时,安装程序会首先去查找 ks.cfg读取设置
而后由DHCP服务提供IP地址,TFTP提供启动文件(pxelinux.0 ;isolinux/* ;pxelinux.cfg/default),FTP提供自动应答文件下载和安装系统所需的所有rpm包
虽然看着架构需要的服务挺多的,但是所有的服务都可以由一台服务器来提供,节省资源
[root@ks-server ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@ks-server ~]# uname -r 3.10.0-862.el7.x86_64 [root@ks-server ~]# uname -i x86_64 [root@ks-server ~]# uname -n ks-server
外网IP
10.0.0.101
内网IP
172.16.1.101
一、准备ks.cfg文件;
第一种方案如果有安装图形化界面可以使用图形界面来生成:
[root@ks-server ~]# system-config-kickstart
bash: system-config-kickstart: command not found...
[root@ks-server ~]# yum intsall system-config-kickstart
这就是图形配置界面,如果发现软件包这块是空白无法选择的话,可以将yum源更改为本地源
,并且请将仓库ID设置为[development] (试过其他的无效)
yum remove -y system-config-kickstart
yum clean all
yum makecache
yum install -y system-config-kickstart
system-config-kickstart
重新安装运行即可
第二种方案:其实在安装系统的时候,系统就已经自动替我们保存了一份;就是/root家目录下的anaconda-ks.cfg
只需要对这个配置文件稍加修改即可
第三种方案:完全自己手动编写一个方案
推荐对ks.cfg配置文件熟悉,但是也无需每次批量安装的时候都重新编写,可以留存一个模板,然后根据实际需求稍加修改,这样会省时省力些!
ks.cfg的组成:
命令段
包组段
以%packages开头,以%end结束
脚本段
以%post开头,以%end结束,在安装完系统之后执行的相关Linux命令、脚本
以%pre开头,以%end结束,在安装完系统之前执行的相关Linux命令、脚本
设置root密码最好使用密文,增加安全性:python -c 'import crypt; print(crypt.crypt("密码"))'
或 try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
编写好ks配置文件后可用ksvalidator 来检查语法
yum install pykickstart
ksvalidator ks.cfg
二、DHCP服务
[root@ks-server ~]# yum install dhcp -y #安装服务 [root@ks-server ~]# grep -vE "#|^$" /usr/share/doc/dhcp*/dhcpd.conf.example #默认的模板配置文件
这里我们只需一个subnet段即可,最简单的配置
subnet 172.16.1.0 netmask 255.255.255.0 {
range 172.16.1.100 172.16.1.200; # 可分配的起始IP-结束IP option subnet-mask 255.255.255.0; # 设定netmask default-lease-time 21600; # 设置默认的IP租用期限 max-lease-time 43200; # 设置最大的IP租用期限 next-server 172.16.1.101; # 告知客户端TFTP服务器的ip filename "/pxelinux.0"; # 告知客户端从TFTP根目录下载pxelinux.0文件 }
[root@ks-server ~]# cat /etc/dhcp/dhcpd.conf subnet 172.16.1.0 netmask 255.255.255.0 { range 172.16.1.150 172.16.1.200; option subnet-mask 255.255.255.0; default-lease-time 21600; max-lease-time 43200; next-server 172.16.1.101; filename "/pxelinux.0"; }
启动服务:
[root@ks-server ~]# systemctl start dhcpd
三、TFTP服务器
安装tftp服务
[root@ks-server ~]# yum -y install tftp-server
修改配置文件
vim /etc/xinetd.d/tftp disable = no #将原先的disable = yes更改为disable = no
拷贝所需文件
[root@ks-server ~]# yum -y install syslinux
[root@ks-server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@ks-server ~]# mount /dev/sr0 /mnt
[root@ks-server ~]# cp /mnt/isolinux/* /var/lib/tftpboot/
[root@ks-server ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
[root@ks-server ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
tftp服务最终目录显示
[root@ks-server ~]# tree -F /var/lib/tftpboot/ /var/lib/tftpboot/ ├── boot.cat ├── boot.msg ├── grub.conf ├── initrd.img ├── isolinux.bin ├── isolinux.cfg ├── memtest ├── pxelinux.0 ├── pxelinux.cfg/ │ └── default ├── splash.png ├── TRANS.TBL ├── vesamenu.c32 └── vmlinuz* 1 directory, 13 files
启动服务
[root@ks-server ~]# systemctl start tftp.socket
四、FTP服务
安装服务
[root@ks-server ~]# yum install vsftpd -y
拷贝所需的rpm包等文件
[root@ks-server pub]# cp -a /mnt/ /var/ftp/pub/
拷贝ks文件
[root@ks-server ~]# cp anaconda-ks.cfg /var/ftp/pub/ [root@ks-server ~]# cd /var/ftp/pub/ [root@ks-server pub]# mv anaconda-ks.cfg ks.cfg
[root@ks-server pub]# mv anaconda-ks.cfg ks.cfg
[root@ks-server pub]# vim ks.cfg
#cdrom #这里将cdrom指向ftp共享的路径
url --url="ftp://172.16.1.101/pub/mnt/"
启动服务
[root@ks-server ~]# systemctl start vsftpd
[root@ks-server ~]# setenforce 0
[root@ks-server ~]# systemctl stop firewalld
五、编辑default文件
[root@ks-server pub]# cat -n /var/lib/tftpboot/pxelinux.cfg/default 61 label linux 62 menu label ^Install CentOS 7 63 kernel vmlinuz 64 #append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet 65 append initrd=initrd.img inst.repo=ftp://172.16.1.101/pub/mnt inst.ks=ftp://172.16.1.101/pub/ks.cfg 66
将label linux的append那一行配置文件修改,ks文件指向正确的位置;rpm等文件正确的位置指向
这个配置文件就是开始时的选择
默认600即60秒
六、开始测试安装
出现错误
如果出现这个错误,基本上都是共享文件服务(FTP/HTTP/NFS)出现了问题,所以需要确保selinux,防火墙都不是影响因素
服务是否开启
而有地址指向的配置文件也需要确保;ks.cfg以及default是否写错
权限是否存在问题
这里上面ks文件权限没给,chmod -R 777 /var/ftp/pub/
还有一个问题就是内存不能给的过小,至少2G
要详细过程可以用抓包的方式获取
yum install wireshark -y #安装抓抓包件 tshark -ni 网卡名 #抓包
还可以监控日志
tail -f /var/log/messages