PXE批量安裝CentOS7操作系統
默認熟悉VMware Workstations或者ESXi以及相應的計算機網絡知識。
(個人認為容易出問題的地方已經用紅色字體提示,請自行注意)
批量部署前首先應該擁有一台部署完成的系統,也就是“樣板機”。
當然,也可以采用直接編輯ks.cfg文件的方式來自定義需要的操作系統以及安裝的軟件。
但是必須擁有一台Server端來提供服務,也就是PXE_Server,該台設備性能決定了能夠同時部署的集群最大規模數量。
PXE_Server部署DHCP、TFTP、Xinetd、Kickstart、(HTTP/FTP/NFS任選其一,本次部署采用HTTP),用來提供安裝所需要的系統文件以及所要安裝的軟件。
關閉Firewalld/SElinux(為實驗方便,減少麻煩,生產環境不推薦)
PXE批量部署原理:
1. PXE Client 從自己的PXE網卡啟動,向本網絡中的DHCP服務器請求IP;
2. DHCP 服務器返回分配給客戶機的IP 以及PXE文件的放置位置
(該文件一般是放在一台TFTP服務器上);
3. PXE Client 向本網絡中的TFTP服務器索取pxelinux.0 文件
(在 PXE Client 的 ROM 中,已經存在 TFTP Client);
4. PXE Client 取得pxelinux.0 文件后之執行該文件;
5. 根據pxelinux.0 的執行結果,通過TFTP服務器加載內核和文件系統 ;
6. 進入安裝畫面, 此時可以通過選擇HTTP、FTP、NFS 方式之一進行安裝;
1、DHCP服務器:為 PXE-client 分配 IP ,獲得安裝程序文件位置
2、TFTP服務器:傳輸安裝文件、內核、菜單文件等給 PXE-client
3、Xinetd: TFTP服務超級守護進程, 用於喚醒TFTP服務;
4、Kickstart:生成的ks.cfg配置文件
5、HTTP/NFS/FTP 服務中的任意一種,用於傳送安裝源文件給 PXE-client
一、關閉Firewalld/SElinux,簡單介紹一下,不再贅述。
關閉並禁用防火牆:
# systemctl disable firewalld.service
# systemctl stop firewalld.service
禁用SElinux:
編輯etc/sysconfig/selinux,永久關閉SELinux(需要重啟系統)
SELINUX=disabled
二、安裝DHCP服務(多網卡)
yum install dhcp -y
修改配置文件
vim /etc/dhcp/dhcpd.conf
#---------可用最簡配置-------------------
# 網絡和子網掩碼(根據自己實際情況編寫)
subnet 192.168.110.0 netmask 255.255.255.0 {
range 192.168.110.10 192.168.110.50;
option broadcast-address 192.168.110.255;
option routers 192.168.110.1;
default-lease-time 86400;
max-lease-time 86400;
# 指定tftp服務器地址
next-server 192.168.110.1;
#指定pxelinux.0文件
filename "pxelinux.0";
}
在多網卡的情況下指定某塊網卡啟動DHCP服務,復制文件,修改配置文件,重新注冊服務
cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
vi /etc/systemd/system/dhcpd.service
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid <your_interface_name(s)>(我要使用的網卡是ens192)
systemctl --system daemon-reload
systemctl restart dhcpd.service
systemctl enable dhcpd.service
三、安裝TFTP服務(無需認證,小文件傳輸)
安裝xinetd、tftp-server和syslinux服務
#syslinux 會在 /usr/share/syslinux/pxelinux.0 生成pxelinux.0文件 ,需要手動復制到/var/lib/tftpboot/ 目錄中,后面詳細介紹。
yum install xinetd -y
yum install tftp-server syslinux -y
配置xinetd,由xinetd管理tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no #默認disable是yes的,把它改為no即可
per_source = 11
cps = 100 2
flags = IPv4
}
systemctl enable tftp
systemctl enable xinetd
systemctl start tftp
systemctl start xinetd
四、安裝HTTP服務
yum install httpd -y
systemctl start httpd
systemctl enable httpd
五、配置ks.cfg文件
ks.cfg模板文件在/root下的anaconda-ks.cfg文件
# cp /root/anaconda-ks.cfg /var/www/html/ks.cfg
編輯ks.cfg文件,稍微修改一下安裝介質就可以(可以不做修改,但是安裝路徑一定要改,紅色標注的地方)
vim /var/www/html/ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of updrade 添加
# 告知安裝程序,這是一次全新安裝,而不是升級upgrade。
install
# Use CDROM installation media
# 通過FTP或HTTP從遠程服務器上的安裝樹中安裝。
url --url="http://192.168.110.1/cdrom"
# url --url ftp://<username>:<password>@<server>/<dir>
# nfs --server=nfsserver.example.com --dir=/tmp/install-tree
# Use graphical install
# graphical
# text 表示使用文本模式安裝。
text
# Firewall configuration 添加防火牆啟動
firewall --enable
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=cn --xlayouts='cn'
# System language
lang zh_CN.UTF-8
# Network information
network --bootproto=dhcp --device=link --onboot=on --ipv6=auto --activate
network --bootproto=dhcp --device=ens192 --onboot=off --ipv6=auto
network --hostname=localhost.localdomain
# Reboot after installation
reboot
# Root password
rootpw --iscrypted $6$7gWM4/A0f6Ot8I2u$IYoREsBLWSUK09XS01ogoJ85gwthlTiVYlDr.x.2EnWG8lbd5gmUUqJbGBfkXa08agmWydj1q3NK4DM9qKkYh0
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Clear the Master Boot Record
# zerombr 清除mbr引導信息。
zerombr
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
%packages
@^minimal
@core
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
六、復制內核文件
內核文件、虛擬根文件以及菜單文件,我們都是通過tftp服務來提供的,由於系統及版本的不同,對於一個比較復制機群來說,我們需要准備不同系統,不同版本的內核文件,initrd.img文件。菜單文件只需要一份即可。
/var/lib/tftpboot/目錄規划如下:
掛載光驅,虛擬一定要先在連接光驅打上鈎
創建目錄mkdir /var/www/html/cdrom
使用HTTP安裝,所以鏡像文件到掛到http根目錄下
mount /dev/cdrom /var/www/html/cdrom #掛載
如果是鏡像文件已上傳到linux中,可以這樣掛
#mount -o loop /opt/CentOS-7-x86_64-Minimal-1804.iso /var/www/html/cdrom
將鏡像中的啟動文件COPY到tftp server的根目錄中

# cp /var/www/html/cdrom/images/pxeboot/vmlinuz /var/lib/tftpboot/ #第2個文件,vmlinuz文件,在鏡像文件images/pxeboot/目錄中,
vmlinuz是可引導的、壓縮的內核文件,vmlinuz是vmlinux的壓縮文件。是可執行的Linux內核
# cp /var/www/html/cdrom/images/pxeboot/initrd.img /var/lib/tftpboot/ #第1個文件,initrd.img文件,在鏡像文件images/pxeboot/目錄中,
initrd是“initial ram disk”的簡寫。initrd用來臨時的引導硬件到實際內核vmlinuz能夠接管並繼續引導的狀態
復制pxelinux.0文件到tftp目錄下,首先安裝syslinux
yum -y install syslinux
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
編輯pxelinux.cfg菜單文件,即isolinux.cfg
# mkdir /var/lib/tftpboot/pxelinux.cfg
# vim /var/lib/tftpboot/pxelinux.cfg/default
該菜單文件的配置模板在鏡像文件中:/var/www/html/cdrom/isolinux/isolinux.cfg 中
# cp /var/www/html/cdrom/isolinux/vesamenu.c32 /var/lib/tftpboot/
# cp /var/www/html/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default # 復制並改名
# cp /var/www/html/cdrom/isolinux/boot.msg /var/lib/tftpboot
#vim /var/lib/tftpboot/pxelinux.cfg/default
#---------可用最簡配置-------------------
default cdrom
prompt 0 #1出現提示,0不出現提示
label cdrom
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.128.140/ks.cfg devfs=nomount #指定ks.cfg文件讀取的位置
