AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1148217
Accepted
Vinnie230979
Vinnie230979
Asked: 2023-11-20 18:57:18 +0800 CST2023-11-20 18:57:18 +0800 CST 2023-11-20 18:57:18 +0800 CST

来自 iPXE 的 Debian 12(书虫)

  • 772

我使用本指南来设置我的 iPXE 服务器:https://linuxhint.com/pxe_boot_ubuntu_server/
它是在虚拟 Ubuntu (20.4.6) 桌面系统上设置的,经过一些测试,它非常适合 PXE 引导和安装 Ubuntu 22.4 和 20.4 在不同的客户端系统上。

但是,我无法让 Debian (12.2.0) 工作。

我下载了以下完整(3.7GB)iso:
https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-12.2.0-amd64-DVD-1.iso
并将其提取到/os-images/debian-12.2.0-amd64

然后我编辑了 boot.ipxe 文件并添加了一个 debian 菜单项:

:debian-12.2.0-amd64  
set os_root os-images/debian-12.2.0-amd64  
kernel tftp://${server_ip}/${os_root}/install.amd/vmlinuz  
initrd tftp://${server_ip}/${os_root}/install.amd/initrd.gz  
imgargs vmlinuz initrd=initrd.gz ip=dhcp root=${server_ip}:${root_path}/${os_root}  
boot

现在它部分起作用了:

在我的客户端上,它启动到选择菜单。
当我选择 Debian 安装时,它会启动 debian 安装程序。
它问我 3 个问题(语言、国家/地区和键盘映射),我使用默认值回答。
然后,在检测到安装介质的短暂屏幕后,它在蓝色屏幕上等待几秒钟,然后出现一条通知:

[!!] 检测并安装安装介质

因此,安装程序似乎无法找到 Debian 介质。
我在使用谷歌时尝试了很多不同的论点imgargs。
但是,我似乎找不到与我拥有的 iPXE 环境相同的系统设置。大多数示例都使用 netboot.tar.gz,或者是旧 Debian 版本的示例。我不确定,但我认为我能找到的示例不适用于我的设置,因为它已经从 TFTP 启动。我的说法正确吗?

我确实喜欢从本地媒体安装它,因为该网络旨在与互联网断开连接。但是,如果太困难,我也可以使用远程媒体,只要我可以将其与 ubuntu 安装程序的当前(工作)解决方案集成即可。

ipxe
  • 2 2 个回答
  • 76 Views

2 个回答

  • Voted
  1. Martin
    2023-11-20T20:39:21+08:002023-11-20T20:39:21+08:00

    并非每个 iso 都可以通过网络启动,使用 NFS 挂载根文件系统 - 这里的问题不是 pxe 环境,而是 debian-installer。我在我的环境中测试了上面的 iso,并遇到了与您相同的问题。
    通过 shell,我发现安装系统当时甚至没有加载网卡驱动程序,因此无法安装 rootfs 的原因就很明显了 - 安装程序缺少访问网络所需的内核模块 -这可能就是为什么所有文档都提到netboot.tar.gz在网络安装时使用的原因。

    • 0
  2. Best Answer
    Vinnie230979
    2023-11-21T18:08:12+08:002023-11-21T18:08:12+08:00

    感谢马丁的指点,让它工作起来。
    它现在是一个非本地解决方案(因此您需要在客户端有互联网连接才能下载安装介质),仍然使用本地安装介质和预置。如果我能做到这一点,我会更新这篇文章。

    正如在我原来的帖子中一样,我按照本指南设置了 iPXE 环境。如果您不需要 Ubuntu,请跳过下载 iso 的最后步骤,将其复制到 /os-images 文件夹并将其添加到 boot.ipxe 文件中的菜单中。

    如果 PXE 环境已设置,请创建一个要放置 debian netboot 文件的文件夹,将 debian netboot tarball 下载到其中,解压并清理它:

    sudo mkdir -pv /pxeboot/os-images/debian-12.2.0-amd64-netinst      
    cd /pxeboot/os-images/debian-12.2.0-amd64-netinst
    sudo wget https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/netboot.tar.gz
    sudo tar -xzvf netboot.tar.gz
    sudo rm netboot.tar.gz
    

    我遵循了这个示例,这也会创建该环境可能不需要的链接,但我还是这样做了:

    sudo ln -s debian-installer/amd64/grubx64.efi .
    sudo ln -s debian-installer/amd64/grub .
    

    此时,我开始测试(下面将显示 boot.ipxe 菜单项),并发现我的客户端 PC 需要一些额外的 NIC 驱动程序。我所做的是添加 tarballfirmware.cpio.gz 中的所有驱动程序,但我认为您也可以只添加特定的驱动程序。完整的设置使得启动速度非常慢,因为客户端必须将它们全部下载。
    简而言之:您必须将驱动程序添加到 initrd.gz
    这就是我的做法:

    cd debian-installer/amd64
    sudo [ -f initrd.gz.orig ] || sudo cp -p initrd.gz initrd.gz.orig
    sudo [ -f firmware.cpio.gz ] || sudo wget https://cdimage.debian.org/cdimage/firmware/bookworm/current/firmware.cpio.gz
    sudo bash -c 'cat initrd.gz.orig firmware.cpio.gz > initrd.gz'
    

    编辑boot.ipxe:

    sudo nano /pxeboot/config/boot.ipxe
    

    添加 debian 安装程序菜单项:

    :debian-12.2.0-amd64-netinst
    set os_root os-images/debian-12.2.0-amd64-netinst/debian-installer/amd64
    kernel tftp://${server_ip}/${os_root}/linux
    initrd tftp://${server_ip}/${os_root}/initrd.gz
    imgargs linux initrd=initrd.gz ip=dhcp root=${server_ip}:${root_path}/${os_root}
    boot
    

    现在我的客户端可以很好地启动并进入正常运行的 Debian 安装程序。如前所述,现在我将了解如何添加预置,然后可能使用本地安装介质。如果有人已经知道该怎么做:请告诉我!

    更新: 也设法让预种子工作。从 tftp 检索该文件时遇到了很多麻烦,但当它尝试检索预置文件时,网络接口似乎未启动。我在 poot.ipxe 中的 debian 菜单项现在如下:

    :debian-12.2.0-amd64-netinst
    set os_root os-images/debian-12.2.0-amd64-netinst/debian-installer/amd64
    kernel tftp://${server_ip}/${os_root}/linux priority=critical interface=auto netcfg/dhcp_timeout=200 language=en country=NL locale=en_GB.UTF-8 keymap=us preseed/url=tftp://${server_ip}/preseeds/preseed-deb12.2.0.cfg
    initrd tftp://${server_ip}/${os_root}/initrd.gz
    boot
    

    请注意,如果没有priority=critical, netcfg/dhcp_timeout=200它将无法获取预置文件。

    您需要添加 /pxeboot/preseeds 文件夹并将示例 preseed 文件添加到其中:

    sudo mkdir /pxeboot/preseeds
    cd /pxeboot/preseeds
    sudo wget https://www.debian.org/releases/bookworm/example-preseed.txt
    sudo cp example-preseed.txt preseed-deb12.2.0.cfg
    

    现在它已设置完毕,您可以根据配置需要编辑预置文件:

    sudo nano preseed-deb12.2.0.cfg
    

    您可以在这里找到一些预置信息

    • 0

相关问题

  • UEFI iPXE 引导到 debian 会导致 grub shell

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve