由于以前的工做须要搭建红帽实验室环境,因为机器数量比较多,全部须要批量自动化无人值守安装系统,因此我尝试使用RHEL5+PXE+DHCP+Apache+Kickstart安装了RHCE5.1 i386实验室环境,并取得了成功,不过过程比较漫长,因此我特意记录下PXE+DHCP+Apache+Kickstart无人值守安装的过程。另外,我在博客发表了相应的文章,不少热心的读者根据文章内容已成功批量安装了红帽RHEL系统或CentOS5.x,并提出了许多宝贵的意见,在这里表示感谢。现阶段,因为须要大规模应用CentOS5.8 x86_64系统用于集群环境,因此将此方法主要用于在公司内网批量安装新服务器系统,这极大地简化了用光盘重复安装CentOS5.8 x86_64的过程,再加上分布式自动化运维工具puppet进行批量部署,达到了自动化运维的目的,避免了重复性劳动,极大的提升了工做效率。
html
首先,咱们来介绍一下与之相关的原理和概念。node
1. 什么是PXElinux
严格来讲,PXE 并非一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必需要有 PXE Client。PXE (Pre-boot Execution Environment)协议可使计算机经过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,而后由 PXE Client 将放置在远端的文件经过网络下载到本地运行。运行 PXE 协议须要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,因为是给 PXE Client 分配 IP 地址,因此在配置 DHCP 服务器时须要增长相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就能够经过 TFTP 协议到 TFTP Server 上下载所需的文件了。windows
2. 什么是Kickstartbash
Kickstart是一种无人值守的安装方式。它的工做原理是在安装过程当中记录典型的须要人工干预填写的各类参数,并生成一个名为 ks.cfg的文件。若是在安装过程当中(不仅局限于生成Kickstart安装文件的机器)出现要填写参数的状况,安装程序首先会去查找 Kickstart生成的文件,若是找到合适的参数,就采用所找到的参数;若是没有找到合适的参数,便须要安装者手工干预了。因此,若是Kickstart文件涵盖了安装过程当中可能出现的全部须要填写的参数,那么安装者彻底能够只告诉安装程序从何处取ks.cfg文件,而后就去忙本身的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。服务器
3. PXE + Kickstart的安装条件和详细步骤网络
执行PXE+Kickstart安装须要的设备为:运维
DHCP 服务器。dom
TFTP 服务器。socket
Kickstart所生成的ks.cfg配置文件。
一台存放系统安装文件的服务器,如 NFS、HTTP 或 FTP 服务器。
一个带有 PXE 支持网卡的主机。
系统环境介绍以下:
服务器系统为CentOS5.6 x86_64,IP为192.168.11.29(此服务器并不是必定要限定为CentOS5.8 x86_64系统),因为是最小化安装的,咱们在后面要用到system-config-kickstart工具,它必须依赖于X windows,因此咱们要提早安装好X windows及gnome并重启系统,步骤以下所示:
先装X windows和GNOME桌面环境,命令以下所示:
yum -y groupinstall 'X Window System' yum -y groupinstall 'GNOME Desktop Environment'
而后修改/etc/inittab文件并重启服务器,使其运行在图形模式下,主要修改文件内容以下所示:
id:5:initdefault:
重启服务器命令以下:
reboot
完成上述的准备工做后,PXE+DHCP+Apache+Kickstart无人值守安装CentOS5.8安装的步骤以下:
(1)咱们先下载CentOS5.8 x86_64光盘至/usr/local/src下,并挂载至/mnt/cdrom目录下,并确认系统已安装好httpd服务,以下:
cd /usr/local/src wget http://mirror.neu.edu.cn/CentOS/5.8/isos/x86_64/CentOS-5.8-x86_64-bin-DVD-1of2.iso mkdir –p /mnt/cdrom
接下来咱们挂载光盘ISO文件至/mnt/cdrom目录下,以下命令:
mount -o loop CentOS-5.8-x86_64-bin-DVD-1of2.iso /mnt/cdrom
CetnOS5.x x86_64系列已默认安装Apache,咱们能够用命令看下其版本号,以下所示:
rpm -q httpd
命令显示结果以下所示:
httpd-2.2.3-65.el5.CentOS
(2)接下来咱们复制光盘下的全部内容(文件和文件夹)到/var/html/www(此目录为Apache默认DocumentRoot目录)下,不管是红帽系统仍是CentOS 5.x系统,若是是最小化安装,基本上第一张DVD光盘文件就够了,复制命令以下所示:
cp -rf /mnt/cdrom /var/html/www
(3)安装 tftp-server,并启用tftp服务,同时启动xinetd进程,步骤以下所示。
1.咱们用命令安装tftp-server,命令以下:
yum -y install tftp-server
2.接着修改/etc/xinetd.d/tftp文件,将disable的值由yes变为no,内容以下所示:
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 }
3.接着重启xinetd进程,命令以下所示:
service xinetd restart
(4)配置支持PXE的启动程序(注意:前面已经将CentOS5.8 x86_64第一张光盘的内容复制到/var/www/html目录中了,因此须要的文件只须要从/var/www/html目录中复制就好了)。
a) 创建tftpboot文件夹,以下所示,若该文件夹已经存在则不用创建。
mkdir -p /tftpboot
b) 复制pxelinux.0文件至tftpboot文件夹中,以下所示。
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
c) 把DVD光盘上的/p_w_picpath/pxeboot/initrd.img和vmlinux复制到/tftpboot/中,以下所示。
cp /var/www/html/p_w_picpaths/pxeboot/vmlinuz /tftpboot
d) 复制DVD光盘上的isolinux/*.msg到/tftpboot目录下,以下所示:
cp /var/www/html/isolinux/*.msg /tftpboot/
e) 在tftpboot中新建一个pxelinux.cfg目录:
mkdir pxelinux.cfg
f) 将isolinux目录中的isolinux.cfg复制到pxelinux.cfg目录中,同时更改文件名称为default,命令以下所示:
cd pxelinux.cfg cp /var/www/html/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
g) 在上一个步骤,即第6点中,暂时不要修改default文件,进行到这一步时,虽然已经能够经过网络来引导并手动安装Kickstart了,可是因为这里讨论的是无人值守安装,因此先不修改这个default文件。
(5)安装dhcp服务,同时修改以下配置:
yum –y install dhcp
而后复制配置模板文件到指定的目录中,并从新命名。
cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
接着修改/etc/dhcpd.conf配置文件,文件最后修改内容以下所示:
ddns-update-style interim; ignore client-updates; next-server 192.168.11.29; filename "/pxelinux.0"; subnet 192.168.11.0 netmask 255.255.255.0 { option routers 192.168.11.1; option subnet-mask 255.255.255.0; option nis-domain "cn7788.com"; option domain-name "cn7788.com"; option domain-name-servers 192.168.11.252; option time-offset -18000; # Eastern Standard Time range dynamic-bootp 192.168.11.34 192.168.11.159; default-lease-time 21600; max-lease-time 43200; }
最后启动dhcp服务:
service dhcpd start
注:若是机器数量过多的话,注意dhcp服务器的地址池,不要由于耗尽IP而致使dhcpd服务器没有IP地址release状况。
(6)用yum工具自动安装Kickstart,同时配置system-config-kickstart。
a) 首先咱们须要安装Kickstart这个工具包,在CentOS最小化安装系统时,此软件包并无默认安装,yum安装命令以下所示:
yum –y install system-config-kickstart
b) 在gnome环境下配置Kickstart,命令以下所示:
system-config-kickstart
运行上面的命令后能够对系统的一些基本配置进行设置,例如选择时区、设置root的密码等。
c) 接下来便要进行安装了,建议选择httpd安装,切记不要输入任何帐号,而是采用匿名安装。
在安装过程当中,根据引导选择安装选项,不须要作更改。
d) Kickstart会让咱们选择须要批量安装的CentOS5.8分区信息,按照上一节所介绍的CentOS5.5 x86_64的安装方法,咱们建立四个分区,即/、/boot、/data和swap分区。
e) 在进行网络配置时,我使用的静态分配地址(动态一样如此),这里跟前面进行光盘安装是同样的。
f) 设置显示配置时能够按照咱们的习惯选择。
g) 关于软件包的选择,你们能够根据实际的工做需求来选择本身须要的软件包,因为服务器安装后用途都是不同的,建议你们这里选择最小化安装。
h) 其余都选择默认设置,不须要修改。
i) 最后将生成的文件ks.cfg保存到/var/www/html下,此为自动化无人值守安装的重难点,此文件稍有配置不当的话就会须要人为干预了,若是你们遇到问题,建议参考我下面的ks.cfg配置文件。
(7)修改/tftpboot/pxelinux.cfg/default文件,指定读取ks.cfg的方法,即修改文件第一行内容,改动后文件第一行内容以下所示:
default text ks=http://192.168.11.29/ks.cfg
另外,也建议将timeout时间由原先的600改成1,timeout时间是引导时等待用户手动选择的时间,设为“1”可直接引导。
(8)/var/www/html/ks.cfg文件内容以下所示(此内容是整个实验过程的重难点,请关注):
#platform=x86, AMD64, or Intel EM64T #System authorization information auth --useshadow --enablemd5 # System bootloader configuration key --skip bootloader --location=mbr # Partition clearing information clearpart --none # Use graphical install graphical # Firewall configuration firewall --disabled # 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 network installation url --url=http://192.168.11.29/ # Network information network --bootproto=dhcp --device=eth0 --onboot=on reboot #Root password rootpw --iscrypted $1$biw2UUzu$/ZrtUhG9gGGGJn6edgUIQ1 # SELinux configuration selinux --disabled # System timezone timezone --isUtc Asia/Shanghai # Install OS instead of upgrade install # X Window System configuration information xconfig --defaultdesktop=GNOME --depth=8 --resolution=640x480 # Disk partitioning information bootloader --location=mbr --driveorder=sda clearpart --all --initlabel part / --bytes-per-inode=4096 --fstype="ext3" --size=5120 part /boot --bytes-per-inode=4096 --fstype="ext3" --size=128 part swap --bytes-per-inode=4096 --fstype="swap" --size=500 part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1 %packages @base @development-libs @development-tools
此配置过程当中的重难点我这里说明下:
分区操做按照目前线上分区来操做,即分红/、/boot、/data及swap四个分区,其中/data分区是存放数据的,咱们这里用--grow --size=1参数来将其他的剩余空间所有分配给/data分区。
key --skip若是是红帽系统,此选项能够跳过输入序列号过程;若是是CentOS 5.x系列,则能够不保留此项内容;
reboot 此选项必须存在,也必须文中设定位置,否则kickstart显示一条消息,并等待用户按任意键后才从新引导,此问题是不少朋友在论坛上发言提问的,我在实验过程当中也遇到此问题,建议多作几回实验;
clearpart --all --initlabel此条命令必须添加,否则系统会让用户手动选择是否清除全部数据,这就须要人为干预了,从而致使自动化过程失败;
其它方面选项较容易看懂,我这里就再也不重复了。
(9)将Kickstart须要的服务器均启动后,此自动化安装系统的过程就完成了,咱们就能够在内网机柜中全自动同时安装CentOS5.8 x86_64系统了,服务器端启动相应命令以下:
service httpd start chkconfig httpd on service dhcpd start chkconfig dhcpd on service xinetd restart
引伸:相信你们的开发环境应该有很多Xen虚拟机,虽然Xen有自身的模板文件操做,但咱们也能够利用Kickstart的方式快速无人值守安装Xen虚拟机系统,命令以下所示:
virt-install -n vm4 -r 300 -f /data/vm/vm4.img -s 8 -p -l http://192.168.11.29 -x ks=http://192.168.11.29/ks.cfg
因为Xen结合Kickstart并非本文档的重点内容,有兴趣的朋友能够能够自行研究;另外有一点请你们必定要注意:
因为此安装方法太智能化,在网络引导成功之后会自动清除硬盘数据并从新安装新的系统,因此建议你们将此工做区域和网段独立出来,或者在进行完安装工做之后就停用Kickstart服务器,以避免对正常工做的服务器形成没必要要的麻烦。因为我的能力有限,鉴于工做环境的严谨性,欢迎你们我上述文档中一切错误和不合理之处,欢迎来信与我交流,我的邮箱yuhongchun027@163.com。