通過傳統的方式安裝和部署計算機時,都需要人工干預的方式完成安裝。如果需要部署大量的類似功能的工作站或服務器,則需要耗費大量的時間。同時傳統的安裝方式,每台計算機都需要光驅設備及安裝光盤等介質,會額外增加部署成本。因此,許多系統管理員都希望能夠通過一種網絡化的無人值守的自動安裝方式將操作系統部署到目標計算機中。
1、PXE協議
PXE 是由 Intel 設計的協議,計算機可以通過 PXE 協議從網絡引導啟動。PXE 協議在啟動過程分為 client 和 server 端,PXE 協議運行過程主要解決兩個問題:首先解決 IP 地址的問題,然後解決如何傳輸操作系統啟動文件和安裝文件的問題。對於第一個問題,可以通過 DHCP Server 解決,通常情況下 DHCP 服務器主要用於分配 IP 地址給客戶端。但在 PXE 環境下,DHCP 服務器需要額外加載 PXE 的相關配置。針對第二個問題,在啟動初期因為 PXE client 中有相應的 TFTP 客戶端,可以通過 TFTP 協議到 TFTP 服務器中下載相關文件啟動計算機。後期在安裝過程中,則通過 FTP 或 NFS 協議提供大量的操作系統安裝文件的下載。
2、Kickstart
通過傳統的方式安裝和部署計算機時,都會要求通過交互的方式,回答各類問題,以完成安裝和部署任務,過程繁瑣,且無法實現自動化。紅帽公司開發了 Kickstart 的安裝方法,通過 ks 文件可以解決所有普通安裝方式中需要回答的問題。可以通過 system-config-kickstart 工具定制 ks 文件,也可以通過相關語法來手工編寫安裝腳本。
3、CentOS操作系統
本次實驗中所使用和安裝的操作系統為CentOS 7,理論上 CentOS 6也是適用的。
4、DHCP
動態主機配置協議,主要用於給 DHCP 客戶端自動分配 IP 地址,便於用戶管理網絡內部的計算機。針對 PXE 環境下,DHCP 服務器除分配 IP 地址外,還需要額外配置”next-server”選項定義 TFTP 服務器的地址,設置”filename”選項定義啟動文件的名稱。並且啟動”booting”與”bootp”的支持。
5、TFTP與FTP
簡單文件傳輸協議(TFTP)主要用於為客戶機與服務器之間進行簡單文件傳輸的協議。在 PXE 早期啟動過程中,主要通過 TFTP 協議傳輸”pxelinux.0”。文件傳輸協議(FTP),適用於大量文件傳輸的情形,在後期安裝過程,主要通過 FTP 協議傳輸 Linux 操作系統的安裝包。
FTP 服務主要是下載 ks.cfg 文件和 操作系統文件的,也可以用 HTTP 或 NFS 來代替。
1、安裝vsftpd服務
[root@localhost ~]# yum install -y vsftpd
2、提供操作系統鏡像文件
FTP 默認配置即可,我們需要適用匿名用戶。通過ftp安裝操作系統,我們需要把操作系統鏡像文件拷貝到這個匿名用戶目錄
[root@localhost ~]# mount /dev/cdrom /var/ftp/pub/ # /var/ftp/pub是ftp的匿名用戶目錄
3、啟動ftp服務
[root@localhost ~]# systemctl start vsftpd # 啟動ftp服務 [root@localhost ~]# systemctl enable vsftpd # 設置開機啟動
DHCP 和 TFTP 服務可以選擇單獨分別去安裝,也可以通過安裝 dnsmasq 服務,來實現 DHCP 和 TFTP 的功能。
1、安裝dnsmasq軟件包
[root@localhost ~]# yum install -y dnsmasq
2、配置dnsmasq
dnsmasq 的配置文件是 /etc/dnsmasq.conf,主要是去掉以下相關的注釋,並設置修改 DHCP 的范圍和 TFTP 的根目錄。
bogus-priv filterwin2k interface=eth0 dhcp-range=192.168.0.50,192.168.0.100,12h dhcp-boot=pxelinux.0 enable-tftp tftp-root=/var/tftp # tftp目錄默認是沒有的,需要手動創建 dhcp-authoritative
3、創建tftp根目錄
[root@localhost ~]# mkdir /var/tftp
4、啟動dnsmasq
[root@localhost ~]# systemctl start dnsmasq [root@localhost ~]# systemctl enable dnsmasq
1、從iso中拷貝內核鏡像和文件系統鏡像
cp /var/ftp/pub/images/pxeboot/initrd.img /var/tftp/ # 拷貝文件系統鏡像 cp /var/ftp/pub/images/pxeboot/vmlinuz /var/tftp/ # 拷貝內核鏡像文件
2、生成pxe啟動文件pxelinux.0
yum install -y syslinux # 安裝pxelinux.0所需要的包 rpm -ql syslinux | grep "pxelinux.0" # 查詢文件所在目錄 cp /usr/share/syslinux/pxelinux.0 /var/tftp/ # 拷貝pxelinux.0文件到tftp根目錄
3、准備默認的菜單配置文件
mkdir /var/tftp/pxelinux.cfg/ # 創建pxelinux.cfg目錄,固定目錄名稱 vim /var/tftp/pxelinux.cfg/default # default文件,必須為這個名稱 # 編輯內容如下 default linux prompt 1 timeout 60 display boot.msg label linux kernel vmlinuz append initrd=initrd.img text ks=ftp://192.168.0.3/ks.cfg # 這個地方指定了ks.cfg文件下載路徑,後邊會生成該文件
4、生成kickstart文件
kickstart 文件可以通過 system-config-kickstart 可視化工具來進行配置,生成 ks.cfg 文件;也可以通過已經安裝好的操作系統的模板文件 anaconda-ks.cfg 來稍加修改即可。下邊的 ks.cfg 文件是做實驗時的樣本,內容如下(加粗為修改部分):
#version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media install url --url=ftp://192.168.0.3/pub/ # 需要指定安裝方式通過ftp來下載安裝操作系統 # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$LK7yftVlSa2zcGia$4loHYYWZUosdWvZA7Qzf.0lhmrcD5n26BK1xWm7QCNBdbBSjC7MK7yAYRvmIXGI8wu.t96jo6m8RRmNyjsKY60 # System services services --disabled="chronyd" # System timezone timezone Asia/Shanghai --isUtc --nontp # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm # Partition clearing information clearpart --all --initlabel --drives=sda
... ... ... ... # 還有很多內容
拷貝 ks.cfg 文件到 FTP 目錄
[root@localhost ~]# cp /root/anaconda-ks.cfg /var/ftp/ks.cfg
[root@localhost ~]# chmod +r /var/ftp/ks.cfg
以上工作完成之後,就可以開始安裝操作系統了:
1、准備一台適當配置的物理機
2、連接網線,與服務器在同一個局域網內
3、設置 BIOS 從網卡啟動
4、等待安裝
遇到的問題,有的主機即使設置了 BIOS 從 network 啟動,仍然不能正常從網絡來啟動安裝,需要仔細查找到 BISO 的關於 PXE 的開關設置,然後將其打開,每個主機的 BIOS 設置方式都不同,需要自己根據具體的硬件來設置。