概念解说
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户?)基本软件设置,从而引导预先安装在服务器中的终端操作系统。
其实说的简单点,不需要光驱、U盘、软盘,而是直接通过网络来安装操作系统。
pxe服务器由三种服务组成:DHCP、TFTP、HTTP/FTP/NFS等。
DHCP:负责给将要安装操作系统的客户机分配IP地址,以及指定TFTP服务器;
TFTP:负责传输引导程序、内核、驱动程序等小文件传输给客户机;
HTTP/FTP/NFS:负责将安装操作系统所需要软件包等大文件传输给客户机。
这三种服务可以同时搭建在同一台服务器上,也可以分别搭建在不同的服务器上;还可以分别部署在不同的平台上,如DHCP服务由Windows系统提供,TFTP搭建在Linux平台,HTTP由Unix系统提供服务;甚至分别可以由不同的设备提供,如路由器提供DHCP服务,手机提供TFTP服务,服务器提供HTTP服务。
部署环境
pxe服务器:CentOS6.7 x86_64系统,三个服务同时搭建在这台主机上,IP地址 192.168.150.20;
待安装的客户机:CentOS6.7 x86_64系统。
部署过程
首先在国内阿里云开源镜像网站下载CentOS6.7 x86_64的ISO镜像,手工安装一台服务器作为pxe的服务器平台。
下载地址:http://mirrors.aliyun.com/centos/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD1.iso
如果链接失效,请移步 http://vault.centos.org 寻找镜像。
系统手工安装过程,此处不再讲述。系统安装完成后,为服务器配置静态IP地址(注意,这里一定要配置为静态IP地址,不能使用通过的dhcp获取的动态IP地址。)与DNS服务器后,测试网络连通后使用SecureCRT远程登录,配置系统yum源。删除/etc/yum.repos.d/目录下所有文件 rm -f /etc/yum.repos.d/* ,添加/etc/yum.repos.d/CentOS6.7-x86_64.repo文件,内容如下:
[base]
name=CentOS-6.7-x86_64
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
这里baseurl参数,yum的地址最重要,任然使用阿里云开源镜像提供的yum地址。如果http://mirrors.aliyun.com/centos/链接失效,请移步http://vault.centos.org 。
执行yum clean all后,安装以下四个软件包。
yum install dhcp tftp-server httpd syslinux -y
安装完成后,开始pxe服务器的配置。
DHCP服务的配置:
向配置文件/etc/dhcp/dhcpd.conf添加以下内容:
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option arch code 93 = unsigned integer 16; # RFC4578
subnet 192.168.150.0 netmask 255.255.255.0 {
range 192.168.150.180 192.168.150.240;
option routers 192.168.150.1;
option domain-name-servers 202.96.134.33,202.96.128.86;
default-lease-time 600;
max-lease-time 1800;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server 192.168.150.20;
if option arch = 00:06 {
filename "bootia32.efi";
} else if option arch = 00:07 {
filename "bootx64.efi";
} else {
filename "pxelinux.0";
}
}
host bonn {
filename "yaboot";
next-server 192.168.150.20;
hardware ethernet 00:0e:91:51:6a:26;
fixed-address 192.168.150.241;
}
}
这里网段必须是该服务器配置的IP地址同一个网段或子网,掩码要一致。(绿色框内是重要的配置)
range为可分配的IP地址范围,option domain-name-servers 为dns服务器地址,option routers为网关地址,option broadcast-address为广播地址,default-lease-time 600为IP地址租期最短10分钟,max-lease-time 1800为IP地址租期最长30分钟,next-server指定dhcp服务器地址,这里是本机。filename为引导程序文件。
更多有关pxe详细配置参数,见Red Hat官方安装文档 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-netboot-pxe-config.html#s1-netboot-pxe-config-bios
配置TFTP服务:
编辑配置文件/etc/xinetd.d/tftp,修改disable参数处的yes为no,即启用tftp服务。/var/lib/tftpboot为tftp默认的主目录。
添加引导文件、安装软件包:
从开源镜像下载CentOS6.7系统镜像ISO文件到该服务器,下载地址参考前面提到的。
curl -O http://mirrors.aliyun.com/centos/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD1.iso
下载完成后,创建/var/www/html/os/centos6.7-x86_64目录,挂载ISO镜像到/media目录,将目录下所有文件拷贝到centos6.7-x86_64目录。
mkdir -p /var/www/html/os/centos6.7-x86_64
mount -o loop CentOS-6.7-x86_64-bin-DVD1.iso /media/
cp -r /media/* /var/www/html/os/centos6.7-x86_64/
创建/var/lib/tftpboot/pxelinux目录,并拷贝引导程序文件。
cp /media/EFI/BOOT/BOOTX64.efi /var/lib/tftpboot/bootx64.efi
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
mkdir -p /var/lib/tftpboot/kernel
mkdir -p /var/lib/tftpboot/image
cp /media/isolinux/vmlinuz /var/lib/tftpboot/kernel/vmlinuz.centos6.7-x86_64
cp /media/isolinux/initrd.img /var/lib/tftpboot/image/initrd.centos6.7-x86_64.img
从本章下载附件msg文件包,将msgs文件夹解压到/var/lib/tftpboot/目录下。
unzip msgs.zip -d /var/lib/tftpboot/
编辑boot.msg文件,增加用于安装CentOS6.7系统的菜单1
新建/var/lib/tftpboot/pxelinux.cfg目录和/var/lib/tftpboot/pxelinux.cfg/default文件,内容如下:
default 0
prompt 1
timeout 600
display msgs/boot.msg
####### Boot from local driver #################
label 0
localboot 0xffff
###### Install CentOS6.7 x86_64 #######
label 1
kernel kernel/vmlinuz.centos6.7-x86_64
ipappend 2
append initrd=image/initrd.centos6.7-x86_64.img ks=http://192.168.150.20/os/centos6.7-x86_64/ks.cfg ip=dhcp ksdevice=bootif
获取kickstart文件:
以下有三种方式可以获取到kickstart文件。
通过system-config-kickstart工具标准配置得到
如果该服务器没有安装图形环境,使用yum安装yum groupinstall "Desktop" -y,然后安装system-config-kick软件包。
yum install system-config-kickstart -y
在控制台(本地)登录命令行直接键入startx立即进入桌面环境;如果要远程登录访问桌面环境,需要借助vnc或xmanager等工具,配置请参考网络搜索。
进入桌面环境后,点击左上角应用程序-系统工具-终端,来打开虚拟终端命令行工具。
在命令行键入 system-config-kickstart 来打开kickstart图形话配置工具
在基本配置里配置默认语言、键盘类型、时区(是否使用UTC时钟)、root用户的密码以及安装完系统后自动重启选项。
安装介质里配置全新安装、http方式的安装源,http服务器地址,以及http目录。
分区信息里配置
清楚主引导记录,移除所有分区,初始化所有磁盘标签,最后点击手动添加分区。
挂在点根分区,文件系统类型默认ext4,可指定磁盘创建分区,容量大小24GB,这里默认单位MB,换算24GB*1024=24576MB,选项强制为主分区,格式化分区。
确认后再次添加交换分区,文件系统类型swap,建立在默认第一块磁盘sda,大小8GB,即8192MB。
最后分区概览如下
网络配置,添加右侧添加网络设备。
默认第一块网卡命名eth0
防火墙配置,用于开发和测试环境可禁用selinux与防火墙服务。
软件包选择,可勾选基本-基本、兼容库、debugging工具等。
语言,建议勾选中文支持。
系统管理勾选,这里并不限制,也可以安装完系统配置yum源后,再次安装需要的软件包。
安装后脚本,这里可添加在完成系统安装后,运行一些脚本。interpreger为运行环境,默认为bash环境,下面键入脚本内容。
保存位置可选为/root目录,文件名为ks.cfg。
最后ctrl+q退出system-config-kickstart软件。查看ks.cfg文件内容,主要分三个部分:安装时的系统配置、安装后执行的脚本、选择安装的软件包。
也可以直接对ks.cfg文件根据需求进行修改。
利用anaconda-ks.cfg文件生成kickstart文件:
一个无论采用何种方式安装出的CentOS系统,在/root目录下会有anaconda-ks.cfg文件,其实跟我们需要的ks.cfg文件内容一样,这个文件是这个系统根据安装时的配置参数生成的文件,作适当的修改保存为ks.cfg文件。
将ks.cfg文件拷贝到/var/www/html/os/centos6.7-x86_64/目录下
cp /root/ks.cfg /var/www/html/os/centos6.7-x86_64/
最后启动dhdp、tftp、http服务,关闭防火墙、selinux。
/etc/init.d/dhcpd start
/etc/init.d/xinetd restart
/etc/init.d/httpd start
/etc/init.d/iptables stop
setenforce 0
将所有待安装系统的客户机的网络与pxe服务器接入同一交换机,交换机端口必须为access模式;在复杂的网络环境,交换机端口可能配置为trunk模式,则需要在网关上配置dhcp终极代理,指向dhcp服务,否则将无法获取到ip地址。
客户机开机从网卡启动,一般默认按F12键,建议参阅服务器使用手册。当检测到接线网卡,并正常获取到ip地址后,则出现安装菜单。
这里直接键入数字1后回车,客户机载入引导程序开始自动安装系统。
几分钟后即可看到自动安装过程,安装完成后系统自动重启,无需人工操作。