在工作环境中,批量安装、无键盘鼠标、无显示器、无光驱安装操作系统都需要采用非交互式安装。
PXE安装就是可以通过网络自动加载系统内核,并启动安装程序,再配合kickstart配置文件,完成无交互式安装的方式。
一、基本概念
DHCP
动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作在67号端口,主要用途是给网络中的设备自动分配IP地址。
TFTP
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。使用UDP协议端口号69。由于使用UDP协议,建议使用环境在网络传输质量高的局域网中使用,且传输文件小而少。不支持用户交互,即不能列出服务器目录内容。服务运行依赖超级守护进程xinetd。
xinetd
超级守护进程(eXtended InterNET serivices Daemon),它是一个管理其它提供网络服务进程的进程,常驻内存。它管理一些不经常启动的网络服务,一旦客户端发起请求,它启动相应的处理服务进程,用完关闭。
这样节省了系统资源的占用,但是有请求时才启用,就不能做到快速响应。对于频繁发起服务的请求,就会频繁创建关闭服务进程,反而导致性能下降。
PXE
PXE,预启动执行环境(Preboot eXecution Environment,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。
PXE设备可以通过网络接口卡(NIC),使用DHCP、TFTP协议来搜寻网络服务器上的引导程序。
pxelinux.0
PXE通过网络查找加载的引导程序,称为网络引导程序NBP。
pxelinux.0就是一种NBP。它主要作用是装载执行指派的预引导工作所需的操作系统。
pxelinux.0 文件是 syslinux 这一开放源代码项目的一部分的改进版本。虽然 pxelinux.0 主要是 Linux 加载器,但它也可以装载其他操作系统。它的工作方式是使用位于 TFTP 服务器上的配置文件来提供引导指令。
kickstart安装
由红帽公司创建的安装方式,通过kickstart,系统管理员能够使用自动化方式完成系统安装。
有一个文件/root/anaconda-ks.cfg ,它是红帽系安装过程中生成的简单的kickstart文件。
kickstart文件分为三个部分,命令段、软件包段、脚本段,各部分要遵循一定的顺序。
需要了解的命令:
install命令
告诉系统是安装一个全新的系统而不是升级存在的系统(默认)。安装时,你可以从cdrom、硬盘驱动器、nfs、或者url(ftp,http安装)中指定安装类型。install命令和安装方法必须在不同的行设置。
url命令
支持通过FTP和HTTP从远程服务器安装。通常要使用--url选项。例如,url --url=URL
repo命令
配置另外的yum仓库,多个repo命令指定多个yum源。
可以使用图形配置界面system-config-kickstart来配置kickstart, 可以基于/root/anaconda-ks.cfg文件,通过图形化窗口再次修改后得到新的kickstart文件。使用yum -y install system-config-kickstart安装此工具。
使用ksvalidator来验证语法。
二、实验环境的准备
前提:
环境搭建:
1、安装实验系统并设置实验网络环境
在虚拟机中安装CentOS 6.5和Windows XP系统。
按右下角网络设置CentOS和XP的网络连接为VMnet2,这样2台虚拟机就可以在一个虚拟网络中通信了。
实验环境采用192.168.23.0/24,CentOS地址为192.168.23.1,在/etc/sysconfig/network-scripts/ifcfg-eth0修改参数,如下:
检查CentOS的网络配置
2、检查CentOS的tftp服务和tftp客户端。
这里没有安装,使用yum list all tftp*,查看后安装相关包,yum �Cy install tftp* 。
安装完成如下,共有三个包安装了,tftp客户端、tftp-server服务和tftp-server所依赖的xinetd服务包。
3、检查CentOS的DHCP服务。安装方法同上,包名dhcp
4、关闭iptables防火墙服务。
5、安装syslinux包
[root@localhost cdrom]# yum -y install syslinux
[root@localhost cdrom]# rpm -ql syslinux | grep pxelinux.0
/usr/share/syslinux/pxelinux.0
6、安装httpd包。默认已安装,否则请参照上面方法安装
到此,实验环境已经搭建成功。
三、服务准备
1、DHCP服务配置
启动失败,什么原因,查看vim /etc/dhcp/dhcpd.conf
原来DHCP管理的网段不在本机网段,修改配置文件
再次启动DHCP,成功
使用XP测试DHCP,成功。至此就可以使用这台XP中的Xshell来完成其它操作。
[root@localhost ~]# chkconfig dhcpd on
[root@localhost ~]# chkconfig --list dhcpd
dhcpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
2、tftp服务配置
查看xinetd服务,配置xinet,并启动之
[root@localhost ~]# chkconfig --list xinetd
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@localhost ~]# service xinetd status
xinetd is stopped
[root@localhost ~]# ls /etc/xinet*
/etc/xinetd.conf
/etc/xinetd.d:
chargen-dgram daytime-stream echo-dgram tcpmux-server time-stream
chargen-stream discard-dgram echo-stream tftp
daytime-dgram discard-stream rsync time-dgram
[root@localhost ~]# vim /etc/xinetd.d/tftp
# 修改disable = yes为disable = no
[root@localhost ~]# chkconfig --list xinetd
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@localhost ~]# chkconfig --list
dhcpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
xinetd based services:
chargen-dgram: off
chargen-stream: off
daytime-dgram: off
daytime-stream: off
discard-dgram: off
discard-stream: off
echo-dgram: off
echo-stream: off
rsync: off
tcpmux-server: off
tftp: off
time-dgram: off
time-stream: off
[root@localhost ~]# service xinetd start
Starting xinetd: [ OK ]
[root@localhost ~]# chkconfig --list
# 其他内容省略
xinetd based services:
tftp: on
[root@localhost ~]# netstat -unlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:67 0.0.0.0:* 3477/dhcpd
udp 0 0 0.0.0.0:69 0.0.0.0:* 3854/xinetd
[root@localhost ~]# rpm -ql tftp-server
/etc/xinetd.d/tftp
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-0.49
/usr/share/doc/tftp-server-0.49/CHANGES
/usr/share/doc/tftp-server-0.49/README
/usr/share/doc/tftp-server-0.49/README.security
/usr/share/doc/tftp-server-0.49/README.security.tftpboot
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot
由上查询的包信息可知配置文件路径和tftp的根目录
上面的多步操作中,修改了配置文件/etc/xinetd.d/tftp,将其中的disable改为no,见下图
然后启动了xinetd,也可以在xinetd启动后,修改了配置文件,采用重新装载xinetd,如下:
[root@localhost 6]# service xinetd status
xinetd (pid 3854) is running...
[root@localhost 6]# service xinetd help
Usage: /etc/init.d/xinetd {start|stop|status|restart|condrestart|reload}
[root@localhost 6]# service xinetd reload
Reloading configuration: [ OK ]
[root@localhost 6]# chkconfig --list
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
xinetd based services:
tftp: on
将测试文件test.txt放在tftp的根目录/var/lib/tftpboot下
[root@localhost ~]# tftp 192.168.23.1
tftp> get test.txt
tftp> quit
[root@localhost ~]# ls *.txt
test.txt
测试成功,删除根目录的测试文件
3、修改DHCP配置文件
修改并重新装载。next-server被用来指定一台服务器的主机地址,这台主机是filename指定的启动文件所在的服务器。
# dhcpd.conf
# option definitions common to all supported networks...
option domain-name "test.com";
option domain-name-servers 192.168.23.1;
default-lease-time 60000;
max-lease-time 72000;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# This is a very basic subnet declaration.
subnet 192.168.23.0 netmask 255.255.255.0 {
range 192.168.23.170 192.168.23.190;
option routers 192.168.23.1;
next-server 192.168.23.1;
filename "pxelinux.0;
}
[root@localhost ~]# service dhcpd configtest
Syntax: OK
[root@localhost ~]# service dhcpd force-reload
Shutting down dhcpd: [ OK ]
Starting dhcpd: [ OK ]
4、配置WEB服务器
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# chkconfig --list httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# 默认WEB站点根目录为/var/www/html
[root@localhost ~]# cat /etc/httpd/conf/httpd.conf | grep "/var/www/html"
DocumentRoot "/var/www/html"
四、PXE启动安装
1、pxelinux.0
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
2、在tftp服务的根目录中添加配置文件目录
名称为pxelinux.cfg。pxelinux搜索配置文件有一定的规则,pxelinux.cfg中的配置文件命名为default。而这个文件可以修改isolinux.cfg文件获得
[root@localhost ~]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cp /media/cdrom/isolinux/isolinux.cfg ./pxelinux.cfg/default
3、复制配置文件依赖的文件
[root@localhost tftpboot]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg,splash.jpg} ./
4、复制内核文件、ramdisk(注意文件的位置是pxeboot目录)
[root@localhost tftpboot]# cp /media/cdrom/images/pxeboot/{initrd.img,vmlinuz} ./
5、提供安装树
将kickstart文件、安装源、yum源挂载到WEB站点目录中,使PXE启动过程可以通过HTTP协议访问URL指向的资源。
[root@localhost html]# mkdir -pv /var/www/html/centos/6/x86_64/
mkdir: created directory `centos'
mkdir: created directory `centos/6'
mkdir: created directory `centos/6/x86_64'
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# cp /root/anaconda-ks.cfg /var/www/html/centos/6/centos6.cfg
[root@localhost html]# mount --bind /media/cdrom/ /var/www/html/centos/6/x86_64/
6、再次修改配置文件
1)修改/var/www/html/centos/6/centos6.cfg文件,全文如下
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.23.1/centos/6/x86_64"
# Root password
rootpw --iscrypted $1$nPoir2iZ$SnptkT7ZmEi7ldMq7OM3z/
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
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 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=200
part swap --fstype="swap" --size=2048
part / --fstype="ext4" --size=30000
repo --name="CentOS" --baseurl="http://192.168.23.1/centos/6/x86_64"
%packages
@Base
@Core
@base
@basic-desktop
@chinese-support
@client-mgmt-tools
@core
@desktop-platform
@fonts
@general-desktop
@graphical-admin-tools
@legacy-x
@network-file-system-client
@perl-runtime
@remote-desktop-clients
@x11
ibus-table-cangjie
ibus-table-erbi
ibus-table-wubi
lftp
%end
2)修改/var/lib/tftpboot/pxelinux.cfg/default
在缺省项后面增加ks=http://192.168.23.1/centos/6/centos6.cfg
7、启动HTTP服务
[root@localhost cdrom]# service httpd start
8、创建新虚拟机,调整BIOS,让从网卡启动,网络处于VMnet2中,网卡自动获取IP地址。
至此,PXE安装系统成功!
特别提醒:如果在BIOS中设置了网卡为启动第一项设备,一旦系统在硬盘安装成功,如果还是从网卡启动,有可能循环安装。
参考资料
PXE
http://www.novell.com/zh-cn/documentation/zcm10/zcm10_preboot_imaging/data/bvb2dvw.html
PXELINUX
http://www.syslinux.org/wiki/index.php/PXELINUX
kickstart
https://fedoraproject.org/wiki/Anaconda/Kickstart/zh-cn#Chapter_7._.E8.AE.A9.E5.AE.89.E8.A3.85.E6.A0.91.E5.8F.AF.E7.94.A8