DHCP+tftp+pxe+kickstart自动安装Linux系统

一、基本原理

1. 什么是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网络安装,客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播请求IP地址等信息,DHCP服务器给客户端提供IP地址和其它信息(TFTP服务器、启动文件等),之后请求并下载安装需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。

2. 自动化安装的过程

下图中介绍了Linux中自动安装系统的详细工作过程:

   DHCP+tftp+pxe+kickstart自动安装Linux系统

第一步:PXE Client向DHCP服务器发送请求
首先,将支持PXE的网络接口卡(NIC)的客户端BIOS设置为网络启动,通过PXE BootROM(自启动芯片)会以UDP协议发送一个广播请求,向网络中的DHCP服务器申请一个IP地址等信息。

第二步:DHCP服务器提供信息

DHCP服务器收到客户端的请求,验证是否来自合法的PXE Client请求,验证通过后向客户端返回响应信息,包括:客户端IP地址,pxelinux启动程序(TFTP)位置,以及配置文件所在位置等。

第三步:PXE客户端请求下载启动文件

客户端请求传送启动所需文件,包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

第四步:Boot Server响应客户端请求并传送文件

TFTP服务器收到客户端的请求后,彼此间进行通信应答,确定启动参数。BootROM由TFTP通信协议从Boot Server下载启动安装程序所必须文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

第五步:请求下载自动应答文件

客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。

接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

第六步:客户端安装操作系统
将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。

在上面介绍中PXE client是需要安装Linux的计算机,TFTP Server、DHCP Server和FTP Server(或NFS Server)运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核都放置在Linux Server上TFTP服务器的根目录下。而Linux根文件系统存放于FTP Server(或NFS Server)的共享目录中。

PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。

二、安装及配置说明

1. 安装DHCP、TFTP、VSFTP服务

# yum install dhcp
# yum install tftp-server xinetd
# yum install vsftpd
# chkconfig dhcpd on
# chkconfig xinetd on
# chkconfig tftp on

# chkconfig vsftpd on

2. 配置文件

2.1 DHCP服务

修改DHCP配置文件,确保DHCP分配的地址和其他服务器在同一个网段。
# vim /etc/dhcpd.conf 

ddns-update-style interim; 
ignore client-updates; 
authoritative; 
allow booting; 
allow bootp; 

subnet 192.168.85.0 netmask 255.255.255.0 
{   option routers        192.168.85.2; 
    option subnet-mask    255.255.255.0; 
    next-server           192.168.85.142; 
    range dynamic-bootp 192.168.85.80 192.168.85.99; 
    filename "pxelinux.0"; 
    default-lease-time      21000; 
    max-lease-time        43200; 
    option time-offset      -18000;  


重启DHCP服务
# service dhcpd restart

2.2 TFTP服务

tftp 服务由xinetd服务管理,修改配置文件中的两行内容。
# mkdir /tftpboot/
# vim /etc/xinetd.d/tftp
server_args = -s /tftpboot 
disable = no 

# rpm -qa | egrep 'tftp|xinetd'
tftp-server-0.49-7.el6.x86_64
tftp-0.49-7.el6.x86_64
xinetd-2.3.14-38.el6.x86_64

通过查找syslinux的安装路径,可知pxelinux.0所在位置
# rpm -ql syslinux
# rpm -qf /usr/share/syslinux/pxelinux.0
syslinux-4.02-8.el6.x86_64

复制pxelinux.0文件至/tftpboot目录下,该文件由syslinux软件包提供,用作PXE启动Linux
# cp /usr/share/syslinux/pxelinux.0 /tftpboot/

2.3 kickstart配置文件

首先安装kickstart包
# yum install system-config-kickstart.noarch
然后通过图形化界面生成配置文件
# system-config-kickstart
下面以制定CentOS6.4系统模板为例,说明kickstart的配置过程。Fedora19系统配置同理,此处略。

基本配置:
注意,这里输入了root账户的登录密码,请牢记,这里是1234567890。
DHCP+tftp+pxe+kickstart自动安装Linux系统

安装方法:
DHCP+tftp+pxe+kickstart自动安装Linux系统

硬盘分区:
DHCP+tftp+pxe+kickstart自动安装Linux系统

网络配置:添加网络设备,选择DHCP模式,点击确认

DHCP+tftp+pxe+kickstart自动安装Linux系统

剩余部分可不作修改,如防火墙是否启动,如需选择安装包,可在Package Selection选项中进行勾选。
保存设置:
配置文件ks6_4.cfg保存路径为/var/ftp/
关于ks文件,可以查看kickstart详解:http://bbs.realqwh.cn/read-htm-tid-80845.html

#platform=x86, AMD64, or Intel EM64T 
#version=DEVEL 
# Firewall configuration 
firewall --disabled 
# Install OS instead of upgrade 
install 
# Use network installation 
url --url="ftp://192.168.85.142/pub/Centos6.4_64" 
# Root password 
rootpw --iscrypted $1$n8trQA.9$BT/cDFlU/GH5xEtgCoTgM/ 
# System authorization information 
auth  --useshadow  --passalgo=sha512 
# Use graphical install 
graphical 
firstboot --disable 
# System keyboard 
keyboard us 
# System language 
lang en_US 
# SELinux configuration 
selinux --disabled 
# Installation logging level 
logging --level=info 
# Reboot after installation 
reboot 
# System timezone 
timezone --isUtc Asia/Shanghai 
# Network information 
network  --bootproto=dhcp --device=eth0 --onboot=on 
# System bootloader configuration 
bootloader --location=mbr 
# Clear the Master Boot Record 
zerombr 
# Partition clearing information 
clearpart --all --initlabel  
# Disk partitioning information 
part /boot --fstype="ext4" --size=300 
part swap --fstype="swap" --size=4096 
part / --fstype="ext4" --grow --size=1 

%packages 
@base 
@core 

%end 

3. 制作系统安装镜像

首先将Linux系统iso文件解压到FTP Server的共享路径
# mount -o loop /home/alan/Downloads/CentOS-6.4-x86_64-bin-DVD1.iso /var/ftp/pub/Centos6.4_64/
# mount -o loop /home/alan/Downloads/Fedora-19-x86_64-DVD.iso /var/ftp/pub/Fedora19_64/

然后,复制CentOS镜像中isolinux目录下的文件到tftpboot目录下,其中vmlinuz和initrd.img文件可以不用复制。
# cp /var/ftp/pub/isolinux/* /tftpboot/
# cd /tftpboot/
# rm vmlinuz initrd.img

将CentOS6.4的vmlinuz和initrd.img保存到其对应的目录下。
# mkdir /tftpboot/Centos6.4_64/
# cp vmlinuz initrd.img /tftpboot/Centos6.4_64/

将Fedora19的vmlinuz和initrd.img保存到其对应的目录下。
# mkdir /tftpboot/Fedora19_64/
# cd /var/ftp/pub/Fedora19_64/images/pxeboot/
# cp vmlinuz initrd.img /tftpboot/Fedora19_64/

在/tftpboot目录下创建一个名为pxelinux.cfg的目录,并将/tftpboot目录下的isolinux.cfg文件移到到该目录,重命名为default。
# mkdir /tftpboot/pxelinux.cfg/
# cp /tftpboot/isolinux.cfg /tftpboot/default
# vi /tftpboot/default
default Centos6.4_64 
prompt 1 
timeout 600 

display boot.msg 

label Centos6.4_64 
  kernel Centos6.4_64/vmlinuz 
  append ksdevice=eth0 initrd=Centos6.4_64/initrd.img ks=ftp://192.168.85.142/ks6_4.cfg 
label Fedora19_64 
  kernel Fedora19_64/vmlinuz 
  append ksdevice=eth0 initrd=Fedora19_64/initrd.img ks=ftp://192.168.85.142/ks19.cfg 


其中boot.msg是在/tftpboot/目录下
# vi /tftpboot/boot.msg
# Choose to install OS type and enter command to continue 

CentOS 6.4  64bit           --->        Centos6.4_64 
Fedora 19 64bit        --->      Fedora19_64

4. 关闭防火墙

# setenforce 0
# service iptables stop

# chkconfig --del iptables

5. 启动和测试

# service dhcpd restart
# service vsftpd restart
# service xinetd restart

进入系统安装选择界面:
DHCP+tftp+pxe+kickstart自动安装Linux系统

安装完成,进入登陆页面,用户名为root,密码是在kickstart配置中输入的密码(这里是1234567890)。
DHCP+tftp+pxe+kickstart自动安装Linux系统


参考引用

http://bazhuayu.blog.51cto.com/1441282/766824
http://rfyiamcool.blog.51cto.com/1030776/743267
http://ylw6006.blog.51cto.com/470441/587303
http://xiaosu.blog.51cto.com/2914416/667890

转载于:https://my.oschina.net/alanlqc/blog/147649