介绍

介绍

从 Ubuntu 20.10 (Groovy Gorilla) 开始,Canonical 不再提供netboot.tar.gz软件包和mini.iso镜像。它们以前可用于通过 PXE 启动系统并通过预置配置自动运行 Debian 安装程序。

从 20.10 开始的 Ubuntu 版本如何通过 PXE 启动自动安装?

答案1

介绍

现在,不再需要使用专门用于该任务的小包,而是需要使用常规的完整 ISO 映像。只有服务器安装程序 Subiquity 可以实现自动化,因此即使是桌面安装也需要使用服务器映像。

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

先决条件

提供 PXE 文件、安装程序映像和自动安装配置的服务器的先决条件:

  • 正常运行的 TFTP 服务器和相应的 DHCP 配置
  • 一个正常运行的 Web 服务器
  • pxelinux安装软件包syslinux-efisyslinux-common

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

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

准备并提供 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. 准备 PXELINUX 文件以便通过 UEFI 以及 BIOS 启动:

     # 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.0BIOS 客户端设置启动文件名

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

     DEFAULT vesamenu.c32
     PROMPT 0
     NOESCAPE 1
    
     MENU TITLE PXE System Installation
    
     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 配置链接到bootUEFI 和 BIOS 的目录:

     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创建一个包含以下内容的文件:

     # Let NetworkManager manage all devices on this system
     network:
       version: 2
       renderer: NetworkManager
    
  3. 运行netplan apply或重启

答案2

好吧,我也应该表达一下我的看法...就这样吧!

介绍

以下是完整的 PXE 指南,从设置服务器和所有必需的服务到首次启动。它还包括以下说明:Ubuntu 20.04.1 和 20.10,包括自动安装 Ubuntu Server、交互式安装 Server 和实时启动 Desktop(类似 PXE 版“Live CD”)。本指南经过轻微修改,将所有选项包含在一个启动菜单中,并包含所有变体。对 BIOS 和 UEFI 方案均进行了说明。注意:Ubuntu 22.10- 有关 Ubuntu 22.10 的更改,请滚动到底部。

我正在使用 Syslinux 的组件“lpxelinux”(第一个字母“L”小写),它支持从 HTTP 启动内核和初始化。也syslinux.efi已经具备此功能。HTTP 可以实现更快的传输,还可以让我们对文件进行稍微不同的组织,此外还有一些其他小优势(对于更大的实现)。

这是完整的分步指南!

PXE 服务器 - Ubuntu 20.04.1 LTS

像往常一样安装 Ubuntu Server,从最低限度的安装选项开始,但我通常会启用 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/pxesyslinux目录。您可以随意将这些文件放在您希望的任何位置,只需确保事后修改命令即可。

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

可选 - 路由器设置

如果您有不同的子网,请确保添加ip helperDHCP,DHCP relay大多数路由器也经常设置 DHCP。只需将其指向您的 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 服务器,不用担心。

由于defaultBIOS 和 UEFI 看起来相同,只需复制它(或者如果愿意,链接它)。

cp /var/lib/tftpboot/efi64/pxelinux.cfg/default /var/lib/tftpboot/bios/pxelinux.cfg/default

如果将它们分开,则可以单独更改它们的选项。菜单也接受通过include选项链接。但如果您想要高级菜单,请阅读文档或其他文章。

Web 服务器 - HTTP(S)

我将描述简单的 HTTP 设置,但您可以稍后将其扩展到 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 服务器 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 桌面 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 目录来托管所有文件,因此不需要额外的步骤。

服务器 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全部具有完全的 rw 权限:

chmod -R 777 /var/www/html/*

对于生产设置适当的权限,只需在需要时具有读取权限。

测试一切

在我的实验室环境中,以及在启动新的生产设置时,我首先在虚拟机中测试这一切。我使用 Hyper-V 进行测试(我知道,突然有微软的东西在这里,真让我吃惊 :))。要测试 UEFI 启动,您需要创建Generation 2机器,而对于 BIOS 启动,您应该使用Generation 1机器。确保为虚拟机添加足够的 RAM 来容纳 RAMDISK!因此,如果虚拟机正在测试具有 1.5GB RAM 磁盘的服务器,则您需要 2GB RAM 用于虚拟机,而对于桌面,我们有 3GB RAM 磁盘,因此最好将 4GB RAM 连接到虚拟机。此外,请确保将网络接口连接到正确的网络,正如我之前提到的,我保留了一个虚拟路由器和多个子网,因为我需要测试和验证这一切,以便在相当大且复杂的环境中进行部署。

无论如何,一旦您有了 VM - 只需启动它!如果您正确执行了所有操作,您应该会看到 PXE 启动、VM 获取 IP,然后启动菜单。30 秒后它将从磁盘启动,但只需使用箭头键选择一个选项即可。我在测试中发现 UEFI 启动速度更快,所以我通常使用 UEFI 进行测试,然后在 UEFI 达到我想要的位置后测试 BIOS VM。

总结

直到现在我才承认我不是 Linux 专家。但是在过去一个半月里我花了很多时间进行 PXE 启动并为其设置不同的环境。本教程中是纯 Ubuntu 堆栈。我计划编写一个更面向 Microsoft 的版本,但也基于 SYSLINUX 和多启动菜单,并允许我们启动(各种)Linux 发行版(除了 Windows)。所有这些都可以使用任何 DHCP/HTTP/TFTP 工具完成,包括安装了几个角色(DHCP、IIS、WDS)的 Microsoft Windows Server 2019。同样,您可以使用任何其他发行版作为 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 才能在 RAM 中加载 ISO 并完成服务器 ISO 的安装,桌面 ISO 可能需要更多 RAM。

相关内容