本文介绍PXE方式引导自动化安装CentOS6.5系统,主要用到的系统服务有DHCP、TFTP、Vsftpd和Kickstart。通过配置Kickstart自动化应答脚本,实现客户端批量、无人值守安装系统。
1.PXE介绍
PXE(Preboot Execution Environment,预启动执行环境)由Intel公司开发,工作于Client/Server的网络模式,支持客户端通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统。PXE可以引导windows2003/2008/XP/win7/linux系列等多种系统。
图 1 PXE网络安装服务架构图
图 2 支持PXE启动的网卡
PXE启动流程:进行PXE引导安装的必要条件是有一个支持PXE启动的网卡(NIC),即网卡ROM中必须要有PXE Client。当客户端计算机启动引导时,BIOS 把PXE Client 调入内存中执行,首先通过ARP协议广播请求IP地址与TFTP服务器地址,在获取到IP后,尝试向TFTP服务器发起TFTP请求,并将TFTP服务器根目录中的pxelinux.0文件下载到本地并执行,pxelinux.0引导程序执行后,会从TFTP根目录的pxelinux.cfg文件夹中下载default配置文件,然后根据default配置文件中指定的位置,去下载操作系统内核vmlinuz和虚拟文件系统initrd.img,同时default配置文件中还指明了ks.cfg文件的位置,ks.cfg也会被一并下载到本地,在通过网络下载操作系统安装的过程中,PXE引导程序会尝试读取ks.cfg文件内容,用于初始化系统配置,实现全自动无人值守安装。
2.kickstart自动化安装实例
2.1 安装环境介绍
实验环境以两台VMware虚拟机为例:
虚拟机A:CentOS 6.5系统,作为PXE安装服务器,网络连接到NAT网络,并关闭VMnet8的DHCP服务,IP地址:192.168.2.60/24,网关192.168.2.1/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
2.2 配置DHCP服务
PXE启动流程第一阶段需要通过DHCP服务为客户端分配IP地址,指定TFTP服务器地址,指定pxelinux.0引导程序。
1. 安装DHCP服务
[root@localhost ~]# yum -y install dhcp2. 设置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 "example.org";
option domain-name-servers 192.168.2.60;
#指定客户端DHCP租期和连接DHCP服务器超时时间即最大租期
default-lease-time 3600;
max-lease-time 7200;
#指定DHCP服务器发送的日志信息的日志级别
log-facility local7;
#子网区域
subnet 192.168.2.0 netmask 255.255.255.0 {
#设置客户端子网掩码
option subnet-mask 255.255.255.0;
#客户端IP地址池
range dynamic-bootp 192.168.2.100 192.168.2.200;
#tftp服务器的地址
next-server 192.168.2.60;
#需要从tftp服务器下载并执行的PXE引导文件
filename "pxelinux.0";
default-lease-time 3600;
max-lease-time 7200;
#指定客户端默认网关IP地址
option routers 192.168.2.1;
}4. 重启DHCP服务
[root@localhost ~]#service dhcpd restart2.3 配置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 restart2.4 配置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/default4. 编辑系统引导模版文件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.5 32bit
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=ftp://192.168.2.60 ks=ftp://192.168.2.60/pub/ks.cfg quiet2.5 配置Vsftpd服务
Vsftpd服务通过FTP协议发送系统光盘文件和自动化应答脚本文件ks.cfg到客户端。
1. 安装Vsftpd服务
[root@localhost cdrom]#yum -y install vsftpd2. 设置Vsftpd开机启动
[root@localhost ~]#chkconfig --level vsftpd 2345 on
[root@localhost ~]#chkconfig --list
vsftpd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭3. 将CentOS6.5系统安装光盘所有文件复制到FTP根目录
[root@localhost ~]#cp -a /media/cdrom/* /var/ftp/2.6 配置Kickstart
Kickstart是一种无人值守安装方式,它的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的自动应答脚本文件,在其后的安装过程中,当出现要求填写参数的情况时,安装程序会首先去查找Kickstart生成的文件,当找到合适的参数时,就采用找到的参数;当没有找到合适的参数时,才需要安装者手工干预。这样,如果告诉安装程序ks.cfg文件位置,并且文件涵盖了安装过程中出现的所有需要填写的参数时,就能实现全自动无人值守安装。
1. 在RHEL桌面环境下配置Kickstart
[root@localhost ~]#yum –y install system-config-kickstart
[root@localhost ~]#system-config-kickstartA:开始设置语言,键盘,时区,Root密码,安装完毕自动重启;
B:设置安装方式(ftp/http/nfs);
C:安装MBR;
D:设置分区;
E:配置网络;
F:认证配置;
G:SELinux 和防火墙配置;
H:软件包安装选择
图 3 Kickstart配置界面
经过各种设置,最后是生成的ks.cfg文件预览界面, 文件保存在/var/www/html/文件夹。
图 4 Kickstart生成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文件”。
#复制一份anaconda-ks.cfg到FTP共享目录pub下:
[root@localhost ~]#cp anaconda-ks.cfg /var/ftp/pub/ks.cfg
#修改权限为其他人可读
[root@localhost pub]#chmod 644 ks.cfg
[root@localhost pub]#ls -l
-rw-r--r-- 1 root root 1353 5月 28 08:59 ks.cfg下面是一个典型的ks.cfg配置文件:
[root@localhost pub]#vim ks.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
graphical
url --url="ftp://192.168.2.60/"
lang zh_CN.UTF-8
keyboard us
timezone --utc Asia/Shanghai
rootpw --iscrypted $6$VfvSB5Zx$ufvfpkzYy/nHoDukZXm1Z6LBlUg1n2OrO1.K7F8d2fRlYDdHwwR7MVUqT2h0Qab7rRPnRGPFa1/VYyBSDeGTt1
firewall --disabled
selinux --disabled
authconfig --enableshadow --passalgo=sha512
firstboot --disable
network --onboot yes --hostname=localhost.localdomain --device eth0 --bootproto dhcp --noipv6
user --name=todd --password=$6$vTfBqgQT$Xkjrx/kpRYEGfS1wRnsZw5MNRMUCZ3/Ld969pTG0wv4WBrMHUpWEwRSzPqJ95dIaZasWOU3pbS2at/dRZZZA11 --iscrypted
bootloader --location=mbr --driveorder=sda
zerombr yes
clearpart --all --initlabel
part /boot --fstype=ext4 --size=200
part swap --size=2048
part / --fstype=ext4 --grow --size=200
reboot
%packages
@core
@base
%post
/bin/tar zcPf centos.repo.tar.gz /etc/yum.repos.d/*.repo > /dev/null 2>&1
/bin/rm -f /etc/yum.repos.d/*.repo > /dev/null 2>&1
cat >> /etc/yum.repos.d/base.repo |