一、PXE概述
预启动执行环境(PXE)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统。
使用kickstart进行Kylin系统的全自动化安装的环境要求如下:
- httpd:存放kickstart文件。
- tftp:提供vmlinuz和initrd文件。
- dhcpd/pxe:提供DHCP服务。
- ISO:Kylin-Server-10-SP1-Release-Build04-20200711-x86_64.iso。
二、前提条件
- 预装系统能够通过DHCP自动寻址PXE服务端;
- 服务器引导为UEFI模式;
- 服务器系统盘为raid1或者raid0(一般系统盘在服务器后置双盘位)
三、内容介绍
第一阶段:DHCP
客户端开机选择network启动,然后将网卡上的pxe client信息拷贝到内存上运行,发送dhcp广播信息,从dhcp服务器上获取一个ip,并告知tftp服务器的ip,如果有多个dhcp服务器,客户端会接受第一个dhcp服务器的ip。所以服务器端要有个dhcp服务器。
第二阶段:TFTP
网卡上存储空间有限,所以只能集成轻量级别的tftp客户端。客户端从第一阶段获取到ip之后就会去tftp服务器端获取内核、初始化程序、引导文件等。所以服务器端还要搭建一个tftp服务器。
第三阶段:FTP/HTTP/NFS
这个阶段可以使用ftp/http/nfs中的一个来获取系统的安装文件。以上三个服务搭建之后,pxe服务器就搭建好了。接下来再写grub.cfg引导文件,就可以完全自动化的安装系统了。
四、服务流程
流程各项说明如下:
?Legacy模式使用pxelinux.0引导,UEFI模式使用BOOTAA64.EFI(ARM架构引导文件),x86为(BOOTX64.EFI)引导。
五、PXE服务器网络规划?
操作系统 | CentOS7.6 | CPU内存 | 8C16G | PXE服务器IP | 192.168.100.21/24 | 客户端网络 | 192.168.100.0/24 |
六、PXE服务器实践指导
安装DHCP服务:
[root@pxeserver ~]# yum install -y dhcp
[root@pxeserver ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@pxeserver ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style interim;
allow booting;
allow bootp;
ignore client-updates;
set vendorclass = option vendor-class-identifier;
option pxe-system-type code 93 = unsigned integer 16;
subnet 192.168.100.0 netmask 255.255.255.0 { #配置要分配的地址段及netmask, 需要修改为自己的网段
option routers 192.168.100.1; #配置网关,如dhcp有问题,注意网关的配置
option domain-name-servers 223.5.5.5; #配置dns,也可配置自己内部的dns
option subnet-mask 255.255.255.0; #配置netmask
range dynamic-bootp 192.168.100.10 192.168.100.100; #分配的ip范围
default-lease-time 21600; #缺省租约时间
max-lease-time 43200; #最大租约时间
next-server 192.168.100.21; #指定引导装机的ip
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
if option pxe-system-type = 00:07 {
filename "x86_uefi/BOOTX64.EFI";
} else if option pxe-system-type = 00:09 {
filename "x86_uefi/BOOTX64.EFI";
} else if option pxe-system-type = 00:0b { #arm服务器引导
filename "arm_uefi/BOOTAA64.EFI";
} else {
filename "pxelinux.0";
}
}
}
[root@pxeserver ~]# systemctl start dhcpd
[root@pxeserver ~]# systemctl enable dhcpd
安装配置TFTP服务:
[root@pxeserver ~]# yum install tftp xinetd tftp-server –y
[root@pxeserver ~]# vim /etc/xinetd.d/tftp
disable = no #开启tftp服务
关闭防火墙:
[root@pxeserver ~]# systemctl stop firewalld
[root@pxeserver ~]# systemctl disable firewalld
将selinux值设置永久禁用:
[root@pxeserver ~]# vim /etc/selinux/config
SELINUX=disabled
[root@pxeserver ~]# reboot #重启服务器生效
安装httpd服务:
[root@pxeserver ~]# yum install -y httpd
[root@pxeserver ~]# cd /var/www/html/
#创建ARM和X86安装源文件夹
[root@pxeserver html]# mkdir centos76_x86
[root@pxeserver html]# mkdir kylin_86_arm
制作安装源:
[root@pxeserver ~]# mkdir /mnt/{arm,x86}
[root@pxeserver ~]# mount -o loop Kylin-Server-10-SP1-Release-Build04-20200711-arm64.iso /mnt/arm/
[root@pxeserver ~]# cp -r /mnt/arm/* /var/www/html/kylin86_arm/
[root@pxeserver ~]# mount -o loop CentOS-7-x86_64-DVD-1810.iso /mnt/arm/
[root@pxeserver ~]# cp -r /mnt/x86/* /var/www/html/centos76_x86
拷贝pxe引导文件到tftp目录:
[root@pxeserver ~]# cd /var/lib/tftpboot/
[root@pxeserver tftpboot]# mkdir arm_uefi x86_uefi
#X86配置引导文件
[root@pxeserver ~]# cp -r /var/www/html/centos76_x86/EFI/BOOT/* /var/lib/tftpboot/x86_uefi/
[root@pxeserver ~]# cp /var/www/html/centos76_x86/images/pxeboot/vmlinuz /var/lib/tftpboot/x86_uefi/
[root@pxeserver ~]# cp /var/www/html/centos76_x86/images/pxeboot/initrd.img /var/lib/tftpboot/x86_uefi/
#Arm配置引导文件
[root@pxeserver ~]# cp -r /var/www/html/kylin86_arm/EFI/BOOT/* /var/lib/tftpboot/arm_uefi/
[root@pxeserver ~]# cp /var/www/html/kylin86_arm /images/pxeboot/vmlinuz /var/lib/tftpboot/arm_uefi/
[root@pxeserver ~]# cp /var/www/html/kylin86_arm /images/pxeboot/initrd.img /var/lib/tftpboot/arm_uefi/
修改pxe配置文件grub.cfg:
#X86 grub.cfg配置
[root@pxeserver ~]# vim /var/lib/tftpboot/x86_uefi/grub.cfg
set default="0"
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set timeout=5
### END /etc/grub.d/00_header ###
search --no-floppy --set=root -l 'CentOS 7 x86_64'
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install CentOS 7' --class fedora --class gnu-linux --class gnu --class os {
linuxefi x86_uefi/vmlinuz inst.ks=http://192.168.100.21/ks_x86.cfg quiet
initrdefi x86_uefi/initrd.img
}
#ARM grub.cfg配置
[root@pxeserver ~]# vim /var/lib/tftpboot/arm_uefi/grub.cfg
set default="0"
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set timeout=3
### END /etc/grub.d/00_header ###
search --no-floppy --set=root -l 'Kylin-Server-10'
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install Kylin Linux Advanced Server V10' --class red --class gnu-linux --class gnu --class os {
linux arm_uefi/vmlinuz inst.ks=http://192.168.100.21/ks_arm.cfg ro
initrd arm_uefi/initrd.img
}
设置和修改kickstart配置文件 :
#x86和arm相同自行配置
[root@pxeserver ~]# vim /var/www/html/ks_x86.cfg
auth --enableshadow --passalgo=sha512
install
url --url=http://192.168.100.21/kylin86_arm //此处为安装镜像源地址
text //文本模式安装
firstboot --disable //关闭下次开机进入引导模式
firewall --disabled
selinux --disabled
reboot //安装系统完成后自动重启
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --bootproto=dhcp --hostname=CentOSArm --device=ens3f0 --activate
rootpw --plaintext 123456 //root账户密码
services --disabled="chronyd"
timezone Asia/Shanghai
bootloader crashkernel=auto --location=mbr --boot-drive=sda
clearpart --all --initlabel //清除所有磁盘分区
part /boot/efi --fstype="efi" --ondisk=sda --size=1024
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --size=102400
part /boot --fstype="ext4" --size=1024
%pre
parted -s /dev/sda mklabel gpt //系统盘分区格式gpt
%end
%packages
@^minimal
@core
kexec-tools
%end
重启所有服务:
[root@pxeserver ~]# systemctl restart dhcpd
[root@pxeserver ~]# systemctl restart tftp
[root@pxeserver ~]# systemctl restart xinetd
[root@pxeserver ~]# systemctl restart httpd
|