分类:
2012-11-09 10:57:53
一. 介绍:
网上有很多关于kickstart+pxe+dhcp+vsftp/http实现centos/rhel全自动部署的文章,因此关于原理性的东西我这里就不写了,只说说我的理解和配置过程中遇到的错误以及解决办法。
首先简单介绍下kickstart全自动部署的实现流程:
第一步:加电,并选择从网卡启动。
第二步:主机从dhcp server获取ip地址,并得到tftp服务器的ip地址和pxe名。(由dhcp.conf中的filename "/pxelinux.0";和next-server 192.168.168.1;两项指定。)
第三步:主机从tftp服务器下载pxelinux相关文件,并启动到安装方式选择界面,也就是“boot:”提示的地方。
第四步:最后主机从vsftp server下载到自动应答安装提问的ks.cfg文件以及RHEL或centos的源目录树。
我是在win7+vmware6.5+centos5.3(final)的环境下完成的实验:
1台装好的centos5.3模拟右边的服务器,一台新创建的虚拟机(刚分配了虚拟的硬件)模拟左边的待安装主机,两者通过vmnet4虚拟网络连接,模拟直连或通过网络连接的服务器和客户端。
必要的条件:
Dhcp server、tftp server、vsftp server以及由KickStart所生成的ks.cfg配置文件,最后当然是带有一个 PXE 支持网卡的将安装的主机。
二. 安装
下面就根据以上图示进行相应服务器的安装(上述3个服务其实都装在一台centos5.3的虚拟机中)
1.安装DHCP服务:
[root@lfs ~]# yum install dhcp –y
#因为yum会自动检查系统中是否已经安装了dhcp server,如果已安装,则会比较版本,如果有更新的版本,则会升级安装。
2、生成主配置文件/etc/dhcpd.conf:
ddns-update-style interim;
ignore client-updates;
#add for pxe
filename "/pxelinux.0";
next-server 192.168.168.1;
subnet 192.168.168.0 netmask 255.255.255.0 {
# --- default gateway
option routers 192.168.168.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.60.254;
option time-offset -18000
range dynamic-bootp 192.168.168.128 192.168.168.254;
default-lease-time 21600;
max-lease-time 43200;
#配置文件每行末尾都应加上分号(;),否则语法错误,dhcp server无法启动。
#启动DHCP服务:
[root@lfs ~]# /etc/init.d/dhcpd start
2. 安装Vsftp服务:
[root@lfs ~]# yum install vsftpd -y
[root@lfs ~]# /etc/init.d/vsftpd start
-----------------------------------------------
3. 安装tftp服务,并复制PXE启动时所需要的文件:
[root@lfs ~]# yum install tftp-server -y
[root@lfs ~]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
[root@lfs ~]# mkdir /tftpboot/pxelinux.cfg
[root@lfs~]#cp /cdrom/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
[root@lfs ~]# cp /cdrom/images/pxeboot/initrd.img /tftpboot/
[root@lfs ~]# cp /cdrom/images/pxeboot/vmlinuz /tftpboot/
#修改tftp的配置文件,并启动tftp服务:
[root@lfs ~]#vim /etc/xinetd.d/tftp
#我这里只是简单的把”disable =yes”改成了”disable =no”
#然后启动xinetd服务,因为tftp服务是由xinetd统一管理的
[root@lfs ~]#/etc/init.d/xinetd start
#修改/tftpboot/pxelinux.cfg/default文件
[root@lfs ~]# vim /tftpboot/pxelinux.cfg/default
default ks
timeout 6
label ks
kernel vmlinuz
append ks initrd=initrd.img ks=ftp://192.168.168.1/ks.cfg
#这里我只把修改过的行粘贴了出来。这里要注意,default标签后面跟的名称一定和label标签后的名称一样,安装程序才能自动跳转,第一次改的时候,我没有注意到,结果到了boot:提示符就停住了,不过可以进行交互式的安装,呵呵。
#另外,当以后系统出现故障时,也可以直接从pxe引导,到了boot:提示符,输入linux rescue就可以直接从网络上进入救援模式进行系统修复了。
.生成ks.cfg安装配置文件:
#由于我的linux没有安装x或gnome环境,所以我是参考着rhel5和centos5的手册,直接来修改的anaconda-ks.cfg文件。
[root@lfs ~]#cp anaconda-ks.cfg{,.bak}
#修改完后将文件拷贝到vsftp的根目录
[root@lfs ~]# cp ks.cfg /var/ftp/
#以下是我的ks.cfg文件的内容:
########install linux in real text method#########
cmdline
install
lang en_US
keyboard us
network --bootproto=dhcp --device=eth0 --onboot=on --hostname=cent_pxe1
######use the ftp method to install the linux###########
url --url=ftp://192.168.168.1/pub
rootpw --iscrypted **********************
authconfig --enableshadow --enablemd5
firewall --disabled
firstboot --disable
selinux --disabled
timezone --utc Asia/Shanghai
##########just use when install rhel###########
#key –skip
####part the disk######
bootloader --location=mbr --driveorder=sda,hda
clearpart --all --initlabel
part /boot --fstype=ext3 --size=200 --asprimary
part swap --fstype=swap --recommended
part / --fstype=ext3 --grow --size=1
reboot
####install packages#########
%packages
@development-libs
@editors
@text-internet
@core
@base
@admin-tools
@development-tools
kexec-tools
device-mapper-multipath
imake
%post
sed -i -e 's/#\(set bell-style\).*/\1 none/' /etc/inputrc
#########configure the dns file####################
sed -i -e '1i\nameserver 202.181.202.140\nnameserver 8.8.8.8' -i -e '1,$d' /etc/resolv.conf
########make the resolv.conf unchangeable###########
chattr +i /etc/resolv.conf
##############update the time#############
echo -n "*/15 * * * * /usr/sbin/update 210.72.145.44 > /dev/null 2>&1" >> /var/spool/cron/root
cp /usr/share/vim/vim70/vimrc_example.vim /root/.vimrc
#########configure the vim editor##############
sed -i -e '/set mouse/s/^/" /' /root/.vimrc
sed -i -e '/set mouse/a\set vb\n' /root/.vimrc
sed -i -e "/alias mv/a\alias vi='vim'" /root/.bashrc
#######kill the useless services############
for sers in `ls /etc/rc3.d/S* | cut -c 15-`
do
echo $sers
case $sers in
crond | irqbalance | microcode_ctl | network | random | sendmail | sshd | syslog | local | xinetd )
echo "Skip these services!"
;;
*)
echo "change $sers to off"
chkconfig --level 235 $sers off
service $sers stop
;;
esac
done
#一些比较重要的选项的解释:
##之所以用cmdline代替text,是因为cmdline模式可以将安装过程中的步骤完全显示在输出中。
##Install表示是全新安装,而不是update
## url --url=ftp://192.168.168.1/pub指定系统源目录树(我这里使用的ftp方式)。如果是http方式,则应该是url=http://*****
## network选项指定待安装主机的网卡参数,以及主机名等。
##rootpw 指定root用户的密码;iscrypted表示密码是加密过的。
##reboot选项表示系统安装完毕后自动重启,必须要放在%packages部分之前,上一部分之后,不然会出错。
##%packages部分就是要安装的软件包,5.3版本会自动解决依赖问题。
##最后的%post部分就是做一些个性化的配置。例如我这里的关闭beep报警、设置resolv.conf等。
三.故障处理:
1.python报错:
File "/usr/bin/anaconda", line 1006, in ?
anaconda.intf.run(anaconda)
OSError: [Errno 2] No such file or directory
#这里只截取了错误的最后部分:
刚开始我以为是python版本过低或者anaconda程序有问题造成的,于是我就把python和anaconda都修复升级了一下,结果问题依旧。最后请出无敌的google,一搜终于发现问题了,原来是需要安装linux的虚拟机内存太小(只分配了256M)。
2.kickstart中%post部分无法执行:
报以下错误:
File "/usr/bin/anaconda", line 1006, in ?
anaconda.intf.run(anaconda)
IOError: [Errno 2] No such file or directory: '/var/log/post_install.log'
后来发现是因为我参考网上文档在%post后面加上了--log=/var/log/post_install.log 但是在rhel5.3和centos5.3中已经不存在这个选项了,所以出现问题。
3.%post部分中修改/etc/resolv.conf文件不生效:
Post部分的命令都已经生效了,但就是涉及resolv.conf文件的修改不成功。最后发现是由于开机的时候运行dhclient程序造成。于是做了个简单的改变:
[root@lfs ~]# chattr +i /etc/resolv.conf