先来说一下网络安装linux的基本流程吧,让大家有一个大概的了解,主要分三个阶段:

一、客户机(就是想要安装linux的机器)通过DHCP服务获取一个IP地址,根据/etc/dhcpd.conf里的“next-server”和“filename”两个参数指定的tftp服务器地址和引导文件的文件名,从tftp服务器上下载引导文件并启动客户机。那么客户端是如何发送DHCP请求系统并下载的呢,这时就要用到PXE协议;
   
       PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。
既然是通过网络传输,就需要IP地址;也就是说在其启动过程中,客户端请求服务器分配IP地址,之后PXE Client使用TFTP Client 通过TFTP(Trivial File Transfer Protocol)协议下载启动安装程序所需的文件。PXE技术与RPL技术不同之处为RPL是静态路由,PXE是动态路由。RPL是根据网卡上的ID号加上其他记录组成的一个Frame(帧)向服务器发出请求。而服务器中已有这个ID数据,匹配成功则进行远程启动。PXE则是根据服务器端收到的工件站MAC地址,使用DHCP服务为这个MAC地址指定一个IP地址。每次启动可能同一台工作站有与上次启动时不同的IP,即动态分配地址。


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

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

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

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

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

      1、在安装之前要配置一下源

[root@Centos ~]# cat /etc/yum.repos.d/CentOS-Media.repo    //这里有两个配置文件一个是CentOS-Base.repo,这个是从互联网做为更新源,我这里用的是第二个,配置从本地更新;若是从网上更新下载一个稳定的CentOS-Base.reop  包然后放在/etc/yum.repos.d/下面,把现有的先备份,再把下载的替换成原本的这个文件
# CentOS-Media.repo
#
# This repo is used to mount the default locations for a CDROM / DVD on
#  CentOS-5.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c5-media [command]

# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c5-media [command]
 
[c5-media]
name=centOS-$releaserver - Meadia
baseurl=file:///mnt/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[root@Centos ~]#

安装DHCP包

[root@Centos ~]# yum install dhcp

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

[root@Centos ~]# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcp.conf

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

ddns-update-style none;//不需要DDSN更新
ignore client-updates;//忽略客户端更新

subnet 192.168.10.0 netmask 255.255.255.0 {

        option routers                  192.168.10.1;  //网关
        option subnet-mask              255.255.255.0; //子网掩码

        option nis-domain "domain.org";

        option domain-name "domain.org";//域名

        option domain-name-servers      192.168.10.1;//DNS服务器

        range dynamic-bootp 192.168.10.10 192.168.10.30;  //为客户端分配的IP地址池
 

        default-lease-time 21600;
        max-lease-time 43200; //租约时间

        option time-offset -18000;//东部标准时间

      host ns {

next-server www.test.com;

hardware ethernet 12:34:56:78:AB:CD;

fixed-address 207.175.42.254;

               }   此部分为给指定的主机保留的IP

 

}
filename "pxelinux.0";    //启动系统安装自动应答文件
next-server 192.168.10.172; //TFTP服务器地址

说明一下其中几行,“subnet”和“netmask”根据你自己的网络环境来配置;“option routers”和“option domain-name-servers”这两个是路由器和DNS地址,可以不用配置,“range dynamic-bootp”这个是IP地址分配池,不要跟路由器的分配池重叠了;最后两行是启动文件名和TFTP服务器地址,这两个配置在下面的TFTP中再详细说明。

配置完成后只为eth0接口提供服务:

vim /etc/sysconfig/dhcpd

# Command line options here

    DHCPDARGS=eth0  //只在eth0接口提供服务。

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

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

[root@Centos ~]# yum install tftp-server 

会生成一个配置文件在/etc/xinetd.d/tftp。打开这个配置文件:

[root@Centos ~]# vi /etc/xinetd.d/tftp

# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot
        disable                 = no                  //修改disable=yes这一行,改为disable=no。
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

                            

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

pxelinux.0由syslinux包提供,所以系统没有安装的话要安装

[root@Centos ~]#yum install syslinux

[root@Centos ~]# mkdir /tftpboot

[root@Centos ~]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot

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

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

[root@Centos ~]# mkdir /tftpboot/pxelinux.cfg

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

[root@Centos ~]# mount /dev/cdrom /mnt

[root@Centos ~]# 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这个文件了,这个文件我还不太明白

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

[root@Centos ~]# cp /mnt/p_w_picpaths/pxeboot/vmlinuz /tftpboot

[root@Centos ~]# cp /mnt/p_w_picpaths/pxeboot/initrd.img /tftpboot

再把/isolinux下的所有msg文件复制过来,这些msg文件都是安装之前的提示文件,不是必要的,也可以自己更改;在pxelinux.cfg/default里面有一行:display boot.msg,就是指的读取boot.msg的内容显示在屏幕上,还可以定制图片。(大家自己去摸索哈)到现在为止,安装程序已经可以启动起来了,就还差安装文件了,快要接近胜利了。

[root@Centos ~]# cp /mnt/isolinux/*.msg /tftpboot

 

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

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

[root@Centos ~]# yum install nfs-*

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

[root@Centos ~]# vi /etc/exports
/mnt/install    *(ro,sync)

                      
这里的“/mnt”是需要共享出来的目录,在我的试验中也就是光盘挂载到的目录,*表示所有客户端都可以访问,括号里面的表示访问的权限,ro是只读,sync好像是指同步(这个我不是很清楚什么意思,还请高手指点)。

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

[root@Centos ~]# service dhcpd start

[root@Centos ~]# service xinetd start

[root@Centos ~]# service portmap start

[root@Centos ~]# service nfs start

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

[root@Centos ~]# chkconfig dhcpd on

[root@Centos ~]# chkconfig xinetd on

[root@Centos ~]# chkconfig portmap on

[root@Centos ~]# chkconfig nfs on

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

      2、打开客户端,设置BIOS从网卡启动。客户端会自动获得IP地址,从服务器上下载配置启动文件,读取配置文件,在出现boot提示的时候直接回车就可以了,启动安装程序,会要求选择语言、键盘布局,还会要求选择是手动输入IP还是DHCP获得,选DHCP获得,下一步就要选NFS服务器地址和安装介质所在的文件夹了,我就输入了NFS服务器的地址:192.168.1.254,文件夹:/mnt,“OK”之后就进入正式安装了,就跟本地安装一样了,这里不再赘述了。


    到这里已经完成整个配置安装过程了。但是如果还想更完美一点,就是无人值守的安装方式,就需要用到kickstart了,它其实就是一个应答文件,安装程序通过读取文件中的配置信息来对安装过程中的选项做出选择,包括前面提到的语言、键盘布局、NFS服务器地址以及后后续的所有选项。下面就来讨论一下kickstart的配置。

    在每一台安装好CentOS的计算机都有一个安装配置文件,里面记录着本台机器安装时的所有选项,就可以利用这个文件做一个kickstart配置文件,先新建一个文件夹用来存放ks配置文件:

[root@Centos ~]# mkdir /ks    // ks配置文件可以和安装介质放在一起,或者是其它地方,只要在/tftpboot/pxelinux.cfg/default文件中指定位置就行了,我新建一个文件夹来存放是因为我的安装介质是光驱挂载的,是只读的。接着把ks文件复制过去:

[root@Centos ~]# cp /root/anaconda-ks.cfg /ks/ks.cfg

然后在NFS配置文件中添加一行,把这个/ks文件夹共享出来:

[root@Centos ~]# vi /etc/exports
/mnt/install    *(ro,sync)
/ks *(ro,sync)

怎么让安装程序来读取这个ks.cfg配置文件呢,这就要修改default文件了:

[root@Centos ~]# vi /tftpboot/pxelinux.cfg/default


default ks       //把default linux这一行改为default ks,这样做的目的是为了让“label ks”的启动配置成为默认的选项。
prompt 1
timeout 600
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label linux
  kernel vmlinuz
  append initrd=initrd.img
label text
  kernel vmlinuz
  append initrd=initrd.img text
label ks
  kernel vmlinuz
  append ks=nfs:192.168.10.172:/ks/ks.cfg initrd=initrd.img ramdisk_size=8192
label local
  localboot 1
label memtest86
  kernel memtest
  append -

 

这样就可以实现无人值守安装了,前提是ks配置文件一定要正确,所以如果像我这样对ks文件不熟悉的怎么办呢?没关系,有一个生成ks文件的程序,名字是system-config-kickstart,这个程序要在图形环境下才能运行,所以要先进入图形环境,再打开终端运行,在这之前要先安装这个软件包哟:

[root@Centos ~]# yum install system-config-kickstart

[root@Centos ~]# init 5

[root@Centos ~]# system-config-kickstart

这个程序运行起来之后,在安装过程中的所有选择都会有,但是我在这里出了个问题,软件包一项加载失败,所以在客户端安装的时候还要选择安装哪些包,比如语言支持、开发工具、图形桌面等等,配置之后生成ks文件,然后点击file-save as 选项把文件另存在/ks这个文件下面

查看ks.cfg文件,看看里面有什么东西

                                                                                                                                                    
[root@Centos ~]# cat /ks/ks.cfg     //其实都是我们刚才在图形界面配置的,只是生成配置文件保存在这个ks.cfg中

#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth  --useshadow  --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --none 
# Use text mode install
text
# Firewall configuration
firewall --disabled                          //未启用防火墙,因为刚才在图形界面我们选择的是disable
# 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 NFS installation media
nfs --server=192.168.10.172 --dir=/mnt/install   //nfs服务器地址和安装目录
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on  启用DHCP
# Reboot after installation
reboot
#Root password
rootpw --iscrypted $1$z1ZIzNVh$OHXbaV5.JJR.LGF4uPFD0/   //设置root口令并加密

# 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=1024x768 --startxonboot
# Disk partitioning information
part /boot --asprimary --bytes-per-inode=4096 --fstype="ext3" --size=150   //设置的分区信息
part / --asprimary --bytes-per-inode=4096 --fstype="ext3" --size=16000
part swap --bytes-per-inode=4096 --fstype="swap" --size=2048

       *************然后不要忘了/ks/ks.cfg这个文件的权限,如果没有权限客户端是没有权限读取内容的****************
       *******************把服务端的防火墙和selinux先关闭,防止后面无法正常安装********************

[root@Centos ~]# ll /ks/ks.cfg
-rwxrwxrwx 1 root root 1200 Jun  6 11:52 /ks/ks.cfg  //这里我给我是777

重启所有相关服务

[root@Centos ~]# service dhcpd restart

[root@Centos ~]# service xinetd restart

[root@Centos ~]# service portmap restart

[root@Centos ~]# service nfs restart

 

 

下面开启要安装系统的机器进入BIOS设置从网络启动,这时候就会出现DHCP请求,如果找到就会提示启动系统然后就开始安装

*************安装完成后一定要把服务器的光盘给卸载或者弹出光驱,否则客户端安装完成后重启又会重新开始这个操作***************************

 

实验仍有不完善的地方,就是那个配置ks.cfg图形界面的时候软件包无法获取,导致最后安装的时候还需要人工干涉选择相关软件包才能顺利安装完成