通过 PXE 网络启动服务器安装 Debian 9 (Stretch)
在此页
- 要求
- 初始配置
- 安装和配置 ISC-DHCP 服务器
- 安装 TFTP 服务器
- 部署 Debian 9 Netboot 文件
在本教程中,我们将指导您如何使用 Debian 存档镜像提供的互联网远程 HTTP 镜像源通过 PXE 服务器安装最新版本的 Debian 9 服务器。我们将在本教程中用于设置 PXE 环境的 DHCP 服务器将是 ISC-DHCP 服务器,网络引导 Debian 文件将由 TFTPD-HPA 服务器在本地网络上提供服务。通过 PXE 安装系统可以提高安装速度,在短时间内部署多个 Debian 安装或机器没有配备 CD/DVD ROM 单元的情况下。
要求
- Debian 9 安装在裸机或虚拟机上。
- 为网段配置了静态 IP 地址的网络接口,将用于动态分配 IP 地址和其他相关的 DHCP 和 PXE 设置。
- 具有 Debian 服务器根权限的本地或远程帐户,或通过服务器控制台直接访问根帐户或通过 SSH 远程访问。
- 通过网络安装 Debian 需要互联网连接。
初始配置
在第一步中,您需要确保我们将用于安装新服务器的 Debian 系统具有用于绑定到 DHCP 服务器的网络接口,并配置了静态 IP 地址。
为了手动配置您的网络接口卡,打开网络接口文件并使用您喜欢的文本编辑器编辑以下行,例如 nano。替换下面描述的 IP 设置行以匹配您自己的网络配置。
sudo nano /etc/network/interfaces
接口文件摘录:
auto ens33
iface ens33 inet static
address 192.168.1.102
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.2 8.8.4.4
dns-search debian.local

编辑网络接口文件后,保存并关闭文件并关闭网络接口,然后启动,通过发出以下命令来应用设置。假设您的网络接口卡名为 ens33,请发出以下命令以禁用和启用 NIC。
ifdown ens33
ifup ens33
要检查是否已为网络接口配置新的 IP 地址,请发出以下命令。
ip a

有时,IP 设置不会通过简单地重新启动网络守护程序或禁用和启用接口来应用。在这种情况下,您应该使用以下命令重新启动系统。
init 6
或者
systemctl reboot
您还应该通过发出以下命令来执行完整的系统更新:
apt update
apt upgrade
在下一步中,执行以下命令以安装一些必需的实用程序,这些实用程序将用于从命令行进一步管理您的系统。
apt install wget bash-completion unzip
安装和配置 ISC-DHCP 服务器
为了设置 DHCP 服务器和 PXE 配置,请使用 root 帐户或具有 root 权限的帐户登录系统,并通过发出以下命令安装 Debian 9 存储库提供的 isc-dhcp-server 软件包命令。
apt install isc-dhcp-server
现在备份 ISC-DHCP 服务器主配置文件并编辑 dhcpc 服务器配置文件以包含以下设置。
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.backup
nano /etc/dhcp/dhcpd.conf
dhcpcd.conf 文件摘录:
ddns-update-style none;
option option-128 code 128 = string;
option option-129 code 129 = text;
authoritative;
log-facility local7;
option arch code 93 = unsigned integer 16;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.100;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option ntp-servers 192.168.1.102;
option time-servers 192.168.1.102;
option domain-name "debian.local";
option domain-name-servers 192.168.1.1, 192.168.1.2;
allow booting;
allow bootp;
if option arch = 00:07 or option arch = 00:09 {
filename "bootnetx64.efi";
} else {
filename "pxelinux.0";
}
next-server 192.168.1.102;
#default lease 4H, max lease 8H
default-lease-time 14400;
max-lease-time 28800;
}
host nas {
hardware ethernet 00:17:a4:f6:b2:2e;
fixed-address 192.168.1.105;
}
在上面的配置文件中,相应地替换以下行。
subnet {..
range 192.168.1.50 192.168.1.100;
定义自己的网络范围,让DHCP给这个网段分配IP
option routers=设置您的网关 IP
option broadcast-address =设置您的网络广播地址
option subnet-mask = 设置您的网络子网掩码地址
选项 ntp-servers
option time-servers = 设置您的网络 NTP 服务器 IP 地址
option domain-name = 设置你的网络域名,如果有的话
option domain-name-servers = 设置您的网络 DNS 服务器 IP 地址
if option arch=00:07 or option arch=00:09 = 如果终端设备是基于 UEFI 的机器,启动使用 bootnetx64.efi 文件或使用 pxelinux.0 启动任何其他不基于 UEFI 的机器em>文件。这些机器通常是较旧的 BIOS 系统。
next-server 192.168.1.102 = 这是TFTP的IP地址服务器,其中可以在您的网络中找到文件 pxelinux.0 或 bootnetx64.efi 。在这种情况下,TFTP 服务器位于同一台机器上。
default-lease-time =在 IP 地址到期前授予 IP 地址的默认时间(以秒为单位)。
max-lease-time=在 IP 地址到期前授予 IP 地址的最长时间(以秒为单位)。
host nas {
hardware ethernet 00:17:a4:f6:b2:2e;
fixed-address 192.168.1.105;
}
这就是在 DHCP 服务器中声明静态 IP 地址的方式。具有由硬件以太网语句定义的 MAC 地址的设备将始终获得相同的 IP 地址。声明的主机名不重要。您可以使用任意字符串作为主机名。
然后打开/etc/default/目录下的isc-dhcp-server文件进行编辑,导航到在文件末尾,将配置有静态 IP 地址的网络接口卡添加到 IPv4 Interfaces 行,如下面的示例所述。确保添加适当的网络接口卡名称。使用 ip 或 ifconfig 命令列出您的机器网络接口并找到正确的名称。
nano /etc/default/isc-dhcp-server
isc-dhcp-server 默认文件摘录:
INTERFACESv4=”ens33”

最后,重新启动 DHCP 守护程序以应用更改。通过发出以下命令检查 DHCP 服务状态,以验证该服务是否已启动。
systemctl restart isc-dhcp-server.service
systemctl status isc-dhcp-server.service

此外,执行 ss 或 netstat 命令以列出 DHCP 服务器所有打开的套接字。
netstat –tulpn
ss –tulpn

如果您的系统中未安装 netstat 实用程序,请发出以下命令进行安装。
apt install net-tools
安装 TFTP 服务器
为了提供客户端通过 PXE 和 TFTP 远程引导 Debian 所需的网络引导文件,您还需要在系统中安装 TFTP 服务器。 tftpd-hpa 服务器是可用于 LAN 的最常见和最安全的 TFTP 服务器之一。可以从 Debian 9 提供的官方存储库安装 TFTP-HPA 软件包。执行以下命令在 Debian 9 中安装 tftpd-hpa 服务器。
apt install tftpd-hpa
软件包安装完成后,打开TFTPD-HPA默认配置文件,确保文件内容如下。
nano /etc/default/tftpd-hpa
tftpd-hpa 文件摘录:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

如果 TFTP_OPTIONS 行包含以下内容,请确保删除 --create 标志以保护 TFTP 服务器。
TFTP_OPTIONS="--secure --create"
create 标志允许远程客户端将文件上传到 tftp 服务器。此选项很危险,因为任意用户都可以从 TFTP 服务器根路径上传或删除文件。
最后,启用系统范围的服务并启动 TFTP 服务器并通过发出以下系列命令检查 tftp 守护进程状态:
systemctl enable tftpd-hpa
systemctl start tftpd-hpa
systemctl status tftpd-hpa

您还应该执行 netstat 或 ss 命令以列出系统中处于侦听状态的所有打开的网络套接字。 DHCP 和 TFTP 服务器所需的以下 UDP 端口应在您的网络堆栈中打开:67 和 69。您应该通过发出以下命令在防火墙中打开这些端口:
ufw allow 67/udp
ufw allow 69/udp
如果您使用 iptables 原始规则来管理 Debian 服务器中的防火墙策略,请添加以下规则以允许端口 67 和 69 UDP 入站流量通过防火墙,以便客户端可以访问 DHCP 和 TFTP服务器。
apt-get install iptables-persistent
iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p udp --dport 69 -j ACCEPT
systemctl iptables-persistent save
systemctl iptables-persistent reload
在下一步中,我们将通过发出以下命令来安装 Syslinux 引导加载程序实用程序。
apt install syslinux-utils syslinux
部署 Debian 9 网络引导文件
接下来,转到位于以下地址的 Debian netinstall 网页 https://www.debian.org/distrib/netinst 并使用 wget 命令行实用程序下载最新版本的 Debian netboot archive tarball。
wget http://ftp.nl.debian.org/debian/dists/stretch/main/installer-amd64/current/images/netboot/netboot.tar.gz

下载 Debian netinstall tarball 后,通过运行以下命令将存档内容直接解压缩到 TFTP 根路径。
tar xfz netboot.tar.gz -C /srv/tftp/
还将 Syslinux 包提供的 memdisk 文件复制到 TFTP 根路径,并通过发出以下命令列出 TFTP 目录的内容。 /srv/tftp 目录应具有如下屏幕截图所示的内容。
cp /usr/lib/syslinux/memdisk /srv/tftp/
ls /srv/tftp/

接下来,通过发出以下命令,为 Debian netinstall 软件包提供的 UEFI 引导加载程序文件创建一个符号链接到 TFTP 根路径。此外,列出 TFTP 目录的长列表以查看软链接是否正确指向 UEFI 网络引导文件。
ln -s /srv/tftp/debian-installer/amd64/bootnetx64.efi /srv/tftp/
ls -l /srv/tftp/

PXE 服务器从TFTP 根路径读取并执行位于pxelinux.cfg 目录中的配置文件,顺序为:GUID 文件、MAC 文件和默认文件。目录 pxelinux.cfg 已经创建并填充了所需的 PXE 默认配置文件,因为我们之前已经将所需的网络引导文件从 Debian 网络安装存档提取到 /srv/tftp 目录。无需进一步修改 pxelinux.cfg 目录中的 PXE 默认配置文件。但是,实际控制 Debian 初始启动菜单的文件名为 txt.cfg,位于 /srv/tftp/debian-installer/amd64/boot-screens/ 目录。 pxelinux.cfg 目录下的默认pxe配置文件其实是一个指向txt.cfg文件的软链接。 为了改变或添加在网络启动过程中传递给内核的其他选项或添加其他条目或通过 PXE 服务器启动其他 Linux 发行版,您应该使用以下命令打开默认的 txt.cfg PXE 配置文件并进行适当的更改。
nano /srv/tftp/debian-installer/amd64/boot-screens/txt.cfg
txt.cfg 文件摘录:
label install
menu label ^Install
kernel debian-installer/amd64/linux
append vga=788 initrd=debian-installer/amd64/initrd.gz --- quiet
如果您想通过 PXE 使用 Debian 救援模式,请使用以下配置向该文件添加一个条目。
label rescue
menu label ^Rescue mode
kernel debian-installer/amd64/linux
append vga=788 initrd=debian-installer/amd64/initrd.gz rescue/enable=true --- quiet
要添加以专家模式或使用自动安装模式通过网络启动 Debian 所需的条目,请将更多配置添加到 txt.cfg 文件,如以下摘录所示。
专家安装:
label expert
menu label ^Expert install
kernel debian-installer/amd64/linux
append priority=low vga=788 initrd=debian-installer/amd64/initrd.gz ---
include debian-installer/amd64/boot-screens/rqtxt.cfg
自动安装:
label auto
menu label ^Automated install
kernel debian-installer/amd64/linux
append auto=true priority=critical vga=788 initrd=debian-installer/amd64/initrd.gz --- quiet
此外,通过检查此文件的内容,您会看到 kernel 和 initrd.gz 映像,通过TFTP网络协议加载到客户端RAM内存中,在初始PXE菜单之后,位于/srv/tftp/debian-installer/amd64/ 目录下。您只能更改这两个文件以用于将来更新 Debian 内核和 initrd.gz。
就这样!现在可以通过网络启动客户端机器,使用通过 DVD 映像启动 Debian 时通常显示的所有条目,并开始通过 PXE 服务器安装 Debian 9。
为了实时查看客户端和服务器之间交换的 DHCP 日志消息,对系统 syslog 文件使用 tail 命令。 DHCP 服务器将其所有日志消息丢弃到 syslog 文件中。可以通过 daemon.log 文件观察 TFTP 服务器日志消息。下面的屏幕截图说明了 DHCP 和 TFTP 服务器发出的日志消息的摘录。
tailf /var/log/syslog
tailf /var/log/daemon.log


您还可以执行以下命令以查看 TFTP 服务器生成的日志消息。
journalctl -fu tftpd-hpa
要显示有关 DHCP 服务器授予其客户端的租约的扩展信息,请使用 cat 命令显示 dhcpd.leases 文件的内容,如下例所示。
cat /var/lib/dhcp/dhcpd.leases

就这样!您已在网络中成功部署了 PXE 服务器。您现在可以通过指示客户端计算机通过 PXE 启动来开始通过网络安装 Debian。您可以通过在机器 POST 初始化期间按特殊功能键来网络引导客户端机器。请查阅您的机器主板供应商文档以找出正确的网络启动密钥。
通过网络安装 Debian 的过程与通过 DVD ISO 映像或使用可引导 USB 闪存驱动器安装系统的过程非常相似(只有一些细微差别)。