Tiny pxe網絡啟動–遠程安裝、維護系統(tǒng)
參考文檔:
-
http:///erwan/?page_id=958 -
https:///docs
Tiny PXE Server是一款小巧而功能強大的網絡系統(tǒng)啟動軟件,支持DHCP/TFTP/HTTP/BINL/DNS等多個協(xié)議,支持grub4dos,pxelinux,ipxe等多個引導器,支持從PXE/gPXE/IPXE啟動,支持http協(xié)議啟動或傳輸文件。
Tiny PXE Server下載地址:http://erwan./tinypxeserver/pxesrv.zip
啟動PXE服務端
下載解壓后直接運行pxesrv.exe,點擊”Online“即可運行服務端,終止運行點擊”Offline“。
配置說明
說明:
-
ProxyDhcp:是Dhcp代理服務 勾選:在局域網已有Dhcp服務的情況下,建議勾選,不會與現(xiàn)有Dhcp服務沖突,但它能傳遞Next-Server等選項,傳統(tǒng)Dhcp服務不一定能傳遞參數(shù)和選項; 不勾選:如果局域網沒有Dhcp服務,可使用此軟件的Dhcp服務,就不勾選,客戶端會得到該軟件分配的IP。 -
HTTPd:開啟本機的httpd服務,即web服務,可通過httpd服務來啟動系統(tǒng),瀏覽器可訪問。 -
SMB:文件共享協(xié)議,勾選并啟動后主機會把當前目錄下的files目錄共享出去,共享名為PXE,可通過命令:net share查看主機共享出去的目錄,如: C:\Users\wzy>net share
共享名 資源 注解
-------------------------------------------------------------------------------
C$ C:\ 默認共享
D$ D:\ 默認共享
E$ E:\ 默認共享
IPC$ 遠程 IPC
ADMIN$ C:\Windows 遠程管理
PXE E:\pxe網絡啟動\pxesrv\files
命令成功完成。
-
Option:有多個Option項,在不啟動ProxyDhcp時,它會讓主機充當DHCP服務器,分配IP地址及這些選項都能生效,啟動ProxyDhcp時,這里設定的ip地址/子網/DNS等選項被忽略,由主Dhcp來分配,其它選項(比如Next-server)可以被分配。 -
Boot File:啟動文件,可選擇files目錄下的各種啟動文件,默認ipxe.pxe適合BIOS/UEFI等多種啟動,在有些情況下也有選擇pxelinux.0等的,一般保持默認。 -
Filename if user-class=gPXE or iPXE:選擇ipxe或gpxe啟動菜單文件,默認menu.ipxe,在files目錄下,可以根據(jù)這個模板生成自己的菜單文件。 -
More:更多選項(略) -
TFTP服務:面板上沒有體現(xiàn)的服務,其實Tftp服務是pxe啟動的根本,運行這個軟件時,Tftp服務自動啟動。沒有tftp服務,就沒有pxe在啟動之初下載文件的能力,Httpd或Smb服務雖然能下載文件,但客戶端pxe沒有啟動前是不能使用的; Tftp服務適合傳輸小文件,大文件傳輸太慢,舊的pxe僅基于tftp來傳輸,不適合安裝大系統(tǒng); 檢測服務啟動是否成功,在命令行下運行,可以看到UDP:69端口在偵聽: C:\Users\wzy>netstat -an | find '69'
UDP 172.16.6.36:69 *:*
-
Tftpboot目錄:即Tftp服務啟動的根目錄,它存放pxe啟動文件和菜單文件,在軟件里這個目錄是files目錄,我們可以在files下創(chuàng)建各系統(tǒng)的子目錄,但目錄結構要與menu.ipxe啟動菜單內核和安裝包文件對應一致。 -
日志:在軟件面板中上部,有一塊區(qū)域顯示日志,客戶端啟動時獲取IP,下載文件,執(zhí)行啟動等都會有日志顯示在上面,這里可以在出錯時給我們分析排除錯誤很大的幫助。
iPxe啟動菜單配置文件
這個菜單文件才是重點,系統(tǒng)提供了多個菜單文件,擴展名為.ipxe的都是,但它并非只能叫這個擴展名,.txt或者別的擴展名也是可以的,只要它是純文件文件,符合ipxe的語法規(guī)則就可以。
具體的ipxe語法和案例可參考:https:///官方的文檔。
我們打開一個menu.ipxe的文檔來看看:
#!ipxe
#set boot-url http://${proxydhcp}/next-server
set boot-url http://${next-server}
set iscsi-server ${next-server}
set iqn iqn.2008-08.com.starwindsoftware:target1
set iscsi-target iscsi:${iscsi-server}::::${iqn}
set nfs-server ${next-server}
set cifs-server //${next-server}
# Setup some basic convenience variables
set menu-timeout 5000
set submenu-timeout ${menu-timeout}
# Ensure we have menu-default set to something
isset ${menu-default} || set menu-default exit
######## MAIN MENU ###################
:start
menu Welcome to iPXE's Boot Menu
item
item --gap -- ------------------------- Utilities ------------------------------
#item bootsan Boot On San (${iscsi-target})
item bootaoe Boot On AOE (e0.0)
#item iscsi setup, sanhook or sanboot iscsi
item iscsi Boot On San
item pxelinux pxelinux
item grub4dos grub4dos
item grub2 grub2
#item grub_cd boot to dvd (via grub4dos)
#item grub_startrom boot to startrom.0 (via grub4dos)
item grub_floppy boot floppy (via grub4dos)
item grub_hd0 boot to hd0 (via grub4dos)
item hdt hdt
#item netbootme Netboot.Me
#item undi_dos undi_dos
item disk_util Disk Utilities
item winpe Live Systemes
item linux Install Linux Distros
item --gap -- ------------------------------ Advanced ---------------------------------
item config Configure settings
item shell Enter iPXE shell
item reboot Reboot
item exit Exit (boot local disk)
choose --default exit --timeout 30000 target && goto ${target}
########## UTILITY ITEMS ####################
:shell
echo Type exit to get the back to the menu
shell
set menu-timeout 0
goto start
:failed
echo Booting failed, dropping to shell
goto shell
:reboot
reboot
:exit
exit
:cancel
echo You cancelled the menu, dropping you to a shell
:config
config
goto start
:back
set submenu-timeout 0
clear submenu-default
goto start
......
整個菜單文件篇幅太大,我們后面省略,它有一級、二級、三級等多級菜單,很多小系統(tǒng)工具我們平時用不上,我們能根據(jù)模板編寫一級菜單就基本夠用了。
ipxe語法規(guī)則:
首行:
#!ipxe
這行是必須的,就像Linux的腳本文件前面的 #!/bin/bash 一樣,類似于指定命令解釋程序。
除了首行#號有特殊意義,后面的#都表示注釋
變量設置:
set boot-url http://${next-server}
set iscsi-server ${next-server}
set iqn iqn.2008-08.com.starwindsoftware:target1
set iscsi-target iscsi:${iscsi-server}::::${iqn}
set nfs-server ${next-server}
set cifs-server //${next-server}
# Setup some basic convenience variables
set menu-timeout 5000
set submenu-timeout ${menu-timeout}
# Ensure we have menu-default set to something
isset ${menu-default} || set menu-default exit
設置變量:一般把全局變量定義在前面,作用于下面所有啟動項。
語法:set <變量名> <變量值>
$<變量名>:調用前面已經定義過的變量
${next-server}:是指調用在Tiny pxe server面板上指定的next-server值,通常我們把它指定為pxesrv本機
isset ${menu-default} || set menu-default exit:||表示執(zhí)行前面的命令,如果前面執(zhí)行結果為假,則執(zhí)行后面的命令,
啟動菜單設置:
案例:
1.安裝windows7
2.安裝windows10
3.啟動再生龍系統(tǒng)
4.啟動Debian10的系統(tǒng)安裝
實現(xiàn):
######## MAIN MENU ###################
:start
menu Welcome to iPXE's Boot Menu
item
item --gap -- ------------------------- Utilities ------------------------------
item win7 Install Windows 7
item win10 Install Windows 10
item winpe Winpe
item clonezilla Boot clonezilla
item debian Install Debian 10
item --gap -- ------------------------------ Advanced ---------------------------------
item --key r reboot [R] Reboot the Computer
item --key x exit [X] Exit (boot local disk)
choose --default exit --timeout 60000 target && goto ${target}
:(冒號):這個冒號表示一段代碼,到下一個冒號前,這段代碼都是一個整體,會按照順序執(zhí)行,除非遇到goto跳轉到其它冒號的代碼段。
item:item [執(zhí)行代碼段名稱] [代碼段執(zhí)行功能描述]
表示一個標題項,比如一個啟動菜單項,一行一個標題,item和它后面的一個單詞不顯示,item后面第二個單詞之后的會顯示在屏幕上,比如item win7 Install windows 7,這行僅顯示”Install windows 7“,后面要有:win7代碼段,否則選擇它也執(zhí)行不了。
item --gap:此行用于分割一行,后面的內容顯示在屏幕上,但它不能作為菜單項可選擇,即調整光標時,它將跳過此行不能被選擇。
item --key:item --key <快捷鍵字符> <執(zhí)行代碼段名稱> [代碼段執(zhí)行功能描述]
item --key這行菜單可定義快捷鍵,即不將光標移動到此行,直接按一個快捷鍵就會立即執(zhí)行。
choose --default: choose --default <執(zhí)行代碼段名稱> --timeout <時間毫秒> target && goto ${target}
choose --default exit --timeout 60000 target && goto ${target},設置exit為默認選擇項,可以修改成默認從硬盤啟動或者重啟皆可,&&表示執(zhí)行前面的時間到期,就執(zhí)行后面的語句。
程序代碼段:
這里才是真正要執(zhí)行的命令,代碼段以:(冒號)開頭,至下一個:(冒號)前截止,或者遇到goto跳轉到其它代碼段。
########## UTILITY ITEMS ####################
#執(zhí)行錯誤返回到開始菜單項
:failed
echo Booting failed, dropping to shell
goto start
:reboot
reboot
:exit
exit
:win7
kernel ${next-server}/wimboot || goto failed
initrd ${next-server}/windows7/boot/bcd bcd || goto failed
initrd ${next-server}/windows7/boot/boot.sdi boot.sdi || goto failed
#windows的boot.wim最好是用微軟工具生成的winpe啟動文件,win10的也一樣,在此不贅述
initrd ${next-server}/windows7/sources/boot.wim boot.wim || goto failed
boot || goto failed
goto start
:win10
kernel ${next-server}/wimboot || goto failed
initrd ${next-server}/windows10/boot/bcd bcd || goto failed
initrd ${next-server}/windows10/boot/boot.sdi boot.sdi || goto failed
initrd ${next-server}/windows10/sources/boot.wim boot.wim || goto failed
boot || goto failed
goto start
:winpe
sanboot --no-describe ${boot-url}/images/winpe.iso || goto failed
goto start
:clonezilla
initrd ${boot-url}/_ISO/clonezilla/live/initrd.img || goto failed
kernel ${boot-url}/_ISO/clonezilla/live/vmlinuz boot=live config noswap nolocales edd=on nomodeset vga=788 nosplash noprompt fetch=${boot-url}/_ISO/clonezilla/live/filesystem.squashfs || goto failed
boot || goto failed
goto start
:debian
cpuid --ext 29 && set arch amd64 || set arch i386
#sanboot http://ftp.fr./debian/dists/Debian9.1/main/installer-amd64/current/images/netboot/mini.iso
sanboot ${boot-url}/images/debian-10.7.0-amd64-netinst.iso || goto failed
boot || goto failed
goto start
上面的代碼,每一個啟動菜單項對應一段執(zhí)行代碼,每行命令執(zhí)行都帶了 || goto failed代碼,可省略,但有它出錯了它可以返回主菜單;
kernel:調用內核
initrd:調用img
sanboot:調用iso文件
以上啟動過程中調用的文件,也可以調用httpd服務或者smb服務上的文件來啟動,大文件不適合tftp服務來調用,速度非常慢,httpd和smb傳輸文件非???,所以代碼段執(zhí)行的文件調用本例中我們都采用httpd路徑來調取。
創(chuàng)建windows7/10等系統(tǒng)安裝包存儲的目錄和文件
在files目錄下創(chuàng)建,首先進入這個目錄,在此用命令來創(chuàng)建,win的命令與linux有點類似
創(chuàng)建目錄:
cd pxesrv\files
#創(chuàng)建windows7/10及其下的boot和sources子目錄
#創(chuàng)建_ISO及其下的clonezilla子目錄
mkdir windows7\boot,windows7\sources,windows10\boot,windows10\sources,_ISO\clonezilla
拷貝或解壓win的啟動內核文件和安裝包,x為光盤驅動符號:
# windows7內核及wim安裝包,加載win7的iso到x盤
copy x:\boot\bcd pxesrv\files\windows7\bootcopy x:\boot\boot.sdi pxesrv\files\windows7\bootcopy x:\sources\boot.wim pxesrv\files\windows7\sources
# windows10內核及wim安裝包,加載win10的iso到x盤
copy x:\boot\bcd pxesrv\files\windows10\bootcopy x:\boot\boot.sdi pxesrv\files\windows10\bootcopy x:\sources\boot.wim pxesrv\files\windows10\sources
復制iso光盤鏡像文件到指定路徑,images存放iso文件:
copy e:\iso\winpe.iso pxesrv\files\images
copy e:\iso\debian-10.7.0-amd64-netinst.iso pxesrv\files\images
查下結果:
E:\pxe網絡啟動>tree /f pxesrv\files\windows7
├─boot
│ bcd
│ boot.sdi
│
└─sources
boot.wim
E:\pxe網絡啟動>tree /f pxesrv\files\windows10
├─boot
│ bcd
│ boot.sdi
│
└─sources
boot.wim
E:\pxe網絡啟動>tree /f pxesrv\files\images
E:\PXE網絡啟動\PXESRV\FILES\IMAGES
debian-10.7.0-amd64-netinst.iso
winpe.iso
沒有子文件夾
結果目標文件與menu.ipxe的路徑一致。
最終測試
-
啟動服務端: -
啟動客戶端: -
客戶端啟動過程:
最后附上完整的menu.ipxe內容
#!ipxe
set boot-url http://${next-server}
# Setup some basic convenience variables
set menu-timeout 5000
# Ensure we have menu-default set to something
isset ${menu-default} || set menu-default exit
######## MAIN MENU ###################
:start
menu Welcome to iPXE's Boot Menu
item
item --gap -- ------------------------- Utilities ------------------------------
item win7 Install Windows 7
item win10 Install Windows 10
item winpe Winpe
item clonezilla Boot clonezilla
item debian Install Debian 10
item --gap -- ------------------------------ Advanced ---------------------------------
item --key r reboot [R] Reboot the Computer
item --key x exit [X] Exit (boot local disk)
choose --default exit --timeout 60000 target && goto ${target}
########## UTILITY ITEMS ####################
:failed
echo Booting failed, dropping to shell
goto start
:reboot
reboot
:exit
exit
:win7
kernel ${next-server}/wimboot || goto failed
initrd ${next-server}/windows7/boot/bcd bcd || goto failed
initrd ${next-server}/windows7/boot/boot.sdi boot.sdi || goto failed
#windows的boot.wim最好是用微軟工具生成的winpe啟動文件,win10的也一樣,在此不贅述
initrd ${next-server}/windows7/sources/boot.wim boot.wim || goto failed
boot || goto failed
goto start
:win10
kernel ${next-server}/wimboot || goto failed
initrd ${next-server}/windows10/boot/bcd bcd || goto failed
initrd ${next-server}/windows10/boot/boot.sdi boot.sdi || goto failed
initrd ${next-server}/windows10/sources/boot.wim boot.wim || goto failed
boot || goto failed
goto start
:winpe
sanboot --no-describe ${boot-url}/images/winpe.iso || goto failed
goto start
:clonezilla
initrd ${boot-url}/_ISO/clonezilla/live/initrd.img || goto failed
kernel ${boot-url}/_ISO/clonezilla/live/vmlinuz boot=live config noswap nolocales edd=on nomodeset vga=788 nosplash noprompt fetch=${boot-url}/_ISO/clonezilla/live/filesystem.squashfs || goto failed
boot || goto failed
goto start
:debian
cpuid --ext 29 && set arch amd64 || set arch i386
#sanboot http://ftp.fr./debian/dists/Debian9.1/main/installer-amd64/current/images/netboot/mini.iso
sanboot ${boot-url}/images/debian-10.7.0-amd64-netinst.iso || goto failed
boot || goto failed
goto start
|