使用PXE+DHCP+TFTP+Kickstart+FTP搭建无人值守安装服务器。一般只有频繁安装系统才会搭建无人值守安装服务器。
虚拟机环境:youxi1,CentOS7系统双网卡,一个网卡桥接模式(182.168.1.6)可以上外网,一个网卡LAN区段(LAN1)模拟内网,作为无人值守安装服务器
youxi2,CentOS系统,网卡LAN区段(LAN1)模拟内网,作为客户端
youxi3,新建虚拟机
(1).PXE概述
PXE严格来说并不是一种安装方式,而是一种引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。协议分为 client 和 server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器 和 TFTP 服务器。DHCP 服务器用来给 PXE client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。
(2).Kickstart概述
KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为 ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找 KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
(3).TFTP概述
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
(4).实验拓扑图和运行原理
![](https://i-blog.csdnimg.cn/blog_migrate/3c46f9212deadbdac1e22f1598592f75.png)
PXE + KickStart大概运行原理:1、DHCP 服务器用来给客户机分配IP; 2、TFTP 服务器用来存放PXE的相关文件,比如:系统引导文件; 3、FTP 服务器用来存放系统安装文件; 4、KickStart所生成的ks.cfg配置文件;5、带有一个 PXE 支持网卡的将安装的主机。
注意:实验是将3台服务器合并成1台服务器进行实验。
(5).实验
在开始之前请将防火墙和SELinux关闭。
1)搭建ftp服务
服务器端youxi1安装vsftpd服务,并开机自启
1 2 3 4 | [root@youxi1 ~]# yum -y install vsftpd [root@youxi1 ~]# systemctl start vsftpd [root@youxi1 ~]# systemctl enable vsftpd Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service. |
客户端youxi2(由于没有网络所以使用本地yum源)安装lftp,配置本地yum源,另外为了提高安装效率,将原有的所有yum源迁移到备份目录
1 2 3 4 5 6 7 8 9 10 11 | [root@youxi2 ~]# mkdir -p /backup/yum.repo [root@youxi2 ~]# mv /etc/yum.repos.d/*.repo /backup/yum.repo [root@youxi2 ~]# vim /etc/yum.repos.d/CentOS7.repo [CentOS7] //yum的ID,本地唯一,用于区分不同yum源 name=CentOS-server //描述信息 baseurl=file: ///mnt //前面的file://是协议,后面的/mnt是光盘挂载点 enabled=1 //1启用yum源,0禁用yum源 gpgcheck=0 //1使用公钥验证rpm包的正确性,0不验证 [root@youxi2 ~]# yum clean all //清空yum缓存 [root@youxi2 ~]# yum makecache //重新读取yum源 [root@youxi2 ~]# yum -y install lftp |
把服务器端的系统光盘挂在到/var/ftp/pub/目录下
1 2 | [root@youxi1 ~]# mount /dev/sr0 / var /ftp/pub/ //光盘挂载到ftp匿名用户访问的主目录 mount: /dev/sr0 写保护,将以只读方式挂载 |
2)搭建tftp服务
在服务器端youxi1上安装tftp,修改配置文件,并开机自启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [root@youxi1 ~]# yum -y install tftp tftp-server xinetd [root@youxi1 ~]# vim /etc/xinetd.d/tftp //tftp默认是关闭的 # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/ in .tftpd server_args = -s / var /lib/tftpboot //设置tftp的主目录,可以改可以不改,但要将PXE启动所需的相关文件放到这里指定的位置 disable = no //yes表示关闭,no表示打开 per_source = 11 cps = 100 2 flags = IPv4 } [root@youxi1 ~]# systemctl start xinetd [root@youxi1 ~]# systemctl enable xinetd [root@youxi1 ~]# netstat -antup | grep 69 //检测tftp是否启动 udp 0 0 0.0.0.0:69 0.0.0.0:* 9768/xinetd |
在客户端youxi2上安装tftp客户端
1 | [root@youxi2 ~]# yum -y install tftp |
3)准备PXE启动相关文件
在服务器端youxi1上准备PXE启动相关文件
1 2 3 4 5 6 7 | [root@youxi1 ~]# yum -y install system-config-kickstart syslinux [root@youxi1 ~]# cp /usr/share/syslinux/pxelinux.0 / var /lib/tftpboot/ //系统引导文件 [root@youxi1 ~]# cp / var /ftp/pub/images/pxeboot/vmlinuz / var /lib/tftpboot/ //内核文件 [root@youxi1 ~]# cp / var /ftp/pub/images/pxeboot/initrd.img / var /lib/tftpboot/ //内核初始化镜像文件 [root@youxi1 ~]# mkdir / var /lib/tftpboot/pxelinux.cfg [root@youxi1 ~]# cp / var /ftp/pub/isolinux/isolinux.cfg / var /lib/tftpboot/pxelinux.cfg/ default //引导菜单 [root@youxi1 ~]# chmod 644 / var /lib/tftpboot/pxelinux.cfg/ default |
4)搭建DHCP服务
详见:搭建dhcp那篇文章
服务器端youxi1添加新网卡,修改网卡配置文件,并启动网卡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [root@youxi1 ~]# cd /etc/sysconfig/network-scripts/ [root@youxi1 network-scripts]# cp ifcfg-ens33 ifcfg-ens38 [root@youxi1 network-scripts]# vim ifcfg-ens38 TYPE= "Ethernet" PROXY_METHOD= "none" BROWSER_ONLY= "no" BOOTPROTO= "static" DEFROUTE= "yes" IPV4_FAILURE_FATAL= "yes" IPADDR= "192.168.2.6" NETMASK= "255.255.255.0" #GATEWAY="192.168.2.1" #DNS1="192.168.2.1" NAME= "ens38" DEVICE= "ens38" ONBOOT= "yes" [root@youxi1 network-scripts]# ifup ens38 |
注意:将GATEWAY(网关)和DNS1删除是为了让ens33网卡能够正常访问外网,ens38只可以用来访问同一网段的IP。
服务器端youxi1安装dhcp服务,修改配置文件,并开机自启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@youxi1 ~]# yum -y install dhcp [root@youxi1 ~]# vim /etc/dhcp/dhcpd.conf subnet 192.168.2.0 netmask 255.255.255.0 { //IP网段和掩码 range 192.168.2.100 192.168.2.254; //dhcp取值范围 option domain-name-servers 192.168.2.1; //指定默认DNS地址 option domain-name "localdhcp.cn" ; //指定默认域名 option routers 192.168.2.1; //指定默认网关 option broadcast-address 192.168.2.255; //指定广播地址 default -lease-time 600; //最小租约时间 max-lease-time 7200; //最大租约时间 next-server 192.168.2.6; //TFTP服务器地址 filename "pxelinux.0" ; //指定引导文件位置,这里是TFTP根目录下的pxelinux.0 } [root@youxi1 ~]# systemctl start dhcpd [root@youxi1 ~]# systemctl enable dhcpd |
5)测试各个服务是否能正常运行
在客户端youxi2上首先验证dhcp服务是否正常工作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@youxi2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE= "Ethernet" PROXY_METHOD= "none" BROWSER_ONLY= "no" BOOTPROTO= "dhcp" DEFROUTE= "yes" IPV4_FAILURE_FATAL= "yes" NAME= "ens33" UUID= "2c20e953-4536-49e1-8fe4-2c9079ea30ad" DEVICE= "ens33" ONBOOT= "yes" [root@youxi2 ~]# systemctl restart network [root@youxi2 ~]# ip a sh dev ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:f2:7e:52 brd ff:ff:ff:ff:ff:ff inet 192.168.2.100/24 brd 192.168.2.255 scope global dynamic ens33 valid_lft 539sec preferred_lft 539sec inet6 fe80::20c:29ff:fef2:7e52/64 scope link valid_lft forever preferred_lft forever |
在客户端youxi2上测试ftp服务是否正常工作
1 2 3 4 | [root@youxi2 ~]# lftp 192.168.2.6 lftp 192.168.2.6:~> ls drwxrwxr-x 8 0 0 2048 Nov 25 23:53 pub lftp 192.168.2.6:/> exit |
在客户端youxi2上测试tftp是否正常工作
1 2 3 4 5 | [root@youxi2 ~]# tftp 192.168.2.6 tftp> get vmlinuz tftp> quit [root@youxi2 ~]# ll vmlinuz -rw-r--r-- 1 root root 6639904 5月 25 18:12 vmlinuz |
6)修改引导菜单文件
在服务器端youxi1上修改tftp主目录下的引导菜单文件
1 2 3 4 5 6 7 8 9 10 | [root@youxi1 ~]# vim / var /lib/tftpboot/pxelinux.cfg/ default //修改引导菜单文件的第一行,default后面的值必须与下方label标签名中的一个相同,这里选择直接安装CentOS7的标签名linux default linux timeout 600 label linux menu label ^Install CentOS 7 kernel vmlinuz //指定通过网络启动系统时,通过ftp访问kickstart文件 append initrd=initrd.img inst.repo=ftp: //192.168.2.6/pub inst.ks=ftp://192.168.2.6/ks.cfg |
注意:此处的ks.cfg文件尚未创建(kickstart文件)
扩展:安装程序指向kickstart文件常见格式
ks=ftp://server/dir/file,如ks=ftp://192.168.2.6/ks.cfg,对应FTP
ks=http://server/dir/file,如ks=http://192.168.2.6/ks.cfg,对应HTTP
ks=nfs:server:/dir/file,如ks=nfs:192.168.2.6:/var/ftp/pub/ks.cfg,对应NFS
7)生成kickstart文件,可以在任何安装图形界面的
首先服务器端youxi1安装一下gdm插件(图形界面)
1 | [root@youxi1 ~]# yum -y install gdm |
接着将服务器端youxi1的yum源进行修改,只保留本地yum源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@youxi1 ~]# mkdir -p /backup/yum.repo [root@youxi1 ~]# mv /etc/yum.repos.d/*.repo /backup/yum.repo/ [root@youxi1 ~]# vim /etc/fstab /dev/sr0 / var /ftp/pub iso9660 defaults 0 0 //添加 [root@youxi1 ~]# mount -a mount: /dev/sr0 is write- protected , mounting read-only [root@youxi1 ~]# vim /etc/yum.repos.d/development.repo [development] //必须是development,否则kickstart读取不到 name=local-CentOS7 baseurl=file: ///var/ftp/pub enabled=1 gpgcheck=0 [root@youxi1 ~]# yum clean all [root@youxi1 ~]# yum makecache |
使用Xshell(或Xstart)执行命令system-config-kickstart打开图形操作界面。
注意:echo $LANG输出的是zh_CN.UTF-8,请将LANG改为en_US.UTF-8(LANG=en_US.UTF-8),否则会出现乱码。
之后就会出现如下图所示的配置界面
![](https://i-blog.csdnimg.cn/blog_migrate/723076c337931ddf994e3fea5c22b6c0.png)
基础配置(Basic Configuration):
![](https://i-blog.csdnimg.cn/blog_migrate/f5cd0e3d85791c8e7e3addca87edd8ad.png)
安装方案(Installation Method):全新安装(Perform new installation)
![](https://i-blog.csdnimg.cn/blog_migrate/fdc70fbba15ec331ec7d39e99a77f42c.png)
引导装载程序选项(Boot Loader Options):如果grub需要加密可以选择使用GRUB密码(Use GRUB passwd)
![](https://i-blog.csdnimg.cn/blog_migrate/ef300661dc22b89c21ffedd21aa30e0e.png)
分区信息(Partition Information):
网络配置(Network Configuration):
![](https://i-blog.csdnimg.cn/blog_migrate/a72b31042534314467f35ca9c485d704.png)
验证(Authentication):默认即可
防火墙(Firewall Configuration):可以全部关闭,也可以关闭SELinux而开启firewall。如果开启了firewall可以根据需求勾选服务端口。
![](https://i-blog.csdnimg.cn/blog_migrate/61b744af1c5f99644eb8391327a3fad7.png)
显示设置(Display Configuration):想安装图形界面的就打勾,不想安装的就去掉
软件包选择(Package Selection):根据需求勾选更多,Compatibility Libraries针对以前版本的CentOS构建应用程序的兼容库。
![](https://i-blog.csdnimg.cn/blog_migrate/bedddc1399504674fdfeb2d6cf302a7b.png)
预安装脚本(Pre-Installation Script)和安装后脚本(Post-Installation Script):根据需求运行一个脚本,可有可无。
配置完后,选择左上角的File-->Save进行保存:
![](https://i-blog.csdnimg.cn/blog_migrate/85df3937033144c1f040cf0be2e01ba2.png)
选择保存到上面设置的tftp主目录下的引导菜单文件中设置的kickstart文件位置,并且保证文件名要相同。
![](https://i-blog.csdnimg.cn/blog_migrate/84ca4a42d9d90d2f339a7261f60c84a0.png)
最后再查看下服务器端youxi1的SELinux和防火墙状态,确保关闭,并重启下dhcpd、network、vsftp。
8)新建一台虚拟机youxi3
网卡选择LAN1网段,确保能够获取DHCP分配的IP地址。并且光盘里没有镜像。内存给个2G,我给1G的适合会报错,报错信息如下,内存扩大到2G就没问题。
![](https://i-blog.csdnimg.cn/blog_migrate/e600fda85cacf6d851b7f039038c1c8f.png)
开启虚拟机,新建的虚拟机直接开机就好,等待运行完成。如果原本有系统需要将网络引导排在启动项的第一位,安装完成后,将硬盘引导移到第一位,否则会不停的重新安装系统。