Pxe+Centos7+KS
一、原理介紹
所謂的PXE是Preboot Execution Environment的縮寫,字面上的意思是開機前的執行環境。
要實現pxe,至少需要3個服務:
DHCP:提供網絡參數,告知客戶端TFTP位置
TFTP:提供boot loader及kernel file下載路徑
HTTP/FTP/NFS:三種架構提供內核文件
1、架構

2、流程

注意:全部用的udp封裝
1)client向pxe server上的dhcp發送IP地址請求消息,dhcp檢測client是否合法,同事將pxe環境下的boot loader文件pxelinux.0的位置信息發給client
2)client向pxe server上的tftp請求pxelinux.0,tftp收到消息向client發送pxelinux.0大小信息,試探client是否滿意,當tftp收到client發回的統一大小信息后,發送pxelinux.0.
3)client執行接收到的pxelinux.04)client向TFTP請求pxelinux.cfg文件(其實是目錄,里面放了啟動菜單,即grub的配置文件),TFTP將配置文件發回client,繼而client根據配置文件執行后續的操作
5)client向TFTP發送linux內核請求信息,TFTP發送內核
6)client向TFTP發送根文件請求信息,TFTP接受到消息之后返回linux根文件系統
7)client加載linux內核(啟動參數已經在4中的配置文件中設置好了)。
8)client通過nfs/ftp/http下載系統安裝文件進行安裝,如果4中的配置文件指定了kickstart路徑,則回根據此文件自動應答安裝系統
3、文件的說明
vmlinuz:核心文件(kernel file);
initrd.img:開啟過程中核心組件的參數;
isolinux.cfg --> demo:開機pxe選擇參考;
二、部署
首先完成准備工作,然后開始安裝DHCP、TFTP,接着提供bootloader及配置文件,掛着光盤把內核文件copy到tftp目錄,部署httpd提供文件服務,設置菜單及提供系統安裝軟件
1、准備工作
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
2、安裝軟件
yum install dhcp tftp-server xinetd syslinux httpd
3、部署dhcp
1)拷貝配置文件
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
2)主要修改配置文件
subnet 10.211.55.0 netmask 255.255.255.0 { range dynamic-bootp 10.211.55.100 10.211.55.120; option domain-name-servers 10.211.55.4; # option domain-name "zhangxingeng"; option subnet-mask 255.255.255.0; option routers 10.211.55.4; # option broadcast-address 10.5.5.31; default-lease-time 600; max-lease-time 7200; next-server 10.211.55.4; #<==這個就是tftp地址 filename "pxelinux.0"; #<==告知從tftp根目錄獲取bootloader文件 }
另外dhcp配置文件可以做綁定,用Mac綁定某台主機的ip地址
host clientA{ #<==可以綁定某台主機的ip地址,用mac綁定 hardware ethernet 00:0C:29:83:A2:10; fixed-address 10.211.55.4; } ddns-update-style interim;
3)啟動服務
systemctl start dhcpd systemctl enable dhcpd
4、部署tftp
1)編輯配置文件
從流程得知boot loader文件pxelinux.0以及內核相關的配置文件(目錄pxelinux.cfg下)主要都是由TFTP來提供的
vim /etc/xinetd.d/tftp
vim /etc/xinetd.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot #<==這個就是tftp目錄 disable = no #<==開啟tftp只需改為”no“ per_source = 11 cps = 100 2 flags = IPv4 }
TFTP是由xinetd這個super daemon所管理的,因此設定好TFTP之后,要啟動的是xinetd;
2)啟動服務
systemctl start xinetd tftp systemctl enable xinetd systemctl enable tftp
3)服務驗證
netstat -untlp
觀察有沒有監聽69端口
5、提供bootloader機配置文件
yum -y install syslinux cp /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0} /var/lib/tftpboot
menu.c32:圖形化菜單
vesamenu.c32:圖形化菜單
pxelinux.0:是bootloader
pexlinux.cfg: 開機菜單設定
5、部署http服務
1)掛載光盤
mkdir /media/cdrom mount -o exec /dev/cdrom /media/cdrom mkdir /var/www/html/centos7 mount --bind /media/cdrom /var/www/html/centos7
2)啟動服務
systemctl restart httpd systemctl enable httpd
3)web端驗證
訪問http://10.211.55.4/centos7
可以查看到掛在光盤的文件列表
7、設置菜單
1)拷貝內核文件
mkdir /var/lib/tftpboot/pxelinux.cfg cp /var/www/html/centos7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default cp /var/www/html/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ cp /var/www/html/centos7/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/
vmlinuz:是可引導的、壓縮的內核
initrd.img:是一個小的映象, 放的是和啟動相關的驅動模塊。通常的步驟是先啟動內核,然后內核掛載initrd.img,並執行里面的腳本來進一步掛載各種各樣的模塊。
boot.msg:好像是開機信息等,不太清楚,望指教
splash.png:光盤啟動界面的背景圖,沒啥用
注意:pxelinux.cfg是個目錄,可以放置默認的開機選項,也可以針對不同的客戶端主機提供不同的開機選項。可以在pxelinux.cfg目錄內建立一個名為default的文件來提供默認選項。
2)設置菜單
vim /var/lib/tftpboot/pxelinux.cfg/default
[root@centos7-6-1 isolinux]# vim /var/lib/tftpboot/pxelinux.cfg/default default vesamenu.c32 timeout 60 prompt 1 display boot.msg menu title ########## PXE Boot Menu ########## label 1 menu label ^1) Install CentOS 7-6 #菜單文字 menu default #表示開機光標一開始停留在label上 kernel vmlinuz #<==#內核文件路徑,相對路徑是從/tftpboot開始的 append initrd=initrd.img inst.repo=http://10.211.55.4/centos7 #內核啟動選項,其中initrd的路徑,還有其他的stage2文件 ks=http://10.211.55.4/ks.cfg #ks路徑
三、kickstart實現無人值守批量安裝
1、拷貝ks文件並授權
cp -a ~/anaconda-ks.cfg /var/www/html/ks.cfg chmod +r /var/www/html/ks.cfg
2、編輯ks配置文件
cat /var/www/html/ks.cfg
[root@localhost pxelinux.cfg]# #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 --enablefingerprint # Install OS instead of upgrade install # Use CDROM installation media # cdrom # Use text mode install text # Use network installation url --url="http://10.211.55.4/centos7" # Firewall configuration firewall --enabled --service=ssh firstboot --disable ignoredisk --only-use=sda # Keyboard layouts # old format: keyboard us # new format: keyboard --vckeymap=us --xlayouts='' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=eth0 --activate network --hostname=localhost.localdomain # Reboot after installation reboot # Root password rootpw --iscrypted 6d/QQHF.8MAgw # SELinux configuration selinux --enforcing # System services services --enabled="chronyd" # System timezone timezone America/New_York --isUtc user --groups=wheel --name=zhangxingeng --password=6d/QQHF.8MAgw --iscrypted # X Window System configuration information xconfig --startxonboot # System bootloader configuration bootloader --append="rhgb quiet crashkernel=auto" --location=mbr --driveorder="sda" --boot-drive=sda # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --drives=sda # Disk partitioning information part pv.65 --fstype="lvmpv" --size=65035 part /boot --fstype="ext4" --size=500 volgroup VolGroup --pesize=4096 pv.65 logvol swap --fstype="swap" --grow --maxsize=2016 --size=1008 --name=lv_swap --vgname=VolGroup logvol / --fstype="ext4" --grow --maxsize=51200 --size=1024 --name=lv_root --vgname=VolGroup logvol /home --fstype="ext4" --grow --size=100 --name=lv_home --vgname=VolGroup %post # Get interface up ifdown eth0 ifup eth0 /usr/bin/chfn -f 'mac' zhangxingeng mkdir -p /tmp/prl-tools-mnt umount /dev/sr0 mount -t iso9660 -o exec /dev/sr0 /tmp/prl-tools-mnt #EFImount -t msdos -o exec /dev/sr0 /tmp/prl-tools-mnt mkdir -p /tmp/prl-tools-dir mount -t iso9660 -o loop /tmp/prl-tools-mnt/prl-to*.iso /tmp/prl-tools-dir echo echo "Installing Parallels Tools, please wait..." [ -d '/home/zhangxingeng' ] && ( HOME_DIR=/home/zhangxingeng/Desktop; mkdir -p "$HOME_DIR" && chown zhangxingeng:zhangxingeng "$HOME_DIR" ); cd /tmp/prl-tools-dir/ ./install --install-unattended-with-deps --skip-rclocal-restore umount /tmp/prl-tools-dir rm -rf /tmp/prl-tools-dir umount /dev/sr0 rm -rf /tmp/prl-tools-mnt [ -e /tmp/sepolicy-devel.temp ] && rm /tmp/sepolicy-devel.temp reboot %end %packages --ignoremissing @base @basic-desktop @core @debugging @desktop-debugging @desktop-platform @directory-client @fonts @general-desktop @gnome-desktop @graphical-admin-tools @graphics @input-methods @java-platform @legacy-x @network-file-system-client @performance @perl-runtime @print-client @remote-desktop-clients @server-platform @virtualization @virtualization-client @virtualization-platform @x11 abrt-gui authconfig certmonger checkpolicy chrony gcc genisoimage kernel-devel kexec-tools krb5-workstation libXmu make mtools nscd nss-pam-ldapd oddjob pam_krb5 pam_ldap pax perl-DBD-SQLite python python-dmidecode selinux-policy-devel sgpio system-config-firewall-base wodim %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end