如何通过PXE网络引导和自动安装来安装最新的Ubuntu版本?

从Ubuntu 20.10(Groovy Gorilla)开始,Canonical不再提供netboot.tar.gz包和mini.iso镜像。以前可以使用它们通过PXE引导系统,并通过预配置的preseed配置自动运行Debian Installer。
如何通过PXE引导自动安装Ubuntu 20.10及更高版本?
2个回答

介绍

现在不再需要使用特定于任务的小型软件包,而是需要使用常规的完整ISO镜像。只有服务器安装程序Subiquity可以自动化,因此即使进行桌面安装,也需要使用服务器镜像。

以下步骤适用于当前版本21.04(Hirsute Hippo)。对于将来的版本,请将所有出现的21.04替换为您想要安装的版本号。

先决条件

在将提供PXE文件、安装程序镜像和自动安装配置的服务器机器上,需要满足以下先决条件:

  • 一个正常工作的TFTP服务器和相应的DHCP配置
  • 一个正常工作的Web服务器
  • 已安装pxelinuxsyslinux-efisyslinux-common软件包

提供ISO镜像和自动安装配置

  1. 下载完整的实时服务器映像:wget https://releases.ubuntu.com/21.04/ubuntu-21.04-live-server-amd64.iso
  2. 将ISO映像复制到您的Web服务器上
  3. 在Web服务器上创建一个目录来保存自动安装配置。在该目录中创建文件meta-datauser-data
  4. 使用https://ubuntu.com/server/docs/install/autoinstall-reference作为参考,将自动安装配置写入user-data文件中

准备和提供PXE环境

  1. 进入您的TFTP服务器所提供的目录,默认为/srv/tftp

  2. 将在前一节中下载的ISO镜像复制到当前目录

  3. 创建一些我们将在接下来的步骤中使用的目录:mkdir -p iso_mount init boot/uefi boot/bios pxelinux.cfg

  4. 挂载镜像并提取内核和initrd:

    mount -o loop ubuntu-21.04-live-server-amd64.iso iso_mount/
    cp -p iso_mount/casper/vmlinuz init/
    cp -p iso_mount/casper/initrd init/
    umount iso_mount
    
  5. 准备用于通过UEFI和BIOS引导的PXELINUX文件:

    # UEFI
    cp -p /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi boot/uefi
    cp -p /usr/lib/syslinux/modules/efi64/ldlinux.e64 boot/uefi
    cp -p /usr/lib/syslinux/modules/efi64/libcom32.c32 boot/uefi
    cp -p /usr/lib/syslinux/modules/efi64/libutil.c32 boot/uefi
    cp -p /usr/lib/syslinux/modules/efi64/vesamenu.c32 boot/uefi
    
    # BIOS
    cp -p /usr/lib/PXELINUX/pxelinux.0 boot/bios
    cp -p /usr/lib/syslinux/modules/bios/ldlinux.c32 boot/bios
    cp -p /usr/lib/syslinux/modules/bios/libcom32.c32 boot/bios
    cp -p /usr/lib/syslinux/modules/bios/libutil.c32 boot/bios
    cp -p /usr/lib/syslinux/modules/bios/vesamenu.c32 boot/bios
    
  6. 配置DHCP服务器,将引导文件名设置为boot/uefi/syslinux.efi(用于UEFI客户端)和boot/bios/pxelinux.0(用于BIOS客户端)

  7. pxelinux.cfg/default中创建一个类似以下的PXELINUX配置。将尖括号中的URL替换为您的Web服务器的URL:将<iso url>替换为ISO镜像的URL,将<autoinstall url>替换为包含自动安装配置的目录的URL(包括尾部斜杠!)。

    DEFAULT vesamenu.c32
    PROMPT 0
    NOESCAPE 1
    
    MENU TITLE PXE系统安装
    
    LABEL Ubuntu 21.04
      MENU LABEL ubuntu_21.04
      KERNEL ../../init/vmlinuz
      INITRD ../../init/initrd
      APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=<iso url> autoinstall ds=nocloud-net;s=<autoinstall url>
    
  8. 将PXELINUX配置链接到UEFI和BIOS的boot目录中:

    ln -s ../../pxelinux.cfg boot/uefi/pxelinux.cfg
    ln -s ../../pxelinux.cfg boot/bios/pxelinux.cfg
    

结论

现在,您应该能够通过PXE将UEFI和BIOS客户端引导到Subiquity安装程序中,并根据您的自动安装配置自动运行。

桌面安装

如果您正在安装桌面系统,则需要安装ubuntu-desktop软件包。

您还需要修复已安装系统中的网络配置,因为Subiquity启用了systemd-networkd而不是通常在桌面系统上使用的NetworkManager

  1. 删除Subiquity创建的网络配置:rm /etc/netplan/00-installer-config.yaml

  2. 创建一个名为/etc/netplan/01-network-manager-all.yaml的文件,内容如下:

    # 让NetworkManager管理系统上的所有设备
    network:
      version: 2
      renderer: NetworkManager
    
  3. 运行netplan apply或重新启动


你就在我试图让它工作的时候写这个。所以请!如果我不想继续自动安装,而是想要看到安装程序的图形界面,该怎么办?显然我需要添加一些内容... 我删除了带有 "autoinstall ds=nocloud-net..." 部分,它停在一个地方无法启动。如果我添加 "boot=casper ide=nodma" 仍然一样。我正在使用虚拟机(UEFI和BIOS)进行测试,两者都在 [ OK ] Finished Set console font and keymap 后停止运行。但之后没有显示任何安装程序。 - LuxZg
@LuxZg 我试过了,只是在 PXELINUX 配置中省略 autoinstall ds=nocloud-net;s=<autoinstall url> 这部分,安装程序的用户界面就会显示出来。所以你避免自动安装并进行手动安装的方法是正确的。很抱歉,我无法解释为什么在这种情况下安装程序会卡住。你可以尝试将此作为一个单独的问题发布。 - Marian Rainer-Harbach
1谢谢,看起来我需要调试一下.. 我刚刚尝试了桌面ISO,它成功地启动到了实时桌面。明天我会尝试完全自动安装服务器。非常棒的教程! - LuxZg
1只是确认一下,如果以后有其他人阅读的话,这只是一个小故障,无论是20.04还是20.10都可以正常启动到交互式安装界面,设置相同,只需从pxelinux.cfg菜单中的APPEND字符串中删除autoinstall,即可将其设置为交互式安装。可能是服务器/服务重启清除了导致问题的任何错误。 - LuxZg

好的,我可以给出我的看法...所以我开始吧!

介绍

以下是一个完整的PXE指南,从设置服务器和所有必需的服务,到首次启动。它还包括了对Ubuntu 20.04.1和20.10的说明,包括自动安装Ubuntu服务器、交互式安装服务器和桌面的实时引导(类似于"PXE版Live CD")。指南稍作修改,将所有选项都包含在一个引导菜单中,并提供了所有变体。同时解释了BIOS和UEFI场景。 注意:Ubuntu 22.10 - 有关Ubuntu 22.10的更改,请滚动到底部。

我正在使用名为"lpxelinux"(第一个小写字母"L")的Syslinux组件,它支持从HTTP引导内核和init。 syslinux.efi也已经具备了这个功能。HTTP可以实现更快的传输,还可以使我们对文件进行稍微不同的组织,以及其他一些较大规模实施中的一些小优势。

这是一个完整的逐步指南!

PXE服务器 - Ubuntu 20.04.1 LTS

按照通常的方式安装Ubuntu服务器,选择最小安装选项开始,但我通常会启用OpenSSH服务器以便进行远程管理。安装完成后,请确保对其进行完全更新。
sudo su
apt-get update && apt-get upgrade -y

工具和要求

我们需要TFTP服务器、HTTP(S)服务器和DHCP服务器。如果您已经有其他服务器,可以使用它们,但为了方便起见,我们将在新安装的Ubuntu 20.04.1 LTS上安装所有内容。

我选择了最受欢迎的软件包:

apt-get install tftpd-hpa apache2 isc-dhcp-server

我们还需要获取syslinux文件。由于Marian的指南已经展示了如何从apt软件包中获取这些文件,为了完整起见,我将采取其他方式(您可以根据需要混合和匹配方法)。我们从官方的kernel.org获取文件。
mkdir /root/pxe
mkdir /root/pxe/syslinux
cd /root/pxe/syslinux
wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
tar -xf syslinux-6.03.tar.gz
cd syslinux-6.03/
ll

我利用这个机会为我们创建了一个临时目录,位于/root/pxe下面的syslinux目录。请随意将这些文件放在任何你希望的地方,只需确保之后修改命令即可。 SYSLINUX - LPXELINUX(文件) 接下来,我们复制需要的文件。请随意复制更多模块,但这些已经足够了。
TFTPD已经有一个我们将使用的目录,位于:/var/lib/tftpboot/ 将文件复制到那里,在不同的目录中(一些文件具有相同的名称,但是用于不同的架构)。
# files for 64bit uefi
mkdir /var/lib/tftpboot/efi64
cp /root/pxe/syslinux/syslinux-6.03/efi64/efi/syslinux.efi /var/lib/tftpboot/efi64
cp /root/pxe/syslinux/syslinux-6.03/efi64/com32/menu/menu.c32 /var/lib/tftpboot/efi64
cp /root/pxe/syslinux/syslinux-6.03/efi64/com32/menu/vesamenu.c32 /var/lib/tftpboot/efi64
cp /root/pxe/syslinux/syslinux-6.03/efi64/com32/libutil/libutil.c32 /var/lib/tftpboot/efi64
cp /root/pxe/syslinux/syslinux-6.03/efi64/com32/elflink/ldlinux/ldlinux.e64 /var/lib/tftpboot/efi64
cp /root/pxe/syslinux/syslinux-6.03/efi64/com32/lib/libcom32.c32 /var/lib/tftpboot/efi64
cd /var/lib/tftpboot/efi64
ll

# files for 32bit bios
mkdir /var/lib/tftpboot/bios
cp /root/pxe/syslinux/syslinux-6.03/bios/core/lpxelinux.0 /var/lib/tftpboot/bios
cp /root/pxe/syslinux/syslinux-6.03/bios/com32/menu/menu.c32 /var/lib/tftpboot/bios
cp /root/pxe/syslinux/syslinux-6.03/bios/com32/menu/vesamenu.c32 /var/lib/tftpboot/bios
cp /root/pxe/syslinux/syslinux-6.03/bios/com32/libutil/libutil.c32 /var/lib/tftpboot/bios
cp /root/pxe/syslinux/syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 /var/lib/tftpboot/bios
cp /root/pxe/syslinux/syslinux-6.03/bios/com32/lib/libcom32.c32 /var/lib/tftpboot/bios
cd /var/lib/tftpboot/bios
ll

DHCP服务器

DHCP服务器本身应该具有静态IP。因此,让我们这样做(如果您在安装过程中没有完成)。

编辑网络配置(YAML文件):

nano /etc/netplan/00-installer-config.yaml

内容:

# This is the network config written by 'subiquity'
network:
  ethernets:
    eth0:
      addresses: [10.10.2.1/24]
      gateway4: 10.10.2.99
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
  version: 2

应用配置:
netplan apply

下一步,我们需要输入DHCP服务器区域和池的基本配置。我在这里进行了一些额外的配置,以向您展示将来的PXE客户端可以位于与PXE服务器不同的子网中。在我的情况下,PXE服务器(具有所有服务)位于10.10.2.1。我有两个通过虚拟路由器连接的子网:10.10.1.0/2410.10.2.0/24
nano /etc/dhcp/dhcpd.conf

内容(仅为示例):

# minimal sample /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;

subnet 10.10.1.0 netmask 255.255.255.0 {
 range 10.10.1.110 10.10.1.120;
 option routers 10.10.1.99;
 option domain-name-servers 1.1.1.1, 8.8.8.8;
# option domain-name "mydomain.example";
}

subnet 10.10.2.0 netmask 255.255.255.0 {
 range 10.10.2.110 10.10.2.120;
 option routers 10.10.2.99;
 option domain-name-servers 1.1.1.1, 8.8.8.8;
# option domain-name "mydomain.example";
}

# pxe client, uefi64
host uefi-client {
  hardware ethernet fa:fa:fa:00:0e:07;
  fixed-address 10.10.1.201;
  next-server 10.10.2.1;
  filename "efi64/syslinux.efi";
}

# pxe client, bios
host bios-client {
  hardware ethernet fa:fa:fa:00:0e:17;
  fixed-address 10.10.2.202;
  next-server 10.10.2.1;
  filename "bios/lpxelinux.0";
}

请注意:根据您的情况修改文件!您必须拥有正确的子网、网关以及客户端的正确MAC地址(硬件地址)!
您还需要设置DHCP守护程序将要监听的接口,请使用“ip a”命令检查哪个接口适合您(我使用的是“eth0”)。
nano /etc/default/isc-dhcp-server

内容:

INTERFACESv4="eth0"
INTERFACESv6=""

确保重新启动服务:
systemctl restart isc-dhcp-server.service
systemctl status isc-dhcp-server.service

并使其在服务器重新启动时自动启动:

systemctl enable isc-dhcp-server.service

如果您有拼写错误或其他错误,例如重复的IP地址或客户名称,守护程序将无法正常运行。如果状态为红色,请检查日志。
tail -n 100 /var/log/syslog

可选 - 路由器设置

如果您有不同的子网,请确保为DHCP添加ip helper,在大多数路由器中通常设置为DHCP relay。只需将其指向您的PXE服务器的IP地址(如果您的服务分布在多个服务器上,则指向持有DHCP服务的服务器)。

TFTP服务器

我们需要为TFTP服务器设置基本内容,但只有一个选项真正需要更改/检查 - 指向根TFTP目录的路径/var/lib/tftpboot

nano /etc/default/tftpd-hpa

内容:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
#TFTP_DIRECTORY="/srv/tftp"
# /var/lib/tftpboot
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

确保也重新启动服务。
systemctl restart tftpd-hpa

并使其在服务器重新启动时自动启动:
systemctl enable tftpd-hpa

如果你想确定一切都正常,你可以使用TFTP客户端来测试服务。 SYSLINUX / (l)pxelinux配置文件 我们需要一些配置文件来启动!至少,每个架构我们需要一个default文件。我们将它们放在TFTP目录中。
mkdir /var/lib/tftpboot/efi64/pxelinux.cfg
mkdir /var/lib/tftpboot/bios/pxelinux.cfg
touch /var/lib/tftpboot/efi64/pxelinux.cfg/default
touch /var/lib/tftpboot/bios/pxelinux.cfg/default
nano /var/lib/tftpboot/efi64/pxelinux.cfg/default

文件内容:

DEFAULT menu.c32
 PROMPT 0
 
 MENU TITLE PXE Boot Menu
 MENU COLOR TABMSG    37;40 #80ffffff #00000000
 MENU COLOR HOTSEL    30;47 #40000000 #20ffffff
 MENU COLOR SEL       30;47 #40000000 #20ffffff
 MENU COLOR SCROLLBAR 30;47 #40000000 #20ffffff
 MENU WIDTH 80
 MENU MARGIN 22
 MENU PASSWORDMARGIN 26
 MENU ROWS 6
 MENU TABMSGROW 15
 MENU CMDLINEROW 15
 MENU ENDROW 24
 MENU PASSWORDROW 12
 MENU TIMEOUTROW 13
 MENU VSHIFT 6
 NOESCAPE 1
 ALLOWOPTIONS 0
 MENU AUTOBOOT Starting Local System in # seconds
 
 LABEL bootlocal
  MENU LABEL ^Local Boot
  MENU DEFAULT
  LOCALBOOT 0
 TIMEOUT 300
 TOTALTIMEOUT 3000
 
 LABEL UbuntuServer-20.04.1-auto
  MENU LABEL Ubuntu 20.04.1 Live Auto Installer
  KERNEL http://10.10.2.1/ubuntu-server-20.04.1/vmlinuz
  INITRD http://10.10.2.1/ubuntu-server-20.04.1/initrd
   APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://10.10.2.1/ubuntu-20.04.1-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://10.10.2.1/ubuntu-server-20.04.1/
 
 LABEL UbuntuServer-20.04.1-interactive
  MENU LABEL Ubuntu 20.04.1 Live Interactive Installer
  KERNEL http://10.10.2.1/ubuntu-server-20.04.1/vmlinuz
  INITRD http://10.10.2.1/ubuntu-server-20.04.1/initrd
  APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://10.10.2.1/ubuntu-20.04.1-live-server-amd64.iso
 
 LABEL UbuntuDesktop-20.04.1-live
  MENU LABEL Ubuntu 20.04.1 Desktop Live CD
  KERNEL http://10.10.2.1/ubuntu-desktop-20.04.1/vmlinuz
  INITRD http://10.10.2.1/ubuntu-desktop-20.04.1/initrd
  APPEND root=/dev/ram0 ramdisk_size=3000000 boot=casper ip=dhcp netboot=url url=http://10.10.2.1/ubuntu-20.04.1-desktop-amd64.iso
 
 LABEL UbuntuServer-20.10-auto
  MENU LABEL Ubuntu 20.10 Live Auto Installer
  KERNEL http://10.10.2.1/ubuntu-server-20.10/vmlinuz
  INITRD http://10.10.2.1/ubuntu-server-20.10/initrd
   APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://10.10.2.1/ubuntu-20.10-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://10.10.2.1/ubuntu-server-20.10/
 
 LABEL UbuntuServer-20.10-interactive
  MENU LABEL Ubuntu 20.10 Live Interactive Installer
  KERNEL http://10.10.2.1/ubuntu-server-20.10/vmlinuz
  INITRD http://10.10.2.1/ubuntu-server-20.10/initrd
  APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://10.10.2.1/ubuntu-20.10-live-server-amd64.iso
 
 LABEL UbuntuDesktop-20.10-live
  MENU LABEL Ubuntu 20.10 Desktop Live CD
  KERNEL http://10.10.2.1/ubuntu-desktop-20.10/vmlinuz
  INITRD http://10.10.2.1/ubuntu-desktop-20.10/initrd
  APPEND root=/dev/ram0 ramdisk_size=3000000 boot=casper ip=dhcp netboot=url url=http://10.10.2.1/ubuntu-20.10-desktop-amd64.iso

注意,我正在从HTTP服务器上获取vmlinuzinitrd。同一台服务器托管ISO镜像和我们的自动安装文件。不用担心,我们接下来会设置这个Web服务器。
由于BIOS和UEFI的default看起来是一样的,所以只需复制它(或者如果你愿意,可以链接它)。
cp /var/lib/tftpboot/efi64/pxelinux.cfg/default /var/lib/tftpboot/bios/pxelinux.cfg/default

如果您将它们分开,您可以分别更改它们的选项。菜单还接受通过 include 选项进行链接。但如果您想要高级菜单,请阅读文档或更多文章。
Web服务器-HTTP(S)
我将描述简单的HTTP设置,但您可以稍后将其扩展到HTTPS。如果您的环境不是封闭的,并且您在自动安装文件中设置了密码,则建议使用HTTPS。对于基本实验室,我们使用HTTP。
我们需要提取ISO。由于我已在菜单中放置了服务器和桌面,因此我将为每个ISO重复一次。我知道问题是关于服务器的,但额外的内容不会伤害您。如果您只想要服务器或桌面,请跳过其他部分。
这是为Ubuntu Server LTS 20.04.1的。
wget https://releases.ubuntu.com/20.04.1/ubuntu-20.04.1-live-server-amd64.iso -O /var/www/html/ubuntu-20.04.1-live-server-amd64.iso

提取内核和initramfs(vmlinuz和initrd)到该发行版/变体/版本的子文件夹中。您可以在多启动PXE菜单上拥有更多选项。
mount /var/www/html/ubuntu-20.04.1-live-server-amd64.iso /mnt/
mkdir /var/www/html/ubuntu-server-20.04.1
cp /mnt/casper/vmlinuz /var/www/html/ubuntu-server-20.04.1/
cp /mnt/casper/initrd /var/www/html/ubuntu-server-20.04.1/
umount  /mnt

这是针对 桌面LTS 20.04.1

wget https://releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso -O /var/www/html/ubuntu-20.04.1-desktop-amd64.iso

再次提取,注意我添加了不同的文件夹名称。
mount /var/www/html/ubuntu-20.04.1-desktop-amd64.iso /mnt/
mkdir /var/www/html/ubuntu-desktop-20.04.1
cp /mnt/casper/vmlinuz /var/www/html/ubuntu-desktop-20.04.1/
cp /mnt/casper/initrd /var/www/html/ubuntu-desktop-20.04.1/
umount  /mnt

以下内容适用于Ubuntu Server 20.10。
wget https://releases.ubuntu.com/20.10/ubuntu-20.10-live-server-amd64.iso -O /var/www/html/ubuntu-20.10-live-server-amd64.iso

提取文件,再次放在一个单独的文件夹中。
mount /var/www/html/ubuntu-20.10-live-server-amd64.iso /mnt/
mkdir /var/www/html/ubuntu-server-20.10
cp /mnt/casper/vmlinuz /var/www/html/ubuntu-server-20.10/
cp /mnt/casper/initrd /var/www/html/ubuntu-server-20.10/
umount  /mnt

最后这是针对Ubuntu Desktop 20.10的。
wget https://releases.ubuntu.com/20.10/ubuntu-20.10-desktop-amd64.iso -O /var/www/html/ubuntu-20.10-desktop-amd64.iso

再次将文件提取出来,放到另一个文件夹中。
mount /var/www/html/ubuntu-20.10-desktop-amd64.iso /mnt/
mkdir /var/www/html/ubuntu-desktop-20.10
cp /mnt/casper/vmlinuz /var/www/html/ubuntu-desktop-20.10/
cp /mnt/casper/initrd /var/www/html/ubuntu-desktop-20.10/
umount  /mnt

就是这样了。使用您的浏览器进行测试,看看是否可以正确访问文件。我们在Ubuntu上使用默认的Apache目录来托管所有文件,因此不需要额外的步骤。

Server 20.04和20.10的自动安装文件

Ubuntu文档中说,您只需安装一个服务器,然后在/var/log/installer/autoinstall-user-data文件中找到一个带有您选择的示例文件。

要在实验室中进行测试,您可以将该文件用作模板,但需要进行一些修改。

如果只需要最小配置,可以使用下面的代码(再次提醒,这是YAML代码,请注意手动编辑时的空格):

nano /var/www/html/ubuntu-server-20.04.1/user-data

内容:

#cloud-config
autoinstall:
  version: 1
  apt:
    geoip: true
    preserve_sources_list: false
    primary:
    - arches: [amd64, i386]
      uri: http://hr.archive.ubuntu.com/ubuntu
    - arches: [default]
      uri: http://ports.ubuntu.com/ubuntu-ports
  identity: {hostname: pxe-client, password: $6$zN/uHJD1rEXD/ETf$q8CoBt3xXmBT37RslyWcpLT1za4RJR3QEtosggRKN5aZAAf6/mYbFEQO66AIPm965glBXB1DGd0Sf.oKi.Rfx/,
    realname: pxe, username: pxe}
  keyboard: {layout: hr, toggle: null, variant: ''}
  locale: en_US
  network:
    network:
      version: 2
      ethernets:
        eth0:
          dhcp4: no
          dhcp6: no
  ssh:
    allow-pw: true
    install-server: true

注意:此配置将使用主机名pxe-client设置服务器,用户名和密码均为pxe。服务器将没有网络(禁用DHCP),因此在安装过程中将跳过自动更新(以便更快地进行测试)。并且它将预先安装OpenSSH服务器,并启用密码登录。请注意区域设置(hr = 克罗地亚),因此我们为apt设置了克罗地亚镜像,并使用克罗地亚键盘布局,请根据您的国家进行调整。请参考示例/var/log/installer/autoinstall-user-data作为模板,添加您自己的调整。
Ubuntu还需要一个meta-data文件。它必须为空。因此,请在放置user-data文件的同一目录中创建它。
touch /var/www/html/ubuntu-server-20.04.1/meta-data

要查看更多选项,请参阅官方文档: https://ubuntu.com/server/docs/install/autoinstall-reference 对于Ubuntu 20.10,一切都是相同的,只需复制代码或在正确的路径中创建即可。
nano /var/www/html/ubuntu-server-20.10/user-data
touch /var/www/html/ubuntu-server-20.10/meta-data

使用相同的用户数据样本,它们在20.04和20.10之间是可以互换的。还要注意双重network: network:部分。20.04存在一个错误,需要这样的设置,而20.10没有这个错误,但支持此作为向后兼容功能。
检查您的文件
我建议您检查是否有所有变体的文件都放置正确:
ll /var/www/html/ubuntu-server-20.04.1/
ll /var/www/html/ubuntu-desktop-20.04.1/
ll /var/www/html/ubuntu-server-20.10/
ll /var/www/html/ubuntu-desktop-20.10/

服务器文件夹应该有4个文件:
initrd
meta-data
user-data
vmlinuz

桌面文件夹应该有2个文件:

initrd
vmlinuz

如果您在启动时遇到问题,请检查上述文件的权限。如果您正在进行实验,请放心地执行不安全的操作,并使用完全读写权限对其进行chmod设置。
chmod -R 777 /var/www/html/*

为生产设置适当的权限,只提供需要的读取访问。

测试全部内容

在我的实验环境以及开始新的生产设置时,我首先在虚拟机中进行所有测试。我使用 Hyper-V 进行测试(我知道,突然间用了微软的东西 :))。要测试 UEFI 引导,请创建 第二代 虚拟机;要测试 BIOS 引导,请使用 第一代 虚拟机。确保为虚拟机添加足够的内存来容纳 RAMDISK!例如,如果虚拟机正在测试具有 1.5GB RAM 磁盘的服务器,则需要为虚拟机分配 2GB 内存;对于桌面,我们有 3GB 的 RAM 磁盘,因此最好将 4GB 内存附加到虚拟机上。此外,请确保将网络接口连接到正确的网络,正如我之前提到的,我保留了一个虚拟路由器和多个子网,因为我需要在相当大型和复杂的环境中测试并验证所有这些。

无论如何,一旦你有了虚拟机 - 就启动它!如果你做得正确,你应该看到PXE引导,虚拟机获取IP地址,然后启动菜单。30秒后,它将从磁盘启动,但只需使用箭头键选择选项。在我的测试中,我发现UEFI引导速度更快,所以我通常先用UEFI进行测试,然后再测试BIOS虚拟机,一旦UEFI达到我想要的状态。 总结 直到现在,我才承认我不是Linux大师。但在过去的一个半月里,我花了很多时间进行PXE引导,并为此设置了不同的环境。本教程中使用的是纯Ubuntu堆栈。我计划写一篇更加面向微软的文章,但也基于SYSLINUX和多重引导菜单,并允许我们引导各种Linux发行版(除了Windows)。所有这些都可以使用任何DHCP/HTTP/TFTP工具来完成,包括安装了几个角色的Microsoft Windows Server 2019(DHCP、IIS、WDS)。同样,你也可以使用任何其他发行版作为你的Ubuntu安装的PXE服务器。如果你更喜欢nginx作为你的HTTP服务器,你也不需要使用Apache2。
最后,我在Ubuntu 20.04和20.10上进行了所有的测试。整个设置对于这两个版本来说完全一样。只需更改文件名和ISO下载即可。如果你只需要其中一个版本,可以跳过不需要的部分。
愉快的寻找吧!
编辑:2020-11-14 - 添加了Ubuntu 20.10的所有内容,清理了一些代码,并为文件夹添加了更有意义的名称,因为我们现在处理了4个不同的操作系统引导。
编辑:2022-11-26 - 在下面添加了Ubuntu 22.10的注意事项。 我今天尝试了使用Ubuntu 22.10的教程,并引入了两个更改。
  1. TFTPd默认文件夹已更改,但为了使教程易于按原样进行,您可以只创建文件夹,然后根据已经解释的说明更改配置中的路径。要强制创建目录,请运行以下命令:

    mkdir -p /var/lib/tftpboot

  2. NetPlan已弃用“gateway4”,并将通过“gateway4 deprecated”错误进行相应警告,该错误被更改为“to: default via: ...”。要修复它,请像这样更改YAML配置步骤:

    nano /etc/netplan/00-installer-config.yaml

# This is the network config written by 'subiquity'
network:
  ethernets:
    eth0:
      addresses: [10.10.2.1/24]
      routes:
      - to: default
        via: 10.10.2.99
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
  version: 2

另外需要注意的是,您需要6GB或更多的RAM来加载ISO文件到RAM并完成服务器ISO的安装,对于桌面ISO可能需要更多。

想通过HTTP和early-commands指令进行更多的自定义操作吗?请阅读我在这里发布的其他帖子:https://askubuntu.com/a/1292607/1080682 - LuxZg
PXE指南的另一个扩展,我使其引导到subiquity并安装Ubuntu Base(您还可以在此基础上构建自定义桌面环境)。请参阅:https://askubuntu.com/a/1293305/1080682 - LuxZg

  • 相关问题