![Debian 12(书虫)来自 iPXE](https://linux22.com/image/791004/Debian%2012%EF%BC%88%E4%B9%A6%E8%99%AB%EF%BC%89%E6%9D%A5%E8%87%AA%20iPXE.png)
我使用本指南来设置我的 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 安装程序的当前(工作)解决方案集成即可。
答案1
感谢 Martin 的指点,终于可以运行了。
现在这是一个非本地解决方案(因此您需要在客户端建立互联网连接才能下载安装媒体),仍然在本地安装媒体和预置上工作。如果我可以运行,我会更新这篇文章。
就像我在原帖中说的一样,我按照以下方法设置了一个 iPXE 环境这指南。如果您不需要 Ubuntu,请跳过最后的步骤,下载 iso,将其复制到 /os-images 文件夹并将其添加到 boot.ipxe 文件中的菜单中。
如果已经设置了 PXE 环境,请创建一个文件夹来放置 debian 网络启动文件,将 debian 网络启动 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 驱动程序。我所做的是从 tarball firmware.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 文件夹并将示例预置文件放入其中:
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
你可以找到一些预先的信息这里
答案2
并非每个 iso 都可以通过网络启动,使用 NFS 来挂载根文件系统 - 这里的问题不是 pxe 环境,而是 debian-installer。我在我的环境中测试了上述 iso,遇到了与您相同的问题。使用 shell,我发现安装系统当时甚至没有加载网卡驱动程序,因此很明显无法挂载 rootfs - 安装程序缺少访问网络所需的内核模块 - 这可能是所有文档在涉及网络安装时都
提到使用的原因。netboot.tar.gz
答案3
普通答案(例如 VirtualBox)比 @Vinnie230979 的答案简单得多。您需要做的就是从中提取文件https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/netboot.tar.gz并将其放入用于启动映像的目录中。
就我而言,我使用的是 PXELinux。我的默认设置是:
menu begin Debian 12
LABEL Install Debian 12
MENU LABEL Install Debian 12
KERNEL images/debian12/debian-installer/amd64/linux
APPEND vga=788 initrd=images/debian12/debian-installer/amd64/initrd.gz
menu end
这Debian 安装程序tar 文件中的目录被放入我的 debian12 目录中图片,其中有我的 ISO 等。