我是 Ubuntu 的新手,正在尝试为 Ubuntu 22.04 创建离线自动安装。
我跟着此链接首先创建自动安装并成功完成。但是,由于我需要此自动安装才能在没有操作系统和互联网连接的 PC 上运行,因此我创建的自动安装不起作用。
然后我发现这链接自这个问题但是在自动安装过程中,安装软件包的后续命令花费的时间太长。我想安装 ubuntu-desktop 包,以便获得 Ubuntu 22.04 的图形界面。
这是自动安装过程中的样子(仅供参考)。我等了将近 30 分钟才收到。提前谢谢你的帮助。
编辑:我正在 VirtualBox VM 上安装,基本内存为 4506 MB,存储空间为 45GB,网络连接速度约为 80Mbps。我的笔记本电脑有 256GB 存储空间和 8GB RAM,这可能与此有关。您能否根据这些详细信息提供优化安装过程的提示?非常感谢您的见解。
编辑:我在下面包含了我的用户数据和 chroot_script.sh 文件。
用户数据文件:
#cloud-config
autoinstall:
version: 1
locale: en_US.UTF-8
keyboard:
layout: us
identity:
hostname: user
username: user
password: crypted_password
late-commands:
- rm -r /target/var/cache/apt
- cp -r /media/minimal/var/cache/apt /target/var/cache/
- curtin in-target --target /target -- apt-get -yy install ubuntu-desktop
chroot脚本
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
apt-get -y update
apt-get -yyqq install --download-only ubuntu-desktop
umount /proc
umount /sys
umount /dev/pts
答案1
我成功地按照您提供的教程创建了自定义 Ubuntu 22.04 Server ISO,以便在离线情况下安装其他软件。例如,我创建了一个 ISO,用于安装名为 的软件包nala
。但是,当我尝试gnome-desktop
按照您的要求进行安装时,却没有成功。在安装过程中,安装过程与您遇到的相同点停滞了,两个小时后,我放弃了,并停止了安装。总共下载了 1323 个软件包ubuntu-desktop
,需要安装的软件包非常多。(顺便说一句,可以通过查看var/cache/apt/archives/
目录中的编辑文件夹,然后运行chroot_script.sh
shell 脚本。)
所以这个过程是可行的,但我认为gnome-desktop
包和依赖项实在太大太多,无法以这种方式在虚拟机中安装。也许在裸机上而不是在 VirtualBox VM 上安装会有所不同,但我没有尝试。
话虽如此,我从你的问题中得到的答案是,你最终想要的是桌面安装,但你想利用自动安装。如果是这样,还有另一种选择,即创建一个自动安装Ubuntu Desktop。此技术与上述技术类似,不同之处在于您实际上是将 Ubuntu Desktop ISO 中的 squashfs 文件系统添加到服务器 ISO,而不是将包安装ubuntu-desktop
到服务器安装中。使用此技术,下层社会来自服务器 ISO 的文件用于安装所有内容。
基本步骤(非常粗略地概述)如下:
- 将服务器 ISO 解压到一个目录(例如
server-iso-extracted
:) - 将桌面 ISO 解压到一个目录(例如
desktop-iso-extracted
:) - 如果需要或期望:
desktop-iso-extracted/casper/filesystem.squashfs
从桌面 ISO取消压缩- chroot 进入它
- 运行任何自定义脚本
- 重新挤压
filesystem.squashfs
- 将重新压缩后的文件复制
filesystem.squashfs
到解压后的 Server ISO 目录中:server-iso-extracted/casper/filesystem.squashfs
- 将
user-data
和meta-data
文件添加到解压后的服务器 ISO 目录中的子目录中。例如:server-iso-extracted/nocloud/
- 自动安装更新
grub.cfg
,位于server-iso-extracted/boot/grub/grub.cfg
server-iso-extracted/casper/install-sources.yaml
在解压的服务器 ISO 目录中进行更新以filesystem.squashfs
供安装使用。- 重新打包服务器 ISO
该技术的工作user-data
文件如下:
#cloud-config
autoinstall:
version: 1
# The following credentials will create a default user. username: ubuntu - password: ubuntu
identity:
hostname: ubuntu-desktop
password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
realname: Ubuntu user
username: ubuntu
user-data:
timezone: America/Los_Angeles
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
refresh-installer:
update: no
keyboard:
layout: us
toggle: null
variant: ''
locale: en_US.UTF-8
# cloud-init is not installed by default in the Desktop ISO. Therefore, it either needs to be installed within the ISO or installed with the following lines:
# late-commands:
# - curtin in-target --target=/target -- apt install -y cloud-init
工作casper/install-sources.yaml
原理如下:
- description:
en: This version installs a Desktop environment
where humans are not expected to log in.
id: desktop
locale_support: none
name:
en: Ubuntu Desktop
path: filesystem.squashfs
size: 568651776
type: fsimage
variant: server
default: true
工作boot/grub/grub.cfg
文件如下:
set timeout=30
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry "Try or Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/nocloud/ ---
initrd /casper/initrd
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
exit 1
}
menuentry 'UEFI Firmware Settings' {
fwsetup
}
else
menuentry 'Test memory' {
linux16 /boot/memtest86+.bin
}
fi
以上信息和步骤均来自以下链接的脚本:
-
作者是 Michael Tandy,我使用过他的脚本。它能用,但我发现了一个差异。在他的
user-data
文件中,他写了以下内容,这表明用户密码凭证无效:
# The following credentials have no effect - the user will be set up by gnome-initial-setup password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/ realname: Ubuntu user username: ubuntu
虽然他所说的关于他的剧本是正确的,但事实并非如此。用户和密码不起作用是因为cloud-init
没有安装。默认情况下,它安装在服务器安装中,但不安装在桌面安装中。(请记住,此技术和脚本集正在安装filesystem.squashfs
,而不是ubuntu-server-minimal.squashfs
或ubuntu-server-minimal.ubuntu-server.squashfs
。)因此,用户和密码cloud-init
可以通过安装到桌面文件系统来使其工作,从而gnome-initial-setup
避免在首次启动时提示您创建默认初始用户。这可以通过两种方式完成:
一种方法是使用文件中的 late-command ,
user-data
如下所示:late-commands: - curtin in-target --target=/target -- apt-get install -y cloud-init
另一种方法是通过 chroot 进入未压缩的版本
filesystem.squashfs
并通过自定义脚本进行安装,类似于您提供链接的教程。由于您想要离线安装,我建议尽早将其安装到 中filesystem.squashfs
。
您可以在以下链接中找到更多信息和灵感: