从 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 引导自动安装?
短的:
我正在寻找一种 PXE 引导 Ubuntu 20.04 的方法,并使用新的自动安装进行完全无人值守的安装。但我希望user-data
根据客户端的 MAC 在服务器端修改 YAML
我发现了什么
nocloud-net;s=http://...
但我看不到将自定义字符串作为 URL 的一部分发送(或完全基于本地 MAC 更改 URL)的方法early-commands
哪个说autoinstall
运行后会刷新,但我没有产生任何有效的方法来使用它来将修改后的数据注入新的自动安装;例如。然后执行wget http://myurl/$MAC
该文件并修改已经运行的自动安装late-commands
是最后的选择,我确实可以这样做wget http://myurl/$MAC && .. && ...
。设置静态 IP/GW/网络掩码,但似乎更容易出错最终目标
我想要一个“主”PXE 服务器,它是 HTTPS 服务器和 Web 管理的所在地,在那里我可以有一个包含所有设备的表(例如在 MySQL 中),以及与每个设备相关的所有设置。然后,当我们部署新客户端(主要是一些愚蠢的信息亭之类的东西)时,我会选择它们的 MAC,启用 PXE 引导,标记它们,然后将它们发送到远程位置。该 MAC 和位置将通过 Web 管理输入 MySQL,以及静态 IP、GW、DNS、浏览器主页、屏幕旋转等内容。一旦它们到达并有人连接它们,它们将启动到无人值守的 PXE 安装,通过它,在处理过程中,他们将从 Web 服务器中提取配置(例如user-data
,实际上将由 PHP 处理,并根据需要注入所需的配置),它会 - 嗯......只是工作。它可以适用于live
图像也是如此,只是以不同的方式。
我大部分时间都坚持autoinstall
和nocloud-net
启动,一开始看起来很棒,我可以为每个客户端提供一个自定义的无人值守文件,除了我无法从另一个客户端识别一个客户端的事实。获取http://myserver/user-data?AA-BB-CC-DD-EE-FF
似乎不在规范中,仅通过 IP 选择它是行不通的,因为那些将是随机的 DHCP,不幸的是,使用 DHCP 保留修复它是一场噩梦,因为我们正在谈论 100 多个位置,每个位置都有自己的本地DHCP等
我的想法已经不多了,所以希望有人能加入。任何能让我前进的想法(来自late-commands
)都会很棒!它不必是 MAC,也可以是 UIID 或其他一些硬件 ID(序列号等),但它应该是唯一且易于获取的。MAC通常是盒子外面的贴纸。
哦,如果你想知道我为什么这么反对late-commands
......好吧.. 事情是我不反对它,只是动态修改无人参与的文件会更加灵活。我可以从一开始就设置主机名、IP、用户名、密码、磁盘大小等等。比使用某些默认值引导更干净,然后尝试使用 bash 脚本尝试修复它(特别是磁盘/分区)。毕竟,这就是为什么我们首先要有autoinstall
脚本,而不是在第一次启动后重新执行所有操作。
前面问题的非常详细的描述,TL;我尝试部署的 DR 服务器无法登记,并且我在一些服务器上遇到 UEFI 网络启动问题
我有 4 台服务器(改用桌面塔,不是非常严肃的家庭实验室设置),其中一台用于专用区域 + 机架控制器的目的(使用已安装的 PostgreSQL 数据库,通过 snap 安装 MAAS 2.8 版)(旧 Dimension正是因为这个原因才起作用)。我之前的设置没有列出的问题,部署一切正常,直到我完全重新安装 Ubuntu 以重置 MAAS。(我不小心尝试在 IPv6/IPv4 范围内通过 DHCP 分配 18Qt 地址,结果冻结了,杀死了我的网络,之后 Ubuntu 拒绝启动)从那时起,唯一的区别是我在 DD-WRT 上设置了 IPv6 并更改了子网。(所有 IP 地址/引用都已更改和测试)总体而言,重新安装后 MAAS 有点不稳定,但这可能是安慰剂效应。
对以下问题的一点说明;我一直在使用 DD-WRT/dnsmasq 来控制我的网络的 DHCP,MAAS 控制器无法真正处理当前负载之上的 DHCP。所有 dhcp-boot 记录都完好无损并且可以正常工作(至少对于 IPv4,我正在研究 IPv6 网络引导)(另外,我知道这个设置并不理想,但再一次,这不是一个非常严肃的家庭实验室设置,我我使用 MAAS 是为了方便可扩展性和集中控制,我知道不要对这个非常、坦率地、简陋的设置抱有太大的期望。)
3 台虚拟化主机服务器中有 2 台(我正在尝试使用 MAAS 进行部署,它们是具有最新 BIOS 更新的戴尔 Optiplex 3010)拒绝从 UEFI PXE 启动,卡在Fetching netboot image...
MAAS rackd.log 上说机器结束了抓住bootx64.efi
,grubx64.efi
但仅此而已。在尝试启用安全启动的 UEFI 后,我将机器设置为使用旧版 CSM 启动。它最终在入伍环境中走得更远,但这导致了我的下一个问题......
所有 3 台服务器(包括在 UEFI PXE 上运行的服务器,HP 6300-SFF)一开始就拒绝入伍,并表示Can not apply stage final, no datasource found! Likely bad things to come!
。然后它让我进入主机名下的登录提示ubuntu
(maas-enlistment-node
不像它应该的那样)。在 MAAS UI 上没有一个是可见的。在引导阶段,它也有 6 次未能启动 OpenSSH 守护进程。我的调试操作系统是 Ubuntu 20.04 Focal Fossa,这也是 MAAS 服务器运行的平台。(我尝试了 Ubuntu 18.04,结果相同)。在登录提示符下,我尝试了所有我能想到的密码组合(ubuntu
| ubuntu
, ubuntu
| <nothing>
, root
| ubuntu
, ubuntu
| <my MAAS password>
, maas
|<MAAS password>
等)并且它们都不起作用。他们显然都有连接,因为他们都被 DD-WRT 分配了 IP 地址,并且他们下载了网络引导映像和临时 ramdisk/我可以在他们的 v4 和 v6 地址上成功地 ping 它们。根据控制器面板,所有 MAAS 服务都在运行。
我不太确定从这里去哪里。我在它死之前进行了功能安装,然后重新安装和 IPv6 部署把它搞砸了。可根据要求提供日志文件和 dnsmasq.conf。蒂亚!
(抱歉,如果这是一篇糟糕/长篇的文章,这是我的第一篇文章,已经潜伏了很长时间,但对这里的结构化/节制的工作方式不太熟悉:P)
我有一个 Ubuntu 系统的可启动映像 (ISO),但它本身不是安装程序。
我希望能够指示系统通过网络复制 ISO 并将其有效地复制dd
到内部存储(覆盖以前存储在那里的任何内容),然后重新启动到其本地副本。
(我不想简单地通过网络从映像启动。)
我需要设置什么来实现这一目标?需要在目标系统上安装什么,例如 GRUB?
我的用例是我正在开发一个嵌入式系统并定期重新生成这些图像。当我有新版本的软件时,我希望能够轻松地刷新板载存储。没有什么需要坚持。
我正在寻找相当交钥匙的东西。我不需要复杂的可启动恢复映像菜单。我可以作为 Docker 容器部署到本地服务器的东西会很棒。
我需要在一些裸机节点上安装 Ubuntu 18.04。我正在使用普通的Preseed + Debian Installer 进程。
我们使用 VLAN,我无法弄清楚如何配置安装映像以使用该 VLAN 进行安装程序。
以下是该过程的工作原理:
步骤 1-3 显示主机、网络和 VLAN 正在工作。
在第 4 步,安装映像会加载新的网络配置。但是,它没有添加 VLAN 标记。它尝试获取 DHCP 地址,但由于它没有使用 VLAN,DHCP 服务器永远不会看到该请求。
如何将 VLAN 标记传递给安装程序?是否有可以在 Ubuntu 上使用的内核命令行,就像在 Fedora 上一样?
我对 CentOS 上的 Kickstart 非常熟悉,但我对 Preseed 还很陌生。
Ubuntu在 Ubuntu 19.06 中修复了这个问题,但我使用的是 18.04。
我一直在尝试让 Ubuntu 20.04 启动 PXE,并且遇到了与这里的其他人类似的问题。我找到了一些解决方案,包括添加ip=dhcp
到pxelinux.cfg/default
文件中的附加行,但它仍然拒绝启动。我已经包含了错误和我的菜单以供参考。非常感谢任何和所有帮助。
(initramfs) DHCPOFFER of 10.0.0.25 from 10.0.0.1
DHCPREQUEST for 10.0.0.25 on enp0s3 to 255.255.255.255 port 67 (xid=0x6cb408a3)
DHCPACK of 10.0.0.25 from 10.0.0.1 (xid=0xa308b46c)
bound to 10.0.0.25 -- renewal in 2557 seconds.
Begin: Running /scripts/casper-premount ... done
done.
Begin: Trying to netboot from 10.0.0.9:/netboot/ubuntu/20.04/server ... Begin: Trying nfsmount -o nolock -o ro 10.0.0.9:/netboot/ubuntu/20.04/server /cdrom ... done.
Unable to find a live file system on the network.
还有菜单:
default vesamenu.c32
prompt 0
timeout 300
ONTIMEOUT 1
menu title ########## OS Deploy ##########
label 1
menu label ^1) Ubuntu 20.04 Server
kernel ubuntu/20.04/server/casper/vmlinuz
initrd ubuntu/20.04/server/casper/initrd
append ip=dhcp boot=nfs nfsroot=10.0.0.9:/netboot/ubuntu/20.04/server ro nosplash ---
一切似乎都正常工作,直到 initramfs 挂载 nfs 共享(已导出并在网络上可用),此时它尝试挂载但未能挂载。
此外,我可以键入它打印到 stdout 的 nfsmount 命令,它会很好地挂载 nfs 共享,让我可以像我期望的那样浏览共享。
编辑:我已经取得了一些进展。设置 nfsboot=nfs 和 boot=casper 是不正确的。nfsboot
不应该存在,boot=casper
应该存在boot=nfs
。我已经在pxelinux.cfg/default
这里和我的 pxe 引导服务器上编辑了这两个文件。
我现在遇到了一个单独的问题,在 squashfs 中无法安装,如下所示:
[ 6.596619] /root/cdrom/casper/extras/modules.squashfs-generic: Can't open blockdev
mount: mounting /root/cdrom/casper/extras/modules.squashfs-generic on /root/usr/lib/modules failed: Invalid argument
mount: mounting /dev on /root/dev failed: no such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
done.
mount: mounting /run on /root/run failed: No such file or directory
run-init: can't execute '/sbin/init': No such file or directory
Target filesystem doesn't have requested /sbin/init.
run-init: can't execute '/sbin/init': No such file or directory
run-init: can't execute '/etc/init': No such file or directory
run-init: can't execute '/bin/init': No such file or directory
run-init: can't execute '/bin/sh': No such file or directory
run-init: can't execute '': No such file or directory
No init found. Try passing init= bootarg
从这个日志输出中,我假设作为根本原因的行是读取的行[ 6.596619] /root/cdrom/casper/extras/modules.squashfs-generic: Can't open blockdev
这条线告诉我 squashfs 没有正确安装,这导致了所有其他问题。所以我现在的问题是,如何让 squashfs 正确安装?
如何使用 PXE 和实时服务器映像进行全自动 Ubuntu 20.04 服务器安装?
随着 20.04 版本的发布,Ubuntu 似乎正在进一步推动实时服务器安装程序 ( subiquity ) 选项。debian-installer (di) 映像已重命名为 legacy。我通常喜欢的 netboot 安装程序也是如此。20.04 版本还为实时服务器安装程序引入了一个新的自动安装选项。
我还没有找到明确的答案或做我正在寻找的事情的方法。我习惯于在 Windows 环境中执行此操作,只是想知道我是否可以在 Ubuntu 上执行相同操作。
我想先在装有 Ubuntu 的笔记本电脑上进行全新安装,然后添加和删除我认为对我希望配置的笔记本电脑群必要的软件。理想情况下,我会拍摄我配置的笔记本电脑的“快照”,将其存储在服务器上,并且我连接到本地网络(通过以太网)的任何计算机都可以通过网络启动(PXE?)进入安装指南和安装我指定的配置。
有办法吗?
好的,所以我正在尝试使用 netboot 映像自动安装 Ubuntu 18.04 LTS,以便在我们的虚拟机上使用(如果这很重要,我正在使用 VirtualBox)。我不确定虚拟机是否是问题的根源,但我不明白为什么会这样。除了创建用户帐户和写入分区之外,它会预置所有内容。如果我以错误的方式进行分区,我不会感到惊讶。我希望它简单地占用所有可用空间并自动分区。然而,对于用户的东西,我感到非常困惑。当我从非种子网络引导映像运行安装并使用 and 获得预种子文件debconf-get-selections --installer
时debconf-get-selections
,我注意到不是d-i passwd/[whatever]
使用user-setup-udeb
. 改变从d-i
没有任何帮助。
如果您需要更多信息,请告诉我。这是我的预置文件。
preseed.cfg:
### Localization
# Preseeding only locale sets language, country and locale.
d-i debian-installer/locale string en_US.UTF-8
# Keyboard selection.
# Disable automatic (interactive) keymap detection.
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select us
### Network configuration
# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
d-i netcfg/choose_interface select auto
# Just in case our DHCP server is busy.
d-i netcfg/dhcp_timeout string 60
# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string unassigned-hostnameoc
d-i netcfg/get_domain string unassigned-domain
# Disable that annoying WEP key dialog.
d-i netcfg/wireless_wep string
### Mirror settings
# Alternatively: by default, the installer uses CC.archive.ubuntu.com where
# CC is the ISO-3166-2 code for the selected country. You can preseed this
# so that it does so without asking.
d-i mirror/http/mirror select us.archive.ubuntu.com
### Account setup
# Skip creation of a root account (normal user account will be able to
# use sudo).
d-i passwd/root-login boolean false
d-i passwd/make-user boolean true
# To create a normal user account.
d-i passwd/user-fullname string master
d-i passwd/username string master
# Normal user's password, either in clear text
#d-i passwd/user-password password [redacted]
#d-i passwd/user-password-again password [redacted]
# or encrypted using an MD5 hash.
d-i passwd/user-password-crypted password [redacted]
# Create the first user with the specified UID instead of the default.
#d-i passwd/user-uid string 1010
# The installer will warn about weak passwords. If you are sure you know
# what you're doing and want to override it, uncomment this.
d-i user-setup/allow-password-weak boolean true
# The user account will be added to some standard initial groups. To
# override that, use this.
#d-i passwd/user-default-groups string audio cdrom video
# Set to true if you want to encrypt the first user's home directory.
d-i user-setup/encrypt-home boolean false
### Clock and time zone setup
# Controls whether or not the hardware clock is set to UTC.
d-i clock-setup/utc boolean true
# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string America/Los_Angeles
# Controls whether to use NTP to set the clock during the install
d-i clock-setup/ntp boolean true
### Partitioning
d-i partman-auto/disk string /dev/sda
# The presently available methods are:
# - regular: use the usual partition types for your architecture
# - lvm: use LVM to partition the disk
# - crypto: use LVM within an encrypted partition
d-i partman-auto/method string regular
# If one of the disks that are going to be automatically partitioned
# contains an old LVM configuration, the user will normally receive a
# warning. This can be preseeded away...
d-i partman-lvm/device_remove_lvm boolean true
# The same applies to pre-existing software RAID array:
d-i partman-md/device_remove_md boolean true
# And the same goes for the confirmation to write the lvm partitions.
d-i partman-lvm/confirm boolean true
# For LVM partitioning, you can select how much of the volume group to use
# for logical volumes.
#d-i partman-auto-lvm/guided_size string max
# You can choose one of the three predefined partitioning recipes:
# - atomic: all files in one partition
# - home: separate /home partition
# - multi: separate /home, /usr, /var, and /tmp partitions
d-i partman-auto/choose_recipe select atomic
# If you just want to change the default filesystem from ext3 to something
# else, you can do that without providing a full recipe.
d-i partman/default_filesystem string ext4
# This makes partman automatically partition without confirmation, provided
# that you told it what to do using one of the methods above.
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
### Base system installation
### Apt setup
# You can choose to install restricted and universe software, or to install
# software from the backports repository.
#d-i apt-setup/restricted boolean true
#d-i apt-setup/universe boolean true
#d-i apt-setup/backports boolean true
# Uncomment this if you don't want to use a network mirror.
#d-i apt-setup/use_mirror boolean false
# Select which update services to use; define the mirrors to be used.
# Values shown below are the normal defaults.
#d-i apt-setup/services-select multiselect security
#d-i apt-setup/security_host string security.ubuntu.com
#d-i apt-setup/security_path string /ubuntu
# Additional repositories, local[0-9] available
#d-i apt-setup/local0/repository string \
# http://local.server/ubuntu squeeze main
#d-i apt-setup/local0/comment string local server
# Enable deb-src lines
#d-i apt-setup/local0/source boolean true
# URL to the public key of the local repository; you must provide a key or
# apt will complain about the unauthenticated repository and so the
# sources.list line will be left commented out
#d-i apt-setup/local0/key string http://local.server/key
### Package selection
tasksel tasksel/first multiselect standard, lubuntu-desktop
# Individual additional packages to install
d-i pkgsel/include string openssh-server build-essential tftp-hpa ipmitool htop mc software-properties-common python-apt python-pycurl python-setuptools
# Whether to upgrade packages after debootstrap.
# Allowed values: none, safe-upgrade, full-upgrade
d-i pkgsel/upgrade select full-upgrade
# Language pack selection
d-i pkgsel/language-packs multiselect en
# No language support packages
d-i pkgsel/install-language-support boolean false
# Policy for applying updates. May be "none" (no automatic updates),
# "unattended-upgrades" (install security updates automatically), or
# "landscape" (manage system with Landscape).
d-i pkgsel/update-policy select unattended-upgrades
# Verbose output and no boot splash screen
d-i debian-installer/quiet boolean false
d-i debian-installer/splash boolean true
### Boot loader installation
# This is fairly safe to set, it makes grub install automatically to the MBR
# if no other operating system is detected on the machine.
d-i grub-installer/only_debian boolean true
# This one makes grub-installer install to the MBR if it also finds some other
# OS, which is less safe as it might not be able to boot that other OS.
d-i grub-installer/with_other_os boolean true
# Wait for two seconds in grub
d-i grub-installer/timeout string 2
# Use the following option to add additional boot parameters for the
# installed system (if supported by the bootloader installer).
# Note: options passed to the installer will be added automatically.
d-i debian-installer/add-kernel-opts string vga=normal nomodeset audit=0 \
intel_idle.max_cstate=0 processor.max_cstate=1 cgroup_enable=memory \
swapaccount=1
### Finishing up the installation
# Avoid that last message about the install being complete.
d-i finish-install/reboot_in_progress note
#### Advanced options
### Running custom commands during the installation
# d-i preseeding is inherently not secure. Nothing in the installer checks
# for attempts at buffer overflows or other exploits of the values of a
# preconfiguration file like this one. Only use preconfiguration files from
# trusted locations! To drive that home, and because it's generally useful,
# here's a way to run any shell command you'd like inside the installer,
# automatically.
# This first command is run as early as possible, just after
# preseeding is read.
#d-i preseed/early_command string anna-install some-udeb
# This command is run immediately before the partitioner starts. It may be
# useful to apply dynamic partitioner preseeding that depends on the state
# of the disks (which may not be visible when preseed/early_command runs).
#d-i partman/early_command \
# string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# This command is run just before the install finishes, but when there is
# still a usable /target directory. You can chroot to /target and use it
# directly, or use the apt-install and in-target commands to easily install
# packages and run commands in the target system.
#d-i preseed/late_command string in-target tftp 172.16.0.1 -c get postpreseed.sh; \
# in-target chmod +x postpreseed.sh; \
# in-target /bin/bash -x postpreseed.sh; \
# in-target rm -f postpreseed.sh;