Mar*_*ach 10 boot automation pxe preseed system-installation
从 Ubuntu 20.10 (Groovy Gorilla) 开始,Canonical 不再提供netboot.tar.gz
包和mini.iso
镜像。它们以前可用于通过 PXE 引导系统并通过预置配置自动运行 Debian 安装程序。
如何通过 PXE 引导自动安装从 20.10 开始的 Ubuntu 版本?
现在有必要使用常规的完整 ISO 映像,而不是使用特定于任务的小包。只有服务器安装程序 Subiquity 可以自动化,因此即使是桌面安装也需要使用服务器映像。
以下步骤适用于当前版本 21.04 (Hirsute Hippo)。对于将来的版本,请用21.04
要安装的版本号替换所有出现的。
将提供 PXE 文件、安装程序映像和自动安装配置的服务器计算机上的先决条件:
pxelinux
,syslinux-efi
,syslinux-common
安装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作为参考将自动安装配置写入文件默认情况下,转到您的 TFTP 服务器服务的目录 /srv/tftp
将上一节下载的ISO镜像复制到当前目录
创建一些我们将在以下步骤中使用的目录: mkdir -p iso_mount init boot/uefi boot/bios pxelinux.cfg
挂载镜像并解压内核和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
Run Code Online (Sandbox Code Playgroud)
准备 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
Run Code Online (Sandbox Code Playgroud)
配置您的 DHCP 服务器以将引导文件名设置boot/uefi/syslinux.efi
为 UEFI 客户端和boot/bios/pxelinux.0
BIOS 客户端
创建pxelinux.cfg/default
类似于以下内容的 PXELINUX 配置。将尖括号中的 URL 替换为您的 Web 服务器<iso url>
的 URL :替换为 ISO 映像<autoinstall url>
的 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>
Run Code Online (Sandbox Code Playgroud)
将 PXELINUX 配置链接到boot
UEFI 和 BIOS 目录:
ln -s ../../pxelinux.cfg boot/uefi/pxelinux.cfg
ln -s ../../pxelinux.cfg boot/bios/pxelinux.cfg
Run Code Online (Sandbox Code Playgroud)
您现在应该能够通过 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
包含以下内容的文件:
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
Run Code Online (Sandbox Code Playgroud)
运行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 服务器来启用远程管理。安装后确保完全更新
sudo su
apt-get update && apt-get upgrade -y
Run Code Online (Sandbox Code Playgroud)
工具和要求
我们需要 TFTP 服务器、HTTP(S) 服务器和 DHCP 服务器。如果您已经拥有其他服务器,您可以使用它们,但为了便于后续操作,我们将在新安装的 Ubuntu 20.04.1 LTS 上安装所有内容
我选择了最受欢迎的软件包:
apt-get install tftpd-hpa apache2 isc-dhcp-server
Run Code Online (Sandbox Code Playgroud)
我们还需要获取 syslinux 文件。由于玛丽安的指南已经展示了如何从 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
Run Code Online (Sandbox Code Playgroud)
我利用这个机会为我们创建了一个临时目录/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
Run Code Online (Sandbox Code Playgroud)
DHCP服务器
DHCP 服务器本身应该有一个静态 IP。所以让我们这样做(如果您在安装过程中没有这样做)。
编辑网络配置(YAML 文件):
nano /etc/netplan/00-installer-config.yaml
Run Code Online (Sandbox Code Playgroud)
内容:
# 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
Run Code Online (Sandbox Code Playgroud)
应用配置:
netplan apply
Run Code Online (Sandbox Code Playgroud)
接下来,我们需要为 DHCP 服务器的区域和池输入基本配置。我在这里做了一些额外的配置,以向您展示您未来的 PXE 客户端可以位于与您的 PXE 服务器不同的子网中。在我的情况下,PXE 服务器(包含所有服务)位于10.10.2.1
. 我有两个通过虚拟路由器连接的子网:10.10.1.0/24
和10.10.2.0/24
nano /etc/dhcp/dhcpd.conf
Run Code Online (Sandbox Code Playgroud)
内容(只是一个例子):
# 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";
}
Run Code Online (Sandbox Code Playgroud)
注意:请根据您的情况修改文件!您必须拥有正确的子网、网关以及正确的客户端 MAC 地址(硬件地址)!
并且您需要设置 DHCP 守护程序将侦听的ip a
接口,用于检查适合您的接口(我在eth0
)
nano /etc/default/isc-dhcp-server
Run Code Online (Sandbox Code Playgroud)
内容:
INTERFACESv4="eth0"
INTERFACESv6=""
Run Code Online (Sandbox Code Playgroud)
确保重新启动服务:
systemctl restart isc-dhcp-server.service
systemctl status isc-dhcp-server.service
Run Code Online (Sandbox Code Playgroud)
并使其在服务器重新启动时自动启动:
systemctl enable isc-dhcp-server.service
Run Code Online (Sandbox Code Playgroud)
如果您有拼写错误或其他错误,例如重复的 IP 或客户端名称,守护进程将失败。如果状态为红色,请检查日志。
tail -n 100 /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
可选 - 路由器设置
如果您有不同的子网,请确保ip helper
为 DHCP添加,通常也像DHCP relay
大多数路由器一样设置。只需将其指向您的 PXE 服务器的 IP 地址(如果您的服务分布在多台服务器上,则将其指向一个拥有 DHCP 服务的服务器)。
TFTP服务器
我们需要为 TFTP 服务器设置基本的东西,但只有一个选项真正需要更改/检查 - 根 TFTP 目录的路径 /var/lib/tftpboot
nano /etc/default/tftpd-hpa
Run Code Online (Sandbox Code Playgroud)
内容:
# /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"
Run Code Online (Sandbox Code Playgroud)
确保也重新启动服务。
systemctl restart tftpd-hpa
Run Code Online (Sandbox Code Playgroud)
并使其在服务器重新启动时自动启动:
systemctl enable tftpd-hpa
Run Code Online (Sandbox Code Playgroud)
如果您想确保一切正常,您可以使用 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
Run Code Online (Sandbox Code Playgroud)
文件内容:
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
Run Code Online (Sandbox Code Playgroud)
注意我同时从 HTTP 服务器上拉取vmlinuz
和拉initrd
取。同一台服务器托管 ISO 映像和我们的自动安装文件。我们接下来会设置这个网络服务器,不用担心。
由于default
BIOS 和 UEFI 看起来相同,只需复制它(或者如果您愿意,也可以链接它)。
cp /var/lib/tftpboot/efi64/pxelinux.cfg/default /var/lib/tftpboot/bios/pxelinux.cfg/default
Run Code Online (Sandbox Code Playgroud)
如果您将它们分开,您可以单独更改它们的选项。菜单也接受通过include
选项链接。但是,如果您想要高级菜单,请阅读文档或更多文章。
网络服务器 - 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
Run Code Online (Sandbox Code Playgroud)
将内核和 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
Run Code Online (Sandbox Code Playgroud)
这是用于桌面 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
Run Code Online (Sandbox Code Playgroud)
再次提取,注意我添加了不同的文件夹名称
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
Run Code Online (Sandbox Code Playgroud)
以下适用于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
Run Code Online (Sandbox Code Playgroud)
提取文件,再次到单独的文件夹
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
Run Code Online (Sandbox Code Playgroud)
最后这是针对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
Run Code Online (Sandbox Code Playgroud)
再次提取文件,再次分离文件夹
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
Run Code Online (Sandbox Code Playgroud)
应该是这样。使用您的浏览器进行测试,看看您是否可以在正确的位置访问这些文件。我们在 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
Run Code Online (Sandbox Code Playgroud)
内容:
#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
Run Code Online (Sandbox Code Playgroud)
注意:此配置将使用主机名设置服务器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
Run Code Online (Sandbox Code Playgroud)
要查看更多选项,请参阅官方文档: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
Run Code Online (Sandbox Code Playgroud)
使用相同的用户数据样本,它们在 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/
Run Code Online (Sandbox Code Playgroud)
服务器文件夹应该有 4 个文件:
initrd
meta-data
user-data
vmlinuz
Run Code Online (Sandbox Code Playgroud)
桌面文件夹应该有 2 个文件:
initrd
vmlinuz
Run Code Online (Sandbox Code Playgroud)
如果您在启动时遇到问题,请检查上面列出的文件的权限。如果你在做实验,就做不安全的事情,chmod
并拥有完整的 rw 权限:
chmod -R 777 /var/www/html/*
Run Code Online (Sandbox Code Playgroud)
对于生产设置适当的权限,只需在需要时进行读取访问。
全部测试
在我的实验室环境中,以及在开始新的生产设置时,我首先在 VM 中测试所有这些。我使用 Hyper-V 进行测试(我知道,杀了我,突然这里有微软的东西:))。要测试 UEFI 启动,您需要创建Generation 2
机器,而对于 BIOS 启动,您应该使用Generation 1
机器。确保向 VM 添加足够的 RAM 以容纳 RAMDISK!因此,如果 VM 使用 1.5GB RAM 磁盘测试服务器,那么 VM 需要 2GB RAM,而对于桌面,我们有 3GB RAM 磁盘,因此最好将 4GB RAM 附加到 VM。此外,确保将网络接口连接到正确的网络,正如我之前提到的,我保留了一个虚拟路由器和多个子网,因为我需要测试和证明这一切,以便在相当大和复杂的环境中进行部署。
无论如何,一旦您拥有 VM - 只需启动它!如果你做的一切都正确,你应该看到 PXE 启动,VM 获取 IP,然后启动菜单。30 秒后,它将从磁盘启动,但只需使用箭头键选择一个选项。我在测试中发现 UEFI 启动速度更快,所以我通常使用 UEFI 进行测试,然后在 UEFI 达到我想要的位置后测试 BIOS VM。
包起来
现在我才承认我不是 Linux 大师。但是在过去的一个半月里,我花了很多时间做 PXE 引导并为其设置不同的环境。这是本教程中的纯 Ubuntu 堆栈。我打算写一个更面向 Microsoft 的,但也基于 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 个不同的操作系统启动。
归档时间: |
|
查看次数: |
5696 次 |
最近记录: |