pxe+http+kickstart实验原理
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