配置Linux KickStart自动化安装,要进行如下步骤:
1
配置DHCP,用于给客户端提供IP地址及其它信息
2
配置TFTP服务器,用于提供客户端PXE引导所必须的文件
3
配置PXE引导:实现pxe服务
4
配置共享服务器,用于存放安装树
5
配置Kickstart的ks文件,用于自动应答安装
6
使用PXE功能引导客户机

Part.1 安装与配置DHCP

在PXE引导安装过程中,PXE客户端通过DHCP获取PXE服务器地址,PXE引导文件名称;然后客户机在使用TFTP协议从TFTP服务器下载引导文件并执行,从而启动计算机安装程序。引导文件执行后,接着下载安装程序启动安装。RedHat Linux使用了ISC的dhcpd软件,首先,需要安装dhcpd软件。
① 安装DHCP软件包

首先,可以使用yum或者rpm安装dhcp软件,以下是安装dhcp范例:
# rpm -ivh dhcp-4.1.1-49.P1.el6.x86_64.rpm
Preparing… ########################################### [100%]
1:dhcp ########################################### [100%]
#
② 配置DHCP服务器

为了满足我们的安装需求,假设PXE服务器、DHCP服务器、TFTP服务器全部安装在一台为10.1.1.1的计算机上。我们需要进行如下操作:
(1)修改DHCP配置文件 /etc/dhcpd.conf ,指定 IP 地址等信息。
(2)在 ‘’’/etc/dhcp/dhcpd.conf’’’ 中增加 tftp-server 需要推送给客户端的启动文件(bootstrap):filename “pxelinux.0”;因为 tftp 的默认目录是 /tftpboot,所以文件的绝对路径就是: /tftpboot/pxelinux.0”;当然也可以指定为其它的路径。
另外需要指定 next-server 参数,告诉客户端在获取到 pxelinux.0 文件之后去哪里获取其余的启动文件: next-server 10.1.1.1。
subnet 10.1.1.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 10.1.1.128 10.1.1.138;
default-lease-time 21600;
max-lease-time 43200;
next-server 10.1.1.1;
filename “pxelinux.0”;
}
配置完成后,重启DHCP服务,并将它设为开机自启动。
# /etc/init.d/dhcpd start
启动 dhcpd: [确定]
# chkconfig —level 35 dhcpd on

Part.2 安装与配置TFTP

在PXE安装过程中,客户机在使用TFTP协议从TFTP服务器下载引导文件并执行。我们主要通过配置TFTP服务器和PXE的引导配置完成这个过程。
① 安装配置TFTP服务器

首先,安装TFTP服务器软件包,RedHat提供了如下两个软件包:
· tftp-server:服务端程序
· tftp :客户端程序
# rpm -ivh tftp-server-0.49-7.el6.x86_64.rpm
Preparing… ########################################### [100%]
1:tftp-server ########################################### [100%]
#
② 配置tftp服务

TFTP 服务由xinetd服务管理。编辑 ‘’’/etc/xinetd.d/tftp’’’ 文件,将 ‘’’disable = yes’’’ 改为:disable = no。

cat /etc/xinetd.d/tftp
# default: off
… …
service tftp
{
disable= no
socket_type= dgram
protocol= udp
wait= yes
user= root
server= /usr/sbin/in.tftpd
server_args= -s /var/lib/tftpboot
per_source= 11
cps= 100 2
flags= IPv4
}
从tftp配置文件看出,默认选择/var/lib/tftpboot为TFTP服务器的根目录位置,配置完成后重启xinetd服务,使TFTP服务器生效。
# /etc/init.d/xinetd restart
TFTP服务使用的是69端口,可以通过查看69端口是否监听,判断TFTP服务是否启动。

Part.3 安装配置PXE服务器

PXE启动映像文件由syslinux软件包提供,RedHat Enterprise Linux光盘中已提供,如果没有此软件包可以到syslinux 主页:
· http://syslinux.zytor.com/
下载rpm来安装。
① 安装pxe服务端

可以使用rpm或者是yum命令安装pxe服务端软件,下面是使用yum命令安装范例:

yum install syslinux
② PXE引导配置(bootstrap)

我们只要安装了syslinux和syslinux-nonlinux,就会生成一个pxelinux.0,将 pxelinux.0 这个文件复制到 ‘’’/var/lib/tftpboot’’’ 目录即可:

rpm -ql syslinux-nonlinux |grep “pxelinux.0”
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
③ 创建客户端pxe引导配置文件default

由于多个客户端可以从一个PXE服务器引导,PXE引导映像使用了一个复杂的配置文件搜索方式来查找针对客户机的配置文件。
如果客户机的网卡的MAC地址为’’’88:99:AA:BB:CC:DD’’’,对应的IP地址为10.1.1.195,那么客户机首先尝试以MAC地址为文件名匹配的配置文件,如果不存在就以IP地址来查找。
根据上述环境针对这台主机要查找的以一个配置文件就是 /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd。如果该文件不存在,就会根据IP地址来查找配置文件了,这个算法更复杂些,PXE映像查找会根据IP地址16进制命名的客户机配置文件。例如:10.1.1.195对应的16进制的形式为C0A801C3。(可以通过syslinux软件包提供的gethostip命令将10进制的IP转换为16进制)

如果C0A801C3文件不存在,就尝试查找C0A801C文件,如果C0A801C也不存在,那么就尝试C0A801文件,依次类推,直到查找C文件,如果C也不存在的话,那么最后尝试default文件。
总体来说,pxelinux 搜索的文件的顺序是:
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/ C0A801C3
/tftpboot/pxelinux.cfg/ C0A801C
/tftpboot/pxelinux.cfg/ C0A801
/tftpboot/pxelinux.cfg/ C0A80
/tftpboot/pxelinux.cfg/ C0A8
/tftpboot/pxelinux.cfg/ C0A
/tftpboot/pxelinux.cfg/ C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
对于一台需要支持很多安装机器的安装服务器来说,将配置写在与IP地址对应的文件里很不灵活。把所有配置都集中在default文件中是个不错的主意,可以减轻配置文件维护负担。接下来创建/tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件。
由于安装光盘内isolinux目录下有isolinux.cfg,可以作为模板配置文件
# mkdir /var/lib/tftpboot/pxelinux.cfg
# cp /media/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
以下内容根据原文件略加修改并做了注释(注:该文件中的空行和以 ‘’’#’’’ 开头的行都将被忽略)
# cat /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
#prompt 1
timeout 600

display boot.msg

menu background splash.jpg
menu title Welcome to Red Hat Enterprise Linux 6.7!
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 linux
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img ks=http://10.1.1.1/ks.cfg
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 -
其中主要全局选项的含义如下:

· default:定义默认启动的label名称
· prompt:是否显示”boot:”提示符,值为1表示提示,为0时则不提示。
· timeout:在用户输入之前的超时时间,单位为 1/10 秒
· display:显示某个文件的内容
· FN:其中N值有1-5,按F1-5后显示对应文件的内容
其中label选项的含义如下:

· label:定义默认启动的label名称
· kernel:内核文件
· append:追加行,其中initrd可以指定RAW镜像文件,使用ks可以指定ks.cfg文件位置
④ 复制启动菜单文件

复制启动文件vesamenu.c32 到tftp根目录:
# cp /media/isolinux/vesamenu.c32 /var/lib/tftpboot/

Part.4 配置共享服务器

安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP,FTP,和NFS。也就是我们前面提到的OS Server。这里使用 http 服务来提供安装介质,只需要将系统光盘内容拷贝放到共享目录下即可。
# mkdir /var/www/html/rhel6
# cp /media/rhel6/* /var/www/html/rhel6
复制完成后,可以使用Windows机器访问测试,如果能够看到软件包,说明成功。

Part.5 生成ks.cfg文件

通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率Red Hat Linux 开始支持一个称为 kickstart 的功能。使用这种方法,只需事先定义好一个Kickstart自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
我们可以通过多种方法生成Kickstart配置文件,无论使用哪种方法无非就是创建一个应答文件,当你安装好一台Red Hat Linux机器,Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。 该文件位于/root/anaconda-ks.cfg。
我习惯性使用该文件,拷贝该文件到/var/www/html目录下。我的文件内容如下:
# cat /var/www/html/ks.cfg
# Kickstart file automatically generated by anaconda.

version=DEVEL
install
url —url http://10.1.1.1/rhel6
lang en_US.UTF-8
keyboard us
network —onboot yes —device eth0 —bootproto dhcp —noipv6
rootpw —iscrypted $6$aYdvJdKjpTnK9Avl$uw6QRpkNgrV8AoaUfymBlHBHbEI5qPoYGe.XilyrtnGIXGt1MgOoFcA7kCXkjMjeezfaYl2bsC7OVoMSQFRXF/
firewall —disabled
authconfig —enableshadow —passalgo=sha512
selinux —disabled
timezone —utc Asia/Shanghai
bootloader —location=mbr —driveorder=sda —append=”crashkernel=auto rhgb quiet”
# 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
zerombr yes

clearpart —all —drives=sda
autopart
#volgroup VolGroup —pesize=4096 pv.008002
#logvol /home —fstype=ext4 —name=lv_home —vgname=VolGroup —grow —size=100
#logvol / —fstype=ext4 —name=lv_root —vgname=VolGroup —grow —size=1024 —maxsize=51200
#logvol swap —name=lv_swap —vgname=VolGroup —grow —size=4000 —maxsize=4000

part /boot —fstype=ext4 —size=500
#part pv.008002 —grow —size=1

reboot
%packages
@core
@server-policy
gcc
gcc-c++
vim-enhanced
%end

注意,修改完成后,修改所有人有读取权限。

Part.6 PXE客户端安装系统

最后设置客户端BIOS选择从网卡启动。具体方法因BIOS版本不同而异。
Linux KickStart实战部署篇 - 图1
网卡中的PXE代码会联系DHCP服务器来获取IP地址以及启动镜像,然后启动镜像被载入并运行。
Linux KickStart实战部署篇 - 图2
安装完成后,安装程序会自动重新启动机器。重新启动机器时切记要修改BIOS,从硬盘启动。如果仍然从光盘启动机器,又会重复前面的自动安装步骤。