从 Ubuntu 20.10 (Groovy Gorilla) 开始,Canonical 不再提供netboot.tar.gz
包和mini.iso
镜像。它们以前可用于通过 PXE 引导系统并通过预置配置自动运行 Debian 安装程序。
从 20.10 开始的 Ubuntu 版本如何通过 PXE 引导自动安装?
从 Ubuntu 20.10 (Groovy Gorilla) 开始,Canonical 不再提供netboot.tar.gz
包和mini.iso
镜像。它们以前可用于通过 PXE 引导系统并通过预置配置自动运行 Debian 安装程序。
从 20.10 开始的 Ubuntu 版本如何通过 PXE 引导自动安装?
介绍
现在需要使用常规的完整 ISO 映像,而不是使用特定于任务的小包。只有服务器安装程序 Subiquity 可以自动化,因此即使是桌面安装也需要使用服务器映像。
以下步骤适用于当前版本 21.04 (Hirsute Hippo)。对于未来版本,将所有出现的 替换为
21.04
您要安装的版本号。先决条件
将提供 PXE 文件、安装程序映像和自动安装配置的服务器计算机的先决条件:
pxelinux
_syslinux-efi
syslinux-common
提供 ISO 映像和自动安装配置
wget https://releases.ubuntu.com/21.04/ubuntu-21.04-live-server-amd64.iso
meta-data
并user-data
在目录中。user-data
使用https://ubuntu.com/server/docs/install/autoinstall-reference作为参考将您的自动安装配置写入文件准备和服务 PXE 环境
默认情况下,转到您的 TFTP 服务器服务的目录
/srv/tftp
将上一节下载的ISO镜像复制到当前目录
创建一些我们将在以下步骤中使用的目录:
mkdir -p iso_mount init boot/uefi boot/bios pxelinux.cfg
挂载映像并提取内核和 initrd:
准备 PXELINUX 文件以通过 UEFI 和 BIOS 引导:
配置 DHCP 服务器以将引导文件名设置
boot/uefi/syslinux.efi
为 UEFI 客户端和boot/bios/pxelinux.0
BIOS 客户端pxelinux.cfg/default
在类似于以下内容的位置创建 PXELINUX 配置。将尖括号中的 URL 替换为 Web 服务器的 URL:替换<iso url>
为 ISO 映像<autoinstall url>
的 URL 和包含自动安装配置的目录的 URL(包括尾部斜杠!)。将 PXELINUX 配置链接到
boot
UEFI 和 BIOS 的目录:结论
您现在应该能够通过 PXE 将 UEFI 和 BIOS 客户端引导到 Subiquity 安装程序中,然后它将根据您的自动安装配置自动运行。
桌面安装
如果您要安装桌面系统,则必须安装该
ubuntu-desktop
软件包。您还需要修复已安装系统中的网络配置,因为 Subiquity 启用
systemd-networkd
而不是NetworkManager
,这通常用于桌面系统:移除 Subiquity 创建的网络配置:
rm /etc/netplan/00-installer-config.yaml
创建一个
/etc/netplan/01-network-manager-all.yaml
包含以下内容的文件:运行
netplan apply
或重启好吧,我也可以对此发表看法……所以就这样吧!
介绍
下面是完整的 PXE 指南,从设置服务器和所有必需的服务到首次启动。它还包括Ubuntu 20.04.1 和 20.10的说明,包括Ubuntu 服务器的自动安装、服务器的交互式安装和桌面的实时启动(如“Live CD”的 PXE 版本)。指南已稍作修改,以将所有选项包含在一个具有所有变体的启动菜单中。解释了 BIOS 和 UEFI 方案。
我正在使用名为“lpxelinux”(第一个小写“L”)的 Syslinux 组件,它也支持从 HTTP 启动内核和初始化。
syslinux.efi
这个也已经有了。HTTP 可以实现更快的传输,并且使我们能够对文件进行一些不同的组织,以及其他一些小的优势(对于更大的实现)。这是完整的分步指南!
PXE 服务器 - Ubuntu 20.04.1 LTS
像往常一样安装 Ubuntu Server,从最小安装选项开始,但我通常启用 OpenSSH 服务器来启用远程管理。安装后确保完全更新
工具和要求
我们需要 TFTP 服务器、HTTP(S) 服务器和 DHCP 服务器。如果您已经拥有其他服务器,则可以使用它们,但为了便于跟踪,我们将在新安装的 Ubuntu 20.04.1 LTS 上安装所有内容
我选择了最受欢迎的套餐:
我们还需要获取 syslinux 文件。由于 Marian 的指南已经展示了如何从 apt 包中获取它们,为了完整起见,我将采用其他方式(您可以根据需要混合和匹配方法)。我们从官方获取文件
kernel.org
我利用这个机会为我们创建了一个临时目录
/root/pxe
和syslinux
它下面的目录。随意将这些文件放置在您希望的任何位置,只需确保在之后修改命令。SYSLINUX - LPXELINUX(文件)
接下来我们复制我们需要的文件。随意复制更多模块,但这些就足够了。
TFTPD 已经有一个我们将使用的目录,位于:
/var/lib/tftpboot/
将文件复制到不同的目录中(一些文件具有相同的名称但适用于不同的体系结构)
DHCP 服务器
DHCP 服务器本身应该有一个静态 IP。所以让我们这样做(如果您在安装期间没有这样做)。
编辑网络配置(YAML 文件):
内容:
应用配置:
接下来,我们需要为 DHCP 服务器的区域和池输入基本配置。我在这里进行了一些额外的配置,以向您展示您未来的 PXE 客户端可以位于与您的 PXE 服务器不同的子网中。就我而言,PXE 服务器(带有所有服务)位于
10.10.2.1
. 我有两个通过虚拟路由器连接的子网:10.10.1.0/24
和10.10.2.0/24
内容(只是一个例子):
注意:请根据您的情况修改文件!您必须拥有正确的子网、网关以及客户端的正确 MAC 地址(硬件地址)!
而且您需要设置 DHCP 守护程序将侦听
ip a
的接口,用于检查适合您的接口(我在eth0
)内容:
确保重新启动服务:
并使其在服务器重新启动时自动启动:
如果您有拼写错误或其他错误,例如重复的 IP 或客户端名称,则守护程序将失败。如果状态为红色,请检查日志。
可选 - 路由器设置
如果您有不同的子网,请确保添加
ip helper
DHCP,通常也像DHCP relay
大多数路由器一样设置。只需将其指向 PXE 服务器的 IP 地址(如果您的服务分布在多台服务器上,则将其指向一个拥有 DHCP 服务的服务器)。TFTP 服务器
我们需要为 TFTP 服务器设置基本的东西,但只有一个选项真正需要更改/检查 - 到您的 TFTP 根目录的路径
/var/lib/tftpboot
内容:
确保也重新启动服务。
并使其在服务器重新启动时自动启动:
如果您想确保一切正常,您可以使用 TFTP 客户端来测试服务。
SYSLINUX / (l)pxelinux 配置
我们需要一些配置来启动!每个架构至少需要一个
default
文件。我们将它们放在 TFTP 目录中文件内容:
注意我正在从 HTTP 服务器中提取
vmlinuz
和提取。initrd
同一台服务器托管 ISO 映像和我们的自动安装文件。接下来我们将设置此 Web 服务器,不用担心。由于
default
BIOS 和 UEFI 看起来相同,因此只需复制它(或根据需要链接它)。如果您将它们分开,您可以单独更改它们的选项。菜单也接受通过
include
选项链接。但是,如果您想要高级菜单,请阅读文档或更多文章。网络服务器 - HTTP(S)
我将描述简单的 HTTP 设置,但您可以稍后将其扩展到 HTTPS。如果您的环境未关闭,并且您在自动安装文件中设置了密码,则建议您这样做。对于基本实验室,我们使用 HTTP。
我们需要获取 ISO。由于我已经在菜单中同时放入了服务器和桌面,我将为每个 ISO 重复一次。我知道问题是关于服务器的,但额外内容不会伤害你。如果您只想要服务器或桌面,只需跳过另一个。
这适用于Ubuntu Server LTS 20.04.1
将内核和 initramfs(vmlinuz 和 initrd)提取到该发行版/变体/版本的子文件夹。您可以在多引导 PXE 菜单上拥有更多内容。
这适用于桌面 LTS 20.04.1
再次提取,注意我添加了不同的文件夹名称
以下是针对Ubuntu Server 20.10
提取文件,再次到单独的文件夹
最后,这是针对Ubuntu Desktop 20.10
再次提取文件,再次分离文件夹
应该是这样的。使用浏览器进行测试,看看您是否可以访问正确位置的文件。我们使用 Ubuntu 上的默认 Apache 目录来托管所有文件,因此不需要额外的步骤。
服务器 20.04 和 20.10 的自动安装文件
Ubuntu 文档说您可以简单地安装一台服务器,然后在文件中找到包含您选择的示例
/var/log/installer/autoinstall-user-data
文件。要在实验室进行测试,您可以使用该文件作为模板,但需要进行一些修改。
要获得最小的配置,您可以使用下面的代码(同样是 YAML 代码,如果进行手动编辑,请注意间距):
内容:
注意:此配置将使用主机名设置服务器
pxe-client
,用户名和密码均为pxe
. 服务器将没有网络(禁用 DHCP),因此它将在安装过程中跳过自动更新(以便更快地测试)。它将预装 OpenSSH 服务器,并使用密码登录。注意区域内容(hr
= 克罗地亚,因此我们为 apt 设置了克罗地亚镜像设置,以及克罗地亚键盘布局),为您的国家/地区调整它们。将您的示例/var/log/installer/autoinstall-user-data
视为模板以添加您自己的调整。Ubuntu
meta-data
也需要文件。它必须是空的。因此,只需在您放置user-data
文件的同一目录中创建它要查看更多选项,请参阅官方文档: https ://ubuntu.com/server/docs/install/autoinstall-reference
对于Ubuntu 20.10,一切都是一样的,只需复制代码,或者在正确的路径中创建它:
使用相同的用户数据样本,它们在 20.04 和 20.10 之间可以互换。还要注意双重
network: network:
部分.. 20.04 有一个错误,它需要这样的设置,而 20.10 没有这个错误,但支持这个作为向后兼容功能。检查您的文件
我建议您检查所有变体的所有文件是否到位:
服务器文件夹应该有 4 个文件:
桌面文件夹应该有 2 个文件:
如果您在启动时遇到问题,请检查上面列出的文件的权限。如果您正在做实验室,只需做不安全的事情,
chmod
并且所有这些都具有完整的 rw 权限:对于生产设置适当的权限,只需在需要的地方进行读取访问。
测试一切
在我的实验室环境中,以及在开始新的生产设置时,我首先在 VM 中测试这一切。我使用 Hyper-V 进行测试(我知道,杀了我,这里突然有微软的东西 :))。要测试 UEFI 引导,您需要创建
Generation 2
机器,而对于 BIOS 引导,您应该使用Generation 1
机器。确保向 VM 添加足够的 RAM 以容纳 RAMDISK!因此,如果 VM 使用 1.5GB RAM 磁盘测试服务器,那么 VM 需要 2GB RAM,而对于桌面,我们有 3GB RAM 磁盘,因此最好将 4GB RAM 连接到 VM。此外,请确保将网络接口连接到正确的网络,正如我之前提到的,我保留了一个虚拟路由器和多个子网,因为我需要测试和证明这一切,以便在相当大和复杂的环境中部署。无论如何,一旦你有了虚拟机 - 只需启动它!如果您做的一切正确,您应该会看到 PXE 启动、VM 获取 IP,然后启动菜单。30 秒后它将从磁盘启动,但只需使用箭头键选择一个选项。我在测试中发现 UEFI 启动方式更快,所以我通常使用 UEFI 进行测试,然后在 UEFI 到达我想要的位置时测试 BIOS VM。
把它包起来
直到现在我才承认我不是 Linux 大师。但在过去的一个半月里,我花了很多时间做 PXE 引导,并为它设置不同的环境。这是本教程中的纯 Ubuntu 堆栈。我打算写一个更面向微软的,但也基于 SYSLINUX 和多启动菜单,并允许我们启动(各种)Linux 发行版(除了 Windows)。所有这些都可以使用任何 DHCP/HTTP/TFTP 工具完成,包括 Microsoft Windows Server 2019,并在其上安装了几个角色(DHCP、IIS、WDS)。同样,您可以使用任何其他发行版作为您的 Ubuntu 安装的 PXE 服务器。如果您更喜欢例如,您也不需要使用 Apache2。nginx 作为你的 HTTP 服务器。
最后,我使用 Ubuntu 20.04 和 20.10 进行了所有测试。两个版本的整个设置完全相同。只需更改文件和 ISO 下载的名称。如果您只需要其中一个,请跳过不需要的部分。
狩猎愉快!
编辑:2020-11-14 - 添加了 Ubuntu 20.10 的所有内容,清理了一些代码,并为文件夹添加了更有意义的名称,因为我们现在正在处理 4 种不同的操作系统启动。