如何使用 PXE 引导通过网络安装 Fedora?
动机:目标系统的 BIOS 根本无法从 USB 大容量存储设备启动。另一个动机是通过网络启动更加方便。
挑战: LAN 已有一台无法更改的 DHCP 服务器,即不支持配置 PXE 相关选项的服务器(它是 Fritz Box 路由器的一部分)。
答案1
还可以设置一个代理 DHCP服务于PXE。这样,现有的DHCP服务器不需要改变。然后可以使用普通的Linux 系统(例如工作站)来托管预启动执行环境(PXE)。
设置 PXE 以进行网络引导需要执行以下步骤Fedora 网络安装镜像(假设也是 Fedora 主机):
验证图像
$ gpg --verify Fedora-Server-21-x86_64-CHECKSUM
$ sha256sum --check Fedora-Server-21-x86_64-CHECKSUM
Fedora-Server-netinst-x86_64-21.iso: OK
安装图像
mkdir /mnt/iso
mount -o loop Fedora-Server-netinst-x86_64-21.iso /mnt/iso
DHCP 设置
yum install dnsmasq tftp-server syslinux-tftpboot
该tftp-server
软件包仅用于创建目录/var/lib/tftpboot
,dnsmasq 已经集成了一个 tftp 服务器。
配置:
cat > /etc/dnsmasq.conf
interface=enp0s25
# and don't bind to 0.0.0.0
bind-interfaces
# extra logging
log-dhcp
dhcp-range=192.168.178.0,proxy
# first IP address is the one of the host
dhcp-boot=pxelinux.0,192.168.178.34,192.168.178.0
pxe-service=x86PC,"Automatic Network Boot",pxelinux
# Specify the IP address of another tftp server
enable-tftp
# default location of tftp-server on Fedora
tftp-root=/var/lib/tftpboot
# disable DNS
port=0
启动它:
systemctl start dnsmasq.service
设置TFTP目录
复制所有需要的文件:
cp /mnt/iso/images/pxeboot/initrd.img /var/lib/tftpboot
cp /mnt/iso/images/pxeboot/vmlinuz /var/lib/tftpboot
cp /tftpboot/pxelinux.0 /var/lib/tftpboot
cp /tftpboot/vesamenu.c32 /var/lib/tftpboot
cp /tftpboot/ldlinux.c32 /var/lib/tftpboot
cp /tftpboot/libcom32.c32 /var/lib/tftpboot
cp /tftpboot/libutil.c32 /var/lib/tftpboot
添加配置:
mkdir /var/lib/tftpboot/pxelinux.cfg
cat > /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
prompt 0
# disable timeout
timeout 0
#timeout 600
# if file is missing, this is ignored
display boot.msg
label linux
menu label Install Fedora 21 Server x86-64
kernel vmlinuz
append initrd=initrd.img inst.stage2=http://workstation.example.org/
设置 HTTP 服务器
yum install nginx
配置实例:
cat > /etc/nginx/conf.d/iso.conf
server {
listen 80 default_server;
server_name localhost;
root /mnt/iso ;
include /etc/nginx/default.d/*.conf;
}
禁用默认实例/将其移动到不同的端口:
--- a/nginx/nginx.conf
+++ b/nginx/nginx.conf
@@ -43,7 +43,7 @@ http {
include /etc/nginx/conf.d/*.conf;
server {
- listen 80 default_server;
+ listen 8080 default_server;
server_name localhost;
root /usr/share/nginx/html;
启动服务器:
systemctl start nginx.service
Fedora 安装程序 (dracut) 基本上只需要从该 http 服务器获取一个文件:
LiveOS/squashfs.img
配置Firewalld
firewall-cmd --add-service=http
firewall-cmd --add-service=dhcp
firewall-cmd --add-service=tftp
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --add-service=tftp --permanent
启动客户端
就是这样。已知客户端能够通过 PXE 进行网络启动并获取 Fedora 网络安装映像。
变化可能是:为全自动网络安装添加 kickstart 文件(并设置超时)、为不同客户端配置不同的 PXE 设置(基于 MAC 地址)等。
清理
可以停止守护进程并卸载环回映像:
systemctl stop nginx.service
systemctl stop dnsmasq.service
umount /mnt/iso
安全说明
此方法只能在可信的 Intranet 中执行,因为网络启动客户端通过 TFTP 和 HTTP 获取其配置和几个完全不安全的映像。