《构建高可用Linux服务器 第3版》—— 1.1 使用PXE+DHCP+Apache+Kickstart无人值守安装CentOS 5.8 x86_64

本节书摘来自华章出版社《构建高可用Linux服务器 第3版》一 书中的第1章,第1.1节,作者:余洪春 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1 使用PXE+DHCP+Apache+Kickstart无人值守安装CentOS 5.8 x86_64

CentOS 5.8 x86_64的安装方法挺多的,最常见的有光盘安装、Kickstart无人值守安装、优盘安装及ISO硬盘安装等。现阶段的工作由于需要大规模将CentOS 5.8 x86_64系统应用于集群环境,所以这种无人值守安装的方法主要用于在公司内网批量安装新服务器系统,这种方法极大地简化了用光盘重复安装CentOS 5.8 x86_64的过程,再加上通过应用分布式自动化运维工具Puppet进行批量部署,达到了自动化运维的目的,避免了重复性劳动,极大地提高了工作效率。

首先,我们来介绍一下与之相关的原理和概念。

1.什么是PXE

严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装系统的计算机中包含一个PXE支持的网卡(NIC),即网卡中必须有PXE Client。PXE(Pre-boot Execution Environment)协议可以使计算机通过网络启动。此协议采用的是C/S结构,即大家熟知的客户机和服务器结构,其中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上下载所需的文件了。

2.什么是Kickstart

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用这些参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。

3.PXE+Kickstart的安装条件和详细步骤

执行PXE+Kickstart安装需要的设备为:

DHCP服务器。

TFTP服务器。

Kickstart所生成的ks.cfg配置文件。

一台存放系统安装文件的服务器,如NFS、HTTP或FTP服务器。

一台带有PXE支持网卡的主机。

系统环境介绍如下:服务器系统为CentOS 5.8 x86_64,IP为192.168.11.29。由于是最小化安装的,我们在后面要用到system-config-kickstart工具,它必须依赖于X Windows,所以我们要提前安装好X Windows及GNOME并重启系统。

安装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无人值守安装CentOS 5.8了,安装的步骤如下。

1)首先下载CentOS5.8 x86_64光盘ISO文件至/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

CetnOS 5.8 x86_64系列已默认安装Apache,我们可以用命令看下其版本号,如下所示:

rpm-q httpd

命令显示结果如下所示:

httpd-2.2.3-65.el5.centos

2)接下来复制光盘ISO文件下的所有内容(文件和文件夹)到/var/html/www(此目录为Apache默认DocumentRoot目录)下,无论是红帽系统还是CentOS 5.8系统,如果是最小化安装,基本上第一张DVD光盘文件就足够了,复制命令如下所示:

cp-rf /mnt/cdrom/* /var/html/www/

3)安装tftp-server,并启用tftp服务,同时启动xinetd进程,步骤如下所示。

a)我们用命令安装tftp-server,命令如下:

yum-y install tftp-server

b)接着修改/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

c)接着重启xinetd进程,命令如下所示:

service xinetd restart 

4)配置支持PXE的启动程序(注意:前面已经将CentOS 5.8 x86_64第一张光盘的内容复制到/var/www/html目录中了,所以只要从/var/www/html目录中复制需要的文件就行了)。

a)建立tftpboot文件夹,命令如下所示,若该文件夹已经存在则不用创建:

mkdir -p /tftpboot

b)复制pxelinux.0文件至tftpboot文件夹中,命令如下所示:

cp /usr/share/syslinux/pxelinux.0 /tftpboot

c)把DVD光盘上的/image/pxeboot/initrd.img和vmlinuz复制到/tftpboot/中,命令如下所示:

cp /var/www/html/images/pxeboot/initrd.img /tftpboot

cp /var/www/html/images/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)在上一个步骤,即f)中,暂时不要修改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而导致DHCP服务器没有IP地址release的情况。

6)用yum工具自动安装Kickstart,同时配置system-config-kickstart。

a)首先我们需要安装Kickstart工具包,在CentOS 5.8 x86_64最小化安装系统时,此软件包默认没有安装,yum安装命令如下所示:

yum -y install system-config-kickstart

b)在GNOME环境下配置Kickstart,命令如下所示:

system-config-Kickstart

运行上面的命令后可以对系统的一些基本配置进行设置,例如选择时区、设置root密码等。

c)接下来便要进行安装了,建议选择httpd安装,切记不要输入任何账号,而是采用匿名安装。

在安装过程中,根据引导选择安装选项,不需要做更改。

d)Kickstart会让我们选择需要批量安装的CentOS 5.8分区信息,我们创建四个分区,即/、/boot、/data和swap。

e)在进行网络配置时,使用动态分配地址。

f)设置显示配置时可以按照我们的习惯进行。

g)大家可以根据实际的工作需求来选择自己需要的软件包,由于服务器安装后会根据用途不一而安装各种不同的软件包,所以建议大家这里选择最小化安装。

h)其他都选择默认设置,不需要修改。

i)最后将生成的文件ks.cfg保存到/var/www/html下。ks.cfg文件的配置方法为自动化无人值守安装的重点和难点,此文件稍有配置不当就需要人为干预,如果大家遇到问题,建议参考我下面的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=51200

part /boot --bytes-per-inode=4096 --fstype="ext3" --size=128

part swap --bytes-per-inode=4096 --fstype="swap" --size=10000

part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1



%packages

@base

@development-libs

@development-tools

此配置过程中的重点和难点说明如下:

分区操作按照目前线上分区来操作,即分成/、/boot、/data及swap四个分区,这里的数值是以MB为单位的,大家可以根据自己服务器的实际情况来规划;其中/data分区是存放数据的,我们这里用--grow --size=1参数来将其余的剩余空间全部分配给/data分区。

key --skip,如果是红帽RHEL系统,此选项可以跳过输入序列号过程;如果是CentOS 5.8系统,则可以不保留此项内容。

reboot,此选项必须存在,也必须按照前面提到的方式设定位置,否则Kickstart显示一条消息,并等待用户按任意键后才重新引导,此问题是很多读者朋友在论坛上发言提问的,我在实验过程中也遇到了此问题,建议多做几次实验。

clearpart --all --initlabel,此命令必须添加,否则系统会让用户手动选择是否清除所有数据,这就需要人为干预了,从而导致自动化过程失败。

其他方面的选项较容易看懂,这里不再重复。

9)启动Kickstart需要的所有服务器后,至此自动化安装系统的过程就完成了,接下来我们就可以将内网机柜中的几十台机器全自动同时安装CentOS 5.8 x86_64系统了。服务器端对应服务启动命令如下:

Service httpd start

chkconfig httpd on

service dhcpd start

chkconfig dhcpd on

service xinetd restart 

系统完成最小化后安装后,大家可以根据自己公司的实际情况来进行系统优化。这里用到的最小化优化脚本为init.sh,这个脚本还可以让Puppet服务器进行推送。init.sh脚本的内容如下所示:

#/bin/bash

#add the epel repo

cd /usr/local/src

wget http://mirrors.ustc.edu.cn/fedora/epel//5/x86_64/epel-release-5-4.noarch.rpm 

rpm -ivh epel-release-5-4.noarch.rpm 

#add the rpmforge repo

cd /usr/local/src

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm



#yum install sysstat 

yum -y install gcc gcc-c++ vim-enhanced unzip unrar sysstat 



#set the ntp

yum -y install ntp

echo "01 01 ***/usr/sbin/ntpdate ntp.api.bz >> /dev/null 2>&1" >> /etc/crontab

ntpdate ntp.api.bz

service crond restart



#set the file limit 

ulimit -SHn 65535 

echo "ulimit -SHn 65535" >> /etc/rc.local

cat >> /etc/security/limits.conf << EOF

*      soft  nofile    60000

*      hard  nofile    65535

EOF



#tune kernel parametres

cat >> /etc/sysctl.conf << EOF

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keepalive_time = 1200

net.ipv4.ip_local_port_range = 1024 65535

EOF

/sbin/sysctl -p



#set the control-alt-delete to guard against the misuse

sed -i 's@ca::ctrlaltdel:/sbin/shutdown -t3 -r now@#ca::ctrlaltdel:/sbin/shutdown -t3 -r now@' /etc/inittab 



#disable selinux

sed -i 's@SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config



#ssh setting 

sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' /etc/ssh/sshd_config 

sed -i 's@#UseDNS yes@UseDNS no@' /etc/ssh/sshd_config

service sshd restart



#disable ipv6

echo "alias net-pf-10 off" >> /etc/modprobe.conf

echo "alias ipv6 off" >> /etc/modprobe.conf

echo "install ipv6 /bin/true" >> /etc/modprobe.conf 

echo "IPV6INIT=no" >> /etc/sysconfig/network

sed -i 's@NETWORKING_IPV6=yes@NETWORKING_IPV6=no@' /etc/sysconfig/network 

chkconfig ip6tables off 



#vim setting 

echo "syntax on" >> /root/.vimrc 

echo "set nohlsearch" >> /root/.vimrc 



#chkconfig off services

chkconfig bluetooth off 

chkconfig sendmail off 

chkconfig kudzu off 

chkconfig nfslock off 

chkconfig portmap off 

chkconfig iptables off 

chkconfig autofs off 

chkconfig yum-updatesd off 



#reboot system 

Reboot

注意:

#tune kernel parametres选项:为内核优化部分,在这里我只做了基础处理,大家有需求可以自行修改,记住:一切以系统稳定为最高原则。

#vim setting选项:为vim的个性化配置,如果想vim语法高亮,则必须安装vim-enhanced包,另外,在使用vim的搜索功能时,搜索选中内容为高亮,感觉不是特别舒服,所以我这里用了set nohlsearch选项,如果大家不介意此项功能,则不需要添加此语句。

#disable ipv6选项:我在测试时发现,在CentOS 5.8 x86_64系统下,如果不添加install ipv6 /bin/true语句到/etc/modprobe.conf文件里,是无法关闭ipv6选项的,而测试CentOS 5.5或5.6时不添加此句却可以顺利关闭ipv6,这点请大家注意。

当然,最后要reboot系统让此配置生效。

以上就是用PXE+DHCP+Apache+Kickstart无人值守安装CentOS 5.8 x86_64的完整步骤,如果在工作中有此需求的话,可以结合文档进行相关操作,如果是在公司内部局域网中操作,建议单独划分出一个网段,以免对公司内部的开发环境或办公环境造成影响。

上一篇:Centos 通过 Nginx 和 vsftpd 构建图片服务器


下一篇:SAP Cloud for Customer使用postman更新user profile的web service