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,進入網絡裝機。