Kickstart+Dhcp+Nfs+Tftp+Pxe 最实用的批量linux服务器安装

转自:http://blog.sina.com.cn/s/blog_9684dd2c0100yazl.html

 

什么是PXE

PXE协议的成功运行需要解决以下两个问题:
1. 既然是通过网络传输,那么计算机在启动时,它的IP地址由谁来配置;
2. 通过什么协议下载Linux内核和根文件系统

对于第一个问题,可以通过DHCP Server解决,由DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。

这样,PXE协议运行的条件就具备了,下面我们就来看看PXE协议的工作过程。

工作过程

在上图中,PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。
PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。

实践

要实现一个PXE+Kickstart无人值守安装,从上面的理论解说中,我们知道,至少需要DHCP与TFTP服务来完成引导。要进行网络安装的话,我们则需要NFS或者HTTP或者FTP服务。这里,我们选择NFS。TFTP要工作的话,我们又要安装xinetd。加上要生成bootstrap 文件要安装的syslinux。我们要安装的软件包一共如下:

dhcp

tftp-server

xinetd

syslinux

nfs-utils

此处以RHEL5.4为例:

主要分三个阶段:

      1、客户机(就是想要安装linux的机器)通过DHCP服务获取一个IP地址,根据/etc/dhcpd.conf里的“next-server”和“filename”两个参数指定的tftp服务器地址和引导文件的文件名,从tftp服务器上下载引导文件并启动客户机。

      2、加载引导文件,这时会读取pxelinux.cfg文件夹下的配置文件,并根据配置文件的设置读取tftp服务器上的vmlinuz和initrd.img两个文件来启动安装程序。

      3、安装程序启动后会要求选择安装介质所在的服务器地址和目录,可以通过HTTP、FTP、NFS三种服务来提供安装文件的传输,我自己试验的时候是用的NFS服务做的。然后就和本地安装的步骤一样了。

    如果要实现无人值守全自动安装,需要配置一个kickstart配置文件,类似于自动应答文件。

    下面就把提到的这三个阶段分开详细说明:

    一、第一阶段要用到DHCP服务,说明一下DHCP的安装与配置:

      1、在安装之前要配置一下源,CentOS的源配置请参考这里:http://hi.baidu.com/ijacker/blog/item/3dcc3c6c6a2f22d680cb4a77.html。源配置好后就可以安装DHCP服务了:

yum install dhcp

      2、安装完后要修改配置文件,配置文件在/etc/dhcpd.conf,但是一般这是一个空文件,在/usr/share/doc/dhcp-3.0.1目录下有一个DHCP配置文件的样本文件,把它自制过去:

cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcpd.conf

因为只是拿来做PXE的DHCP服务器,所以配置都很简单,我只留下了这几行,其余的都注释掉了:

ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {

#        option routers                  192.168.1.1;
#       option subnet-mask              255.255.255.0;

        option domain-name-servers      192.168.0.6;

        range dynamic-bootp 192.168.0.11 192.168.0.20;
        default-lease-time 21600;
        max-lease-time 43200;

}
filename "pxelinux.0";
next-server 192.168.0.6;               #NFS服务器地址

说明一下其中几行,“subnet”和“netmask”根据你自己的网络环境来配置;“option routers”和“option domain-name-servers”这两个是路由器和DNS地址,可以不用配置,我配置了是因为我所在单位的其它计算机有可能会从这里获得IP,而不是从路由器获得,为了不影响他们正常上网才配置的;“range dynamic-bootp”这个是IP地址分配池,不要跟路由器的分配池重叠了;最后两行是启动文件名和TFTP服务器地址,这两个配置在下面的TFTP中再详细说明。

    二、这一阶段就是从TFTP服务器下载启动文件和配置文件了。

      1、首先还是安装和配置TFTP服务器:

yum install tftp-server

安装完成之后会在根目录下新建一个文件夹/tftpboot,还要生成一个配置文件在/etc/xinetd.d/tftp。打开这个配置文件:

vi /etc/xinetd.d/tftp

修改disable=yes这一行,改为disable=no。
server_args = -u nobody -s /tftpboot
#添加nobody可以访问//-s 表示用/tftpboot作为tftp目录的根目录

      2、然后就是启动文件pxelinux.0,和它要读取的的配置文件。把pxelinux.0复制到/tftpboot下:

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

这里说明一下刚才在DHCP配置文件里提到的“filename”和“netxt-server”两个参数,filename这个参数就是指定启动文件的文件名,这里可以更改,同时必须要把pxelinux.0启动文件也改为相同的文件名,而且只能更改文件名,不能更改路径。(所以其实更改文件名没有什么意义)next-server这个参数指定TFTP服务器的地址,如果TFTP和DHCP不是在同一个服务器上,就要用这个参数来指定,当然如果是在同一台服务器上就可以不用这个参数。特别注意,DHCP配置文件中除了大括号所在的行外,其它全部都要以分号结束,我就是一开始的时候没注意到这点,DHCP服务老是启动不起来,把我搞崩溃了。

在/tftpboot下新建一个文件夹,命名为pxelinux.cfg,用来放配置文件:

mkdir /tftpboot/pxelinux.cfg

再把配置文件从光盘上复制过来并改名为default,它在光盘上的位置在isolinux/isolinux.cfg:

mount /dev/cdrom /mnt

cp /mnt/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

其实在启动的时候读取的配置文件名是有规则的,比如客户端的MAC地址是:01-00-0c-29-e2-e8-72,获得的IP地址是192.168.1.19。那么读取配置文件的顺序就是:

pxelinux.cfg/01-00-0c-29-e2-e8-72

pxelinux.cfg/C0A80113                      #这里是IP地址16进制的写法

pxelinux.cfg/C0A8011

pxelinux.cfg/C0A801

pxelinux.cfg/C0A80

pxelinux.cfg/C0A8

pxelinux.cfg/C0A

pxelinux.cfg/C0

pxelinux.cfg/C

pxelinux.cfg/default

所以如果前面的配置文件都没有就会读取default这个文件了。

修改/tftpboot/pxelinux.cfg/default

chmod 755

vi /tftpboot/pxelinux.cfg/default

default ks
prompt 1
timeout 10
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label linux
kernel vmlinuz
append ks=nfs:192.168.0.6:/centosinstall/ks.cfg  ksdevice=eth0 initrd=initrd.img

label text
kernel vmlinuz
append initrd=initrd.img text
label ks
kernel vmlinuz
append ks initrd=initrd.img
label local
localboot 1
label memtest86
kernel memtest
append -


修改如上红色地方即可:【设置default ks安装时用ks启动,timeout 10 ;ksdevice=etho代表当我们有多块网卡的时候,要实现自动化需要设置从eth0安装,不指定的话,安装的时候系统会让你选择,那就不叫全自动化了,192.168.0.6是kickstart服务器,/centosinstall 是nfs共享linux镜像的目录,ks.cfg是kickstart主配置文件】


3、启动文件有了,配置文件有了,然后就是两个linux的镜像文件了,这是用来启动安装程序的,还是从光盘上复制过来:

cp /mnt/images/pxeboot/vmlinuz /tftpboot

cp /mnt/images/pxeboot/initrd.img /tftpboot

再把/isolinux下的所有msg文件复制过来:

cp /mnt/isolinux/*.msg /tftpboot


    三、最后就是安装文件的传送了,可以通过HTTP、FTP、NFS三种服务其中的一种来实现,我现在只做了NFS的试验,就以NFS为例来说明。

      1、还是要先安装和配置NFS:

yum install nfs*

安装完成后会生成一个配置文件:/etc/exports,这个文件没有任何内容,我们要自己在里面添加要通过NFS共享出来的文件夹,并设置哪些IP可以访问以及访问的权限。可以把光盘上的文件全部复制到一个文件夹下,再共享出来,也可以直接共享光盘挂载到的文件夹。
mkdir -p /cnetosinstall

cp /mnt /* /centosinstall

在/etc/exports里面加一条:

/centosinstall *(rw,sync)

关于ks.cfg文件

# rpm –ivh /mnt/Centos/ system-config-kickstart-2.6.19.8-2.el5.rpm

#system-config-kickstart

运行图形化配置工具,进行相关配置,最后,保存成ks.cfg文件即可。

#cp ks.cfg
/netinstall/ks.cfg

这个文件要配置起来很是麻烦,因为参数实在太多,有兴趣的,可以看看CentOS的官方文档:http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-kickstart2-options.html。

没兴趣的,可以跟我一直做一个最简单的ks.cfg。

拷贝本机安装时的ks文件到/netinstall并重命名为ks.cfg

cp /root/anaconda-ks.cfg /centosinstall/ks.cfg
chmod 777 /centosnstall/ks.cfg

然后,做一点小小的修改,
找到第一行的install,将其改为text
第二行的cdrom,改为

nfs --server=192.168.0.6 --dir=/netinstall/

并在其下一行添加:key --skip

注意:如你使用eth0来安装将eth0修改为:

network --device eth0 --bootproto dhcp --noipv6

找到,

clearpart --linux --drives=sda

改为:

clearpart --all --drives=sda --initlabel

并在其上添加一行:

autopart

OK,到这里,所有的配置就可以结束了。最后,大家把防火墙关闭,就可以直接测试了。


      2、把这些服务全部启动起来:

service dhcpd start

service xinetd start

service portmap start

service nfs start

如果要这些服务随开机自动启动,就用chkconfig这个命令:

chkconfig dhcpd on

chkconfig xinetd on

chkconfig nfs on
服务器这边的配置就做完了,接下来就是比较简单的客户端了。

      2、打开客户端,设置BIOS从网卡启动。最后,大家把防火墙关闭,就可以直接测试了。客户端会自动读取default文件!
 

你可能感兴趣的:(linux,pxe,pxe协议)