主要讲述了[PXE] linux(centos)PXE无盘服务器搭建,安装,启动及pxe协议详解 , Kickstart (PXE+DHCP+TFTP+HTTP)。
PXE环境概述
作为中小公司的运维,经常会遇到一些机械式的重复工作。如何进行批量一次大批量部署服务器安装?方法: Kickstart (PXE+DHCP+TFTP+HTTP) 或 Cobbler
Redhat系通主要有两种方式:Kickstart和Cobbler。 Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。 Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成。 PXE,全名Pre-boot Execution Environment,预启动执行环境;简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,并降低使用者的门槛。而kickstart实现方式依赖于PXE环境。通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;由Intel和Systemsoft公司于1999年9月20日公布的技术;运行在Client/Server的工作模式; PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。 PXE client是需要安装Linux的计算机,TFTP Server、DHCP Server及HTTPD Server部署在在PXE Server端。Bootstrap文件、配置文件以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下,而ks.cfg 及 系统内核部署在HTTPD server目录。
PXE Client向DHCP发送请求 PXE Client从自己的PXE网卡启动,通过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),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。 客户端安装操作系统 将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。 OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。
1.pxe client必须支持pxe用户端功能,并且开机时选择网络启动,这样系统才能以网络的方式进入pxe启动程序
2.pxe服务器必须至少提供DHCP及TFTP的服务才行,且其中
DHCP服务器必须能够除未pxe client分配ip地址外,还需告知tftp所在的位置(即pxelinux.0的文件位置) TFTP服务器则为pxe client 提供bootloader 及 kernel 等重要文件下载服务 3.使用NFS/HTTP/FTP之一的服务器提供pxe client所需程序及软件来源等通讯协议
kickstart自动化安装实例 安装环境介绍 实验环境以两台VMware虚拟机为例: 虚拟机A:CentOS 6.7系统,作为PXE安装服务器,网络连接到NAT网络,并关闭VMnet8的DHCP服务,IP地址:192.168.87.60/24,网关192.168.87.2/24; 虚拟机B:新建空白虚拟机,作为PXE客户端,网络连接到NAT网络,也可以和虚拟机A一起放在“仅主机”或“桥接”网络(相同即可),移除DVD及其他不用的设备; 在正式进行服务配置前,最好关闭PXE服务器的防火墙和Selinux: 关闭防火墙iptables:
[root@localhost ~]#iptables -F
[root@localhost ~]#service iptables stop
关闭Selinux: [root@localhost ~]#setenforce 0
[root@localhost ~]#vim /etc/selinux/config
SELINUX=disabled
配置DHCP服务
PXE启动流程第一阶段需要通过DHCP服务为客户端分配IP地址,指定TFTP服务器地址,指定pxelinux.0引导程序。 1. 安装DHCP服务 [root@localhost ~]# yum -y install dhcp
2. 设置DHCP服务开机启动
[root@localhost ~]#chkconfig --level dhcpd 2345 on
[root@localhost ~]#chkconfig --list dhcpd
0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
3. 修改DHCP服务主配置文件
[root@localhost ~]#vim /etc/dhcp/dhcpd.conf #响应客户端的启动查询(开机时发送的DHCP请求)
allow booting;
allow bootp;
#不使用DNS动态更新,忽略客户端DNS更新
ddns-update-style none;
ignore client-updates;
#为客户端指定DNS名称和DNS服务器的IP地址
option domain-name-servers 192.168.87.60;
#指定客户端DHCP租期和连接DHCP服务器超时时间即最大租期
default-lease-time 3600;
max-lease-time 7200;
#指定DHCP服务器发送的日志信息的日志级别
log-facility local7;
#子网区域
subnet 192.168.87.0 netmask 255.255.255.0 {
#设置客户端子网掩码
option subnet-mask 255.255.255.0;
#客户端IP地址池
range dynamic-bootp 192.168.87.61 192.168.2.200;
#tftp服务器的地址
next-server 192.168.87.60;
#需要从tftp服务器下载并执行的PXE引导文件
filename "pxelinux.0";
default-lease-time 3600;
max-lease-time 7200;
#指定客户端默认网关IP地址
option routers 192.168.87.2;
} 4. 重启DHCP服务 [root@localhost ~]#service dhcpd restart
配置TFTP服务
TFTP服务是一个没有主服务程序的轻量级服务,它依靠系统xinetd守护进程启动。xinetd进程监听不同网络端口,根据端口发送数据到不同的服务进程。在安装好TFTP服务后,xinetd服务就监听UDP的69号端口,将这个端口收到的数据发送给TFTP程序。 1. 安装xinetd和tftp-server [root@localhost ~]#yum -y install xinetd tftp-server
2. 设置xinetd服务开机启动
[root@localhost ~]#chkconfig --level xinetd 345 on
[root@localhost ~]#chkconfig --list xinetd
0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭
基于 xinetd 的服务:
tftp: 启用
3. 编辑tftp配置文件,开启tftp服务
[root@localhost ~]#vim /etc/xinetd.d/tftp
#将配置文件中disable后面的yes改成no
service tftp {
……
disable = no
……
}
4. 重启xinetd服务 [root@localhost ~]#service xinetd restart
配置Syslinux及系统引导必须文件
PXE系统启动引导需要一些必须的文件,其中pxelinux.0文件通过安装syslinux包获得;vmlinuz是压缩的可引导、可执行的linux内核文件,initrd.img是“initial ramdisk”,用于临时引导硬件到内核vmlinuz接管,加载文件系统和SCSI设备驱动,这两个文件可以从安装光盘images/pxeboot目录复制; 1. 安装syslinux包,复制引导文件pxelinux.0
[root@localhost ~]#yum -y install syslinux
[root@localhost ~]#locate pxelinux.0
/usr/share/syslinux/pxelinux.0
#将pxe引导文件复制到TFTP根目录中
[root@localhost ~]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
2. 挂载CentOS光盘,复制系统引导必须文件
[root@localhost ~]#mount /dev/cdrom /media/cdrom
[root@localhost cdrom]#cp images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
[root@localhost cdrom]#cp isolinux/{vesamenu.c32,boot.msg} /var/lib/tftpboot/
3. 创建系统引导模版文件default
[root@localhost cdrom]#mkdir /var/lib/tftpboot/pxelinux.cfg
[root@localhost cdrom]#cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
4. 编辑系统引导模版文件default
[root@localhost ~]#vim /var/lib/tftpboot/pxelinux.cfg/default
#需要修改两处 #第1处:将第一行default后面标签改成linux,表示引导时使用这个标签下指定的内容去查找操作系统的位置 default linux #第2处:找到linux标签,修改inst.stage2和ks后面配置指向FTP服务器 label linux menu label ^Install CentOS 6.7 64bit menu default kernel vmlinuz append initrd=initrd.img inst.stage2=http://192.168.87.1 ks=http://192.168.87.1/ks.cfg quiet
这里我使用的是http,物理机器搭建的nginx,把centos6.7镜像中的文件拷贝至根目录下,以及后面ks.cfg
配置Kickstart
Kickstart是一种无人值守安装方式,它的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的自动应答脚本文件,在其后的安装过程中,当出现要求填写参数的情况时,安装程序会首先去查找Kickstart生成的文件,当找到合适的参数时,就采用找到的参数;当没有找到合适的参数时,才需要安装者手工干预。这样,如果告诉安装程序ks.cfg文件位置,并且文件涵盖了安装过程中出现的所有需要填写的参数时,就能实现全自动无人值守安装。 1. 在RHEL桌面环境下配置Kickstart
[root@localhost ~]#yum –y install system-config-kickstart
[root@localhost ~]#system-config-kickstart
A:开始设置语言,键盘,时区,Root密码,安装完毕自动重启; B:设置安装方式(ftp/http/nfs); C:安装MBR; D:设置分区; E:配置网络; F:认证配置; G:SELinux 和防火墙配置; H:软件包安装选择 经过各种设置,最后是生成的ks.cfg文件预览界面, 文件保存在你指定的路径下面 2. 使用系统现有ks.cfg模版文件 在已安装好的CentOS系统root用户家目录,存在一个anaconda.cfg文件即为本系统的自动化应答脚本文件,可以以此为模版进行配置。
[root@localhost ~]#ls -l anaconda-ks.cfg
-rw------- 1 root root 1080 5月 24 11:08 anaconda-ks.cfg
注意:此配置文件权限为其他人不可读,使用前需要设置权限为其他人可读,否则自动化安装时候anaconda程序会报错“找不到ks.cfg文件”。
下面是我自己的ks.cfg配置文件: #platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --enabled --ssh --service=ssh
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.87.1/"
# Root password
rootpw --iscrypted $1$lxq5VjGf$7a5/KyjtfEr/5JO1fokNs/
# System authorization information
auth --useshadow --passalgo=md5
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone --isUtc 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 --linux --initlabel
part swap --size 1024
part /boot --size 512
part pv.01 --size 18944
volgroup cbh pv.01
logvol / --vgname=cbh --size=18000 --name=root
%post
if [ -f /boot/grub/menu.lst -a ! -h /boot/grub/menu.lst ]; then cp /boot/grub/menu.lst /boot/grub/menu.lst.bak && sed -i 's/ rhgb//' /boot/grub/menu.lst; fi
if [ -f /boot/grub/grub.conf -a ! -h /boot/grub/grub.conf ]; then cp /boot/grub/grub.conf /boot/grub/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub/grub.conf; fi
if [ -f /boot/grub2/grub.conf -a ! -h /boot/grub2/grub.conf ]; then cp /boot/grub2/grub.conf /boot/grub2/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub2/grub.conf; fi
if [ -f /etc/rc.d/rc.local ]; then cp /etc/rc.d/rc.local /etc/rc.d/rc.local.backup; fi
cat >>/etc/rc.d/rc.local <<EOF
#!/bin/bash
echo
echo "Installing VMware Tools, please wait..."
if [ -x /usr/sbin/getenforce ]; then oldenforce=\$(/usr/sbin/getenforce); /usr/sbin/setenforce permissive || true; fi
mkdir -p /tmp/vmware-toolsmnt0
for i in hda sr0 scd0; do mount -t iso9660 /dev/\$i /tmp/vmware-toolsmnt0 && break; done
cp -a /tmp/vmware-toolsmnt0 /opt/vmware-tools-installer
chmod 755 /opt/vmware-tools-installer
cd /opt/vmware-tools-installer
mv upgra32 vmware-tools-upgrader-32
mv upgra64 vmware-tools-upgrader-64
mv upgrade.sh run_upgrader.sh
chmod +x /opt/vmware-tools-installer/*upgr*
umount /tmp/vmware-toolsmnt0
rmdir /tmp/vmware-toolsmnt0
if [ -x /usr/bin/rhgb-client ]; then /usr/bin/rhgb-client --quit; fi
cd /opt/vmware-tools-installer
for s in sr0 sr1; do eject -s /dev/\$s; done
./run_upgrader.sh
if [ -f /etc/rc.d/rc.local.backup ]; then mv /etc/rc.d/rc.local.backup /etc/rc.d/rc.local; else rm -f /etc/rc.d/rc.local; fi
rm -rf /opt/vmware-tools-installer
sed -i 's/3:initdefault/5:initdefault/' /etc/inittab
if [ -f /boot/grub/menu.lst.bak ]; then mv /boot/grub/menu.lst.bak /boot/grub/menu.lst; fi
if [ -f /boot/grub/grub.conf.bak ]; then mv /boot/grub/grub.conf.bak /boot/grub/grub.conf; fi
if [ -f /boot/grub2/grub.conf.bak ]; then mv /boot/grub2/grub.conf.bak /boot/grub2/grub.conf; fi
if [ -x /usr/sbin/getenforce ]; then /usr/sbin/setenforce \$oldenforce || true; fi
if [ -x /bin/systemd ]; then systemctl restart prefdm.service; else telinit 5; fi
EOF
chmod 755 /etc/rc.d/rc.local
if [ -x /bin/systemd ]; then systemctl enable rc-local.service; fi
/usr/sbin/adduser cbh
/usr/sbin/usermod -p '$1$j1y/Sc15$MpcctVsMPlrccVzKAtOC.1' cbh
/usr/bin/chfn -f "cbh" cbh
/bin/echo done
%end
%packages
@base
@chinese-support
@desktop-platform
@general-desktop
@kde-desktop
@x11
%end 3.测试安装 自动化应答脚本文件ks.cfg配置完毕后,初始化一个VMware虚拟机,将网络连接到NAT网络(必须和作为PXE服务器的虚拟机A在同一个网络,并且VMnet8关闭DHCP服务),移除客户端虚拟机B的DVD及其他不用的设备。这里给它的磁盘设置大些,不然在分区的时候,会报错:磁盘分区空间不足,建议设置为100G 启动PXE Client虚拟机B,自动选择从网卡PXE引导,DHCP 服务器开始给客户机分配IP地址,并指定TFTP服务器地址。 图 7 加载vmlinuz和initrd.img文件
图 8 启动CentOS6.7安装过程
注意制作kickstart文件时一定要勾选下面三项,否则会出错。
参考地址: https://blog.51cto.com/toddliu/2121532 https://www.jianshu.com/p/378b994d3d83
|