PXE服务搭建及配置

PXE&OEM服务配置及使用说明

# =============================================
# Author : Mikigo
# Time   : 2021/8/10
# =============================================

PXE全称Pre-Boot Execution Environment, 中文名预执行环境.

一、环境搭建

sudo apt install -y net-tools 
sudo apt install -y syslinux 
sudo apt install -y syslinux-efi 
sudo apt install -y pxelinux 
sudo apt install -y dnsmasq 
sudo apt install -y nfs-kernel-server
sudo apt install -y debian-installer-10-netboot-amd64 
sudo apt install -y debian-installer-10-netboot-arm64
sudo apt install -y debian-installer-10-netboot-mips64el

二、配置

1、网络配置

1、PXE服务器、所有测试机申请固定IP。
流程:OA——>绑定mac——>填入IP和mac地址后提交即可。
2、免认证
流程:企业微信联系运维工程师,提供IP和mac地址,做免认证。

2、配置DHCP服务

目前成都自动化测试机器为独立网段,DHCP在本地控制。

cd /etc/dnsmasq.conf

写入以下内容

listen-address=10.8.15.2
dhcp-match=set:bios,60,PXEClient:Arch:00000
dhcp-boot=tag:bios,/debian-installer/amd64/bootnetx64.efi
dhcp-match=set:efibc,60,PXEClient:Arch:00007
dhcp-boot=tag:efibc,/debian-installer/amd64/bootnetx64.efi
dhcp-match=set:efix86,60,PXEClient:Arch:00009
dhcp-boot=tag:efibc,/debian-installer/amd64/bootnetx64.efi
dhcp-match=set:efiarm,60,PXEClient:Arch:00011
dhcp-boot=tag:efiarm,/debian-installer/arm64/grubaa64.efi
dhcp-match=set:efimips,60,PXEClient:Arch:00012
dhcp-boot=tag:efimips,/debian-installer/mips64/core.efi

# 绑定的⽹卡
interface=enp2s0
bind-interfaces
# 此项⾮必须
domain=pxe.local
# IP分配范围 192.168.0.50,192.168.0.150, dhcp租期1⼩时
dhcp-range=10.8.15.10,10.8.15.100,1h
# ⽹关
dhcp-option=3,10.8.15.1
# DNS
dhcp-option=6,10.8.0.10
# 转发dns请求到上级服务器
server=114.114.114.114
# ⼴播地址
dhcp-option=28,10.8.255.255
# NTP服务器,0.0.0.0 指向⾃⼰
dhcp-option=42,0.0.0.0
# 启⽤dnsmasq内置tftp服务
enable-tftp
# tftp根⽬录
tftp-root=/var/tftp

log-facility=/var/log/dnsmasq.log
log-async=20

如果采用公司的DHCP服务则不需要这么复杂的配置,采用以下配置即可。(以下内容现在不需要)

sudo vim /etc/dnsmasq.conf

写入

domain=pxe.local
interface=enp2s0
bind-interfaces
enable-tftp
tftp-root=/var/tftp
log-facility=/var/log/dnsmasq.log
log-async=20

3、配置NFS服务

sudo mkdir -p /var/nfs/amd64/
sudo mkdir -p /var/nfs/arm64/
sudo mkdir -p /var/nfs/mips64/
echo '/var/nfs *(ro,sync,no_subtree_check)' | sudo tee -a /etc/exports
sudo systemctl restart nfs-kernel-server

挂载镜像

sudo mount uniontech*.iso /mnt/  
sudo cp -r /mnt/* /var/nfs/amd64/ 
sudo cp -r /mnt/.disk/ /var/nfs/amd64/
sudo chown -R root:root /var/nfs/
sudo chmod -R 755 /var/nfs/amd64/
sudo umount /mnt/

4、配置TFTP服务

sudo mkdir -p /var/tftp/debian-installer/amd64
sudo mkdir -p /var/tftp/debian-installer/arm64
sudo mkdir -p /var/tftp/debian-installer/mips64

获取debian-installer包

sudo cp -r /usr/lib/debian-installer/images/10/amd64/text/debian-installer /var/tftp

也可以到官方下载URL:http://http.us.debian.org/debian/dists/buster/main/installer-amd64/current/images/netboot/debian-installer/

4.1、live内核文件

live下面存放内核等文件,在nfs和tftp的live是一样的,所以只需要建立软连接指向/var/nfs/amd64/live即可。

ln -s /var/nfs/amd64/live /var/tftp/debian-installer/amd64/live
ln -s /var/nfs/arm64/live /var/tftp/debian-installer/arm64/live
ln -s /var/nfs/mips64/live /var/tftp/debian-installer/mips64/live

注意,mips镜像里live文件的vmlinuz和initrd.img文件存在放boot目录下的,所以需要将这两个文件拷贝过来。一般在挂载镜像的时候完成。

sudo cp /mnt/boot/vmlinuz /var/tftp/debian-installer/mips64/live
sudo cp /mnt/boot/initrd.img /var/tftp/debian-installer/mips64/live

4.2、引导文件及配置

4.2.1、AMD
sudo cp -r /mnt/live /var/tftp/debian-installer/amd64
sudo cp /var/tftp/debian-installer/amd64/bootnetx64.efi /var/tftp/

修改grub.cfg

sudo vim /var/tftp/debian-installer/amd64/grub/grub.cfg

写入以下内容

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set timeout=5
insmod gzio

menuentry "Install uos" {
    set gfxpayload=keep
    linux   /debian-installer/amd64/live/vmlinuz console=tty boot=live netboot=nfs nfsroot=10.8.13.222:/var/nfs/amd64/ components union=overlay locales=zh_CN.UTF-8 livecd-installer --
    initrd  /debian-installer/amd64/live/initrd.lz
}
menuentry "Try uos without installing" {
    set gfxpayload=keep
    linux   /debian-installer/amd64/live/vmlinuz console=tty boot=live union=overlay quiet splash --
    initrd  /debian-installer/amd64/live/initrd.lz
}

nfsroot=10.8.13.222 这个IP是PXE服务器的IP

4.2.2、ARM
sudo cp -r /mnt/live /var/tftp/debian-installer/arm64
sudo cp /var/tftp/debian-installer/arm64/grubaa64.efi /var/tftp/

修改grub.cfg

sudo vim /var/tftp/debian-installer/arm64/grub/grub.cfg

写入以下内容

set menu_color_normal=white/black

set menu_color_highlight=black/light-gray

set timeout=5

insmod gzio

menuentry "Install uos" {
    set gfxpayload=keep
    linux   /debian-installer/arm64/live/vmlinuz console=tty boot=live netboot=nfs nfsroot=10.8.15.2:/var/nfs/arm64/ components ethdevice-timeout=60 union=overlay locales=zh_CN.UTF-8 livecd-installer --
    initrd  /debian-installer/arm64/live/initrd.img
}
menuentry "Try uos without installing" {
    set gfxpayload=keep
    linux   /debian-installer/arm64/live/vmlinuz console=tty boot=live union=overlay quiet splash --
    initrd  /debian-installer/arm64/live/initrd.img
}
4.2.3、MIPS
sudo cp /var/tftp/debian-installer/mips64/core.efi /var/tftp/

修改grub.cfg

sudo vim /var/tftp/debian-installer/mips64/grub2/grub.cfg
sudo cp -r /var/tftp/debian-installer/mips64/grub2 /var/tftp/

写入以下内容

set default=0
set timeout=5
set ethdevice-timeout=60
search --no-floppy --set=root -l 'Fedora-MATE'

echo -e "\nWelcome to UOS installer!\n\n"

menuentry 'PXE Install UOS' {
  echo 'Loading kernel ...'
  linux /debian-installer/mips64/live/vmlinuz root=/dev/nfs nfsroot=10.8.15.2:/var/nfs/mips64 rw console=tty livecd-installer locales=zh_CN.UTF-8 boot=live
 
  echo 'Loading initrd ...'
  initrd /debian-installer/mips64/live/initrd.img
}

5、其他配置

PXE服务器需要安装sshpass,如果需要请求utp平台接口,还需要安装requests

sudo apt install -y sshpass
sudo pip3 install requests

消除第一次ssh询问

sudo vim /etc/ssh/ssh_config

# StrictHostKeyChecking ask 改为StrictHostKeyChecking no

三、OEM定制镜像

下载镜像地址:https://cdimage.uniontech.com/,找到要下载的镜像,使用wget下载即可。

替换/var/nfs/amd64/oem/里面的文件

1、setting.ini 配置文件

[General]
# deb repository entry to be added in the sources.list file.
apt_source_deb = "deb [by-hash=force] https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free"
# source repository entry to be added in the sources.list file.
apt_source_deb_src = "#deb-src [by-hash=force] https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free"
#跳过虚拟机环境提示界面
skip_virtual_machine_page = true
#跳过语言选择界面
skip_select_language_page = true
#设置默认语言为中文
select_language_default_locale = "zh_CN"
#跳过后配置语言选择界面
skip_select_language_page_on_first_boot = true
#跳过时区设置界面
skip_timezone_page = true
#跳过系统修复界面
skip_repair_system_page=true
#跳过键盘布局选择界面
skip_system_keyboard_page = true
#跳过网络设置界面
skip_network_page = true
#设置默认时区为亚洲/上海
timezone_default = "Asia/shanghai"
# 如果partition_do_auto_part设置为true, 安装器会认为将进行无值手安装,此时如果skip_system_info_page设置为true表示不自动创建用户,如果设置为false表示自动创建用户,但需要提供用户名和密码
skip_system_info_page = false
system_info_default_username = "uos"
system_info_default_hostname = "uos-PC"
system_info_hostname_auto_suffix = "-PC"
system_info_hostname_reserved = "localhost"
system_info_default_password = "1"
#设置默认键盘布局为us
system_info_default_keyboard_layout = "us"
#设置是否开启审核模式
system_check_mode = false
#设置将用户密码设置为root密码
set_root_password_from_user = true
DI_FULLDISK_MODE = true
#跳过分区界面
skip_partition_page = true
#执行自动分区操作
partition_do_auto_part = true
#允许用户自动登录,新镜像不支持该配置
#lightdm_enable_auto_login = true
#开启debug调试
system_debug=true

2、hooks配置

hooks
├── after_chroot
│   └── 99_finish.job
├── first_boot_setup.sh
└── in_chroot
    ├── 98_audit_mode_script.job
    └── 99_debug.job

99_finish.job 装机之后自动重启

sync && sleep 5 && sync && sleep 5

echo 'b' > /proc/sysrq-trigger  || systemctl reboot

first_boot_setup.sh 重启之后一些配置,配置项太多就不贴了

四、测试机设置

测试机找IT切到15网段

1、AMD和ARM

进入BIOS

BIOS—>高级—>网络堆栈配置

网络堆栈	   启用
IPv4 PXE支持	启用
IPv6 PXE支持	启用

BIOS—>高级—>启动

CSM支持		启用
启动选项过滤	 UEFI
网络			UEFI
第一启动选项	UOS, 硬盘等

进入操作系统之后,efibootmgr命令控制下次以网络启动

uos@uos-PC:~$ efibootmgr 
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0004,0005,0000,0002
Boot0000* Windows Boot Manager
Boot0001* UOS
Boot0002* deepin
Boot0004* UEFI: PXE IP4 Realtek PCIe GBE Family Controller
Boot0005* ubuntu
sudo efibootmgr -n 0004 # 指定下一次启动以PXE启动

2、MIPS

mips机器没有efibootmgr工具,是通过精准控制流量开关实现的,测试机BIOS设置:

启动项一设置为网络启动
启动项二设置为硬盘启动

五、MIPS平台网络启动实现方案

由于MIPS平台没有efibootmgr命令,无法通过命令直接指定下一次启动的顺序,实现方案如下:

  • 将测试机启动项一设置为网络启动,启动项二为硬盘启动。
  • 重启测试机之后,在服务端检测是否收到了测试机的tftp请求,收到之后,屏蔽掉测试机IP。
  • 装机过程中的重启,由于屏蔽了测试机IP,网络启动超时,进入启动项二,正常进入系统。
  • 下次需要装机时,解锁测试机IP,进入网络装机。
posted @ 2021-05-23 00:54  mikigo  阅读(2704)  评论(0编辑  收藏  举报