PXE自动平台 搭建 银河麒麟 UEFI x86_64 ARM64

1. PXE自动化 原理

要实现PXE自动安装需要以下组件:

  1. DHCP服务:服务器通过网络启动时自动分配IP地址。
  2. TFTP服务:提供服务器启动下载启动引导EFI。
  3. HTTP服务:操作系统镜像下载。

各组件工作原理如下[1]

  1. 开PXE后,主机启动时通过网口DHCP获取到IP,以及启动引导文件位置。
  2. 主机通过TFTP协议从从指定位置获取启动引导文件EFI。
  3. 主机上通过引到程序启动系统安装程序。
  4. 系统安装程序通过HTTP协议下载操作系统镜像中所需的内容,例如内核、软件安装包等。
  5. 系统安装完成。
    在这里插入图片描述

2. 安装

2.1 系统配置

关闭selinux

setenforce 0

在这里插入图片描述

关闭开机启动

vi /etc/selinux/config

设置 SELINUX=disabled
在这里插入图片描述

关闭防火墙

或开放端口:

  • TFTP TCP 69
  • HTTP TCP 80
  • DHCP UDP 67,68

2.2 系统镜像准备

请准备X86_64、ARM64 操作系统安装镜像,这里以 银河麒麟V10 举例。
在这里插入图片描述

我们将解压后镜像存储于 /var/www/html/ 中,创建相关目录

mkdir -p /var/www/html/kylin_x86_64
mkdir -p /var/www/html/kylin_aarch64

在这里插入图片描述

把x86_64镜像中的所有内容复制 /var/www/html/kylin_x86_64

mkdir -p cdrom
mount -o loop Kylin-Server-V10-SP3-General-Release-2212-X86_64.iso cdrom
cp -rf cdrom/. /var/www/html/kylin_x86_64
umount cdrom

在这里插入图片描述

把ARM64镜像中的所有内容复制 /var/www/html/kylin_aarch64

mkdir -p cdrom
mount -o loop Kylin-Server-V10-SP3-General-Release-2212-ARM64.iso cdrom
cp -rf cdrom/. /var/www/html/kylin_aarch64
umount cdrom

在这里插入图片描述

2.3 TFTP服务 安装配置

安装TFTP服务

yum install -y tftp-server xinetd

在这里插入图片描述

编辑/etc/xinetd.d/tftp 文件启动允许tftp

vi /etc/xinetd.d/tftp

disable 改为no

在这里插入图片描述
注意,tftp默认的服务目录是 /var/lib/tftpboot ,因此我们需要将我们的EFI启动引导文件放到该目录下。

在此之前我们需要将操作系统的镜像文件中EFI文件拷贝到该目录中。

首先创建不同CPU指令集的目录用于容纳不同的启动文件,这里以 x86_64、aarch64(arm64)、为例:

mkdir -p /var/lib/tftpboot/x86_64
mkdir -p /var/lib/tftpboot/aarch64

ls -l /var/lib/tftpboot

在这里插入图片描述

从镜像文件中的/EFI/BOOT/*/images/pxeboot/ 中的所有内容复制 相应目录中。

x86_64 启动引导复制

\cp -rf /var/www/html/kylin_x86_64/EFI/BOOT/* /var/lib/tftpboot/x86_64/
\cp -rf /var/www/html/kylin_x86_64/images/pxeboot/* /var/lib/tftpboot/x86_64/

ls -l /var/lib/tftpboot/x86_64/

在这里插入图片描述

ARM64 启动引导复制

\cp -rf /var/www/html/kylin_aarch64/EFI/BOOT/* /var/lib/tftpboot/aarch64/
\cp -rf /var/www/html/kylin_aarch64/images/pxeboot/* /var/lib/tftpboot/aarch64/

ls -l /var/lib/tftpboot/aarch64/

在这里插入图片描述

命令前缀\cp 中的\是用于放置覆盖确认提示。

设置开机启动并启动服务

systemctl enable --now xinetd
systemctl enable --now tftp

在这里插入图片描述

查看xinted 服务状态:

systemctl status xinetd

在这里插入图片描述
查看tftp 服务状态:

systemctl status tftp

在这里插入图片描述

2.4 DHCP服务 安装配置

安装dhcp服务:

yum install -y dhcp

在这里插入图片描述

创建DHCP配置文件 /etc/dhcp/dhcpd.conf

DHCP配置文件关键信息如下:

  • 网段:192.168.50.0/24
  • 网关:192.168.50.1 (也就是PXE服务器IP作为网关)
  • DNS:223.5.5.5
  • 分配IP范围:192.168.50.50 ~ 192.168.50.250
  • 启动引导服务地址:192.168.50.1 (也就是PXE服务器IP)
  • 指令集引导文件位置(相对TFTP服务的位置/var/lib/tftpboot):
    • x86_64:x86_64/BOOTX64.EFI
    • aarch64(ARM64):aarch64/BOOTAA64.EFI
vi /etc/dhcp/dhcpd.conf

/etc/dhcp/dhcpd.conf 修改自 /usr/share/doc/dhcp-server/dhcpd.conf.example

/etc/dhcp/dhcpd.conf 配置文件内容如下:

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
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;
#配置要分配的地址段及netmask, 需要修改为自己的网段
subnet 192.168.50.0 netmask 255.255.255.0 { 
    # 配置网关,网络里不要出现多个DHCP服务否则可能会无法正常引导。
    option routers 192.168.50.1;
    # 配置dns
    option domain-name-servers 223.5.5.5; 
    # 配置netmask
    option subnet-mask 255.255.255.0;
    # 分配的ip范围
    range dynamic-bootp 192.168.50.50 192.168.50.250;
    # 缺省租约时间
    default-lease-time 21600;
    # 最大租约时间
    max-lease-time 43200;
    # 指定引导装机的ip
    next-server 192.168.50.1; 

    class "pxeclients" {
        # 根据系统类型选择不同EFI引导文件
        # - 07和09 为x86_64 
        # - 0b 为ARM64
        # - 27 为LoongArch64
        # - 其他: legacy 方式引导
        # EFI引导采用TFTP下载,文件位置为TFTP目录相对位置
        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
        
        if option pxe-system-type = 00:07 {
            # x86_64 引导
            filename "x86_64/BOOTX64.EFI";
        } else if option pxe-system-type = 00:09 {
            # x86_64 引导
            filename "x86_64/BOOTX64.EFI";
        } else if option pxe-system-type = 00:0b {
            # arm64引导
            filename "aarch64/BOOTAA64.EFI";
        } else {
            # legacy引导 该文件需要安装 syslinux,
            filename "pxelinux.0";
        }
    }
}

x86_64引导文件名为 BOOTX64.EFI ,ARM64引导文件名为 BOOTAA64.EFI

若在启动过程中出现 PXE-E99: Unexpected network error 请检查 option routers 子网掩码等参数配置是否正确。

设置开机启动并启动服务

systemctl enable --now dhcpd

在这里插入图片描述

查看DHCP服务启动状态

systemctl status dhcpd

在这里插入图片描述

2.5 HTTP服务 安装配置

yum install -y httpd

在这里插入图片描述
httpd默认映射的目录为/var/www/html 也就是我们之前创建用于存储镜像的目录。

设置httpd开机启动并启动

systemctl enable --now httpd

在这里插入图片描述
查看服务状态

systemctl status httpd

在这里插入图片描述
通过浏览器访问httpd映射的ARM64目录

http://192.168.50.1/kylin_aarch64/

在这里插入图片描述

3. 修改引导配置文件

TFTP服务 安装配置 中,我们分别从x86、arm64镜像中复制了启动引导相关文件至/var/lib/tftpboot/

安装镜像中的引导文件位置均为镜像中的路径,在通过TFTP映射后就无法正确找到启动镜像,因此需要修改EFI的引导配置

修改 ARM64 EFI启动配置文件grub.cfg

chmod +w /var/lib/tftpboot/aarch64/grub.cfg

vi /var/lib/tftpboot/aarch64/grub.cfg

找到启动菜单配置
在这里插入图片描述
可以看到vmlinuz 文件 和 inittrd.img 均为绝对路径,并且与当前TFTP存储的路径不一致。

修改路径为TFTP相对如下:

  • aarch64/vmlinuz
    • inst.stage2 :修改为http服务的镜像根路径,例如:http://192.168.50.1/kylin_aarch64
  • aarch64/initrd.img
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install Kylin Linux Advanced Server V10' --class red --class gnu-linux --class gnu --class os {
        linux aarch64/vmlinuz inst.stage2=http://192.168.50.1/kylin_aarch64  quiet
        initrd aarch64/initrd.img
}

在这里插入图片描述

保存退出。

使用同样的方式修改x86_64 grub.cfg配置

chmod +w /var/lib/tftpboot/x86_64/grub.cfg

vi /var/lib/tftpboot/x86_64/grub.cfg

在这里插入图片描述
修改路径为TFTP相对如下:

  • x86_64/vmlinuz
    • inst.stage2 :修改为http服务的镜像根路径,例如:http://192.168.50.1/kylin_x86_64
  • x86_64/initrd.img
menuentry 'Install Kylin Linux Advanced Server V10' --class fedora --class gnu-linux --class gnu --class os {
        linuxefi x86_64/vmlinuz inst.stage2=http://192.168.50.1/kylin_x86_64 quiet
        initrdefi x86_64/initrd.img
}

在这里插入图片描述

保存退出。

4. 启动测试

以长城服务器为例,验证PXE是否能够正常运行。

将服务器接入PXE所在交换机中。

在这里插入图片描述

启动界面 F10 进入 启动项菜单

在这里插入图片描述
在菜单中选择 UEFI PXEv4

在这里插入图片描述
选择后提示 >>Start PXE over IPv4. 在这里插入图片描述

若PXE服务正常,会在屏幕上一 瞬间显示 DHCP的IP 和 启动引导文件 aarch64/BOOTAA64.EFI (非常快)
在这里插入图片描述
启动引导文件 下载特别快,下载完成后进入 操作系统 安装菜单。

在这里插入图片描述

选择 Install Kylin Linux Advanced Server V10

在这里插入图片描述
之后会在界面中停留较长时间,该阶段主要是通过HTTP下载安装程序镜像initrd.img,并启动的安装程序,完成后就可以看到 Anaconda 安装界面了。

在这里插入图片描述

5. 系统自动化安装

5.1 准备KS文件

系统自动化安装,以及预装软件等操作需要了解kickstart脚本编写(ks脚本),这里不做详细展开,仅讨论如何通过PXE执行自定义的KS文件。

关于 操作系统定制 和 KS文件 的细节可以请参考 CSDN . 定制银河麒麟镜像 . Cliven_ . 2024.06 . https://blog.csdn.net/q1009020096/article/details/138839062

首先准备一个KS文件,在操作系统安装后通常会在/root目录下留安装时生成的KS文件,我们可以直接从已经安装系统中获取到 anaconda-ks.cfg

在这里插入图片描述

内容如下:

# License agreement
eula --agreed
# Reboot after installation
reboot --eject
# Use graphical install
graphical

# Keyboard layouts
keyboard --vckeymap=cn --xlayouts='cn'
# System language
lang zh_CN.UTF-8

# Firewall configuration
firewall --disabled

cdrom

# SELinux configuration
selinux --disabled

firstboot --disable
# System services
services --enabled="chronyd"

ignoredisk --only-use=sda
# Partition clearing information
clearpart --all --drives=sda
autopart --type=lvm

# System timezone
timezone Asia/Shanghai --utc

# Root password
rootpw "123qwe"

%post
systemctl disable systemd-networkd-wait-online.service
systemctl disable multipathd.service

systemctl disable firewalld.service

%end

%packages
@^kylin-desktop-environment

%end

之前步骤中创建了 /var/www/html/kylin_x86_64/var/www/html/kylin_aarch64两个镜像
那么同样的,ks文件也同样需要准备两个,但是这2个文件有些许不同。

我们可以分别在两个目录中创建ks文件,实现自动化安装

touch /var/www/html/kylin_x86_64/ks.cfg
touch /var/www/html/kylin_aarch64/ks.cfg

在这里插入图片描述

接下来将预先准备好的anaconda-ks.cfg 文件内容复制到ks.cfg 文件中。
接下来将预先准备好的anaconda-ks.cfg 文件内容复制到ks.cfg 文件中。
接下来将预先准备好的anaconda-ks.cfg 文件内容复制到ks.cfg 文件中。

由于安装程序总是从镜像中获取安装的资源,在使用PXE之后我们需要安装程序通过网络从PXE服务器下载镜像中的资源,在ks.cfg中指定安装源为我们的PXE服务器,方式如下:

修改arm64的 /var/www/html/kylin_aarch64/ks.cfg 文件内容:

  • 注释原有的 cdromurl 配置。
  • 加入 url 参数指定安装位置为httpd映射的镜像位置。
vi /var/www/html/kylin_aarch64/ks.cfg

编辑内容如下:

#cdrom
url --url=http://192.168.50.1/kylin_aarch64

修改arm64的 /var/www/html/kylin_x86_64/ks.cfg

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

编辑内容如下:

#cdrom
url --url=http://192.168.50.1/kylin_x86_64

5.2 添加自动化启动项

在上个步骤中我们准备两个ks文件,并通过httpd映射到80端口

  • /var/www/html/kylin_aarch64/ks.cfg
  • /var/www/html/kylin_x86_64/ks.cfg

首先通过浏览器访问测试是否能够正常访问到ks文件

http://192.168.50.1/kylin_aarch64/ks.cfg

在这里插入图片描述

http://192.168.50.1/kylin_x86_64/ks.cfg

在这里插入图片描述

为了让启动引导能够使用ks.cfg文件实现自动化安装,我们需要添加一个启动引导,该启动引导从网络下载ks文件实现自动化安装。

以ARM64为例,我们需要编辑位于TFTP映射目录中的 /var/lib/tftpboot/aarch64/grub.cfg 文件。

vi /var/lib/tftpboot/aarch64/grub.cfg

添加启动项如下:

  • 新增启动项 AUTO Install Kylin Linux Advanced Server V10
  • 启动引导指定ks文件 inst.ks=http://192.168.50.1/kylin_aarch64/ks.cfg
  • 替换linuxefiinitrdefilinuxinitrd
menuentry 'AUTO Install Kylin Linux Advanced Server V10' --class fedora --class gnu-linux --class gnu --class os {
	linux aarch64/vmlinuz ro inst.ks=http://192.168.50.1/kylin_aarch64/ks.cfg quiet
	initrd aarch64/initrd.img
}

若不替换 替换linuxefiinitrdefi 启动后可能会出现 error: can’t find command linuxefi 错误
可修改set timeout 缩短自动选择时间,单位秒。

在这里插入图片描述

注意:新增的启动项请放在最上面,这样才可以自动被选择。

5.3 启动测试

以长城服务器为例,在启动界面 F10 进入 启动项菜单

在这里插入图片描述
在菜单中选择 UEFI PXEv4

在这里插入图片描述
选择后提示 >>Start PXE over IPv4. 在这里插入图片描述
提示 Fetching Netboot Image

在这里插入图片描述
片刻后进入启动菜单,从启动菜单中找到刚才添加的自动化安装选项 AUTO Install Kylin Linux Advanced Server V10 ,可以手动选择它也可以等待超过预定时间后自动选择。

在这里插入图片描述

接下在会开始下载镜像相关资源,界面会没有响应一段时间 1~3分钟左右。

在这里插入图片描述

然后进入Anaconda 安装界面,可以看到已经开始自动设置相关参数。

在这里插入图片描述

按照KS文件中的自动化配置完成后,进入自动安装界面:

在这里插入图片描述

参考文献

[1]. CSDN . 麒麟kylinV10实现arm和x86无人值守安装PXE(实施篇) . 九分横 . 2021.08 . https://blog.csdn.net/qq_40742007/article/details/120015910
[2]. 博客园 . KylinV10SP2实现ARM和x86架构系统PXE部署(S3) . 道观猫 . 2024.05 . https://www.cnblogs.com/daoguanmao/p/18192065
[3]. CSDN . CentOS 7下PXE+Kickstart无人值守安装操作系统 . 云改变世界 . 2023.11 . https://blog.csdn.net/w12345jl/article/details/134482860
[4]. Github . PXE+kickstart无人值守安装CentOS 7 . 骏马金龙 . 2019.07 . https://junmajinlong.github.io/linux/pxe_centos7/index.html
[5]. 维基百科 . Dynamic_Host_Configuration_Protocol . https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
[6]. die.net . dhcpd-options(5) - Linux man page . https://linux.die.net/man/5/dhcpd-options
[7]. StackChange . PXE boot error: PXE-E18: Server response timeout . telcoM . 2021.2 . https://unix.stackexchange.com/questions/635146
[8]. CSDN . grub关于linux与initrd、linuxefi与initrdefi、grud.d模板的一些记录 . yogwnn163 . 2020.9 https://blog.csdn.net/yongwenn163/article/details/108566389

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建PXE服务器可以让您轻松地通过网络启动和安装操作系统。以下是在中标麒麟7.4 x86_64搭建PXE服务器的具体步骤: 1. 安装TFTP服务器 在终端中执行以下命令安装TFTP服务器: ``` sudo apt-get update sudo apt-get install tftpd-hpa ``` 2. 配置TFTP服务器 编辑TFTP服务器的配置文件,执行以下命令: ``` sudo vi /etc/default/tftpd-hpa ``` 在文件中添加以下行: ``` TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure" ``` 保存并关闭文件。 3. 创建PXE启动文件夹 执行以下命令创建PXE启动文件夹: ``` sudo mkdir /srv/tftp sudo mkdir /srv/tftp/pxelinux.cfg ``` 4. 下载PXE启动文件 在PXE启动文件夹中下载PXE启动文件,执行以下命令: ``` sudo wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/ldlinux.c32 -O /srv/tftp/ldlinux.c32 sudo wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/menu.c32 -O /srv/tftp/menu.c32 sudo wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/vesamenu.c32 -O /srv/tftp/vesamenu.c32 sudo wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/boot-screens/splash.png -O /srv/tftp/splash.png ``` 5. 下载中标麒麟7.4 x86_64镜像文件 将中标麒麟7.4 x86_64镜像文件下载到PXE启动文件夹中,执行以下命令: ``` sudo wget http://mirrors.ustc.edu.cn/kylin/iso/7.4/kylin-7.4-server-x86_64.iso -O /srv/tftp/kylin-7.4-server-x86_64.iso ``` 6. 配置PXE启动菜单 在PXE启动文件夹的pxelinux.cfg文件夹中创建一个名为default的文件,并编辑该文件,执行以下命令: ``` sudo vi /srv/tftp/pxelinux.cfg/default ``` 添加以下内容: ``` default menu.c32 prompt 0 timeout 100 menu title PXE Menu label Install Kylin 7.4 x86_64 menu label ^Install Kylin 7.4 x86_64 kernel ubuntu-installer/amd64/linux append vga=788 initrd=ubuntu-installer/amd64/initrd.gz ksdevice=bootif ks=http://10.0.0.2/ks.cfg --- quiet ``` 保存并关闭文件。 7. 创建Kickstart文件 创建一个Kickstart文件,用于安装中标麒麟7.4 x86_64。在PXE启动文件夹中创建一个名为ks.cfg的文件,并编辑该文件,执行以下命令: ``` sudo vi /srv/tftp/ks.cfg ``` 添加以下内容: ``` #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use CDROM installation media cdrom # Root password rootpw --iscrypted $6$5UaKbcVnDZzZv4n2$HjCJYMKY2KQmVgFJ5jzL7tWVHb1M6d3VZJ7cF2H4m8aBqP7zTt0t8y6/9Y3QdReS4xGk5CmJkGQm4Q5XWvGox0 # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System timezone timezone Asia/Shanghai --isUtc # System language lang en_US # Installation logging level logging --level=info # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr yes # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /boot --fstype=ext4 --size=1024 part pv.01 --size=1 --grow volgroup vg01 pv.01 logvol / --fstype=ext4 --name=lv_root --vgname=vg01 --size=1 --grow # System authorization infomation auth --useshadow --enablemd5 # Graphical installation graphical # Packages to install %packages @^server-product-environment @^basic-desktop-environment wget net-tools openssh-server %end # Post-installation script %post # Add user useradd -m -d /home/test -s /bin/bash test # Set password echo "test:123456" | chpasswd # Enable ssh systemctl enable sshd %end ``` 保存并关闭文件。 8. 启动PXE服务器 启动TFTP服务器并开启PXE,执行以下命令: ``` sudo systemctl start tftpd-hpa sudo systemctl enable tftpd-hpa sudo systemctl restart dhcpd ``` 现在,您已经成功地在中标麒麟7.4 x86_64搭建PXE服务器。现在,您可以使用网络启动和安装操作系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值