PXE+KickStart 自动安装Centos4.8

 

实验时间:20101121

    名:陪你晒星星

实验目的:深入网络安装Linux系统的方法,并可以熟练配置

实验内容:

一般情况下,我们安装采用光驱引导安装程序。但是,如果遇到计算机不带光驱或软驱时,就可以利用PXE安装方式。另外,在大量计算机需要同时安装系统情况下,PXE配合Kickstart安装也是一中高效的工作方式。

1、什么是PXE

严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是要安装的计算机中包含一个PXE支持的的网卡(NIC),即网卡必须有PXEClient.PXE(Per-boot Execution Environment)协议使计算机可以通过网络启动,协议分为clientserver端,PXEclient在网卡的ROM中,当计算机引导时,BIOSPEXclient调入内存执行,由PXEclent将放置在远端的文件通过网络下载到本地运行。

运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器用来给PXEclient(将要安装系统的主机)分配一个IP地址,由于是给PXEclient分配IP地址,所以在配置DHCP服务器是需要增加相应的PXE设置,此外,在PXEclientROM中,已经存在了TFTPClient,PXEClient通过TFTP协议到TFTPServer上下载所需的文件。

2、什么是Kickstart

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

3PXE+Kickstart安装条件

TFTP服务器

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

一台存放系统能够文件的服务器,如NFS,HTTPFTP服务器

带有一个PXE支持网卡的将安装的主机

 

 

详细步骤:

第一步:在PXE-server服务器进行配置文件

1、用secureCRT远程登录到PXE-server192.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 ServerIP地址

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/

其次,将引导文件vmlinuzinitrd.imgisolinux.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-serverip地址,注意在虚拟机里,这步要按“ESC”就是“退出”键,在真实的机子,是F12键,选择网卡驱动。

呵呵,测试成功了!!!!!!!!!!!!!!!!!!!!!!!!!!

3、进行安装Centos4.8操作系统,如图:

这里,选择NFS,因为我们的镜像文件存在上面的。

 

这里,选择动态(DHCP)配置,刚才我已经配置好了这个服务器。

 

这里,填写我刚才PXE-serverIP地址与镜像文件存放的路径。

 

下面就是图像化安装系统了,我就不一一用切图演示了。

 

 

第三步:配置自动安装系统文件

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当强制关闭后,重启后,就找不到服务器了,如图

解决方法:主要是我太晕了,自己将服务器关掉,当然就找不到服务器啦!

 

问题3install exited abnormally

解决方法:原因是我的kickstart配置出错了,找了好多资料,少了对硬盘的分区,终于弄成功了。

第六步:总结

总体来说,这次实验不是很难,但是在实验时候,出现了几个问题让自己记忆犹新,例如,配置ks.cfg时候,自己忘记加了“clearpart –all --initlabel

,导致到形界面要手动安装,还有我用的是自动分区,在“anaconda-ks.cfg”中的分区那么部分是注释掉了,导致问题的出现,同时也困扰了自己好几天,在无意中浏览到“八十后妖哥”的博客中,看到了他的ks.cfg配置文档,给我灵感,让我一下子找到错误在那里,最后也成功的完成了这次实验,在这里还得感谢这位大哥,还有赶星老师的教程等等