PXE+KickStart 自动安装Centos4.8
实验时间:2010年11月21日
姓 名:陪你晒星星
实验目的:深入网络安装Linux系统的方法,并可以熟练配置
实验内容:
一般情况下,我们安装采用光驱引导安装程序。但是,如果遇到计算机不带光驱或软驱时,就可以利用PXE安装方式。另外,在大量计算机需要同时安装系统情况下,PXE配合Kickstart安装也是一中高效的工作方式。
1、什么是PXE
严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是要安装的计算机中包含一个PXE支持的的网卡(NIC),即网卡必须有PXEClient.PXE(Per-boot Execution Environment)协议使计算机可以通过网络启动,协议分为client和server端,PXEclient在网卡的ROM中,当计算机引导时,BIOS把PEXclient调入内存执行,由PXEclent将放置在远端的文件通过网络下载到本地运行。
运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器用来给PXEclient(将要安装系统的主机)分配一个IP地址,由于是给PXEclient分配IP地址,所以在配置DHCP服务器是需要增加相应的PXE设置,此外,在PXEclient的ROM中,已经存在了TFTPClient,PXEClient通过TFTP协议到TFTPServer上下载所需的文件。
2、什么是Kickstart
Kickstart 是一种无人值守安装方式。Kickstart的工作原理是通过记录典型的安装过程中所需人工干预编写的各种参数,并生产一个名为ks.cfg的文件;在其后的安装过程总(不只局限于成才Kickstart安装文件的机器)当出现要求填写参数的情况时,安装程序首先去查找Kickstart生产的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预;这样,如果Kickstart文件涵盖了安装过程镇南关出现的所以需要填写的参数时,安装者完全烤烟告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序根据ks.cfg中设置的重启动选项来重启动系统,并结束安装。
3、PXE+Kickstart安装条件
TFTP服务器
Kickstart所生成的ks.cfg配置文件
一台存放系统能够文件的服务器,如NFS,HTTP或FTP服务器
带有一个PXE支持网卡的将安装的主机
详细步骤:
第一步:在PXE-server服务器进行配置文件
1、用secureCRT远程登录到PXE-server(192.168.1.21)主机上,如图:
小插曲:(起初,我始终连接不上,原来是PXE-server这台机子不能ping通我本地的主机,这个问题以前困扰了我很久,还害重装了几次虚拟机,以前在网上找了很多方法都行不通,只有重装后稍微有点效果,后来在配置Linux下用Heartbeat来做双机备份时候,发现了一个非常方便的解决方法,就是将/etc/sysconfig/network进行如下配置:
[root@sev1 ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=sev1.example.com
GATEWAY="192.168.1.1"
GATEWAY="eth0"
ONBOOT=YES
FORWARD_IPV4="yes"
哈哈,终于尝到甜头了~~~~)
2、安装dhcp服务器与tftp服务器
[root@sev1 ~]# rpm -ivh /mnt/CentOS/RPMS/dhcp- 3.0.1 -65.EL4.i386.rpm
warning: /mnt/CentOS/RPMS/dhcp- 3.0.1 -65.EL4.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
Preparing... ########################################### [100%]
1:dhcp ########################################### [100%]
[root@sev1 ~]# rpm -ivh /mnt/CentOS/RPMS/tftp-server-0.39-3.el4.i386.rpm
warning: /mnt/CentOS/RPMS/tftp-server-0.39-3.el4.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
Preparing... ########################################### [100%]
1:tftp-server ########################################### [100%]
[root@sev1 ~]# cp /usr/share/doc/dhcp- 3.0.1 /dhcpd.conf.sample /etc/dhcpd.conf
cp: overwrite `/etc/dhcpd.conf'? y
3、配置dhcpd.conf文件内容
[root@sev1 ~]# vi /etc/dhcpd.conf
########/etc/dhcpd.conf配置文件内容#################
ddns-update-style interim;
ignore client-updates;
allow booting; #定义能够PXE启动
allow bootp; #定义支持bootp
subnet 192.168.1.0 netmask 255.255.255.0 {
# --- default gateway
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 192.168.1.128 192.168.1.254;
next-server 192.168.1.21; #TFTP Server的IP地址
filename "/pxelinux.0"; #pxelinux启动文件位置
default-lease-time 21600;
max-lease-time 43200;
}
注意:(在 /etc/dhcpd.conf 中增加 tftp-server 需要推送给客户端的启动文件(bootstrap):filename "pxelinux.0";因为 tftp 的默认目录是 /tftpboot,所以文件的绝对路径就是: /tftpboot/pxelinux.0";当然也可以指定为其它的路径。另外需要指定 next-server 参数,告诉客户端在获取到 pxelinux.0 文件之后去哪里获取其余的启动文件: next-server 192.168.1.21)
配置完成后,重启DHCP服务,并将它设为开机自启动。
4、配置tftp文件内容
[root@sev1 ~]# vi /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot (添加:-u nobody)
disable = yes (改为:no )
per_source = 11
cps = 100 2
flags = IPv4
}
5、配置PXE文件内容
首先,建立/tftpboot目录,然后将/pxelinux.0拷贝到该文件夹下(/tftpboot/)
[root@sev1 ~]# mkdir /tftpboot/
mkdir: cannot create directory `/tftpboot/': File exists
这里默认就创建了这个文件夹,如果没有就自己建
[root@sev1 ~]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
其次,将引导文件vmlinuz、initrd.img、isolinux.cfg到/tftpboot/目录下
[root@sev1 ~]# cp /mnt/isolinux/
boot.cat initi586.img isolinux.cfg param.msg splash.lss
boot.msg initrd.img memtest rescue.msg vmlinuz
general.msg isolinux.bin options.msg snake.msg vmlzi586
再次,我索性把所以文件都拷贝到/tftpboot/目录下
[root@sev1 ~]# cp /mnt/isolinux/* /tftpboot/
然后,再建立一个存放系统引导文件
[root@sev1 ~]# mkdir /tftpboot/pxelinux.cfg
再然后,这里将引导文件拷贝到/tftpboot/pxelinux.cfg
[root@sev1 ~]# cp /tftpboot/pxelinux.cfg/isolinux.cfg /tftpboot/pxelinux.cfg/
最后,这里将isolinux.cfg改名为default
[root@sev1 ~]# mv /tftpboot/pxelinux.cfg/isolinux.cfg /tftpboot/pxelinux.cfg/default
进行查看修改情况
[root@sev1 ~]# ll /tftpboot/pxelinux.cfg/
total 8
-r-xr-xr-x 1 root root 672 Nov 22 16:58 default
6、配置NFS服务器
首先,建立共享目录
[root@sev1 ~]# vi /etc/exports
##### /mnt 根据实际需要修改,这里是我挂载光驱的目录###########
/mnt 192.168.1.0/24(ro,sync) # sync是将共享目录放在内存中,不保存
其次,导出共享目录
[root@sev1 ~]# exportfs –a
7、启动一系列服务
首先,启动NFS服务器。
[root@sev1 ~]# service nfs start
其次,启动DHCP服务器。
[root@sev1 ~]# service dhcpd start
Starting dhcpd: [ OK ]
然后,启动运行级别服务器。
[root@sev1 ~]# chkconfig --level 345 xinetd on
最后,启动TFTP服务器。
[root@sev1 ~]# chkconfig --level 345 tftp on
第二步:新建一个虚拟机,进行测试
1、新建一个光驱里无内容的名为test虚拟机,如图
2、启动test虚拟机进行测试,如图:
正在寻找PXE-server的ip地址,注意:在虚拟机里,这步要按“ESC”就是“退出”键,在真实的机子,是F12键,选择网卡驱动。
呵呵,测试成功了!!!!!!!!!!!!!!!!!!!!!!!!!!
3、进行安装Centos4.8操作系统,如图:
这里,选择NFS,因为我们的镜像文件存在上面的。
这里,选择动态(DHCP)配置,刚才我已经配置好了这个服务器。
这里,填写我刚才PXE-server的IP地址与镜像文件存放的路径。
下面就是图像化安装系统了,我就不一一用切图演示了。
第三步:配置自动安装系统文件
1、查看安装配置文件
[root@localhost ~]# ll
total 92
-rw-r--r-- 1 root root 1378 Nov 22 20:39 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 Nov 22 20:42 Desktop
-rw-r--r-- 1 root root 58853 Nov 22 20:39 install.log
-rw-r--r-- 1 root root 5160 Nov 22 20:39 install.log.syslog
2、在PXE-server主机上配置KickStart文件,新建一个文件放置控制脚本
[root@localhost ~]# mkdir /disk
[root@sev1 ~]# vi /disk/ks.cfg
# Kickstart file automatically generated by anaconda.
install
nfs --server=192.168.1.21 --dir=/mnt
lang en_US.UTF-8
langsupport --default=en_US.UTF-8 en_US.UTF-8
keyboard us
xconfig --card "VMWare" --videoram 131072 --hsync 31.5-37.9 --vsync 50-70 --resolution 800x600 --depth 16 --startxonboot --defaultdesktop gnome
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$KnL.KIds$//hVMpEtQkG0Afmyo7RZ01
firewall --disabled
selinux --disabled
authconfig --enableshadow --passalgo=md5
timezone Asia/Shanghai
bootloader --location=mbr --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=hda
#part /boot --fstype ext3 --size=100 --ondisk=hda
#part pv.3 --size=0 --grow --ondisk=hda
#volgroup VolGroup00 --pesize=32768 pv.3
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 –grow
(就是这里导致我的全自动安装出错了!!!!!!!!!!!)
(zerombr
clearpart --all --initlabel #如果ks.cfg脚本中不添加该语句,将不能实现自动化安装
text #使用文本方式安装
part /boot --bytes-per-inode=4096 --fstype="ext3" --size=150
part swap --bytes-per-inode=4096 --fstype="swap" --size=512
part / --bytes-per-inode=4096 --fstype="ext3" --grow --size=100)
这是正确的安装方法
%packages
@ editors
@ emacs
@ system-tools
@ text-internet
@ legacy-network-server
@ gnome-desktop
@ dialup
@ ftp-server
@ network-server
@ base-x
@ graphics
@ printing
@ development-tools
@ graphical-internet
lvm2
kernel-smp
kernel-smp-devel
e2fsprogs
kernel-devel
grub
%post
3、配置共享文件
[root@sev1 ~]# vi /etc/exports
#######加一个,所以用户都能访问#########
/disk *(ro,sync)
4、该引导脚本
[root@sev1 ~]# vi /tftpboot/pxelinux.cfg/default
default linux
prompt 1
timeout 600 #改时间为10秒
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label linux
kernel vmlinuz
append initrd=initrd.img ramdisk_size=8192 #改为:append ks=nfs:192.168.1.21:/disk/ks.cfg initrd=initrd.img ramdisk_size=8192
label i586
kernel vmlzi586
append initrd=initi586.img ramdisk_size=8192
label text
kernel vmlinuz
append initrd=initrd.img text ramdisk_size=8192
label expert
kernel vmlinuz
append expert initrd=initrd.img ramdisk_size=8192
label ks
kernel vmlinuz
append ks initrd=initrd.img ramdisk_size=8192
label lowres
kernel vmlinuz
append initrd=initrd.img lowres ramdisk_size=8192
label local
localboot 1
label memtest86
kernel memtest
append –
5、重启NFS服务器,因为我修改了里面的信息。
[root@sev1 ~]# service nfs restart
第四步:测试
启动虚拟机测试以下,测试的结果跟刚才测试结果一样,就是他是全自动安装了,无需我操作,这里就不演示了。
注意:在测试过程中能自动安装一部分,到了磁盘分区那里,就必须手动了,不然就不往下执行了,解决方法,请看(问题1)
第五步:系统文件与控制脚本ks.cfg的文件放在在同一个目录中
拷贝系统文件到/disk/下
[root@sev1 ~]# cp -a /mnt/* /disk/
修改控制脚本,
[root@sev1 ~]# vi /disk/ks.cfg
nfs --server=192.168.1.21 --dir=/mnt #将mnt改为:disk
修改NFS服务
[root@sev1 ~]# vi /etc/exports
#####修改成为#########
/disk *(ro,sync)
修改引导文件
[root@sev1 ~]# vi /tftpboot/pxelinux.cfg/default
上一步一样,然后重启NFS服务器
[root@sev1 ~]# service nfs restart
测试!
问题1:现在测试的结果跟刚才一样,但现在不能用鼠标进行点击了,鼠标一旦点击到虚拟机中,会自动弹出,如图:
解决方法:在ks.cfg中少加了“clearpart --all --initlabel ”如果ks.cfg脚本中不添加该语句,将不能实现自动化安装
问题2:当强制关闭后,重启后,就找不到服务器了,如图
解决方法:主要是我太晕了,自己将服务器关掉,当然就找不到服务器啦!
问题3、install exited abnormally
解决方法:原因是我的kickstart配置出错了,找了好多资料,少了对硬盘的分区,终于弄成功了。
我
第六步:总结
总体来说,这次实验不是很难,但是在实验时候,出现了几个问题让自己记忆犹新,例如,配置ks.cfg时候,自己忘记加了“clearpart –all --initlabel”
,导致到形界面要手动安装,还有我用的是自动分区,在“anaconda-ks.cfg”中的分区那么部分是注释掉了,导致问题的出现,同时也困扰了自己好几天,在无意中浏览到“八十后妖哥”的博客中,看到了他的ks.cfg配置文档,给我灵感,让我一下子找到错误在那里,最后也成功的完成了这次实验,在这里还得感谢这位大哥,还有赶星老师的教程等等