PXE 是一种系统引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC Network Information Center),即网卡中必须要有 PXE Client。
PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。
既然是通过网络传输,就需要IP地址;也就是说在其启动过程中,客户端请求服务器分配IP地址,之后 PXE Client 使用 TFTP Client 通过TFTP(Trivial File Transfer Protocol 简单文件传输协议)协议下载启动安装程序所需的文件。
简单地说PXE网络安装,客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播请求IP地址等信息,DHCP服务器给客户端提供IP地址和其它信息(TFTP服务器、启动文件等),之后请求并下载安装需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。
第一步:PXE Client向DHCP发送请求
首先,将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
第二步:DHCP服务器提供信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
第三步:PXE客户端请求下载启动文件
客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
第四步:Boot Server响应客户端请求并传送文件
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
第五步:请求下载自动应答文件
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。
或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。
由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
第六步:客户端安装操作系统
将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。
在上面介绍中PXE client是需要安装Linux的计算机,TFTP Server、DHCP Server和NFS Server运行在另外一台Linux Server上。Bootstrap文件(引导加载器)、配置文件、Linux内核都放置在Linux Server上TFTP服务器的根目录下。而Linux根文件系统存放于NFS Server的共享目录中。
PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。
KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,实现在动安装系统。
① 配置DHCP,用于给客户端提供IP地址及其它信息
② 配置TFTP服务器,用于提供客户端PXE引导所必须的文件
③ 配置NFS服务器,用于存放安装系统和应答文件
④ 配置Kickstart,用于自动应答安装
⑤ 使用PXE功能引导客户机
关闭系统的iptables防火墙和selinux
永久禁用selinux:
vim /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled #此项改为disable # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are pro tected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
CentOS6.5:
[root@kickstart sys]# service iptables stop [root@kickstart sys]# setenforce 0 [root@kickstart sys]# chkconfig iptables off
CentOS7:
[root@kickstart sys]# service firewalld stop [root@kickstart sys]#systemctl disable firewalld.service [root@kickstart sys]# setenforce 0
(1)安装dhcpd服务
yum install dhcp -y
(2)修改dhcpd.conf配置文件
[root@kickstart sys]# cat /etc/dhcp/dhcpd.conf # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page ddns-update-style # 设置DNS的动态更新类型,style参数必须是:ad-hoc、interim 或者 none ignore client-updates; #不允许动态更新DNS,允许的话是allow allow booting; #定义能够PXE启动 allow bootp; #是否响应激活查询,定义支持bootp default-lease-time 21600; #默认dhcp地址租期 max-lease-time 43200; #最大dhcp地址租期 option routers 192.168.5.1; #设定dhcp客户端的默认路由 subnet 192.168.5.0 netmask 255.255.255.0 { #定义dhcp网络 range dynamic-bootp 192.168.5.20 192.168.5.30; #定义dhcp地址范围 next-server 192.168.5.100; #指定tftp服务器地址 filename "pxelinux.0"; #指定pxe引导文件 } #注意大括号结尾
(3)启动dhcpd服务并检查
[root@kickstart sys]# service dhcpd start [root@kickstart sys]# ps -ef|grep dhcp root 36482 1 0 04:14 ? 00:00:00 dhcpd -cf /etc/dhcp/dhcpd.conf [root@kickstart sys]#
注意:CenOS6.5部署dhcpd服务时,有时用service dhcpd start会失败,可以直接用
dhcpd -cf /etc/dhcp/dhcpd.conf尝试启动,后面是的路径是dhcpd的配置文件路径
(1)安装rpcbind和nfs服务
[root@kickstart sys]# yum install rpcbind nfs-utils -y
(2)创建nfs共享目录,并更改目录属主
[root@kickstart sys]#mkdir -p /data/sys [root@kickstart sys]#chown nfsnobody.nfsnbody /data/sys
(3)修改nfs配置文件
[root@kickstart sys]#echo “/data/sys 192.168.5.0/24(rw,sync)” >/etc/exports
(4)启动rpcbind和nfs服务(注意顺序,先rpcbind后nfs)
[root@kickstart sys]#service rpcbind start [root@kickstart sys]#service nfs start
(5)检查rpcbind和nfs服务
[root@kickstart sys]#/etc/init.d/nfs reload [root@kickstart sys]#rpcinfo -p localhost program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100005 1 udp 58611 mountd 100005 1 tcp 47901 mountd 100005 2 udp 36752 mountd 100005 2 tcp 46315 mountd 100005 3 udp 43498 mountd 100005 3 tcp 34087 mountd 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 2 tcp 2049 nfs_acl 100227 3 tcp 2049 nfs_acl 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 2 udp 2049 nfs_acl 100227 3 udp 2049 nfs_acl 100021 1 udp 54387 nlockmgr 100021 3 udp 54387 nlockmgr 100021 4 udp 54387 nlockmgr 100021 1 tcp 59024 nlockmgr 100021 3 tcp 59024 nlockmgr 100021 4 tcp 59024 nlockmgr [root@kickstart sys]# showmount -e localhost Export list for localhost: /data 192.168.5.0/24
(1)安装tftp服务
[root@kickstart sys]# yum install xinetd -y (centos7还要需要单独安装yum install tftp-server -y)
(2)修改tftp配置文件
[root@kickstart sys]# vim /etc/xinetd.d/tftp 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 ###此项修改为no per_source = 11 cps = 100 2 flags = IPv4 }
(3)启动tftp服务并检查
[root@kickstart sys]# service xinetd restart [root@kickstart sys]# netstat -lntup|grep 69 tcp 0 0 0.0.0.0:46955 0.0.0.0:* LISTEN 7532/rpc.mountd udp 0 0 0.0.0.0:69 0.0.0.0:* 7180/xinetd [root@kickstart sys]#
(1)复制pxelinux.0到tftp根目录
[root@kickstart yum.repos.d]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
如果没有/usr/share/syslinux/pxelinux.0,请先安装syslinux,安装命令:yum install syslinux -y
(2)挂载系统光盘到/mnt,复制系统文件到nfs目录
[root@kickstart dev]# mount /dev/cdrom /mnt/ mount: /dev/sr0 is write-protected, mounting read-only [root@kickstart dev]# cd /mnt/ [root@kickstart mnt]# ls CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7 EFI images Packages RPM-GPG-KEY-CentOS-Testing-7 EULA isolinux repodata TRANS.TBL [root@kickstart mnt]# cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/ [root@kickstart mnt]# cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/
(3)在tftp根目录创建pxelinux.cfg目录,并将系统光盘中/isolinux/isolinux.cfg文件复制到pxelinux.cfg目录下,并改变为default
[root@kickstart tftpboot]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@kickstart tftpboot]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default [root@kickstart tftpboot]# cat /var/lib/tftpboot/pxelinux.cfg/default default ks # 默认启动的是“label linux”中标记的启动内核 prompt 1#显示“boot:”提示符。为“0”时则不提示,将会直接启动“default”参数中指定的内容。 timeout 600 # 在用户输入之前的超时时间,单位为 1/10 秒,超时后会启动“default”参数中指定的内容。 display boot.msg menu background splash.jpg menu title Welcome to CentOS 6.5! menu color border 0 #ffffffff #00000000 menu color sel 7 #ffffffff #ff000000 menu color title 0 #ffffffff #00000000 menu color tabmsg 0 #ffffffff #00000000 menu color unsel 0 #ffffffff #00000000 menu color hotsel 0 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color scrollbar 0 #ffffffff #00000000 label ks #创建一个新的标签,命名为ks menu label ^Auto installed system #菜单提示 kernel vmlinuz append ks=nfs:192.168.5.100:/data/sys/ks.cfg initrd=initrd.img #指定 ks.cfg 配置文件的位置 label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img label vesa menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img xdriver=vesa nomodeset label rescue menu label ^Rescue installed system kernel vmlinuz append initrd=initrd.img rescue label local menu label Boot from ^local drive localboot 0xffff [root@kickstart sys]#
具体关于default配置说明,可以百度一下:pxelinux.cfg相关说明
(4)将ks.cfg文件,放到nfs共享目录/data/sys,权限设为755
ks.cfg自动应答文件生成有两种方法:
1)安装system-config-kickstart,命令:yum -y install system-config-kickstart, 在linux的GUI下,打开终端窗口输入命令:system-config-kickstart,使用图形窗口配置保存ks.cfg文件,如下图:
2)直接修改root家目录下的anaconda-ks.cfg,保存为ks.cfg到nfs共享目录/data/sys
ks.cfg内容如下:
# Kickstart file automatically generated by anaconda. #version=DEVEL install nfs --server=192.168.5.100 --dir=/data/sys lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw admin=12 firewall --disabled authconfig --enableshadow --passalgo=sha512 selinux --disabled timezone --utc Asia/Shanghai bootloader --location=mbr --driveorder=sda # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work #clearpart --none firstboot --disable logging --level=info zerombr clearpart --all part /boot --fstype=ext4 --size=200 part swap --size=1024 part / --fstype=ext4 --grow --size=200 reboot %packages @base @compat-libraries @core @debugging @development @dial-up @hardware-monitoring @network-tools @performance @server-policy @workstation-policy %post mkdir /scripts /tools useradd fenfa echo 123456|passwd --stdin fenfa echo "fenfa ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers sed -i ‘s%#Port 22%Port 52113%‘ /etc/ssh/sshd_config sed -i ‘s%#PermitRootLogin yes%PermitRootLogin no%‘ /etc/ssh/sshd_config sed -i ‘s%#PermitEmptyPasswords no%PermitEmptyPasswords no%‘ /etc/ssh/sshd_config sed -i ‘s%#UseDNS yes%UseDNS no%‘ /etc/ssh/sshd_config %end [root@kickstart sys]# cat /data/sys/ks.cfg # Kickstart file automatically generated by anaconda. #version=DEVEL install nfs --server=192.168.5.100 --dir=/data/sys lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw admin=12 firewall --disabled authconfig --enableshadow --passalgo=sha512 selinux --disabled timezone --utc Asia/Shanghai bootloader --location=mbr --driveorder=sda # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work #clearpart --none firstboot --disable logging --level=info zerombr clearpart --all part /boot --fstype=ext4 --size=200 part swap --size=1024 part / --fstype=ext4 --grow --size=200 reboot %packages @base @compat-libraries @core @debugging @development @dial-up @hardware-monitoring @network-tools @performance @server-policy @workstation-policy %post mkdir /scripts /tools useradd fenfa echo 123456|passwd --stdin fenfa echo "fenfa ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers sed -i ‘s%#Port 22%Port 52113%‘ /etc/ssh/sshd_config sed -i ‘s%#PermitRootLogin yes%PermitRootLogin no%‘ /etc/ssh/sshd_config sed -i ‘s%#PermitEmptyPasswords no%PermitEmptyPasswords no%‘ /etc/ssh/sshd_config sed -i ‘s%#UseDNS yes%UseDNS no%‘ /etc/ssh/sshd_config %end
kickstart自动应答文件ks.cfg的部分注释见下图
将需要安装centos系统的电脑或服务器用网线设置为pxe启动,然后连入kickstart主机的网络中,启动即可
本文出自 “秦仙儿” 博客,请务必保留此出处http://youdong.blog.51cto.com/3562886/1866953
KickStart+nfs+dhcp+tftp无人值守批量安装CentOS6.5(或CentOS7)
原文:http://youdong.blog.51cto.com/3562886/1866953