PXE&OEM服务配置及使用说明
# =============================================
# Author : Mikigo
# Time : 2021/8/10
# =============================================
PXE全称Pre-Boot Execution Environment, 中文名预执行环境.
详情:https://wikidev.uniontech.com/PXE
OEM镜像用来满足厂商的个性化的定制,可以加入需求。
一、环境搭建
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 "
Welcome to UOS installer!
"
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,进入网络装机。