引言
这篇文章介绍如何使用DHCP TFTP Vsftpd PXE Kickstart搭建出可批量部署客户机的无人值守安装环境。
文章目录
- 0×1.PXE介绍
- 0×2.无人值守环境部署实例
- a.配置DHCP
- b.配置TFTP
- c.配置syslinux
- d.配置Vsftpd
- e.配置Kickstart
0×1.PXE介绍
PXE启动流程
支持PXE网络引导的计算机开机后(现在大多数网卡都默认支持PXE),首先通过ARP协议广播请求IP地址与TFTP服务器地址,在获取到IP后,尝试向TFTP服务器发起TFTP请求,并将TFTP服务器根目录中的pxelinux.0文件下载到本地并执行,pxelinux.0引导程序执行后,会从TFTP根目录的pxelinux.cfg文件夹中下载default配置文件,然后根据default配置文件中指定的位置,去下载操作系统内核,同时default配置文件中还指明了ks.cfg文件的位置,ks.cfg也会被一并下载到本地,在通过网络下载操作系统安装的过程中,PXE引导程序会尝试读取ks.cfg文件内容,用于初始化系统配置,实现全自动无人值守安装。
0×2.无人值守环境部署实例
实验环境介绍:
两台VMware虚拟机设备(最好先关闭虚拟机VMnet1的DHCP); RHEL7,配置成TFTP服务器,网卡1,连接到VMnet1模拟内部网络,IP 192.168.100.233/24(不要配置网关),网卡2,桥接(或NAT),IP 192.168.1.233/24,网关192.168.1.1,接入真实网络环境,模拟外部网络; 初始化一台空虚拟机,只需要将网卡接入VMnet1(仅主机)即可,开机后会自动从TFTP服务器获取系统并自动安装;
在进行配置前,最好清空iptables:
代码语言:javascript复制[root@qingsword.com ~]# iptables -F
[root@qingsword.com ~]# service iptables save
a.配置DHCP
根据本文第一部分PXE启动流程的介绍,我们首先需要配置一下DHCP服务,来为客户机分配IP地址:
代码语言:javascript复制#1.安装DHCP
02 [root@qingsword.com ~]# yum -y install dhcp
03
04 #2.修改主配置文件
05 [root@qingsword.com ~]# vim /etc/dhcp/dhcpd.conf
06
07 #将下面的内容写入配置文件中
08
09 #响应客户端的启动查询(开机时发送的DHCP请求)
10 allow booting;
11 allow bootp;
12
13 #不使用DNS动态更新,忽略客户端DNS更新
14 ddns-update-style none;
15 ignore client-updates;
16
17 #子网区域
18 subnet 192.168.100.0 netmask 255.255.255.0 {
19 option subnet-mask 255.255.255.0;
20 #客户机IP地址池
21 range dynamic-bootp 192.168.100.100 192.168.100.200;
22 #tftp服务器的地址
23 next-server 192.168.100.233;
24 #需要从tftp服务器下载并执行的PXE引导文件
25 filename "pxelinux.0";
26 default-lease-time 3600;
27 max-lease-time 7200;
28 }
29
30 #3.重启dhcp服务并设置为开机自启动
31 [root@qingsword.com ~]# systemctl restart dhcpd
32 [root@qingsword.com ~]# systemctl enable dhcpd
33
34 #4.配置防火墙允许dhcp服务
35 [root@qingsword.com ~]# firewall-cmd --permanent --zone=public --add-service=dhcp
36 [root@qingsword.com ~]# firewall-cmd --reload
b.配置TFTP
TFTP十分的轻量级,以至于没有一个主服务程序,它依靠系统的xinetd服务启动,xinet是一个网络守护进程,它监听着不同的网络端口,并根据不同的端口将数据发送给对应的程序(本例安装好TFTP后,xinetd就监听着udp的69端口,从这个端口收到的所有数据,都直接发送给TFTP主程序处理):
代码语言:javascript复制#1.安装xinetd与tftp
02 [root@qingsword.com ~]# yum -y install xinetd tftp-server
03
04 #2.编辑tftp配置文件,开启tftp
05 [root@qingsword.com ~]# vim /etc/xinetd.d/tftp
06 #将配置文件中disable后面的yes改成no
07 disable = no
08
09 #3.重启配置xinetd并设置成开机自启动
10 [root@qingsword.com ~]# systemctl restart xinetd
11 [root@qingsword.com ~]# systemctl enable xinetd
12
13 #4.将udp69端口加入防火墙配置
14 [root@qingsword.com ~]# firewall-cmd --permanent --zone=public --add-port=69/udp
15 [root@qingsword.com ~]# firewall-cmd --reload
c.配置syslinux
01 #1.下载syslinux,这个软件包中就包含了我们所需要的PXE引导文件
02 [root@qingsword.com ~]# yum -y install syslinux
03
04 #2.将pxe引导文件复制到TFTP根目录中
05 [root@qingsword.com ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
06
07 #3.挂载RHEL安装光盘镜像,复制几个引导系统必要的文件到TFTP目录中供pxe调用
08 [root@qingsword.com ~]# cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
09 [root@qingsword.com ~]# cp /mnt/isolinux/{vesamenu.c32,boot.msg} /var/lib/tftpboot/
10
11 #4.创建引导模板文件
12 [root@qingsword.com ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
13 [root@qingsword.com ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
14
15 #5.编辑引导模板文件(因为复制时这是一个只读文件,所以保存时需要使用wq!强制写入)
16 [root@qingsword.com ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
17
18 #需要修改下面两处
19
20 #将第一行default后面改成linux标签,意思是,引导时使用这个标签下指定的内容去查找操作系统的位置
21 default linux
22
23 #找到linux标签
24 label linux
25 menu label ^Install Red Hat Enterprise Linux 7.0
26 kernel vmlinuz
27 #修改inst.stage2后面的配置配置,指向ftp服务器地址,并且设置ks文件位置(这个文件稍后会创建,ftp服务稍后会搭建)
28 append initrd=initrd.img inst.stage2=ftp://192.168.100.233 ks=ftp://192.168.100.233/pub/ks.cfg quiet
c.配置syslinux
代码语言:javascript复制#1.下载syslinux,这个软件包中就包含了我们所需要的PXE引导文件
02 [root@qingsword.com ~]# yum -y install syslinux
03
04 #2.将pxe引导文件复制到TFTP根目录中
05 [root@qingsword.com ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
06
07 #3.挂载RHEL安装光盘镜像,复制几个引导系统必要的文件到TFTP目录中供pxe调用
08 [root@qingsword.com ~]# cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
09 [root@qingsword.com ~]# cp /mnt/isolinux/{vesamenu.c32,boot.msg} /var/lib/tftpboot/
10
11 #4.创建引导模板文件
12 [root@qingsword.com ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
13 [root@qingsword.com ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
14
15 #5.编辑引导模板文件(因为复制时这是一个只读文件,所以保存时需要使用wq!强制写入)
16 [root@qingsword.com ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
17
18 #需要修改下面两处
19
20 #将第一行default后面改成linux标签,意思是,引导时使用这个标签下指定的内容去查找操作系统的位置
21 default linux
22
23 #找到linux标签
24 label linux
25 menu label ^Install Red Hat Enterprise Linux 7.0
26 kernel vmlinuz
27 #修改inst.stage2后面的配置配置,指向ftp服务器地址,并且设置ks文件位置(这个文件稍后会创建,ftp服务稍后会搭建)
28 append initrd=initrd.img inst.stage2=ftp://192.168.100.233 ks=ftp://192.168.100.233/pub/ks.cfg quiet
d.配置Vsftpd
安装Vsftpd,并将光盘中所有数据全部拷贝到ftp根目录中:
代码语言:javascript复制#1.安装Vsftpd
02 [root@qingsword.com ~]# yum -y install vsftpd
03
04 #2.重启vsftpd服务并设置成开机自启动
05 [root@qingsword.com ~]# systemctl restart vsftpd
06 [root@qingsword.com ~]# systemctl enable vsftpd
07
08 #3.将光盘数据拷贝到ftp根目录下
09 [root@qingsword.com ~]# cp -r /mnt/* /var/ftp/
10
11 #4.配置selinux策略允许ftp访问
12 [root@qingsword.com ~]# setsebool -P ftpd_connect_all_unreserved=on
13
14 #5.配置防火墙允许ftp服务
15 [root@qingsword.com ~]# firewall-cmd --permanent --zone=public --add-service=ftp
16 [root@qingsword.com ~]# firewall-cmd --reload
e.配置Kickstart
通过上面的配置之后,现在只差一个kickstart自动化配置文件了,在RHEL系统中有一个十分好用的工具system-config-kickstart(这是一个图形化的ks.cfg文件生成工具,据说在RHEL7的光盘中没有提供,但可以通过CentOS的网络源获取到),有兴趣的朋友可以尝试去使用它生成一个ks文件,然后再添加一些我们自定义的内容:
代码语言:javascript复制[root@qingsword.com ~]# vim /var/ftp/pub/ks.cfg
02 #platform=x86, AMD64, or Intel EM64T
03 #version=DEVEL
04 #Install OS instead of upgrade
05 install
06 #键盘配置
07 keyboard 'us'# Reboot after installation
08 reboot
09 #root用户密码
10 rootpw --iscrypted $1$/d1DHHLV$9prsMzEjIl6Hf3WM3z10J1
11 #系统时区
12 timezone Asia/Shanghai --isUtc
13 #使用ftp安装系统
14 url --url="ftp://192.168.100.233/"
15 #系统语言
16 lang en_US
17 #防火墙配置
18 firewall --disabled
19 #系统验证模式
20 auth --useshadow --passalgo=sha512
21 #使用图形界面安装
22 graphical
23 firstboot --disable
24 #SELinux配置
25 selinux --enforcing
26 #主机名
27 network --hostname=qingsword.com
28 #普通用户名与密码
29 user --name=qing --password=$6$o4Jq.lXYKi5kovZi$XWuJs0WGo36sG78KeJFwiDsRrAP/Hmfityv826Nf8AvDOrwSgRwz9UuLLOQFoHk/N0hl9DCgSDTCE1CdpyDRG/ --iscrypted --gecos="qing"
30 #网卡配置
31 network --bootproto=dhcp
32 #启动引导配置
33 bootloader --location=mbr
34 #清空mbr
35 zerombr
36 #清空所有分区信息
37 clearpart --all --initlabel
38 #分区信息
39 # /boot分区200M
40 # /分区20G
41 # /home分区--grow参数会将磁盘剩下的所有空间都划分给/home
42 part /boot --fstype="xfs" --size=200
43 part / --fstype="xfs" --size=20000
44 part /home --fstype="xfs" --grow --size=1
45
46 #安装系统时会安装的软件包列表,下面是安装desktop环境的完整软件包列表,如果不需要安装图形化界面,只需要@base与@core两个软件包即可
47 %packages
48 @base
49 @core
50 @desktop-debugging
51 @dial-up
52 @fonts
53 @gnome-desktop
54 @guest-agents
55 @guest-desktop-agents
56 @input-methods
57 @internet-browser
58 @multimedia
59 @print-client
60 @x11
61 %end
Ps:如果不使用system-config-kickstart工具生成,可以复制上面这个模板,root用户与普通用户的密码,大家可以直接在本地机器上创建两个用户分别设置密码后,在/etc/passwd文件中找到对应加密的密码字符串替换上面的密码部分即可;分区信息也可以按照上面的格式逐行自定义。
这一切配置完成后,新建一台虚拟机设备,选择稍后安装系统,将网络设置成仅主机,移除光驱,然后启动这台设备,之后这台设备会从TFTP服务器上自动获取系统安装。
*转载注明来自:晴刃(QingSword.COM)
*原文连接:http://www.qingsword.com/qing/rhel-27.html