如何 pxe 启动 Fedora 25 救援

lie*_*ndp 2 fedora nfs pxe

由于超出我理解水平的原因,我似乎无法通过 pxe 启动 Fedora 25 的救援实例。在无数次尝试使用工作站版本之后,我又回到了服务器 DVD,因为最后,我唯一需要的是启动 pxe fedora 以在我的本地磁盘分区上工作。唉,那里没有运气。

目前正在 append 行中寻找不同关键字的确切含义。(pxe, grub, ...) 希望找到正确的魔法公式,但我的 googlefu 似乎也让我失望。

其他发行版没有问题,但我想了解为什么 Fedora 如此痛苦。

即:在 centos7 pxe (nfs) 上启动救援非常简单:

LABEL c7r
  kernel centos/7/vmlinuz
  append initrd=centos/7/initrd.img method=nfs:192.168.16.252:/pxedev/centos/7 rescue
Run Code Online (Sandbox Code Playgroud)

在 Fedora 25 上的一些尝试:

LABEL f25r
  kernel fedora/25s/vmlinuz
  append initrd=fedora/25s/initrd.img ip=dhcp root=nfs:192.168.16.252:/pxedev/fedora25s/ rescue
Run Code Online (Sandbox Code Playgroud)

从 PXE (nfs) 安装并不困难:

LABEL f25ws
  kernel fedora/25/vmlinuz
  append initrd=fedora/25/initrd.img ip=dhcp inst.stage2=nfs:192.168.16.252:/pxedev/fedora25/
Run Code Online (Sandbox Code Playgroud)

所以我错过了 Fedora 25 的 pxe 救援所需的信息。对于服务器版本,我下载了 dvd:“Fedora-Server-dvd-x86_64-25-1.3.iso”,然后我将其完全解压缩到文件夹中并获取来自“images/pxeboot”目录的内核和initramfs。

小智 5

TL;DR 是你忘记给它提供救援图像的 inst.stage2 参数。initrd的和内核都没有足够的启动Fedora的救援模式,它需要蟒蛇的第二阶段的加载器。更换你的root=nfs东西,inst.stage2=nfs:192.168.16.252:/pxedev/fedora25/你应该去参加比赛。

更长的答案:

PXE 启动有点挑战,因为它需要很多活动部件:

  1. 能够分发 next-server 参数的 DHCP 服务器。
  2. 一个工作的 TFTP 服务器
  3. 内核映像和初始 ramdisk 的副本
  4. 提供已挂载 ISO 映像内容的功能性 HTTP 服务器(NFS 可用作替代方案)

接下来是我如何使它工作。

软件安装

dnf -y install dhcp-server tftp-server httpd syslinux-tftpboot

ISC DHCPd 部分

注意:YMMV 与其他 DHCP 服务器。

next-server参数是您的 TFTP 服务器的 IP。

Subnet 192.168.0.0 netmask 255.255.255.0 { 
     range 192.168.0.100 192.168.0.200;
     option routers 192.168.0.1;
     class "pxeclients" {
            match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
            next-server 192.168.0.2;
            filename "pxelinux.0";
    }
}
Run Code Online (Sandbox Code Playgroud)

TFTPd 部分

Fedora 将 TFTP 根目录放在 中/var/lib/tftpboot,您需要在其中创建几个目录来包含启动映像和 pxe 配置。

我通常将我的子目录设置为这样: $OSVER/$ARCH这样我就可以在任何给定时间启动多个版本的 Fedora PXE。

然后,和您一样,我将ISO 映像目录中的initrdvmlinuz文件复制images/pxelinux到 tftpboot 的相应子目录中。

接下来,在您的 tftpboot 目录中,创建一个名为pxelinux.cfg. 在此目录中,您将创建名为default. 在此文件中,您将生成类似于以下内容的条目:

default vesamenu.c32
prompt 0
timeout 100
label local
  menu label Boot from ^local drive
  localboot 0xffff
label f25_x86_64
  menu label Fedora 25 x86_64 (Generic)
  kernel f25/x86_64/vmlinuz
  append initrd=f25/x86_64/initrd.img repo=http://192.168.0.2/os/fedora/25/x86_64/ ks=http://192.168.0.2/ks/f25-x86_64-ks.cfg
label f25_rescue
  menu label Fedora 25 ^Rescue Mode
  kernel f25/x86_64/vmlinuz
  append initrd=f25/x86_64/initrd.img inst.stage2=http://192.168.0.2/os/fedora/25/x86_64 rescue
Run Code Online (Sandbox Code Playgroud)

第 2 阶段的映像足够大,以至于通过 PXE 传送它们偶尔会出现问题,因此我通过 HTTP 传送它们。

接下来,由于 syslinux-tftpboot 出于某种原因不知道 tftp-server 的不同根目录,因此您需要将所有*.c32文件从移动/tftpboot//var/lib/tftpboot

HTTPD 部分

通过 HTTPD 获取可用的 ISO 映像:

最简单的方法是mkdir /var/www/html/os/fedora/$FEDORAVERSION/$ARCH,然后mount -o loop,uid=48,gid=48,mode=0755 /path/to/fedora-server.iso /var/www/html/os/fedora/$FEDORAVERSION/$ARCH

一旦配置并启用所有守护程序,繁荣,它就可以工作了。

如果你想启动 Fedora 27,你基本上可以sed -r -e s/25/27/g在上面的所有配置上,它会工作。