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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM