一、简介

1.1、什么是PXE

  • 1、PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式

  • 2、支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统

  • 3、在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。

  • 4、严格来说,PXE并不是一种安装方式,而是一种引导方式。

  • 5、进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。

  • 6、PXE 协议可以使计算机通过网络启动,此协议分为 Client端和 Server 端,

    • PXEClient则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,

    • 然后由 PXE Client将放置在远端的文件通过网络下载到本地运行。

    • 运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。

    • DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。

    • 此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。

1.2、PXE的工作过程:

  • 2.1、PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;

  • 2.2、DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上)

  • 2.3、PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件

  • 2.4、PXE Client 取得pxelinux.0 文件后之执行该文件;

  • 2.5、根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;

  • 2.6、进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;

  • 2.7、详细工作流程,请参考下面这幅图: 

  • wKioL1g3qvPCAsajAAFuk1Xwn0k572.jpg-wh_50

1.3、什么是Kickstart

  • Kickstart是一种无人值守的安装方式。

  • 它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。

  • 如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,

    • 如果找到合适的参数,就采用所找到的参数;

    • 如果没有找到合适的参数,便需要安装者手工干预了。

  • 所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。

  • 等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。


PXE+Kickstart 无人值守安装操作系统完整过程如下:

wKiom1g3qz-wyFyvAAI_yhyR6Xc702.jpg-wh_50

二、系统环境

  • 实验环境: VirtualBox Version 5.0.6 r103037

  • 系统平台: CentOS release 6.7 (最小化安装)

  • 网络模式: Bridged Adapter(Wireless Lan PCI Express Half mini card Adapter)

  • 虚拟机IP: 192.168.10.212

  • 防火墙策略关闭 iptables: Firewall is not running. SELINUX=disabled

三、准备工作

生成ks.cfg 文件需要system-config-kickstart 工具,而此工具依赖于X Windows,所以我们需要安装X Windows 和Desktop 并重启系统,操作如下:

yum groupinstall "X Window System"  yum groupinstall Desktop  
reboot

四、配置HTTP安装方式

系统的安装方式可以选择HTTP、FTP、 NFS,我们这里介绍HTTP方式的安装,其他两种方式的安装,大家可以自行百度。

4.1 安装并配置HTTP

yum install httpd –y  rpm -qa|grep httpd

开启服务并设置开机启动

/etc/init.d/httpd start  chkconfig --level 35 httpd on

4.2 加载ISO镜像

在虚拟机中设置加载ISO镜像。

将iso文件挂载至/mnt/cdrom.

mount /dev/sr0 /mnt/cdrom

4.3 复制光盘全部内容至http 的根目录/var/www/html/ 下

cp -r /mnt/cdrom/ /var/www/html/

HTTP部分设置完毕。

五、配置TFTP

5.1、安装tftp-server

yum install tftp-server –y

5.2、启动tftp服务

编辑tftp服务配置文件

vim /etc/xinetd.d/tftp
service tftp{    
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /var/lib/tftpboot
    disable         = no
    per_source      = 11    
    cps             = 100 2    
    flags           = IPv4
}

启动tftp服务,因为tftp服务依附于xinetd服务,所以是直接启动xinetd来启动tftp服务

/etc/init.d/xinetd start

六、配置支持PXE的启动程序

6.1、复制pxelinux.0 文件至/var/lib/tftpboot/ 文件夹中

说明: syslinux是一个功能强大的引导加载程序,而且兼容各种介质。更加确切地说:SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。

yum install -y syslinux-devel
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

6.2、复制iso 镜像中的/image/pxeboot/initrd.img 和vmlinux 至/var/lib/tftpboot/ 文件夹中

/var/www/html/cdrom/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/

6.3、复制iso 镜像中的/isolinux/*.msg 至/var/lib/tftpboot/ 文件夹中

cp /var/www/html/cdrom/isolinux/*.msg /var/lib/tftpboot/ ```

6.4、在/var/lib/tftpboot/ 中新建一个pxelinux.cfg目录

mkdir /var/lib/tftpboot/pxelinux.cfg

6.5、将iso 镜像中的/isolinux 目录中的isolinux.cfg复制到pxelinux.cfg目录中,同时更改文件名称为default

cp /var/www/html/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

6.6、修改default文件

vi /var/lib/tftpboot/pxelinux.cfg/default  

#默认启动的是 'label ks' 这个标签来引导启动
default ks 
#显示 'boot: ' 提示符。为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。
prompt 1#在用户输入之前的超时时间,单位为 1/10 秒。
timeout 10#显示某个文件的内容,注意文件的路径。默认是在/var/lib/tftpboot/ 目录下。也可以指定位类似 '/install/boot.msg'这样的,路径+文件名。display boot.msg#按下F1时显示的内容 
F1 boot.msg#'label' 指定你在 'boot:' 提示符下输入的关键字,比如boot: linux[ENTER],这个会启动'label linux' 下标记的kernel 和initrd.img 文件。label linux  menu label ^Install or upgrade an existing system  menu default  #kernel 参数指定要启动的内核。
  kernel vmlinuz  #append 指定追加给内核的参数,能够在grub 里使用的追加给内核的参数,在这里也都可以使用。
  append initrd=initrd.imglabel text
  kernel vmlinuz
  append initrd=initrd.imglabel ks
	kernel vmlinuz
	#这里追加的内容,直接告诉客户端需要从192.168.10.212机器上来获取ks.cfg文件,这里就以http协议来获取,支持NFS等其它协议
	#后面的initrd=initrd.img,这个文件实际上是/var/lib/tftpboot/initrd.img,因为直到现在都是通过tftp来完成启动,唯独ks文件需要通过http协议来获取
	append ks=http://192.168.10.212/ks.cfg initrd=initrd.img

7、启动DHCP服务

安装dhcp服务

yum install dhcp

准备配置文件

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

编辑dhcp服务配置文件

vim /etc/dhcp/dhcpd.conf
# filename:即tftp文件的位置,默认路径在:/var/lib/tftpboot/
# DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。
# 也就是说PXE客户端找到了DHCP服务器后,DHCP服务器会告诉客户端应该去获取pxelinux.0这个文件,然后通过tftp协议来获取安装镜像
# PXE网卡联系了服务器之后告诉它应该去获取文件pxelinux.0  
filename "pxelinux.0";  

#设置DHCP的DNS  
option domain-name-servers 192.168.105.1,114.114.114.114;  
#设置DHCP 分配出去的IP超时时间 单位秒  
default-lease-time 86440;  
#设置DHCPlease-time时间 单位秒  
max-lease-time 100000;  
#log-facility local7;  
#设置DHCP的 IP 和掩码  
subnet 192.168.105.0 netmask 255.255.255.0 {    
    #设置DHCP对外分配IP段
    range 192.168.10.100 192.168.10.200;    
    #设置路由IP
    option routers 192.168.10.1;    
    #如果是PXE网卡来获取到了IP 告诉网卡下一步联系的服务器IP 192.168.1.120
    next-server 192.168.105.104;  
}

启动dhcp服务

/etc/init.d/dhcpd start

八、生成ks.cfg 文件

8.1 安装Kickstart

# yum install system-config-kickstart

8.2、在桌面环境下配置Kickstart

启动X Windows 环境

startx

8.3、配置Kickstart

system-config-kickstart
  • A. 设置语言,键盘,时区,Root密码,安装完毕后重启等。

  • B. 设置安装方式,这篇文章介绍的是HTTP方式的安装,故选择HTTP

  • C. 安装MBR

  • D. 设置分区

  • F. 配置网络

  • G. 认证配置

  • H. SELinux 和防火墙配置

  • I. 图形环境配置

  • J. 软件包安装选择

  • L. 生成ks.cfg 文件,保存在/var/www/html/ 文件夹下

我们可以打开/var/www/html/ks.cfg 文件进行查看并做修改。

firewall --disabled   
install   
url --url=http://192.168.10.212/media/   #这个选项告诉安装程序:到服务器192.168.111.130 的HTTP根目录下的cdrom 文件夹下寻找安装介质  
rootpw --iscrypted $1$bmg.4s6w$fYNOgAI3sbxPc0HTVFBDo/
auth --useshadow  --enablemd5   
graphical   
firstboot --disable   
keyboard us   
lang en_US   
selinux --disabled   
logging --level=info   
reboot
timezone  --isUtc Asia/Shanghai   
network  --bootproto=dhcp --device=eth0 --onboot=on   
bootloader --append="rhgb quiet" --location=mbr --driveorder=sda   
zerombr   
part /boot --fstype="ext4" --size=500
part swap --fstype="swap" --size=2048
part / --fstype="ext4" --grow --size=1

%packages   
@base  

%end

说明:

  • key --skip 如果是红帽系统,此选项可以跳过输入序列号过程;如果是CentOS 系列,则可以不保留此项内容;

  • reboot 此选项必须存在,也必须文中设定位置,不然kickstart显示一条消息,并等待用户按任意键后才重新引导;

  • clearpart --all --initlabel 此条命令必须添加,不然系统会让用户手动选择是否清除所有数据,这就需要人为干预了,从而导致自动化过程失败;

九、测试安装

关于新建虚拟机的部分这里是略过。 启动虚拟机,选择从网卡启动,DHCP 服务器正在给客户机分配IP地址。

开始下载vmlinuz 和initrd.img

安装过程...

登录系统查看,磁盘分区和我们在ks.cfg 文件中设定的一样。(图片参考自其它网友的,与以上配置文件中的不一样,也在情理之中,望见谅。)

PXE+Kickstart 无人值守安装操作系统环境搭建完毕。

参考资料