相信很多人都有过装系统的经历,以前是用光盘,现在基本都是用U盘来装系统。我们只需要制作一个U盘驱动即可,安装起来方便快捷。但如果是企业需要同时安装大量的系统时,U盘很显然不适合,它会耗费大量的时间。这时我们就可以用到PXE远程安装服务了,它可以提供大量的客户机同时安装系统。但是,同时安装的客户机数量是受到带宽的限制的。而且在安装系统时,还需要手动进行部分设置。这时我们就会用到Kickstart无人值守安装。
PXE:预启动执行环境(Preboot eXecution Environment,PXE)也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。 工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 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,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
Kickstart:是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。
1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;
2. DHCP 服务器会分配给客户机的IP,同时告知PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;
3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;
4. PXE Client 取得pxelinux.0 文件后之执行该文件;
5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;
6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装(我用的是FTP)。
用VMware14 虚拟机来进行本次实验:
1.首先为了方便实验,需要一台CentOS7同时部署DHCP、TFTP、FTP服务来作为PXE服务端。服务端需要配置双网卡,一块为NAT模式,用来联网安装所需程序,一块为仅主机模式,配置一个固定IP用来与局域网互通。
2.新建一台虚拟机用来作为PXE客户端,用来进行远程安装,安装的系统也为CentOS7。
1.给客户端添加一块网卡,并将网络模式改为仅主机模式。
2.进入“/network-scripts/”目录下,复制一份“ifcfg-ens33”配置文件,命名为“ifcfg-ens36”。“-p”为保留原有权限。
输入:cd /etc/sysconfig/network-scripts/
输入:cp -p ifcfg-ens33 ifcfg-ens36
3.用vim编辑器对配置文件“ifcfg-ens36”进行编辑,将“dhcp”改为“static”,“ens33”改为“ens36”,删除“UUID”,同时添加IP地址、子网掩码、网关。
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7bdb3fdc-0c3b-4a92-918d-3815b0816b02
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.100
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
4.重启网络服务,再查看一下网络配置。“ens36”网卡的固定IP已经设置成功。
输入:systemctl restart network
输入:ifconfig
5.安装DHCP服务所需软件包。
输入:yum install dhcp -y
6.复制一份DHCP主配置文件的模板,覆盖DHCP的主配置文件。
输入:cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
7.用vim编辑器对DHCP服务主配置文件进行编辑,添加一个“192.168.100.0”网段的配置文件,地址池可根据具体情况自己决定,主要是下一个TFTP服务器的路径和引导程序的位置。
添加:
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.20 192.168.100.30;
option routers 192.168.100.100;
option domain-name-servers 114.114.114.114;
next-server 192.168.100.100;
filename "pxelinux.0";
}
8.安装“syslinux”软件包和“tftp-server”软件包。
输入:yum install syslinux -y
输入:yum install tftp-server -y
9.查看一下“syslinux”和“tftp-server”软件包的配置文件,我将重要的配置文件标了出来。
输入:rpm -ql syslinux |grep pxelinux.0
输入:rpm -ql tftp-server
10.复制一份“pxelinux.0”文件到“/var/lib/tftpboot/”目录下,并查看是否复制成功。
输入:cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
输入:ls /var/lib/tftpboot/
11.用vim编辑器对TFTP服务的配置文件进行编辑,将“disable”后的“yes”改为“no”,开启TFTP服务。
输入:vim /etc/xinetd.d/tftp
12.安装FTP服务所需软件包。
输入:yum install vsftpd -y
13.进入到FTP服务的站点目录下,新建一个centos7目录。
输入:cd /var/ftp/
输入:mkdir centos7
14.将PXE客户端所需要的光盘镜像挂载到刚才创建的centos7目录下,并查看挂载信息(你也可以直接复制过去)。
输入:mount /dev/sr0 /var/ftp/centos7/
输入:df -h
15.进入到“centos7/images/pxeboot/”目录下(可以一步直接进入),将文件“initrd.img”和“vmlinuz”复制到“/var/lib/tftpboot/”目录下。
输入:cd centos7/images/pxeboot/
输入:cp initrd.img vmlinuz /var/lib/tftpboot/
16.查看一下“ /var/lib/tftpboot/”目录,已经有了三个文件了,其中“pxelinux.0”是引导程序文件,“vmlinuz”是压缩内核文件,“initrd.img”是系统初始化文件。现在还差一个默认的启动菜单文件,所以我们直接进入“/var/lib/tftpboot/”目录,创建一个目录“pxelinux.cfg”,然后在目录“pxelinux.cfg”内新建一个文件“default”。
输入:ls /var/lib/tftpboot/
输入:cd /var/lib/tftpboot/
输入:mkdir pxelinux.cfg
输入:cd pxelinux.cfg/
输入:vim default
17.在“default”文件中,输入以下内容。
default auto //默认自动模式
prompt 1 //等待时间1s
label auto //自动模式安装
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.100.100/centos7
label linux text //文本模式安装
kernel vmlinuz
append text initrd=initrd.img method=ftp://192.168.100.100/centos7
label linux rescue //进入救援模式
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://192.168.100.100/centos7
18.关闭防火墙和增强性安全功能,同时开启DHCP、TFTP、FTP服务。
输入:systemctl stop firewalld.service
输入:setenforce 0
输入:systemctl start dhcpd
输入:systemctl start tftp
输入:systemctl start vsftpd
19.咱们新建一个虚拟机,具体配置如下图,注意网络为仅主机模式。
20.打开新建的虚拟机作为PXE客户机,选择网络驱动。
21.客户机会获取到DHCP服务分配的IP地址,然后启动引导程序,加载默认的启动菜单。此时需要回车才会继续。
22.在回车后,稍作等待就会进入系统安装的设置界面。
23.我们可以看到PXE远程安装服务,在安装过程中任需要人工进行设置,而我们需要的是无人值守安装,那么我们可以配置“kickstart”程序。首先安装一个“system-config-kickstart”软件包。
输入:yum install system-config-kickstart -y
24.我们进入图形化界面(可以用“init 5”命令进入),进入Kickstart的配置面板。
25.基本配置,设置好默认语言和时区,同时设置root用户密码,勾选安装后重启。
26.安装方法,选择FTP,同时输入FTP服务器的路径和存放镜像文件的目录。
27.引导装载程序选项,勾选安装引导装载程序即可。GRUB密码也可以设置,这样系统会更加安全。
28.分区信息,点击添加分别设置“/boot”、“/home”、“swap”、“/”等分区的大小。注意根分区“/”不用设置大小,直接勾选使用磁盘全部未使用空间即可。
29.网络配置,添加一块ens33网卡,网络类型默认的DHCP模式即可。
30.防火墙配置,禁用SELinux。
31.安装后脚本,选择使用解释程序,输入“/bin/bash”即可。
32.保存配置好的文件,将文件“ks.cfg”保存到FTP服务的站点目录”/var/ftp“下。
33.我们先进入root的家目录,用vim编辑器进入“anaconda-ks.cfg”文件,这是“ks.cfg”的模板文件,我们将其中的安装包命令复制,粘贴到“ks.cfg”文件中去。
输入:cd ~
输入:vim anaconda-ks.cfg
输入:cd /var/ftp/
输入:vim ks.cfg
34.我们再进入“/var/lib/tftpboot/pxelinux.cfg/” 目录,用vim编辑器对“default”文件进行编辑,在自动模式的文件后面添加一个kickstart配置文件的路径。
default auto
prompt 1
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.100.100/centos7 ks=ftp://192.168.100.100/ks.cfg
label linux text
kernel vmlinuz
append text initrd=initrd.img method=ftp://192.168.100.100/centos7
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://192.168.100.100/centos7
35.我们再新建一台虚拟机,配置与之前的相同。
36.启动新建的虚拟机,操作与PXE远程安装一样,不过这次不需要在手动设置了,系统会自动执行我们在“ks.cfg”文件中配置的内容。