![制作自定义安装介质的 USB 副本,通过 PXE 提供给客户端](https://linux22.com/image/725754/%E5%88%B6%E4%BD%9C%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AE%89%E8%A3%85%E4%BB%8B%E8%B4%A8%E7%9A%84%20USB%20%E5%89%AF%E6%9C%AC%EF%BC%8C%E9%80%9A%E8%BF%87%20PXE%20%E6%8F%90%E4%BE%9B%E7%BB%99%E5%AE%A2%E6%88%B7%E7%AB%AF.png)
我之前曾搜索过有人在这里问过这个问题,发现有两个问题与此类似。其中一个问题没有得到回答,似乎已被放弃。另一个问题暗示可以通过编辑 initrd 来实现,并提到没有现成的实用程序,因为这项任务并不简单。关于第一个问题,我不认为该人有权在他的网络上执行此操作,因为这是向原作者提出的最后一个问题。我有完全的权限在这个网络上做我想做的事,因为它属于我。至于第二个问题,答案是不完整的,基本上相当于“没有应用程序可以为你做这件事,自己做很难”。
我有一台 Linux 部署服务器,并使用 PXE 将自定义的 Linux 安装部署到客户端。安装通过压缩文件和 kickstart 文件进行自定义,以创建最终安装的客户端映像。我还有一个安装映像,它是通过 chroot 到 squashfs 来自定义的,以便 apt 安装软件。
我想知道是否有办法在 PXE 菜单中包含一个选项,以允许某人插入 USB 驱动器并复制 PXE 服务器提供的安装程序媒体。
我能想到的实现此目的的唯一方法是编译所有单独部分和文件的 ISO,将它们托管在服务器上,提供一个菜单项供选择,然后启动到最小的 Linux 实例,然后将 ISO 拉取并 dd 到 USB 媒体。
由于内存限制,我不想在服务器上托管 ISO,并且想知道是否还有其他选项可以让我使用现有的设置完成此任务。
谢谢
答案1
PXE 通过 TFTP 与服务器建立连接以下载引导代码。
您只需要一个轻量级 Linux(例如 ISOLinux)作为启动选项。使用 shell 脚本为 ISOLinux 创建启动菜单,用于格式化/分区 USB 棒,然后从 PXE TFTP 服务器将启动映像加载到 USB 棒上。
TFTP 不提供列出目录内容的方法,但您可以在服务器上创建一个包含可用启动映像列表的 txt/cfg 文件,然后您的菜单系统使用 TFTP 查找此文件,以创建它可以提供的 USB 记忆棒的菜单列表。