简介
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。
启动过程
PXE是RPL的升级品,它是Preboot Execution Environment的缩写。它们的不同之处在于RPL是静态路由,而PXE是动态路由。其通信协议采用TCP/IP,与Internet连接高效而可靠,PXE无盘工作站的启动过程分析如下:
¨ 客户端个人电脑开机后, 在 TCP/IP Bootrom 获得控制权之前先做自我测试。
¨ Bootprom 送出 BOOTP/DHCP 要求以取得 IP。
¨ 如果服务器收到个人电脑所送出的要求, 就会送回 BOOTP/DHCP 回应,内容包括
客户端的 IP 地址, 预设网关, 及开机映像文件。否则,服务器会忽略这个要求。
¨ Bootprom 由 TFTP 通讯协议从服务器下载开机映像文件。
¨ 个人电脑通过这个开机映像文件开机, 这个开机文件可以只是单纯的开机程式也可
以是操作系统。
¨ 开机映像文件将包含 kernel loader 及压缩过的 kernel,此 kernel 将支持NTFS root
系统。
¨ 远程客户端根据下载的文件启动机器。
一、地址服务器dchp
1.dhcp工作原理:
a)当DHCP客户机第一次登陆网络时,如客户机上无任何IP信息设定,它会向网络 发出DHCP DISCVER数据包,为保证服务器能够收到请求,数据包源地址为0.0.0.0,目的地址是255.255.255.255 即以广播形式发送DHCP DISCOVER信息。
b)当DHCP服务器监听到客户端发出的DHCP DISCOVER广播后,它会从那些还没有透出的地址范围中选择可用IP及其它TCP/IP设定以DHCP OFFER数据包形式发送给客户机。
c)如客户端收到网络上多台DHCP服务器的响应,客户端会挑选最快一个DHCP OFFER并向网络发送一个DHCP REQUEST广播封包,告诉所有DHCP服务器它将使用哪一台服务器提供的IP地址。同时,客户端还会向网络发送ARP广播数据包,查询网络上有没有其它机器使用该IP地址,如何发现此IP已经被占用,客户端则会发送一个DHCP DECLINE数据包给DHCP服务器,拒绝接受其DHCP OFFER,并重新发送DHCP REQUEST信息。
客户端可以保留自己的一些TCP/IP设定,如网关,DHS地址等。
d)将地址分配给客户端后,DHCP 服务器会发送一个DHCP ACK消息,以确认IP租约正式生效,结束完整的DHCP工作过程。
e)DHCP客户端成功地从服务器取得IP地址后,一般不需要再发送DHCP DISCOVER信息,除非租约已经到期或者IP地址重新设定回0.0.0.0 此时客户端会直接使用已经租用到的IP地址向为其发放此IP地址的DHCP服务器发出DHCP REQUEST信息,DHCP服务器会尽量让客户端使用原来的IP地址,如无特殊情况,会直接响应DHCP ACK,允许客户端继续使用此IP地址,如果此地址已经失效或已经被其它主机使用,服务器会一个DHCP NACK数据包给客户端,要求其重新执行DHCP DISCOVER.
客户端执行DHCP DISCOVER后,台无DHCP服务器响应客户端请求,客户端会随机使用169.254.0.0/16网段中的一个IP地址配置本机地址。
dhcp工作原理简述:
1.OS开机后,没有ip地址,只有mac,发送rarp广播,谁能给我一个ip
arp:ip---->mac
rarp:mac-->ip
2.dhcp收到请求后,查看自己的地址池是否有可用地址,有的话,就直接给他
假如有多个dhcp同时给我返回ip地址,谁反应快,我用谁的ip
dhcp工作流程:(基于广播方式进行)
1.client: dhcp discover
2.server:dhcp offer(IP/mask,gw,...) //server可能有多个
lease time:租约
续租:50%,75%,87%, //续租是单播的(client:dhcp request,server:dchp ack/noak),续租的时间,在一半的时候,没有回复,75%,一半的一半
//假如dhcp回复dhcp nak(noack) ,client将再次发送dhcp discovery
3.client:dhcp request //请求使用该地址
4.Server:dhcp ack
dhcp是基于广播的,gw会阻断广播
假如需要跨网络:可使用dhcp_porxy,或者多提供一台dhcp
dhcp还可以告诉client网络中一个fs server的地址
一个主机接入到TCP/IP网络,要为配置哪些网络参数:
IP/mask
Gate
DNS server
NTP server
参数配置方式:
静态指定
动态分配
bootp //boot protocol引导协议-->DHCP
(无盘工作站)://网卡能够到s端自动请求,加载自己所属的OS文件,
bootp:无盘工作站基于此获取ip地址,这个ip第一次获取是动态的,以后就是固定的
//早期硬盘比较贵的时候,使用无盘工作站,现在用的不多
dhcp:引入了“租约”概念的bootp;也可以实现为特定主机保留某固定地址;
CentOS
dhcp(ISC,named):只提供dhcp
dhcpd:dchp服务
dhcrelay:中继服务 //这两个一般不会同时启用
dnsmap:dhcp+dns //轻量级,常用语嵌入式
/var/lib/dhcpd/dhcpd.leases 租约数据库文件
/etc/dhcp/dhcpd.conf 主配置文件
2.配置文件详解
/etc/dhcp/dhcpd.conf
============================
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
fixed-address 207.175.42.254; 定义DHCP客户端指定的IP地址。非subnet内的地址
next-server:指明引导所在的服务主机的ip地址 //通常是一个tftp server{trival}简单文件传输协议
filename "vmunix.passacaglia"; //初始化boot引导文件
server-name "toccata.fugue.com";
}
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org; 域名服务器
option domain-name "internal.example.org"; 负责的域
option domain-name-servers 192.168.2.1,192.168.2.5; 指定DNS服务器地址
option time-offset -18000; Eastern Standard Time
option ntp-servers 192.168.1.1; 时间服务器
option netbios-name-servers 192.168.1.1;
option netbios-node-type 2;
option routers 10.5.5.1; 默认网关
option subnet-mask 255.255.255.0; 子网掩码
option broadcast-address 10.5.5.31; 广播地址
default-lease-time 600;
max-lease-time 7200;
}
注:option 放在subnet内和subnet外,是有全局和局部之分
冲突:subnet内的生效,匹配范围小的生效
监听端口
Server:67/udp
Client:68/udp
dhclient -d //工作在前台,可以看到获取ip过程
//建议使用虚拟专用网,但是关闭vmware--首选项中的dhcp服务,可能会影响
二、PXE介绍
1.PXE简介
PXE:preboot excution environment //
client------------>dhcp //获取ip地址
|_____________>tftp //udp协议
|_____________>yum 仓库
大体流程:DHCP(获取IP,寻找TFTP)>TFTP(交换获取开机启动文件 /tftpboot即此文件夹)>HTTP(加载安装文件)>本地安装
Dhcpd: 分发IP地址。
Tftpd: 分发启动文件安装。
Httpd:分发系统文件安装。
加载安装文件不一定用http方式。
参考图一:
client网卡芯片必须支持网络引导--调整为网络引导
clinet开机后,发送rarp广播,获得一个ip地址,同时获得要加载的文件(引导)名称,文件server地址
基于此文件--加载内核文件{tftp获取}
CentOS:
dchp {ip/mask,gw,dns,filename,next-server}
tftp server(bootloader,kernel,initrd)
yum repository(ftp,http,nfs)
2.ks简介
KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;
安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
kickstart //自动化安装,如果只提供网络引导,手动安装,可以不使用kickstart文件
三、配置过程
关闭selinux和iptables //防止干扰
1.准备tftp
yum install tftp tftp-server
chkconfig tftp on
service tftp restart
[root@localhost ~]# rpm -ql tftp-server //centos7
/etc/xinetd.d/tftp
/usr/lib/systemd/system/tftp.service 独立
/usr/lib/systemd/system/tftp.socket 瞬时守护进程
[root@pxe ~]# rpm -ql tftp-server //Centos 6
/etc/xinetd.d/tftp
/usr/sbin/in.tftpd
========================================
service tftp //不用修改配置文件
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
#将此值改为no,表明开启此服务
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
监听端口:udp/69
文件路径:/var/lib/tftpboot
vim /etc/xinetd.d/tftp //可以修改响应参数
CentOS6:
chkconfig tftp on
service xinetd on
CentOS7:
systemctl start tftp.socket
systemctl enable tftp.socket
tftp IP_ADDRESS //即可访问
2.准备dhcp
vim /etc/dhcp/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0 {
option routers 192.168.10.1;
option subnet-mask 255.255.255.0;
range 192.168.10.100 192.168.10.200;
next-server 192.168.10.85;
filename "pxelinux.0";
allow booting;
allow bootp;
}
systemctl restart dhcpd.service //重启服务
3.准备yum仓库
mkdir /var/www/html/centos/7/x86_64 -pv
mount -r /dev/cdrom /var/www/html/centos/7/x86_64
systemctl start httpd
测试:http://192.168.4.100/centos/7/ //用浏览器看能否访问
4.kiskstart文件
mkdir /var/www/html/kickstarts/
vim centos7.cfg //安装完os后,root目录会有一个anaconda-ks.cfg
url --url="http://192.168.23.11/centos/7/x86_64/"
图形配置界面: #system-config-kickstart
5.配置pxe
yum -y install syslinux
rpm -ql syslinux
/usr/share/syslinux/pxelinux.0
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /var/www/html/centos/7/x86_64/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
cp /usr/share/syslinux/{chain.c32,menu.c32,memdisk,mboot.c32} /var/lib/tftpboot
chain.c32: vesamenu.c32,menu.c32:字符界面的
initrd文件:memdisk
此时tftpboot目录共有://Centos7
chain.c32,menu.c32,memdisk,mboot.c32,pxelinux.0,initrd.img,vmlinuz
Centos6对应的文件:
pxelinux.0,initrd.img,vmlinuz,boot.cfg,vesamenu.c32,spalsh.png
cp /mnt/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
6.创建选项菜单
cd /var/lib/tftpboot
mkdir pxelinux.cfg
vim pxelinux.cfg/default //提供选择界面
default menu.c32
prompt 5
timeout 30
MENU TITLE CentOS 7 PXE Menu
LABEL linux
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img
注:此时开机,但是不能加载repo
测试1:menu tab //编辑启动项
vmlinuz initrd=initrd.img ip=192.168.23.11 netmask=255.255.255.0 inst.repo=http://192.168.23.11/centos/7/x86_64
inst.repo(centos7才有inst.repo,centos6 在ks中指定即可)是在网络上的,开始的ip实在网卡的,现在使用的ip是内核的,内核已经取得控制权了
开机的时候获得的地址是网卡的地址,现在是内核控制,内核没有地址(linux的地址是内核的地址)
建议直接把:ip,inst.repo等参数,直接添加到default参数后面
注:仍然需要手动进行选择安装项 //ks还没有配置
7.自动执行安装
cd /var/lib/tftpboot/pexlinux.cfg;vim default
==========================================
default menu.c32
prompt 5
timeout 30
MENU TITLE CentOS 7 PXE Menu
LABEL linux
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEDN initrd=initrd.img inst.repo=http://192.168.23.11/centos/7/x86_64
LABEL linux auto
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEDN initrd=initrd.img inst.repo=http://192.168.23.11/centos/7/x86_64 ks=http://192.168.23.11/kickstarts/centos7.cfg
//ip不指定,可以自动获取,假如有dhcp。ip=dhcp 即可,默认会自动获取
四、CentOS6配置PXE
yum install dhcp tftp-server tftp syslinux vsftpd -y
vmware虚拟网络编辑器-->vmnet1(仅主机模式):DHCP网段在192.168.3.0
仅主机模式手动设定的地址要在vmnet1分配的地址范围内 //vmware(vmnet1)自带的dhcp服务关闭
vim /etc/ssh/sshd_config
UseDNS=no //取消开启dns
pxe:192.168.3.111 //仅主机模式
1.配置dhcp
service dhcpd configtest //测试语法
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf |egrep -v "^#|^$"
option domain-name "mt.com";
option domain-name-servers 192.168.3.111;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.10 192.168.3.20;
filename "pxelinux.0";
next-server 192.168.3.111;
}
[root@localhost ~]#service dhcpd restart ;ss -tunlp |grep 67
chkconfig dhcpd on
2.tftp
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@localhost ~]# mkdir /media/cdrom ; mount -r /dev/cdrom /media/cdrom
[root@localhost ~]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
//centos6 不需要复制syslinux中的文件,
[root@localhost ~]# cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
[root@localhost tftpboot]# cd /var/lib/tftpboot/ ; mkdir pxelinux.cfg ;cd pxelinux.cfg
[root@localhost pxelinux.cfg]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
chmod a+wx default //默认ro
3.pxe
[root@localhost pxelinux.cfg]# cat default
default vesamenu.c32
#prompt 1
timeout 6
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.8!
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 auto_install //手动添加的
menu label ^Auto Install pxe linux //^在界面上A会自动跳转
menu default
kernel vmlinuz
append initrd=initrd.img ks=ftp://192.168.3.111/pub/centos6.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 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
label memtest86
menu label ^Memory test
kernel memtest
append -
4.yum
[root@localhost pxelinux.cfg]# mkdir /var/ftp/pub/centos
[root@localhost pxelinux.cfg]# mount --bind /media/cdrom/ /var/ftp/pub/centos
service vfstpd start
chkconfig vsftpd on
ftp 192.168.3.111 //anonymous 查看
5.ks准备
[root@localhost ~]# cp centos6.cfg /var/ftp/pub/
[root@localhost pxelinux.cfg]# system-config-kickstart /root/anaconda-ks.cfg 配置ks文件
==========================================================================================
注意ks 位于centos(cdrom内容)同级目录
ks文件内容
====================================================================================
#platform=x86, AMD64, 鎴?Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --enabled --service=ssh
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.3.110/centos"
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 //注意,这个repo要注释掉,否则会链接repo失败,根据url获取repo即可
# Root password
rootpw --iscrypted $1$1fqZyR0n$OKTh75.k4WYgDspZtePTV0
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
# System keyboard
keyboard us
# System language
lang zh_CN
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
# System timezone
timezone Asia/Shanghai
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda"
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext2" --size=512
part / --fstype="ext4" --size=10240
part /home --fstype="ext4" --size=10240
part /opt --fstype="ext4" --size=10240
%packages
@base
@basic-desktop
@chinese-support
@core
@debugging
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@input-methods
@internet-browser
@java-platform
@legacy-x
@network-file-system-client
@print-client
@remote-desktop-clients
@server-platform
@server-policy
@workstation-policy
@x11
abrt-gui
certmonger
device-mapper-persistent-data
krb5-workstation
libXmu
mtools
oddjob
pam_krb5
pax
samba-winbind
sgpio
%end
========================================================================
备注:CentOS6和CentOS7所需的文件
CentOS 6 PXE:
yum -y install syslinux tftp-server
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/
cp /media/cdrom/isolinux/{boot.cfg,vesamenu.c32,splash.png} /var/lib/tftp/boot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default/
CentOS 7 PXE:
yum -y install syslinux tftp-server
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
转自:MT_IT