一、原理篇(一下原理及实现过程都是依据此图)

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu

Technorati 标签: ,

    1.PXE的工作原理

       PXE(Preboot Execution Environment,远程引导技术)是RPL(Remote Initial Program Load,远程启动服务)的升级产品。它们的不同之处为:RPL是静态路由,PXE是动态路由。不难理解:RPL是根据网卡上的ID号加上其它的记录组成的一个帧向服务器发出请求,而服务器那里早已经有了这个ID数据,匹配成功则进行远程启动;PXE则是根据服务器端收到的工作站MAC地址(就是网卡号),使用DHCP服务给这个MAC地址指定一个IP地址,每次重启动可能同一台工作站有与上次启动有不同的IP,即动态分配地址。下面以工作站引导过程说明PXE的原理:
工作站开机后, PXE BootROM(自启动芯片) 获得控制权之前先做自我测试,然后 以广播形式发出一个请求FIND帧。如果服务器收到工作站所送出的要求, 就会送回DHCP 回应, 内容包括用户端的 IP 地址, 预设通讯通道, 及开机映像文件。 否则, 服务器会忽略这个要求。工作站收到服务器发回的响应后则会回应一个帧,以请求传送启动所需文件。之后,将有更多的讯息在工作站与服务器之间作应答, 用以决定启动参数。 BootROM 由 TFTP 通讯协议从服务器下载开机映像档, 这个映像档就是软盘的映象文件。 工作站使用TFTP 协议接收启动文件后,将控制权转交启动块,引导操作系统,完成远程启动。

   2.dhcp的工作原理

      DHCP请求IP地址的过程 :发现阶段,即DHCP客户端(工作站)寻找DHCP服务器的阶段。客户端(工作站)以广播方式发送DHCPDISCOVER包,只有DHCP服务器才会响应。  提供阶段,即DHCP服务器提供IP地址的阶段。DHCP服务器接收到客户端(工作站)的DHCPDISCOVER报文后,从IP地址池中选择一个尚未分配的IP地址分配给客户端,向该客户端(工作站)发送包含租借的IP地址和其他配置信息的DHCPOFFER包。 选择阶段,即DHCP客户端(工作站)选择IP地址的阶段。如果有多台DHCP服务器向该客户端(工作站)发送DHCPOFFER包,客户端(工作站)从中随机挑选,然后以广播形式向各DHCP服务器回应DHCPREQUEST包,宣告使用它挑中的DHCP服务器提供的地址,并正式请求该DHCP服务器分配地址。其它所有发DHCPOFFER包的DHCP服务器接收到该数据包后,将释放已经OFFER(预分配)给客户端(工作站)的IP地址。 如果发送给DHCP客户端的DHCPOFFER包中包含无效的配置参数,客户端会向服务器发送DHCPCLINE包拒绝接受已经分配的配置信息。 确认阶段,即DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户端(工作站)回答的DHCPREQUEST包后,便向客户端(工作站)发送包含它所提供的IP地址及其他配置信息的DHCPACK确认包。然后,DHCP客户端将接收并使用IP地址及其他TCP/IP配置参数。

  3.tftp的工作原理

    TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输协议,端口号为69。这里要通过tftp传输pxelinux.0文件及内核启动文件。

  4.apache的工作原理

     WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。其原理分为四步:

     (1) 连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。
(2) 请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1.0     文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
(3) 应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。
(4) 关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。

      我们这里用apache做web服务器,把安装文件存到web服务器上供客户端下载安装。

  5.kickstart的工作原理

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

  6.整个安装过程的详细步骤:如图

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_02

详解:

   a.client启动后即pxe启动,就去广播寻找dhcp server获取ip地址以及pxelinux.0文件

   b.client通过tftp连接pxe Server,下载pxelinux.0文件

   c.client下载成功pxelinux.0文件后,系统还会下载控制pxelinux.0的配置文件,即default和text.cfg文件。然后client会按照default和text.cfg的配置来执行pxelinux.0文件。

   d.client根据dhcp server配置文件找到ks.cfg文件,并用tftp下载。

   e.pxelinux.0文件定义的向服务器请求linux内核,根文件系统的参数等。运行这个文件,client就会向服务器请求相关文件并下载,都是使用tftp协议。

   f.文件下载成功后,client就会启动linux内核,这就进入了我们安装时候看见的第一个图形界面,回车是图形安装,输入text是文本安装。如果使用了kickstart,这个界面很快就消失了,可能看不见。到这里pxe就完成了。

   g.下面的主角就是kickstart了,其实在第四步就已经出现了。当按照default要求运行pxelinux.0文件,系统读取内核,挂载根文件系统后,剩下的任务都是kickstart的了,包括安装介质的来源、语言、时区、分区、安装那些包等,都是在ks.cfg文件中定义。只要进入这一步,kickstart配置文件正确,我们的无人值守安装就已经成功了。

二、实战篇

   1.准备工作

PXE server 系统是:ubuntu-10.04-alternate-i386,内核版本:2.6.32-38-generic

镜像下载:http://releases.ubuntu.com/releases/.pool/ubuntu-10.04-alternate-i386.iso

关闭防火墙:/etc/init.d/iptables stop

   2.dhcp的安装与配置

安装:(当然PXE server可以联网哦,最好把源换成163或搜狐的这样快)

#apt-get install dhcp3-server

配置:(清空配置文件加入以下内容)

#vim /etc/dhcp3/dhcpd.conf

subnet 192.168.0.0 netmask 255.255.255.0 {  #dhcpserver 分配ip的子网192.168.0网段,必须和PXE server的一个网卡同一个网段
range 192.168.0.100 192.168.0.200;              #为客户端分配ip范围
option domain-name "192.168.0.105";
option domain-name-servers 192.168.0.105;   #此项不写可能在自动安装时让您手动添加,这样达不到自动化的目的
option routers 192.168.0.111;                       
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.0.105;                            #指定tftp server的ip
filename "pxelinux.0";                                     #通过tftp找到pxelinux.0文件,并下载

}

启动dhcp:

#/etc/init.d/dhcp3-server start

检查看看67号端口开启没:

#netstat -nutlp | grep 67
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2722/dhcpd3    
好了到这里dhcp server就已经安装成功了。

  3.apache的安装与配置

安装:

# apt-get install apache2

配置:

#mkdir /var/www/ubuntu

挂载光盘镜像,注意这里镜像必须用alternate版的,只有此版本才支持网络安装

#mount /dev/cdrom /mnt

#cp –r /mnt/* /var/www/ubuntu

启动apache:

#/etc/init.d/apache2 start 并保证通过浏览器访问http://192.168.0.105/ubuntu/ 可以看到目录的内容,如下内容:

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_03

  4.tftp的安装与配置

安装:

# apt-get install tftpd-hpa tftp-hpa

配置:

# vim /etc/default/tftpd-hpa

增加以下两行:

RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

创建pxe加载文件:

#cd /var/lib/tftpboot/

#cp -r /var/www/ubuntu/install/netboot/* .

修改text.cfg文件:

#vim ubuntu-installer/i386/boot-screens/text.cfg

append vga=normal initrd=ubuntu-installer/i386/initrd.gz -- quiet ks=http://192.168.0.105/ubuntu/ks.cfg  #追加指定ks.cfg文件的位置

修个default文件:

#vim pxelinux.cfg/default

timeout 1   #此选项是一秒后自动选择install选项安装,默认是0需要手动选择

启动tftp:(开启udp69号端口)

# /etc/init.d/tftpd-hpa start

   5.kickstart的安装与配置

安装:

# apt-get install system-config-kickstart

配置:

#system-config-kickstart &

基本的配置:

ubuntu 10.04系统自动安装之PXE(局域网内)_blank_04

安装模式:这里选择http

ubuntu 10.04系统自动安装之PXE(局域网内)_blank_05

引导启动选项:默认即可

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_06

分区情况:您可以根据实际情况进行分区

ubuntu 10.04系统自动安装之PXE(局域网内)_blank_07

网络配置:增加一网卡设置为dhcp获取ip

ubuntu 10.04系统自动安装之PXE(局域网内)_blank_08

认证模式可以按默认即可

用户设置:

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_09

防火墙和显示器的配置都可以根据需要设置,或按默认即可

软件包的选择:这里应该是ubuntu中kickstart的bug吧,没有显示可选的软件包,一会生成ks.cfg文件我们根据需要添加

ubuntu 10.04系统自动安装之PXE(局域网内)_blank_10

安装前后预处理脚本,可以根据需要定制,这里简单举个例子:系统安装完之后把主机名改为 pxeclient

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_11

保存ks.cfg文件:

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_12

修改ks.cfg文件

在skipx后加入

%packages  #这是server version的没有桌面

#@ubuntu-desktop  #这是ubuntu桌面版的,如果要安装的话把#去掉

 

注意:alternate 既有桌面版也支持server版,所以叫做二选一

最后把ks.cfg文件移到/var/www/ubuntu目录下

#mv ks.cfg /var/www/ubuntu

三、测试安装

a.客户机器设置成网络启动系统

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_13

b.停留此界面不自动往下进行

ubuntu 10.04系统自动安装之PXE(局域网内)_blank_14

解决方法:

#vim /var/lib/tftpboot/pxelinux.cfg/default

timeout 1 #即设置1秒后自动选择install选项

c.Packages文件损坏,到该目录下看看

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_15

解决方法:

#cd /var/www/ubuntu/dists/lucid/restricted/binary-i386/

# ls
Packages.gz  Release

#gunzip Packages.gz

# ls
Packages  Release

d.我们的post脚本起作用了,主机名已是pxeclient了

ubuntu 10.04系统自动安装之PXE(局域网内)_Ubuntu_16

 

到此基于同一个局域网中的pxe server就搭建完成了,client端这个系统的安装不到10分钟。

下一篇介绍跨局域网系统自动安装。