使用PXE方式引导Ubuntu系统

一、何为PXE

Preboot Eexcution Environment,简称PXE,暂且翻译为预启动执行环境。用一句话来概括PXE的功能——它能通过网络为计算机(特别是“裸机”)安装操作系统。在PXE下,“裸机”的BIOS和网卡能通过网络来引导启动自身,而不是通过传统的磁盘引导方式。PXE的这种功能大大简化了服务器的部署和管理流程。

那么在PXE下,一台计算机如何引导启动?这其中涉及到DHCP、NBP、TFTP等多项技术。这些技术细节将在文档的后面部分讲述,这里以客户机(client端,即裸机)为主体,大致介绍PXE的工作流程。

PXE工作流程

  1. client端向本网络的DHCP服务器获取IP及NBP的存放路径
  2. client端向TFTP服务器请求下载NBP
  3. client端执行NBP,并向TFTP服务器请求下载系统镜像、配置文件等
  4. client端根据配置文件,执行引导过程

二、注意事项

1. 本文档中命令均以root身份执行!

2. 请不要直接复制本文档中的命令!


三、配置环境

1. 配置server端

使用virtualbox创建一台虚拟机,命名为pxe-server。它作为整个引导过程的服务端——同时充当DHCP服务端、TFTP服务端和HTTP服务端。

1.1 系统版本

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服务的网卡

编辑/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文件

在最后一行添加:

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服务

在server端,通过HTTP服务向client端提供系统安装过程中需要的包。当然也可以使用FTP、NFS等其他方式。

1. 安装HTTP服务包

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的步骤。

猜你喜欢

转载自www.linuxidc.com/Linux/2017-08/146442.htm