通过 PXE 启动进行 Fedora 网络安装

通过 PXE 启动进行 Fedora 网络安装

如何使用 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 获取其配置和几个完全不安全的映像。

相关内容