一、何为PXE
Preboot Eexcution Environment,简称PXE,暂且翻译为预启动执行环境。用一句话来概括PXE的功能——它能通过网络为计算机(特别是“裸机”)安装操作系统。在PXE下,“裸机”的BIOS和网卡能通过网络来引导启动自身,而不是通过传统的磁盘引导方式。PXE的这种功能大大简化了服务器的部署和管理流程。
那么在PXE下,一台计算机如何引导启动?这其中涉及到DHCP、NBP、TFTP等多项技术。这些技术细节将在文档的后面部分讲述,这里以客户机(client端,即裸机)为主体,大致介绍PXE的工作流程。
PXE工作流程
- client端向本网络的DHCP服务器获取IP及NBP的存放路径
- client端向TFTP服务器请求下载NBP
- client端执行NBP,并向TFTP服务器请求下载系统镜像、配置文件等
- client端根据配置文件,执行引导过程
二、注意事项
1. 本文档中命令均以root身份执行!
2. 请不要直接复制本文档中的命令!
三、配置环境
1. 配置server端
1. 本文档中命令均以root身份执行!
2. 请不要直接复制本文档中的命令!
三、配置环境
1. 配置server端
三、配置环境
1. 配置server端
使用virtualbox创建一台虚拟机,命名为pxe-server。它作为整个引导过程的服务端——同时充当DHCP服务端、TFTP服务端和HTTP服务端。
1.1 系统版本
Ubuntu-16.04.2-server-amd64
1.2 网卡配置
安装好系统后,对网卡进行如下配置。
1.2.1 网卡1
连接方式选择“仅主机(Host-Only)网络”,随意选择一个界面名称,我在这里选择的是192.168.202.0/24网段,混杂模式选择“全部允许”。
1.2.2 网卡2
连接方式选择“网络地址转换(NAT)”。
编辑/etc/network/interfaces文件:
...
# The primary network interface
auto enp0s3
iface enp0s3 inet static
address 192.168.202.131
netmask 255.255.255.0
auto enp0s8
iface enp0s8 inet dhcp
重启两张网卡:
ifup enp0s3 enp0s8
2. 配置client端
使用virtualbox创建一台虚拟机,命名为pxe-client。它实际上是一台裸机,在整个引导过程中,在client端上起重要作用的是BIOS和网卡。
2.1 网卡配置
连接方式选择“仅主机(Host-Only)网络”,选择和server端相同的界面名称,混杂模式选择“全部允许”。
四、配置DHCP服务
在引导过程中,client端的BIOS会使用DHCP,向server端的DHCP服务器发送请求,为client端的网卡申请到到一个IP地址,并且定位到网络引导程序(Network Bootstrap Program, NBP)在server端的存放路径。关于NBP,地位等同于传统磁盘引导中的boot loader,NBP在真实环境中的文件名一般为pxelinux.0
。
以下是server端上,配置DHCP服务的详细步骤:
1. 安装DHCP服务包
apt install isc-dhcp-server
2. 配置DHCP服务的网卡
apt install isc-dhcp-server
编辑/etc/default/isc-dhcp-server文件(修改最后一行):
...
INTERFACES="enp0s3"
3. 配置IP地址池
编辑/etc/dhcp/dhcpd.conf文件(先注释掉原有内容):
...
ddns-update-style interim;
ignore client-updates;
default-lease-time 600;
max-lease-time 7200;
allow booting;
allow bootp;
subnet 192.168.202.0 netmask 255.255.255.0 {
range 192.168.202.200 192.168.202.250;
option routers 192.168.202.131;
option subnet-mask 255.255.255.0;
# address of tftp server
next-server 192.168.202.131;
# name of NBP
filename "pxelinux.0";
}
五、配置TFTP服务
TFTP是一个简单的文件传输协议。在引导过程中,client端获取到NBP的存放路径后,使用TFTP从server端下载NBP,系统内核和文件系统也由TFTP服务器提供。本文档中,NBP将存放在TFTP服务器的默认根目录/var/lib/tftpboot
下。
以下是server端上,配置TFTP服务的详细步骤:
1. 安装TFTP服务包
apt install inetutils-inetd tftpd-hpa pxelinux
2. 编辑/etc/inetd.conf文件
apt install inetutils-inetd tftpd-hpa pxelinux
在最后一行添加:
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
3. 编辑/etc/default/tftpd-hpa文件
在最后添加:
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"
4. 重启TFTP服务
service tftp restart
六、配置HTTP服务
service tftp restart
在server端,通过HTTP服务向client端提供系统安装过程中需要的包。当然也可以使用FTP、NFS等其他方式。
1. 安装HTTP服务包
apt install apache2
apt install apache2
HTTP服务的根目录默认为/var/www/html。
七、组建PXE服务环境
1. 挂载镜像
在server端准备一份镜像,并把它挂载到合适的路径。
mkdir /media/cdrom
mount -o loop /root/ubuntu-16.04.2-server-amd64.iso /media/cdrom
注:我的镜像存放在/root/目录下,挂载到/media/cdrom目录。
2. 拷贝镜像文件
将镜像文件、配置文件拷贝到适当路径,如下:
cp -a /media/cdrom/install/netboot/* /var/lib/tftpboot/
cp -a /media/cdrom/* /var/www/html
3. 修改配置文件——default
编辑/var/lib/tftpboot/pxelinux.cfg/default文件,注释掉其中以default
开头的一行。
编辑/var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg文件(修改第6行):
...
append ks=http://192.168.202.131/ks.cfg vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet live-installer/net-image=http://192.168.202.131/install/filesystem.squashfs
4. 修改配置文件——ks.cfg
在/var/www/html/目录下创建并编辑ks.cfg文件,进行如下最小化配置:
install
text
lang en_US
langsupport en_US
keyboard us
mouse
timezone --utc Asia/Shanghai
rootpw --disabled
user xxx --fullname="xxx" --password xxx
reboot
url --url http://192.168.202.131
bootloader --location=mbr
zerombr yes
clearpart --all --initlabel
part /boot --fstype ext4 --size 200
part swap --size 1024
part / --fstype ext4 --size 1 --grow
auth --useshadow --enablemd5
network --bootproto=dhcp --device=enp0s3 --onboot=on --nameserver=192.168.202.131
firewall --disabled
skipx
%packages
@^minimal
@core
八、启动客户机
启动client端机器,按F12
进入引导方式选择界面,再按l
开始网络引导,之后就进入自动部署安装阶段,OK!
注:引导初期,会有一次开机硬件自检。这里需要手动跳过为网卡设置nameserver的步骤。
更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146442.htm