使用PXE+Kickstart无人值守安装系统

时间:2021-06-20 22:12:50

使用PXE+Kickstart无人值守安装系统

PXE预启动执行环境(即Preboot execute environment)

是一种能够让计算机通过网络启动的引导方式,只要网卡支持PXE协议即可使用,用于在无人值守安装系统服务中引导客户机安装服务。Kickstart是一种无人值守的安装方式,工作原理就是预先把原本需要运维人员手工填写的参数保存成一个ks.cfg文件,当安装过程中出现需要填写参数时则自动匹配Kickstart生成的文件,所以只要Kickstart文件包含了安装过程中所有需要人工填写的参数,那么理论上来讲运维人员就完全不需要再进行手工操作,喝着咖啡等待系统安装完毕即可。

VirtualBox关闭DHCP功能。

使用PXE+Kickstart无人值守安装系统

准备一台服务器作为PXE服务器,并部属相关程序

1、安装所需的软件包

# yum install xinetd dhcp tftp-server httpd syslinux system-config-kickstart

2、配置:dhcp

DHCP动态主机地址管理服务程序用于为客户主机网卡分配可用的IP地址,这是服务端与客户端主机进行文件传输的基础。

# vi /etc/dhcp/dhcpd.conf

subnet 192.168.100.0  netmask 255.255.255.0 {
   range 192.168.100.50 192.168.100.60;
   option domain-name-servers 192.168.100.111;
   option domain-name "rusky.com";
   option routers 192.168.100.100;
   option broadcast-address 192.168.100.255;
   default-lease-time 3600;
   max-lease-time 7200;
   next-server   192.168.100.111; 
   filename      "/pxelinux.0";
}

#最后两行作用是让客户端主机网卡获取到IP地址后主动去到next-server服务器获取引导驱动文件pxelinux.0,自动进行下一步的安装过程。

[root@localhost ~]# systemctl restart dhcpd.service
[root@localhost ~]# netstat -antulp | grep dhcpd
udp        0      0 0.0.0.0:20108           0.0.0.0:*                           5195/dhcpd         
udp        0      0 0.0.0.0:67              0.0.0.0:*                           5195/dhcpd         
udp6       0      0 :::52427                :::*                                5195/dhcpd

3、配置TFTP

vsftpd是一款功能丰富的文件传输服务程序,需要用户使用匿名、本地甚至虚拟用户来进行访问验证,但当前的客户端主机连系统都没有安装,如何进行登录验证呢?而TFTP是一种基于UDP协议的简单文件传输协议,用户不需要进行验证即可获取到所需的文件资源,因此接下来配置TFTP服务程序来为用户提供引导及驱动文件吧~当客户端有了基本的驱动程序后再通过vsftpd服务程序把完整的光盘镜像文件传送过去。

TFTP是一种非常精简的文件传输服务程序,它的运行和关闭时由xinted网络守护进程服务来进行统一管理的,平时xinetd服务程序会同时监听很多个系统的端口号,然后根据用户请求的端口号来调取对应的服务程序来响应用户的请求。如果咱们需要开启TFTP服务程序的话,就把xinetd服务程序对应的配置文件中disable参数改成no就可以了,意思是不要禁用TFTP服务程序,那也就是开启它了。配置文件修改好后保存退出,然后记得把xinetd服务程序重启一下,然后加入到开机启动项中(红帽RHEL7系统中xinetd服务程序默认已经启用,因此此时执行命令没有输出信息是正常情况)。

TFTP服务程序默认会占用服务器 udp 协议的69端口号,所以在生产环境中还要记得在firewalld防火墙管理工具中写入一下永久生效的允许策略,让客户端主机能够顺利的获取到引导文件。

配置文件都在/etc/xinetd.d目录下

[root@localhost ~]# cd /etc/xinetd.d/

[root@localhost xinetd.d]# ll

total 4

-rw-r--r--. 1 root root 518 Mar  2  2016 tftp

[root@localhost xinetd.d]# vi 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   #默认到该目录去找pxelinux.0等启动相关的文件
         disable                 = no
         per_source              = 11
         cps                     = 100 2
         flags                   = IPv4

}

[root@localhost ~]# systemctl restart xinetd.service

[root@localhost ~]# netstat -antulp | grep :69

udp        0      0 0.0.0.0:69              0.0.0.0:*                           5945/xinetd        

udp6       0      0 :::69                   :::*                                1/systemd          

[root@localhost ~]#

4、SysLinux

SYSLinux是用于提供引导加载的服务程序,与其说SYSLinux说一个服务程序,不如说更需要里面的引导文件,安装好SYSLinux服务程序软件包后就会在/usr/share/syslinux目录中出现很多的引导文件。

把SYSLinux提供的引导文件pxelinux.0 复制到TFTP服务程序的默认目录中,这样用户就可以在无系统的情况下顺利的获取到引导文件了。

5、拷贝相关文件到/var/lib/tftpboot目录

[root@localhost ~]# ll /var/lib/tftpboot/

total 0

[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg

[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

[root@localhost ~]# cp /mnt/isolinux/* /var/lib/tftpboot/   #在挂载的系统光盘里,mount /dev/cdrom /mnt目录下。

[root@localhost ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default #从系统光盘中把开机选项菜单复制到这里目录中命名为default,这个文件就是开机时候的选项菜单

[root@pxeserver pxelinux.cfg]# ll

total 4

-r--r--r--. 1 root root 3166 Nov 15 00:03 default

[root@pxeserver pxelinux.cfg]# chmod 644 /var/lib/tftpboot/pxelinux.cfg/default

[root@localhost ~]# ll /var/lib/tftpboot/

total 108984

-r--r--r--. 1 root root     2048 Nov 15 00:02 boot.cat

-r--r--r--. 1 root root       84 Nov 15 00:02 boot.msg

-r--r--r--. 1 root root      321 Nov 15 00:02 grub.conf

-r--r--r--. 1 root root 49763300 Nov 15 00:02 initrd.img

-r--r--r--. 1 root root    24576 Nov 15 00:02 isolinux.bin

-r--r--r--. 1 root root     3166 Nov 15 00:02 isolinux.cfg

-r--r--r--. 1 root root   190896 Nov 15 00:02 memtest

-rw-r--r--. 1 root root    26826 Nov 14 23:59 pxelinux.0

drwxr-xr-x. 2 root root       21 Nov 15 00:03 pxelinux.cfg

-r--r--r--. 1 root root      186 Nov 15 00:02 splash.png

-r--r--r--. 1 root root     2438 Nov 15 00:02 TRANS.TBL

-r--r--r--. 1 root root 55528012 Nov 15 00:02 upgrade.img

-r--r--r--. 1 root root   153104 Nov 15 00:02 vesamenu.c32

-r-xr-xr-x. 1 root root  5875184 Nov 15 00:02 vmlinuz

[root@localhost ~]#

6、修改default配置文件

[root@localhost pxelinux.cfg]# vi default

default linux #默认为vesamenu.c32,表示从光盘启动,这里修改为Linux,表示从label linux 标签内容启动。

timeout 600

label linux
   menu label ^Install Red Hat Enterprise Linux 7.4
   kernel vmlinuz
   append initrd=initrd.img ks=http://192.168.100.111/ks.cfg inst.repo=http://192.168.100.111/cdrom quiet

#把默认的光盘镜像安装方式修改成httpd(也可以用ftp)网络文件传输方式,指定好光盘镜像的获取网址以及ks应答文件的获取路径

7、创建KickStart应用文件ks.cfg

这个文件可以直接修改/root/anaconda-ks.cfg 文件。但是建议system-config-kickstart图形界面来生成这个文件。

#system-config-kickstart

使用PXE+Kickstart无人值守安装系统

使用PXE+Kickstart无人值守安装系统

注意上面的配置文件default里:inst.repo=http://192.168.100.111/cdrom

是在apache默认目录下的cdrom目录下。所以后边还得在/var/www/html目录下创建cdrom目录,并且mount /dev/cdrom /var/www/html/cdrom目录。

使用PXE+Kickstart无人值守安装系统

使用PXE+Kickstart无人值守安装系统

使用PXE+Kickstart无人值守安装系统

认证方式,如果没有,可以不用选择。

使用PXE+Kickstart无人值守安装系统

建议把防火墙和Selinux关闭。

使用PXE+Kickstart无人值守安装系统

RHEL7+的包选项有bug,选择不了,只能后边再手动修改生成的文件。

使用PXE+Kickstart无人值守安装系统

安装前和安装后需要执行的脚本,如果没有需要,可以不写。

使用PXE+Kickstart无人值守安装系统

最后将ks.cfg文件保存到/var/www/html目录下。

使用PXE+Kickstart无人值守安装系统

append initrd=initrd.img ks=192.168.100.111/ks.cfg

注意配置文件default里我们修改的这一行,我们把ks.cfg文件指定到apache的默认目录/var/www/html目录,所以这一步保存文件时也必须保存到该目录下。

手动修改ks.cfg文件:把上面“Package selection”那一步选择不了的包添加进来。

从/root/anaconda-ks.cfg这个文件里去copy。

# vi /var/www/html/ks.cfg

# Clear the Master Boot Record

zerombr

# Partition clearing information

clearpart --all --initlabel

# Disk partitioning information

part /boot --fstype="xfs" --size=200

part swap --fstype="swap" --size=2048

part / --fstype="xfs" --size=10240

%packages

@^graphical-server-environment

@base

@compat-libraries

@core

@desktop-debugging

@development

@dial-up

@fonts

@gnome-desktop

@guest-agents

@guest-desktop-agents

@hardware-monitoring

@input-methods

@internet-browser

@multimedia

@print-client

@x11

%end

%post

useradd lxjtest

echo lxjtest | passwd --stdin lxjtest

%end

[root@localhost ~]# mkdir /var/www/html/cdrom

[root@localhost ~]# mount /dev/cdrom /var/www/html/cdrom/

mount: /dev/sr0 is write-protected, mounting read-only

[root@localhost ~]# systemctl restart httpd

[root@localhost ~]#

8、自动部署客户机

按照上面的配置方法成功部署各个相关服务程序后,咱们就可以开始用PXE+Kickstart无人值守安装系统啦,参考下面步骤建立虚拟主机时一定要把客户端网卡模式设定成与服务端一致的仅主机模式,否则两台服务器根本不能通信,也就肯定不能自动化安装系统了。

使用PXE+Kickstart无人值守安装系统

连接方式为host-only,跟PXE-SERVER服务器连接到同一块虚拟网卡上。

使用PXE+Kickstart无人值守安装系统

启动顺序勾选“网络”

使用PXE+Kickstart无人值守安装系统

使用PXE+Kickstart无人值守安装系统

然后就到下面的图形界面了,整个过程会自动完成系统安装,安装完成后会自动重启。

r使用PXE+Kickstart无人值守安装系统

问题:在测试的过程中,如上图,在“NO disk selected”停住了。不知道啥原因,system-config-kickstart图形界面配置的过程中也没有这项。在对比/root/anaconda-ks.cfg文件时也没找到问题。