如何在离线自动安装 Ubuntu 22.04 时优化安装过程?

如何在离线自动安装 Ubuntu 22.04 时优化安装过程?

我是 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-datameta-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

以上信息和步骤均来自以下链接的脚本:

  • Ubuntu 22.04 桌面自动安装

    作者是 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.squashfsubuntu-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


您可以在以下链接中找到更多信息和灵感:

相关内容