Kickstart+PXE+DHCP+TFTP+FTP网络安装CentOS系统


一、前言

       首先,简单谈谈为什么要采用无人值守网络安装linux操作系统。一方面是运维管理的需要,因各种需要,安装操作系统在实验室内时有发生,有时候更出现批量安装某一型号操作系统的情形,这时候如果用光盘挨个安装将变得异常繁琐,并且需要人工值守。此外,因操作系统种类较多(主要是针对linux),内部人员使用频繁,也会带来管理上的问题。另一方面是当前MPX项目开发的需要,为打造一个精简、适用、高效、安全的网络存储平台,需要对当前的系统精雕细琢,在实验阶段,我很难为每一版本系统刻录一个光盘再进行系统安装,但通过网络安装的方式,可以避免频繁刻录光盘带来的不利。

二、PXE

       PXE(prebootexecute environment)是由Intel公司开发的最新技术,工作于Client/Server网络模式,支持工作站通过网络从远端服务器下载镜像,并由此支持来自网络的操作系统的启动过程。PXE Client存在于网卡的ROM中,当计算机引导时,BIOS把PXE Client调入内存中执行,并显示出命令菜单,经用户选择后,再将存放在远端服务器上的操作系统通过网络下载到本地运行。其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial filetransfer protocol)协议下载一个启动软件包(一组文件)到本机内存中执行,由这个启动软件包完成终端基本软件设置,进而引导预先安置在服务器中的终端操作系统。

       简单说来,客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播,请求分配IP地址等信息,DHCP服务器给客户机提供IP地址和其它网络信息的同时还将提供网络安装操作系统中所需要的信息,如TFTP服务器、启动文件等,之后客户机请求并下载启动所需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。

:TFTPTCP/IP协议族中一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号为69。在利用网络安装操作系统的过程中,它只负责从服务器下载最初的启动软件包到本机去执行,而终端操作系统的传输将由其它传输协议来完成(:FTPNFSHTTP),具体设置参加后面章节的说明。

三、KickStart

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

       在/root目录下通常保存了anaconda-ks.cfg这一文件,它记录了你手动安装过程中的所有参数设置。

[root@Tesla ~]# ll

total 52

-rw-------. 1 root root  1345 Mar 22 01:05 anaconda-ks.cfg

-rw-r--r--. 1 root root 33352 Mar 22 01:05install.log

-rw-r--r--. 1 root root  7146 Mar 22 01:03 install.log.syslog

我们完全可以在安装之前利用system-config-kickstart工具,预先设定好安装过程中的参数,并保存为ks.cfg文件,在以后的安装中系统将依据此文件实现自动安装。

:system-config-kickstart是一个图形界面下设定安装过程参数的工具,它将预先设定保存为ks.cfg文件,具体内容见本文实验部分的说明

 

四、DHCP服务器

       之所以把DHCP服务器单独拿出来讲,是由于它在整个网络安装过程中所处的关键性的地位。其重要作用归结起来,可以认为是解决了如下两个问题。

4.1 客户机在启动时的IP地址如何分配?

       就像通常我们解决主机在网络中的IP地址分配问题一样,待安装操作系统的客户机也是通过DHCP服务器来动态分配IP地址。但这里最大的不同在于,我们需要自己手动搭建一个DHCP服务器,通常来说我们是没有办法去控制网络上已经有的其它的DHCP服务器。到这里你肯定会有一个疑问,假如局域网内有多台DHCP服务器,那么到底哪台DHCP服务器来给客户机分配IP地址呢?之所以这样问,是因为假如与客户机通信的DHCP服务器不是我搭建的这台而是别的(这是有可能的),那我所做的工作将变得毫无意义。具体由谁来响应,答案很简单,先抢先赢。因为客户机在请求DHCP服务器的时候发送的是DHCP广播报文,局域网上的所有DHCP服务器都能够接收到此报文,并依此作出响应。如果是DHCP1先响应,使用的就是DHCP1所提供的网络参数内容,如果是DHCP2先响应,就是使用DHCP2的参数来设定客户机。前提当然是这些计算机的物理联机都是在一起的。

【补充阅读】DHCP的运作模式

       假设多部计算机在同一个网域当中,也就是说,DHCPServer与他的 Clients都在同一个网段之内,可以透过软件广播的方式来达到相互沟通的状态。那么Client藉由 DHCP Server得到 IP的程序为:

       ①若 Client端计算机设定使用 DHCP协议以取得网络参数时,则Client端计算机在开机的时候,或者是重新启动网络卡的时候,会自动的发出 DHCP Client的需求给网域内的每部计算机:这个时候,由于发出的讯息希望每部计算机都可以接受,所以该讯息除了网络卡的硬件地址(MAC)无法改变外,需要将该讯息的来源软件地址设定为0.0.0.0,而目的地址则为 255.255.255.255 ( Linux 会自动设定,无须考虑这个问题!)。网域内的其它没有提供DHCP服务的计算机,收到这个封包之后会自动的将该封包丢弃而不回应;

注:未分配到有效的IP之前你的源主机地址只能为0.0.0.0,但是你的MAC地址是唯一的,所以当DHCP服务器响应你的请求时,你自然会获得有效的IP地址,而其它主机会将响应报文屏蔽掉。

       DHCP主机响应讯息:如果是 DHCP主机收到这个Client DHCP 需求时,那么 DHCP主机首先会针对该次需求的讯息所携带的 MAC DHCP主机本身的设定值去比对,如果 DHCP主机的设定有针对该 MAC做静态IP (每次都给予一个固定的 IP )的提供时,则提供 Client端相关的固定 IP 与相关的网络参数;而如果该讯息的MAC并不在 DHCP主机的设定之内时,则 DHCP主机会选取目前网域内没有使用的IP (这个 IP与设定值有关)来发放给client 端使用!此外,需要特别留意的是,在DHCP主机发放给 Client端的讯息当中,会附带一个『租约期限』的讯息,以告诉Client端,IP可以使用的期限有多长!

       Client端接受来自 DHCP主机的网络参数,并设定 Client自己的网络环境:当 Client端接受响应的讯息之后,首先会以 ARP封包在网域内发出讯息,以确定来自DHCP主机发放的 IP 并没有被占用!如果该 IP已经被占用了,那么 Client对于这次的DHCP 信息将不接受,而将再次向网域内发出 DHCP的需求广播封包;若该 IP没有被占用,则client可以接受DHCP主机所给的网络的参数,那么这些参数将会被使用于 client端的网络设定当中,同时,Client端也会对 DHCP 主机发出确认封包,告诉 Server这次的需求已经确认!而 Server也会将该信息记录下来;

       Client端结束该IP的使用权:当 Client开始使用这个DHCP 发放的IP 之后,有几个情况下他可能会失去这个 IP的使用权:

       Client端离线:不论是关闭网络接口(ifdown)、重新开机 ( reboot )、关机 ( shutdown ) 等行为,皆算是离线状态,这个时候Server端就会将该 IP回收,并放到 Server自己的备用区中,等待未来的使用。

       Client端租约到期:前面提到 DHCPserver端发放的IP有使用的期限, Client使用这个IP 到达期限规定的时间,就需要将 IP缴回去!这个时候就会造成断线,而Client也可以再向 DHCP主机要求再次分配 IP

       以上就是 DHCP这个协议在 Server端与 Client端的运作状态,由上面这个运作状态来看,可以明白,只要Server端设定没有问题,加上 Server Client 在硬件联机上面确定是 OK的,那么Client 就可以直接藉由 Server 来取得上网的网络参数,当然啦,要我们这些管理员能够好好的、正确的管理好我们的DHCP

4.2 客户机通过何种办法下载到linux内核和根文件系统?

       linux内核文件(vmlinuz)实际上是存放在TFTP服务器的主目录中,由TFTP下载到客户机中运行。客户机之所以能够找到存放启动所需文件的TFTP服务器由DHCP服务器提供的,以下的实验部分,在编辑DHCP服务器的配置文件时,你需要设定两个极为重要的选项。其中filename相当于指示启动文件的位置的一个标签,而 next-server 参数,将告诉客户端在获取到filename选项所指定的文件之后去哪里获取其余的启动文件。

注:阅读完实验部分的内容,你将能更好地理解上面这段话的含义。

五、实验

【实验说明】

       现在我们利用KickStart结合各服务器通过网络来给一台客户机安装CentOS5.4操作系统。由DHCP服务器负责IP地址分配,TFTP服务器负责提供引导文件,FTP服务器提供操作系统安装文件(NFS、HTTP同样可以完成这一功能,这里先考虑FTP这种方式吧)。

【硬环境】

1)       DHCP服务器        用来给客户机分配IP;

2)       TFTP服务器         用来存放PXE的相关文件、比如:系统引导文件;

3)       FTP服务器           用来存放系统安装文件;

4)       KickStart生成ks.cfg配置文件;

5)       一台带有支持PXE的网卡的客户机;

:因为条件受限,上面所说的DHCPTFTPFTP服务器都搭在一台PC上,这台PC就是为我专属的服务器,它有一个碉堡了的名字Tesla(特斯拉)IP:222.31.76.125

【软环境】

       服务器操作系统:CentOS6.3,内核版本为:2.6.32

5.1 TFTP、FTP、DHCP环境部署

1)       关闭iptables与SElinux

[root@Tesla ~]# service iptables stop

[root@Tesla ~]# setenforce 0

2)       搭建TFTP服务器

tftp服务器需要安装如下两个软件包,最好通过“yum install tftp*”直接安装。

[root@Tesla ~]# rpm -qa | grep tftp

tftp-server-0.49-2.el5.centos.x86_64

tftp-0.49-2.el5.centos.x86_64

TFTP配置】

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

# default: off

# description: The tftp server serves files using thetrivial file transfer \

#      protocol.  The tftp protocol isoften used to boot diskless \

#       workstations,download configuration files to network-aware printers, \

#       and tostart 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

       per_source              = 11

       cps                     = 100 2

       flags                   = IPv4

}

注:关于TFTP的配置只要设定两个地方,一个是TFTP服务器的主目录,默认为/tftpboot目录,如果系统中没有默认创建/tftpboot目录,则手动创建。第二个是将disable参数设定为no,默认情况下是yes,表示关闭TFTP服务器。

现在重启一下试试

[root@Tesla ~]# service xinetd restart

Stopping xinetd:                                          [  OK  ]

Starting xinetd:                                          [  OK  ]

注:也可以通过/etc/xinetdrestart重启。

查看tftp服务器端口是否已经开启。

[root@Tesla ~]# netstat -tulnp | grep 69

udp       0      0 0.0.0.0:69                  0.0.0.0:*                              10307/xinetd       

udp       0      0 0.0.0.0:36928               0.0.0.0:*                               2556/rpc.mountd  

3)       搭建FTP服务器

       vsFTPd在提供FTP服务方面具有高效性和很强的安全性,所以这里用vsFTPd提供FTP服务。安装之前先检验一下系统中是否已安装此软件包。由于vsFTPd不需要依赖的包,所以安装起来非常简单,直接执行“yum installvsftpd”或者以rpm的方式安装皆可。

[root@Tesla ~]# rpm -qa | grep ftp

vsftpd-2.2.2-11.el6_4.1.x86_64                  //本机所安装的vsftpd

:ftp默认的主目录为/var/ftp

启动vsftp

[root@Tesla ~]#service vsftpd restart

Shutting downvsftpd:                                     [FAILED]

Starting vsftpdfor vsftpd:                               [  OK  ]

设为开机启动

[root@Tesla ~]#chkconfig --level 35 vsftpd on

4)       DHCP服务器安装及配置

       安装DHCP服务器只需要安装DHCP RPM包即可,可以通过yum在线安装,也可下载rpm包来安装。先检查一下系统中是否已安装了DHCP服务器,显示如下。

[root@Tesla ~]# rpm -qa | grep dhcp

dhcpv6-1.0.10-20.el5.x86_64

dhcpv6-client-1.0.10-20.el5.x86_64

结果表明系统并未安装DHCP,只是安装了支持ipv6的DHCP软件包。所以,接下来将安装DHCP,安装完毕后,查询结果如下所示。

[root@Tesla ~]# rpm -qa | grep dhcp

dhcpv6-1.0.10-20.el5.x86_64

dhcp-devel-3.0.5-33.el5_9.x86_64

dhcpv6-client-1.0.10-20.el5.x86_64

dhcp-common-4.1.1-31.P1.el6.x86_64

dhcp-3.0.5-33.el5_9.x86_64

DHCP配置】

       配置DHCP服务器通常只需要修改其配置文件/etc/dhcpd.conf,默认情况下,该配置文件里面除了几行提示信息之外,啥也没有。它提示你配置方法可以参考/usr/share/doc/dhcp*/dhcpd.conf.sample,我索性将该文件复制到/etc/目录下,移除原有的dhcpd.conf文件后,将dhcpd.conf.sample重命名为dhcpd.conf,在其基础上进行我们所需要的修改。

注:某些版本的DHCP服务器默认情况下没有/etc/dhcpd.conf这个文件,此时我们需要手动新建该文件。

[root@Tesla ~]# cat /etc/dhcpd.conf

#

# DHCP Server Configuration file.

#   see/usr/share/doc/dhcp*/dhcpd.conf.sample 

#

ddns-update-style interim;

ignore client-updates;

subnet 222.31.76.0 netmask 255.255.255.0 {

option routers 222.31.76.254;

option subnet-mask 255.255.255.0;

option domain-name-servers 202.205.16.4;

range dynamic-bootp 222.31.76.100 222.31.76.200;

default-lease-time 21600;

max-lease-time 43200;

filename "pxelinux.0";

next-server 222.31.76.125;

}

注:特别注意的是添加的filename这一项,它相当于指示启动文件的位置的一个标签,这里是指/tftpboot/pxelinux.0(就是tftp的主目录下)。另外需要指定 next-server 参数,告诉客户端在获取到 pxelinux.0文件之后去哪里获取其余的启动文件,这里我把安装包文件放在了和启动文件相同的机器上。

【补充】DHCP配置文件格式说明

5.2 生成ks.cfg文件

       要利用system-config-kickstart工具来制作生成ks.cfg文件,首先得你安装它。它所依赖的包众多,你最好是利用yum在线安装。待安装完成后,执行如下system-config-kickstart。

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

》设置kickstart的基本配置

》 设置kickstart的安装方法

       选中FTP按钮,表示从FTP服务器中下载安装操作系统。需要用户提供“FTP Server”和“FTP Directory”。我的FTP服务器ip是222.31.76.125,操作系统的安装目录树将被安放 在FTP Directory中,FTP服务器的主目录为/var/ftp,我在此目录下新建一个pub目录,专门用于存放本次实验所需要的安装目录树,所以在这里填入的目录名称是/pub。

》 对kickstart的引导装载选项进行设置

》设置分区信息

》设置网络配置信息

       点击“Add Network Device”来增加网络适配器及IP地址分配类型。网络设备的数量应该事情况而定。本实验中,待安装操作系统的客户机拥有两块网卡,所以我分别对他们进行了设置。

》认证设置

       我暂且都把他们给关了,安装成功后再开启吧。

》 图形界面配置

       我直接给disable掉了。

》保存ks.cfg文件

5.3 各文件各就各位

1.        配置支持PXE

       在这一步我们需要复制PXE启动所需要的文件。

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

注意:如果找不到syslinux目录与pxelinux.0文件,你就必须安装软件包:syslinux-3.11-4.i386.rpm

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

[root@Tesla ~]#mount -o loop /opt/CentOS/CentOS-5.4-x86_64-bin-DVD.iso /mnt/centos/

[root@Tesla ~]#cp /mnt/centos/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

[root@Tesla ~]#cp /mnt/centos/images/pxeboot/vmlinuz    /tftpboot/

[root@Tesla ~]#cp /mnt/centos/images/pxeboot/initrd.img /tftpboot/

注意:关键是这两个文件:initrd.imgvmlinuz,这两个文件要从操作系统的目录树中获取,所以先要挂载操作系统的镜像。

       接下来, 我们需要修改PXE的引导配置文件:/tftpboot/pxelinux.cfg/default。

[root@Tesla ~]# chmod u+w/tftpboot/pxelinux.cfg/default

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

 

default linux

prompt 1

timeout 600

display boot.msg

F1 boot.msg

F2 options.msg

F3 general.msg

F4 param.msg

F5 rescue.msg

label linux

  kernelvmlinuz

#引导Linux时,加载kickstart安装配置脚本文件,实现自动安装

 append ks=ftp://222.31.76.125/pub/ks.cfg initrd=initrd.img

label text

  kernelvmlinuz

  appendinitrd=initrd.img text

label ks

  kernelvmlinuz

  append ksinitrd=initrd.img

label local

  localboot 1

label memtest86

  kernelmemtest

  append –

       经过以上两步,关于PXE启动支持这一项就配好了。下面启动文件将通过FTP协议下载操作系统的安装目录树,我们需要将操作系统的安装目录树复制到FTP的主目录下去,我在主目录/var/ftp/下新建了一个目录叫pub,这就是实际存放操作系统安装目录树的地方。这一点可以从上面相关设置中看出来。

2.        复制安装目录树(要安装的操作系统)

[root@Tesla ~]# mkdir /var/ftp/pub/

[root@Tesla ~]# cp -rf/mnt/centos/* /var/ftp/pub/         

注意:/mnt/centos目录下在前一步已经挂载了CentOS的镜像文件。

       到目前为止,服务器上的各项工作都已经完成了,接下来为确保配置的正确性,再重新启动一次各项服务。

3.        重启各服务

[root@Tesla ~]# /etc/init.d/vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

[root@Tesla ~]# /etc/init.d/xinetd restart

Stopping xinetd:                                          [  OK  ]

Starting xinetd:                                          [  OK  ]

[root@Tesla ~]# /etc/init.d/dhcpd restart

Shutting down dhcpd:                                       [  OK  ]

Starting dhcpd:                                           [  OK  ]

5.4 客户机设置

       客户机在开机后按DEL键进入BIOS设置(80%的电脑是按这个键,具体情况具体分析),设置启动方式为从网络启动。

六、常见故障及问题

1.        system-config-kickstart执行错误

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

yum.Errors.RepoError: Cannot find avalid baseurl for repo: addons

思:

2.        找不到pxelinux.0文件

思:在上面的实验中提到pxelinux.0文件是从/usr/lib/syslinux目录中提取的,但在不同的系统下pxelinux.0存在的位置不一定是相同的,你最好用find命令在系统中寻找一下,例如它也有可能存在于/usr/share/syslinux/目录下。

3.        客户机无法定位到你所设定的DHCP服务器

思:想尽一切办法

七、发散思维

       应用如上方式,我们可以成功地通过网络来安装一个操作系统。但我更希望提供如下一个平台,客户机在安装的时候能够出现一个选项列表,其中显示了不同类型的操作系统,在这一步我们可以选择某一类型或某一版本的操作系统,之后就自动安装。因为这样一来,我相当于为实验室提供了一个统一的操作系统安装平台,以后大家都可以利用我这个平台,而不是各自带一光盘跑去机房了,该如何实现呢?

思:如果只是要解决上这个问题,我以为是比较简单的。就拿上面实验中以FTP引导操作系统的安装为例,/tftpboot/pxelinux.cfg目录下的default将会将安装过程引向一个指定的目录,而这个目录就是我们要安装的操作系统的目录。我可以在此处为一系列的操作系统设定标签(默认情况下是“label linux)。然后在boot.msg文件中写入提示信息,管理员可以根据提示信息敲入提示的规定信息而进安装过程引向它所需要安装的操作系统。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(系统运维)