1. 前言
單台或者少數幾台機器安裝,可以通過u盤等方式一台一台的安裝,但是當面對局域網內上百台,甚至更多的機器需要安裝操作體系時,一台一台的安裝顯然是不可取的了,此時省時省力的自動化PXE方式就派上用場了。
2. PXE介紹
PXE即Preboot Execution Environment,翻譯過來就是“預啟動執行環境”。是由inter公司開發,基於C / S模式提供了一種使用網絡接口(Network Interface)啟動計算機的機制。這種機制讓計算機的啟動可以不依賴本地數據存儲設備(如硬盤)或本地已安裝的操作系統。
PXE服務器端需要DHCP服務器、TFTP服務器和一個文件服務器,其中文件服務器可以是ftp,http,nfs等文件服務器。
服務端
DHCP-------用來分配IP地址,定位引導程序
TFTP-------提供引導程序下載
NFS-------網絡中文件共享
客戶端
網卡支持PXE協議
主板支持網絡啟動
PXE部署系統自動化安裝流程:
1) 設置擁有PXE功能的客戶端主機開機啟動項為網絡啟動;
2) 客戶端開機之后進入網絡啟動,此時客戶端沒有IP地址需要發送廣播報文(PXE網卡內置DHCP客戶端程序),DHCP服務器相應客戶端請求,分配給客戶端相應的IP地址與掩碼等信息;
3) 客戶端得到IP地址之后,與TFTP通信,下載pxelinux.0,default,vmlinuz,initrd文件,根據default指定的vmlinuz,initrd啟動系統內核,下載指定系統安裝包。
4) 根據setting.cfg文件去文件共享服務器(http/ftp/nfs)上面下載系統安裝包開始安裝系統。
3. 環境准備
本文整個環境將在vmware虛擬機上驗證。
兩個虛擬機:UOS01、UOS02
為了簡化操作本次使用DHCP、TFTP和NFS均安裝在同一個虛擬機中
UOS01:搭建安裝環境(DHCP、TFTP和NFS)
ip地址:192.168.114.128 (網卡名為:ens33)
系統安裝文件已放到/home/uos/iosdir目錄下
UOS02:驗證PXE無人值守系統安裝
4. 搭建安裝環境
4.1. 搭建DHCP
1) 安裝dhcp
1 uos@uos-PC:~$ sudo apt install isc-dhcp-Server
2) 配置dhcp
1 uos@uos-PC:~$ sudo vi /etc/dhcp/dhcpd.conf 2 3 subnet 192.168.114.0 netmask 255.255.255.0 { #dhcpserver 分配ip的子網192.168.114網段,必須和PXE server的一個網卡同一個網段 4 5 range 192.168.114.130 192.168.114.200; #為客戶端分配ip范圍 6 7 option subnet-mask 255.255.255.0; 8 9 option routers 192.168.114.2; 10 11 default-lease-time 600; 12 13 max-lease-time 7200; 14 15 next-server 192.168.114.128; #指定tftp server的ip 16 17 } 18 19 filename "pxelinux.0"; 20 21 uos@uos-PC:~$ sudo vi /etc/default/isc-dhcp-server 22 23 INTERFACESv4="ens33"
3) 啟動dhcp
1 uos@uos-PC:~$ sudo systemctl start nfs-kernel-server 2 3 uos@uos-PC:~$ sudo systemctl enable nfs-kernel-server
4.2. 搭建TFTP
1) 安裝TFTP
1 uos@uos-PC:~$ sudo apt install tftpd-hpa
2) 配置TFTP
uos@uos-PC:~$ cat /etc/default/tftpd-hpa ##使用默認配置即可。 # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure"
3) 安裝PXELINUX
1 uos@uos-PC:~$ sudo apt install pxelinux
4) 配置PXE啟動文件
uos@uos-PC:~$ sudo mkdir -p /srv/tftp/pxelinux.cfg uos@uos-PC:~$ sudo cp -r /home/uos/isodir/isolinux/ /srv/tftp uos@uos-PC:~$ sudo cp /home/uos/isodir/live/vmlinuz /srv/tftp uos@uos-PC:~$ sudo cp /home/uos/isodir/live/initrd.lz /srv/tftp uos@uos-PC:~$ sudo cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp uos@uos-PC:~$ sudo vi /srv/tftp/pxelinux.cfg/default default vesamenu.c32 timeout 5 menu autoboot Starting Linux install in # second{,s}. Press any key to interrupt. menu clear menu title UOS20 label UOS menu label Start UOS20 kernel vmlinuz append initrd=initrd.lz boot=live livecd-installer netboot=nfs nfsroot=192.168.114.128:/home/uos/isodir locale=zh_CN.UTF-8
5) 啟動TFTP
1 uos@uos-PC:~$ sudo systemctl start tftpd-hpa 2 3 uos@uos-PC:~$ sudo systemctl enable tftpd-hpa
4.3. 搭建NFS
1) 安裝NFS
1 uos@uos-PC:~$ sudo apt install nfs-kernel-server
2) 配置NFS
1 uos@uos-PC:/srv/tftp$ sudo vi /etc/exports 2 3 /home/uos/isodir *(ro)
3) 啟動NFS
1 uos@uos-PC:~$ sudo systemctl start nfs-kernel-server 2 3 uos@uos-PC:~$ sudo systemctl enable nfs-kernel-server
4.4. 配置無人值守
1 uos@uos-PC:/srv/tftp$ vi /home/uos/isodir/oem/settings.ini 2 3 [General] 4 5 # deb repository entry to be added in the sources.list file. 6 7 apt_source_deb="deb-src https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free" 8 9 skip_select_language_page = true 10 11 skip_select_language_page_on_first_boot = true 12 13 skip_select_component_page = true 14 15 skip_system_info_page = true 16 17 skip_partition_page = true 18 19 skip_network_page=true 20 21 skip_timezone_page=true 22 23 skip_repair_system_page=true 24 25 skip_virtual_machine_page=true 26 27 partition_do_auto_part = true 28 29 timezone_default = true 30 31 timezone_default=Asia/Shanghai 32 33 select_language_default_locale = zh_CN 34 35 system_info_default_keyboard_layout = us 36 37 system_info_setup_after_reboot = true 38 39 system_info_default_username="didtx" 40 41 system_info_default_hostname="didtx-PC" 42 43 system_info_hostname_auto_suffix=-PC 44 45 system_info_hostname_reserved=localhost 46 47 system_info_default_password="zh**420427"
5. 無人值守驗證
進入UOS2的BIOS頁面選擇網絡啟動:
6. 附錄
6.1. setting.cfg文件說明
1 #跳過語言選擇界面 2 3 skip_select_language_page = true 4 5 6 #跳過后配置語言選擇界面 7 8 skip_select_language_page_on_first_boot = true 9 10 11 #跳過組件選擇界面 12 13 skip_select_component_page = true 14 15 16 #不跳過創建賬戶界面 17 18 skip_system_info_page = false 19 20 21 #跳過分區界面 22 23 skip_partition_page = true 24 25 26 #跳過網絡設置界面 27 28 skip_network_page=true 29 30 31 #跳過時區設置界面 32 33 skip_timezone_page=true 34 35 36 #跳過系統修復界面 37 38 skip_repair_system_page=true 39 40 41 #跳過鍵盤布局選擇界面 42 43 skip_system_keyboard_page = true 44 45 46 #不跳過虛擬機環境提示界面 47 48 skip_virtual_machine_page=false 49 50 51 #執行自動分區操作 52 53 partition_do_auto_part = true 54 55 56 #設置默認時區為亞洲/上海 57 58 timezone_default=Asia/Shanghai 59 60 61 #設置默認語言為中文 62 63 select_language_default_locale = zh_CN 64 65 66 #設置默認安裝組件集類型為Server-Environment-with-GUI,目前組件集類型有:Basic-Server-Environment、Cloud-and-Virtualzalition、Big-Data、Server-Environment-with-GUI、Custom-Installation可以根據需要選擇其中的一個 67 68 69 #對於組件集的詳細包含內容可以參見packages_default.json和packages_choice.json,如果拿到是服務版操作系統的iso鏡像文件,則可在live目錄找到packages_default.json和packages_choice.json,桌面版iso不需要配置該字段 70 71 72 selected_component_install_type = Server-Environment-with-GUI 73 74 75 #如果selected_component_install_type字段未指定則使用該字段指定的組件集類型,桌面版iso不需要配置該字段 76 77 select_component_default_install_type = Server-Environment-with-GUI 78 79 80 #設置默認鍵盤布局為us 81 82 system_info_default_keyboard_layout = us 83 84 85 #設置不使用后配置 86 87 system_info_setup_after_reboot = false 88 89 90 #設置是否將用戶密碼設置為root密碼 91 92 set_root_password_from_user = false 93 94 95 #設置用戶信息,指定用戶名為“uos” 96 97 system_info_default_username="uos" 98 99 100 #設置用戶信息,指定主機名為“uos-PC” 101 102 system_info_default_hostname="uos-PC" 103 104 105 #設置用戶信息,指定主機名自動后綴為“-PC” 106 107 system_info_hostname_auto_suffix=-PC 108 109 110 system_info_hostname_reserved=localhost 111 112 113 #設置用戶信息,指定用戶密碼為“uos123“ 114 115 system_info_default_password="uos123" 116 117 118 DI_FULLDISK_MULTIDISK_DEVICE="/dev/sda;/dev/sdb"(注意:等號后面的 "/dev/sda;/dev/sdb"要用英文雙引號包含起來 ) 其中指定了/dev/sda為系統盤,/dev/sdb為數據盤,目前要求系統盤和數據盤都要求至少64Gib 119 120 在oem定制項目中可能出現配置了該字段,數據盤仍然不是data分區也沒有自動掛載的情況,可能有兩種原因:1.檢查full_disk_policy.json中是否刪除了data分區的設置,2.數據盤的空間是否大於等於64Gib。