pxe安装系统

00、环境

pxe主机:centos8
网络:
	eth0使用vmnet8,用作远程连接
	eth1使用vmnet10,仅主机模式,用作局域网内主机连接
ps:vmnet10关闭dhcp功能
	
测试主机:
网络:选择vmnet10模式,不安装系统

01、关闭防火墙

[root@pxe-template ~]# systemctl disable firewalld --now
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@pxe-template ~]# setenforce 0
[root@pxe-template ~]# getenforce 
Permissive

02、安装dhcp

1、安装dhcp服务
[root@pxe-template ~]# yum install -y dhcp-server

2、修改dhcp配置文件,网段设置需要和eth1的IP地址在同一个网段
[root@pxe-template ~]# cat /etc/dhcp/dhcpd.conf 
subnet 172.16.0.0 netmask 255.255.255.0 {
 range 172.16.0.100 172.16.0.200;
}

3、重启dhcp服务
[root@pxe-template ~]# systemctl restart dhcpd

4、查看dhcp的端口号
[root@pxe-template ~]# netstat -lntup | grep dhcpd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2802/dhcpd 

03、安装tftp

1、安装tftp服务
[root@pxe-template ~]# yum install -y tftp-server

2、启动tftp服务
[root@pxe-template ~]# systemctl enable tftp --now
Created symlink /etc/systemd/system/sockets.target.wants/tftp.socket → /usr/lib/systemd/system/tftp.socket.

#查看端口号
[root@pxe-template ~]# netstat -lntup | grep 69
udp6       0      0 :::69                   :::*                                1/systemd 


3、添加配置文件到tftp根目录
# 查看tftp服务的家目录
[root@pxe-template ~]# cat /lib/systemd/system/tftp.service 
[Unit]
Description=Tftp Server
Requires=tftp.socket
Documentation=man:in.tftpd

[Service]
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot		
StandardInput=socket

[Install]
Also=tftp.socket

ps:tftp由systemd管理,在systemd配置文件可以看到tftp启动加载/var/lib/tftpboot
/var/lib/tftpboot为tfpt的根目录

# 生成配置文件
[root@pxe-template ~]# yum install -y syslinux	
[root@pxe-template ~]# ls /usr/share/syslinux/
altmbr.bin    cpu.c32        dmitest.c32   hdt.c32         isohdpfx_f.bin      lfs.c32       lua.c32      pcitest.c32   sanboot.c32     vesamenu.c32
altmbr_c.bin  cpuid.c32      dosutil       hexdump.c32     isohdppx.bin        libcom32.c32  mboot.c32    pmload.c32    sdi.c32         vpdtest.c32
altmbr_f.bin  cpuidtest.c32  elf.c32       host.c32        isohdppx_c.bin      libgpl.c32    mbr.bin      poweroff.c32  sysdump.c32     whichsys.c32
cat.c32       debug.c32      ethersel.c32  ifcpu64.c32     isohdppx_f.bin      liblua.c32    mbr_c.bin    prdhcp.c32    syslinux64.exe  zzjson.c32
chain.c32     dhcp.c32       gfxboot.c32   ifcpu.c32       isolinux.bin        libmenu.c32   mbr_f.bin    pwd.c32       syslinux.c32
cmd.c32       diag           gptmbr.bin    ifmemdsk.c32    isolinux-debug.bin  libutil.c32   memdisk      pxechn.c32    syslinux.com
cmenu.c32     dir.c32        gptmbr_c.bin  ifplop.c32      kbdmap.c32          linux.c32     meminfo.c32  pxelinux.0    syslinux.exe
config.c32    disk.c32       gptmbr_f.bin  isohdpfx.bin    kontron_wdt.c32     lpxelinux.0   menu.c32     reboot.c32    vesa.c32
cptime.c32    dmi.c32        gpxecmd.c32   isohdpfx_c.bin  ldlinux.c32         ls.c32        pci.c32      rosh.c32      vesainfo.c32

# 将pxelinux.0文件放到tftp服务的个目录下,供客户端下载
[root@pxe-template ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

# 修改dhcp服务配置文件,指定客户端下载的文件,和下载文件的tftp服务器
[root@pxe-template ~]# cat /etc/dhcp/dhcpd.conf
subnet 172.16.0.0 netmask 255.255.255.0 {
 range 172.16.0.100 172.16.0.200;
 next-server 172.16.0.10;
 filename "pxelinux.0";
}

4、创建pxelinux.cfg目录,编辑default文件指定引导界面的menu
[root@pxe-template ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@pxe-template ~]# cat /var/lib/tftpboot/pxelinux.cfg/default 
default vesamenu.c32		# 指定使用的引导文件
timeout 30000
label tyb		# 标签
ps:常用的引导文件 vesamenu.c32 menu.c32

# 将引导文件放在tftp服务的根目录
[root@pxe-template ~]# cp /usr/share/syslinux/* /var/lib/tftpboot/

4、安装httpd

1、安装httpd
[root@pxe-template ~]# yum install -y httpd

2、创建用于存放软件包的目录
[root@pxe-template ~]# mkdir /var/www/html/iso

3、将镜像文件复制到iso目录
[root@pxe-template ~]# cp -rp /mnt/* /var/www/html/iso/
[root@pxe-template ~]# ll /var/www/html/iso/
total 56
dr-xr-xr-x. 4 root root    38 Apr  4  2019 AppStream
dr-xr-xr-x. 4 root root    38 Apr  4  2019 BaseOS
dr-xr-xr-x. 3 root root    18 Apr  4  2019 EFI
-r--r--r--. 1 root root  8266 Mar  1  2019 EULA
-r--r--r--. 1 root root  1455 Apr  4  2019 extra_files.json
-r--r--r--. 1 root root 18092 Mar  1  2019 GPL
dr-xr-xr-x. 3 root root    76 Apr  4  2019 images
dr-xr-xr-x. 2 root root   256 Apr  4  2019 isolinux
-r--r--r--. 1 root root   103 Apr  4  2019 media.repo
-r--r--r--. 1 root root  1669 Mar  1  2019 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root  5134 Mar  1  2019 RPM-GPG-KEY-redhat-release
-r--r--r--. 1 root root  1796 Apr  4  2019 TRANS.TBL
[root@pxe-template ~]#

5、启动服务
[root@pxe-template ~]# systemctl enable dhcpd --now

6、将系统内核文件和内存镜像文件放到tftp服务的根目录
[root@pxe-template ~]# cp /mnt/isolinux/vmlinuz /mnt/isolinux/initrd.img /var/lib/tftpboot/

5、最终修改default文件

[root@pxe-template ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 30000
label install centos8
  kernel vmlinuz
  append initrd=initrd.img method=http://172.16.0.10/iso
[root@pxe-template ~]# 

Kickstart

==ks文件主要用于系统的自动化安装==

实列:
[root@pxe-template ~]#  cat anaconda-ks.cfg 
#version=RHEL8
ignoredisk --only-use=nvme0n1
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
# Use graphical install
graphical
repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream
# Use CDROM installation media
cdrom
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=eth0 --onboot=off --ipv6=auto --no-activate
network  --bootproto=dhcp --device=eth1 --onboot=off --ipv6=auto
network  --hostname=localhost.localdomain
# Root password
rootpw --iscrypted $6$.vqy6BYItJLHZBsv$9m7.p/4Vofysmyazy1C9bk8sxAMFhn4dY2wmQGB4.OwR9lfpDRUCKqpKHK0rITbYSF4jawakG1z1sGbETKcy9/
# Run the Setup Agent on first boot
firstboot --enable
# Do not configure the X Window System
skipx
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
user --name=tyb --password=$6$kOS/jwnqPWtFzSun$mWhuIoTxExTE9zb5xwTPukVqa8cz3IV26x8RwFnoMqkIEpPz/UyyEMn6JauNnj8ZTZR8cFGap5dIJK11gRsFq. --iscrypted --gecos="tyb"

%packages
@^minimal-environment
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

将ks文件加入到系统启动

1、获取ks文件
方式:
	1)可以通过修改anaconda-ks.cfg文件获得
	2)通过安装system-config-kickstart生成
yum install system-config-kickstart
启动 Kickstart Configurator,请将系统引导至图形环境,然后运行 system-config-kickstart,或在 GNOME 桌面上点击 应用程序 → 系统工具 → Kickstart,或者在 KDE 桌面上点击 开始应用程序启动器+应用程序 → 系统 → Kickstart。

2、将ks文件放到http服务的根目录
[root@pxe-template ~]# cp anaconda-ks.cfg /var/www/html/

3、修改/var/lib/tftpboot/pxelinux.cfg/default
[root@pxe-template ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 30000
label install centos8
  kernel vmlinuz
  append initrd=initrd.img method=http://172.16.0.10/iso ks=http://172.16.0.10/anaconda-ks.cfg

总结

pxe引导需要的文件

1、dhcp配置文件					---dhcp服务
[root@pxe-template ~]# cat /etc/dhcp/dhcpd.conf 
subnet 172.16.0.0 netmask 255.255.255.0 {
 range 172.16.0.100 172.16.0.200;
 next-server 172.16.0.10;
 filename "pxelinux.0";
}	
作用:指定配置dhcp的IP地址范围,指定tftp服务器地址,指定下载pxelinux.0

2、/var/lib/tftpboot/		---tftp服务
pxelinux.0		# 系统安装时下载的第一个文件
ldlinux.c32									 ---安装syslinux包后生成
vmlinuz			# 系统内核文件
initrd.img		# 内存镜像文件
menu.c32		# 系统引导文件(简洁版)
vesamenu.c32	# 系统引导文件(豪华版)
一堆syslinux生成的引导文件

3、/var/lib/tftpboot/pxelinux.cfg/default	---指定系统内核文件,内存镜像文件,软件包地址
[root@pxe-template ~]# cat /var/lib/tftpboot/pxelinux.cfg/default 
default menu.c32
timeout 30000
label install centos8
  kernel vmlinuz
  append initrd=initrd.img method=http://172.16.0.10/iso

4、 /usr/share/syslinux		---sysliux
需要安装syslinux包
生成安装系统所需要的引导文件
将所有的引导文件都放入tftp服务的根目录下,供客户端下载

5、/var/www/html/iso			---http服务
主要用与存放系统安装所需要的软件包,以http的形式提供为客户端
这里直接怪哉系统镜像,或者拷贝系统奖项到这里即可
需要在/var/lib/tftpboot/pxelinux.cfg/default文件中指定软件包所存放的位置