一、PXE概述

预启动执行环境(PXE)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统。

使用kickstart进行Kylin系统的全自动化安装的环境要求如下:

  1. httpd:存放kickstart文件。
  2. tftp:提供vmlinuz和initrd文件。
  3. dhcpd/pxe:提供DHCP服务。
  4. ISO:Kylin-Server-10-SP1-Release-Build04-20200711-x86_64.iso。

二、前提条件

  1. 预装系统能够通过DHCP自动寻址PXE服务端;
  2. 服务器引导为UEFI模式;
  3. 服务器系统盘为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引导文件,就可以完全自动化的安装系统了。

四、服务流程

流程各项说明如下:

麒麟系统桌面版安装java 麒麟操作系统 安装exe_arm

 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