此文章是Linux部署方式系列文章中的第三部分,回归到主流的RedHat衍生版体系以及描述对比PXE安装服务的实现及使用Kickstart在部署主机系统是的妙用。本文涉及的内容是对现有Redhat体系的网络安装方式的一个总结,重点是在讲述PXE安装服务器的核心内容实现方式并不限于Linux环境;结合Kickstart如何快速的实现安装主机的基本信息的配置,以及如何定制主要软件包,同样灵活应用Kickstart和tftp可以具体指定那台主机安装那些配置好的参数,节省管理员的时间和精力,自动安装减少了人为出错的几率。好处自然是很多,这里就不过多描述了,下面开始本文的内容。主要针对目前的RHEL5.3版本以及CentOS5.2版本为例。
首先熟悉一下PXE网络安装服务器的架构。PXE安装分为两个阶段,第一个阶段是BOOTP阶段,此阶段完全由网卡自带的PXEROM芯片所决定,Linux主机将从tftpserver上获得PXELinux启动内核和initrd.img文件;第二个阶段是在PXELinux内核启动Linux主机网络安装进程阶段,Linux主机需要和安装服务器进行网络通信,需要通过DHCP服务获得IP地址,以便获得安装脚本和获得安装文件。从下图可以看到PXE网络安装服务器包含一个DHCP和TFTP主要解决主机没有操作系统的BOOTP阶段获取必要的安装信息,就是通过加载vmlinuz和initrd.img进入Linux安装的引导过程。其次就是要准备一个安装的镜像服务器并通过nfs、ftp、http等协议将Redhat&Centos的安装源(安装目录树)发布供安装使用,同时简单的变动一下这个安装目录树同样可以成为一个本地的yum源。重要的一点就是要提通过KickstartScript配置文件实现安装的自动化。
图:PXE网络安装服务架构
实际上为了保持这个架构的通用性,将分别讲述在Redhat&Centos中的实现方式以及在Windows环境中的实现方式。实际上借助一些简单的工具PXE网络安装往往可以成为一个便携的方式存在。
在Redhat&Centos中安装tftp和dhcp,通过yum完成,这个对与Centos5.2非常的便利,至于在redhat中的操作,可以看后文中描述的建议的yum源的实现。
yum -y install tftp-server #完成tftp server的安装
yum -y install dhcp* #完成dhcp server的安装
实际上PXE安装中有疑问的部分就是配置一个tftp的目录、设置dhcp的tftp启动参数、建立Redhat&Centos的安装目录树。要清楚这些问题先要从tftp主目录/tftpboot下的目录和文件用途说起。
/tftpboot/pxelinux.0 #文件
/tftpboot/*.msg #文件
/tftpboot/vmlinuz #文件
/tftpboot/initrd.img #文件
/tftpboot/pxelinux.cfg #目录
Redhat&Centos安装程序的内核vmlinuz/根文件系统文件initrd.img是PXE安装过程的第一步,正确引导后将看到boot.msg(*.msg中的一个)提示信息,用户选择安装方式,pxelinux.0启动镜像文件在执行过程中,会读取配置文件以确定它应该载入什么Linux内核文件来运行。所有的配置文件都放在启动服务器的/tftpboot/pxelinux.cfg/目录下。
明白了tftpboot目录下的文件和目录的作用就要弄清楚这些文件是从那里获取的,这些文件就在已经安装好的Redhat&Centos系统和安装光盘中。为了便于获取这些文件需要建立一个安装的目录树,具体操作也是很简单的mount上DVD镜像,建议使用DVD镜像当然CD镜像也是可以的,然后可以通过如下的命令复制DVD镜像上的全部的内容到安装目录树中
mkdir /InstallOs #建立安装目录树文件夹 InstallOs
mount -o loop /home/CentOS-5.2-i386-bin-DVD.iso /mnt #将centos的DVD镜像mount
cd /mnt #进入镜像加载目录
tar cf – . |(cd /InstallOs;tar xfp -) #
将DVD镜像文件全部复制到安装目录树文件夹InstallOs
下面就从安装目录树文件夹和当前的系统中获取tftpboot目录中的文件和文件夹
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/ #获取 pxelinux.0文件
cp /InstallOs/isolinux/initrd.img /tftpboot
cp /InstallOs/isolinux/vmlinuz /tftpboot
cp /InstallOs/isolinux/*.Msg /tftpboot
mkdir /tftpboot/pxelinux.cfg #建立pxelinux.cfg目录
cp /InstallOs/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/
mv /tftpboot/pxelinux.cfg/isolinux.cfg /tftpboot/pxelinux.cfg/default
到此已经建立了一个基础的tftpboot目录机构和一个安装目录树。基础工作结束下面进入到tftp和dhcp的服务参数设置过程。具体设置参考下列配置文件:
1、dhcp配置文件cat/etc/dhcpd.conf中的蓝色部分是设置支持BOOTP的参数,注意其中的filename”pxelinux.0″;如果缺少这个信息逻辑将无法获取到安装程序的内核vmlinuz/根文件系统文件initrd.img;红色的部分是dhcp客户端获取的ip子网的信息,注意保持设置的subnet信息的一致性。
#cat /etc/dhcpd.conf
ddns-update-style none;
ddns-updates off;
deny client-updates;
one-lease-per-client false;
allow bootp;
option T150 code 150 = string;
allow booting;
class “pxeclients”{
match if substring(option vendor-class-identifier,0,9) = “PXEClient”;
filename “pxelinux.0”;
next-server 172.16.1.9;
}
subnet 172.16.0.0 netmask 255.255.0.0 {
option routers 172.16.1.9;
option subnet-mask 255.255.0.0;
option nis-domain “telecarenet.cn”;
option domain-name “lvs.local”;
option domain-name-servers 172.16.1.9;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 172.16.1.160 172.16.1.230;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host diskless {
next-server 172.16.1.9;
hardware ethernet 00:02:b3:ee:7b:74;
fixed-address 172.16.1.210;
filename “pxelinux.0”;
}
}
2、tftp配置文件cat/etc/xinetd.d/tftp中的蓝色部分是需要注意的,实际上tftp是一个xinetd的超级守护进程。
#cat /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
启动tftp与dhcp服务
/etc/init.d/xinetd restart #启动tftp服务
/etc/init.d/dhcpd restart #启动dhcp服务
下面要实现的是针对安装目录树的网络发布,简单的是使用nfs配置文件只有一行就可以了,在/etc/exports文件中增加/InstallOs *(ro)这么一行就可以了。但为了这个安装目录树的通用性,要同时将/InstallOs文件夹作为httpd和ftp站点发布出去,方法是在默认安装的apache和vsftp的根目录中建立一个软连接。
ln -s /InstallOs /var/www/html/InstallOS #建立apache的软连接
ln -s /InstallOs /var/ftp/InstallOS #建立vsftp 的软连接
这样就可以提供nfs/ftp/http三种网络安装协议的选择。
附上一个安装目录树的扩展价值,使其成为yum源
cd /InstallOS
rpm -ivh ./Server/createrepo-0.4.11-3.el5.noarch.rpm
createrepo . #创建yum仓库
在主机/etc/yum.repos.d/目中删除现有的文件建立一个新的yum配置文件如下
[InstallOs]
name=InstallOs
baseurl=http://安装服务器的ip地址/InstallOS/
enabled=1
gpgcheck=0
执行 yum clean all然后就可以使用安装目录树的yum源进行软件包的管理了
上述在Linux中的实现同样可以在Windows主机中通过3com的tftpd32工具和Server-u工具实现,重点是要构将tftpboot和安装目录树在Windows主机中构建一份,可以将上面已经构建的文件夹复制到Windows主机中。参见下图中的设置部分要将pxelinux.0填写到Boot File中。将Server-U建立的ftp通过Kickstart整合起来,或者通过linuxaskmethod安装参数选择。
图:tftpd32设置
ok,现在就可以进行pxe的网络引导安装,前提要设置主机使用网卡的pxe进行引导。不过现在的pxe安装服务器还不是很智能,与使用光盘手动安装一步一步的操作是一样的,创新之处就是不用更换光盘。
Kickstart的功能,其主要目的是为了减少安装过程中的人机交互,提高安装效率。使用这种方法,只需事先定义好一个配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
在RedHat&CentOS的系统中提供了system-config-kickstart工具进行脚本文件的配置,如果能够有一个已经设置好的网络、磁盘分区、安装那些软件包的Kickstart脚本文件该多好。实际上在root目录下有一个anaconda-ks.cfg文件就是当前系统安装的Kickstart文件。一般用户可以通过修改这个文件,实现多个相同配置的主机脚本化安装。对于一个Kickstart文件分为命令部分、软件包选择部分%packages、脚本部分(%pre预安装脚本和%post安装后脚本),对于Kickstart文件,命令部分的语言、安装方式、设备规格、键盘设置、引导装载程序配置这些是不能缺少的。anaconda-ks.cfg中蓝颜色不会是磁盘分区信息,此文件显示的是从CD介质进行安装,并在安装过程中设置了网络参数信息,并可以看到安装后的软件包组信息,具体是那装了那些rpm文件需要看root帐户的根文件夹下的install.log文件。
cat anaconda-ks.cfg
# Kickstart file automatically generated by anaconda.
#以下的内容是kickstart文件的命令部分主要设置安装方式、语言、键盘、 引导装载程#序配置等不可缺少的信息
install
cdrom
lang en_US.UTF-8
keyboard us
xconfig –startxonboot
network –device eth0 –bootproto static –ip 192.168.1.59 –netmask 255.255.255.0 –gateway 192.168.1.1 –nameserver 221.11.12.14 –hostname tes
rootpw –iscrypted $1$aKhtFLuj$gn/LxPNxVXUekzLcgAnJz1
firewall –enabled –port=22:tcp
authconfig –enableshadow –enablemd5
selinux –enforcing
timezone –utc Asia/Shanghai
bootloader –location=mbr –driveorder=sda –append=”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
#clearpart –linux –drives=sda
#part /boot –fstype ext3 –size=100 –ondisk=sda
#part pv.2 –size=0 –grow –ondisk=sda
#volgroup VolGroup00 –pesize=32768 pv.2
#logvol swap –fstype swap –name=LogVol01 –vgname=VolGroup00 –size=512 –grow –maxsize=1024
#logvol / –fstype ext3 –name=LogVol00 –vgname=VolGroup00 –size=1024 –grow
%packages#此部分开始是系统安装的软件包的选择部分
@editors
@text-internet
@gnome-desktop
@dialup
@core
@base
@base-x
@graphics
@printing
@graphical-internet
device-mapper-multipath
xorg-x11-server-Xnest
libsane-hpaio
-sysreport
关于Kickstart配置的具体选项可以参考Redhat提供的Installation_Guide文档,其中有详细的描述和介绍。
文档Redhat网站下载地址如下:
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/zh-CN/pdfs/Installation_Guide.pdf
文档Centos网站下载地址如下:
http://www.centos.org/docs/5/html/5.2/pdf/Installation_Guide.pdf
上述事例中的anaconda-ks.cfg文件中没有使用%post部分脚本,故此在安装完成的系统上出IP地址信息设置完成,任何服务器上的配置都需要一步一步的操作完成,这个方式对于一个群集站点的部署来说是很不理想的。通过使用%post安装后的脚本,可以通过默认的shell脚本语法实现文件的下载、软件包的编译等工作,从而是安装后的主机可以直接投入到使用中,减少准备时间。以下是一个%post脚本事例,通过此段代码可以完成在PXE安装阶段安装heartbeat-2.1.4,当然也可以从ftp上将heartbeat-2.1.4需要的配置文件下载到指定的目录下,以节省配置时间。只要有了脚本可以完成很多想象的的事情!至于能够作什么只有管理员们自己在工作中慢慢体会了。
%post
cd /usr/src/
wget ftp://172.16.1.19/libnet.tar.gz
wget ftp://172.16.1.19/heartbeat-2.1.4.tar.gz
tar -xvf libnet.tar.gz
cd libnet
./configure;make;make install;cd ..
tar -xvf heartbeat-2.1.4.tar.gz
cd heartbeat-2.1.4
./ConfigureMe configure;make;make install;
安装过程究竟要安装那些软件包合适,不能完全通过已安装系统的anaconda-ks.cfg文件获得,RedHat&CentOS提供的system-config-kickstart配置工具提供了一个便捷的选择选择方式,不过限于Redhat目前的商业的授权问题,可以通过Centos对应的版本进行软件包的选择,具体如下图所示:
图:system-config-kickstart加载
图:system-config-kickstart配置软件包
以下是一个RHEL5.3&Centos5.2的可用的软件包组的清单,可以工具自己的需要选择。其中蓝色部分为当前版本能够提供的全部的软件包组名称。
#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth –useshadow –enablemd5
# System bootloader configuration
bootloader –location=mbr
# Partition clearing information
clearpart –none
# Use graphical install
graphical
# Firewall configuration
firewall –enabled
# Run the Setup Agent on first boot
firstboot –disable
# System keyboard
keyboard us
# System language
lang en_US
# Installation logging level
logging –level=info
# Use CDROM installation media
cdrom
# SELinux configuration
selinux –enforcing
# System timezone
timezone America/New_York
# Install OS instead of upgrade
install
# X Window System configuration information
xconfig –defaultdesktop=GNOME –depth=8 –resolution=640×480
%packages
@server-cfg
@base-x
@gnome-desktop
@ftp-server
@legacy-software-development
@development-libs
@base
@x-software-development
@sound-and-video
@mail-server
@network-server
@gnome-software-development
@admin-tools
@kde-software-development
@printing
@web-server
@mysql
@openfabrics-enterprise-distribution
@development-tools
@chinese-support
@Java-development
@legacy-network-server
@system-tools
@kde-desktop
@legacy-software-support
@sql-server
@virtualization
@graphical-internet
@cluster-storage
@text-internet
@ruby
@office
@games
@dialup
@smb-server
@authoring-and-publishing
@graphics
@clustering
@emacs
@java
@dns-server
@engineering-and-scientific
@editors
@news-server
当然这个system-config-kickstart配置工具并不局限于软件包的选择,可以设置一个Kickstart文件的命令、软件包选择、脚本等全部的信息。
结合anaconda-ks.cfg安装配置文件和system-config-kickstart配置工具可以定制出特定服务器的安装ks文件,不过不同功能的服务器众多的ks配置文件该如何对用起来呢?是特定的主机可以识别相应的ks配置文件而不出现错误呢?这个就要说说位于tftpboot文件夹下的pxelinux.cfg的作用,这个pxelinux.cfg文件夹就是根据主机的MAC地址对用的配置文件名称识别具体的主机,从而实现特定主机使用相应的ks配置文件完成PXE的安装及系统的配置。
默认PXE配置写入/tftpboot/pxelinux.cfg/default中。当计算机在PXE期间接收到DHCP地址时,就用特定顺序搜索/tftpboot/pxelinux.cfg下的配置文件,第一个找到的文件被用作请求计算机的启动配置。搜索顺序的确定方法是:优先搜索以客户端机器的网卡地址命名配置文件(以’01’开头,用’-‘(dash)分隔,用小写字母表示 MAC地址),并把请求DHCP地址转换成8个16进制数字,通过扩展子网对配置目录搜索第一个匹配的文件名(每一次搜索后从右到左删除一位数字),最后使用default这个默认的配置文件。这个是标准的解释不过是不是很麻烦还要进行一个进制转换的操作,不过计算机底层只是别这个没有办法的呀。
例如,网卡的MAC地址是88:99:AA:BB:CC:DD而IP地址是192.0.2.91,客户会按照如下顺序尝试配置文件名,其中IP地址为192.0.2.91,转换为十六进制数是C000025B
/ftfpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/ftfpboot/pxelinux.cfg/C000025B
/ftfpboot/pxelinux.cfg/C000025
/ftfpboot/pxelinux.cfg/C00002
/ftfpboot/pxelinux.cfg/C0000
/ftfpboot/pxelinux.cfg/C000
/ftfpboot/pxelinux.cfg/C00
/ftfpboot/pxelinux.cfg/C0
/ftfpboot/pxelinux.cfg/C
/ftfpboot/pxelinux.cfg/default
所以为了优先使每台安装的主机都匹配上ks文件就需要获取主机的MAC地址并定义好网卡地址命名配置文件。
网卡的MAC地址是88:99:AA:BB:CC:DD的网卡地址命名配置文件01-88-99-aa-bb-cc-dd
#cat 01-88-99-aa-bb-cc-dd
default linux
label linux
kernel vmlinuz
append ip=192.168.1.214 netmask=255.255.255.0 gateway=192.168.1.100 ks=http://192.168.1.100:/InstallOs/webserver1.cfg initrd=initrd.img
其中红色部分的作用对于一些较新型号的兼容网卡是很有意义的可以避免无法获取IP地址而终止安装过程的问题。
这样的主机安装和配置过程只需要一台PXElinux安装服务器就可以解决问题,安装之前需要获知的即使主机的MAC地址,这个应该很简单,商业的服务器的说明书中都是带有网卡MAC地址说明的,当然也是可以通过其他途径获得。而且这个PXE安装服务器可以便携使用到笔记本电脑的windows环境中,之需要将配置好的ks配置文件放置在使用Serve-U的ftp的目录下就可以修改pxelinux.cfg中的文件配置完成定制操作。
本文作为系列独辟蹊径网络安装的系列文章的第三篇,希望对Linux用户能够有所提示和启发,欢迎就相关问题进行交流。
作者简介:CU网友kns1024wh,目前从事Linux群集方面的具体工作,之前做过多年的IT技术支持、MCT讲师、及REDFLAG的技术合作,技术专长群集、unix主机、AD部署等,您可以通过电子邮件lvsheat@qq.com或者Chinaunix社区与他取得联系。