目的

目的

目的

我想完全无人值守地安装 Ubuntu Desktop 16.04.1 LTS。放入 ISO CD 然后就可以走了。

问题

  • 启动参数不正确
  • 仍有问题需要询问,需要点击鼠标
  • 使用 kickstart/preseed 的复杂答案
  • 文档示例没有按说明工作,特别是来自 partman 和 ubunutu 的示例

我偶然看到了这篇文章这里它接近我的需求,但并没有完全满足我的需求,因为它是为 Ubuntu Server 设计的。帖子建议使用“非图形”Ubuntu 安装,但我找不到 Ubuntu Desktop 的非图形安装,这是有道理的。我尝试调整步骤并使其适用于 Ubuntu Desktop 16.04.1 LTS。

使用的文档

我已经使用了以下所有资源...

显然我无法包含我的所有资源,因为 askubuntu 不允许超过 2 个链接。这没什么帮助 - 所以这里只是一个列表:

  • 询问Ubuntu
  • Ubuntu 安装.en.pdf
  • 预置示例
  • Ubiquity 安装程序文档
  • Partman 文档和示例
  • 分区配方 3 个数字及其权重的解释
  • 一个更复杂的预置示例

当前解决方案

我目前已经创建了一个无人值守安装,但不确定它是否正确 - 这意味着我应该编辑 isolinux/isolinux.cfg

我链接的帖子和 Ubuntu 桌面图像之间存在许多差异。这是我的解决方案:

步骤1

安装 Ubuntu ISO 以便我可以将内容复制到另一个目录,然后编辑相关文件。

mkdir -p /mnt/iso
mount -o loop ubuntu.iso /mnt/iso

第2步

然后我将 ISO 文件复制到另一个目录进行编辑。

mkdir -p /opt/ubuntuiso
cp -rT /mnt/iso /opt/ubuntuiso

步骤3

我编辑了该isolinux/isolinux.cfg文件并将里面的所有内容替换为以下内容:

default live-install
label live-install
  menu label ^Install Ubuntu
  kernel /casper/vmlinuz.efi
  append  file=/cdrom/ks.preseed auto=true priority=critical debian-installer/locale=en_US keyboard-configuration/layoutcode=us ubiquity/reboot=true languagechooser/language-name=English countrychooser/shortlist=US localechooser/supported-locales=en_US.UTF-8 boot=casper automatic-ubiquity initrd=/casper/initrd.lz quiet splash noprompt noshell ---

附加行很长,为了便于阅读,这里是我使用的所有选项:

file=/cdrom/ks.preseed 
auto=true 
priority=critical 
debian-installer/locale=en_US 
keyboard-configuration/layoutcode=us 
ubiquity/reboot=true 
languagechooser/language-name=English 
countrychooser/shortlist=US 
localechooser/supported-locales=en_US.UTF-8 
boot=casper 
automatic-ubiquity 
initrd=/casper/initrd.lz 
quiet 
splash 
noprompt 
noshell

我发现所有这些启动参数都是实现完全无人值守安装所必需的。对于 Ubuntu Server,情况可能会有所不同。

步骤4

我尝试使用和创建了许多预置文件,但我发现越复杂,出错的可能性就越大。这是我目前与上述isolinux.cfg文件一起使用的简单预置文件。

### Partitioning
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-auto/choose_recipe select atomic

# This makes partman automatically partition without confirmation
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

# Locale
d-i debian-installer/locale string en_US
d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string us

# Network
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/choose_interface select auto

# Clock
d-i clock-setup/utc-auto boolean true
d-i clock-setup/utc boolean true
d-i time/zone string US/Pacific
d-i clock-setup/ntp boolean true

# Packages, Mirrors, Image
d-i base-installer/kernel/override-image string linux-server
d-i base-installer/kernel/override-image string linux-image-amd64
d-i mirror/country string US
d-i mirror/http/proxy string
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true
d-i pkgsel/install-language-support boolean false
tasksel tasksel/first multiselect ubuntu-desktop

# Users
d-i passwd/user-fullname string Liason
d-i passwd/username string liason
d-i passwd/user-password-crypted password [crpyt 3]
d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password [crypt 3]
d-i user-setup/allow-password-weak boolean true

# Grub
d-i grub-installer/grub2_instead_of_grub_legacy boolean true
d-i grub-installer/only_debian boolean true
d-i finish-install/reboot_in_progress note

# Custom Commands

我没有包含我的加密密码,所以如果您尝试这个预置文件,请将其更改为加密密码。这里有 3 种方法可以设置密码。

步骤5

我从目录创建了新的 ISO /opt/ubuntuiso/

mkisofs -D -r -V ATTENDLESS_UBUNTU -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o /opt/autoinstall.iso /opt/ubuntuiso

第 6 步

我最终用 Virtualbox 对其进行了测试,它创建了一个完全无人值守的安装。

问题

我是否应该编辑该isolinux/isolinux.cfg文件?

在另一篇文章中,他们似乎能够编辑isolinux/txt.cfg文件并使其工作。我尝试使用大约一个小时isolinux/txt.cfg,但没有成功。

有没有人有更复杂的 partman 配方可以直接指定分区?或者有可用的 LVM 设置?我尝试使用简单的 LVM 设置,但重启后它无法启动,只会显示黑屏。此外,我在文档中列出的预置示例中没有一个有效。

感谢您的任何帮助。

答案1

回答

我花了一些时间才提出我的问题,看看是否还有其他解决方案,但看起来我在等待时想出的解决方案是我迄今为止见过的唯一可行的解​​决方案。

误解

由于这是造成很多困惑的根源,我将尝试澄清这一点。似乎有些答案试图使用Ubuntu 16 服务器当我专门尝试创建无人值守的 Ubuntu 16 桌面映像安装时,我遇到了这个问题。这个问题的出现是因为 di(debian 安装程序)和 ubiquity 的实现差异。由于服务器映像会注意并使用预置文件中的所有 di 命令,所以我问的大多数问题都与服务器映像无关。但是,由于 ubiquity 作为桌面映像的安装程序的实现,许多 di 命令被忽略,您受到的限制非常有限,而且缺少许多文档。

找到文档链接

  • 这里是 Ubiquity 忽略 preseed/late_command 的链接(我相信它也会忽略 preseed/early_command)
  • 这里是 Ubiquity 文档,它讨论了哪些安装程序组件将不会在 Ubiquity 中使用,但正如您会注意到的,即使在此文档中它也提到了 preseed/early_command,但我会彻底测试以验证它,因为它似乎对我来说不起作用(我承认我没有严格测试 early_command,所以我可能是错的)。

成功流程

这是我成功创建的过程无人值守的 Ubuntu 桌面 16.04 LTSiso。

安装 Ubuntu ISO

您需要挂载 ISO 文件以便可以编辑相关文件。

mkdir -p /mnt/iso
mount -o loop ~/Downloads/ubuntu-16.04.1-desktop-amd64.iso /mnt/iso

复制 ISO 文件

我们需要将已安装 ISO 中的文件复制到其他目录,以便编辑它们。您可以随意使用任何您喜欢的目录,我根据另一篇指南选择了 /opt 目录,但 /tmp 也同样易于使用。

mkdir -p /opt/ubuntuiso
cp -rT /mnt/iso /opt/ubuntuiso

编辑 txt.cfg 文件

在这里,我们将编辑 /opt/ubuntuiso/isolinux/txt.cfg 文件并自定义我们的启动参数,以获得完全无人值守的安装,其中包括一个预置文件。使用您选择的任何编辑器:

#default live
#label live
#  menu label ^Try Ubuntu without installing
#  kernel /casper/vmlinuz.efi
#  append  file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash ---
#label live-install
#  menu label ^Install Ubuntu
#  kernel /casper/vmlinuz.efi
#  append  file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.lz quiet splash ---
#label check
#  menu label ^Check disc for defects
#  kernel /casper/vmlinuz.efi
#  append  boot=casper integrity-check initrd=/casper/initrd.lz quiet splash ---
#label memtest
#  menu label Test ^memory
#  kernel /install/mt86plus
#label hd 
#  menu label ^Boot from first hard disk
#  localboot 0x80

default live-install
label live-install
  menu label ^Install Ubuntu
  kernel /casper/vmlinuz.efi
  append  file=/cdrom/ks.preseed auto=true priority=critical debian-installer/locale=en_US keyboard-configuration/layoutcode=us ubiquity/reboot=true languagechooser/language-name=English countrychooser/shortlist=US localechooser/supported-locales=en_US.UTF-8 boot=casper automatic-ubiquity initrd=/casper/initrd.lz quiet splash noprompt noshell ---

请注意以下几点:

  • 我注释掉了文件中的所有原始文本。
  • 我在底部添加了所有文本,包括“默认实时安装”
  • 我将预置文件命名为“ks.preseed”,它将位于 ISO 的顶层目录 (/opt/ubuntuiso)

使用或创建预置文件

谨慎使用现有的预置文件!我还没有找到任何可以正常工作的文件。这并不是说它们不存在,只是我搜索了好久也没找到。配置预置文件的方法有很多,但我发现很多选项要忽略,我在上面链接的 Ubiquity 文档和 preseed/late_command 与 ubiquity/success_command 的链接中概述了这些选项。我附上了与上述 txt.cfg 文件配合使用的简单工作预置文件。

为了netcfg/get_hostname 字符串netcfg/get_domain 字符串您可以随意输入。我使用了 unassigned-hostname 和 unassigned-domain,因为我稍后会通过脚本过程更改它。

对于安装后想要运行的任何自定义命令,您需要使用:

ubiquity ubiquity/success_command string

后面跟着要运行的任何命令。注意用";\" 并使用“/目标”更改与安装的新系统有关的任何内容。

# Partitioning
# Old style using d-i command
#d-i partman-auto/disk string /dev/sda
#d-i partman-auto/method string regular
#d-i partman-lvm/device_remove_lvm boolean true
#d-i partman-md/device_remove_md boolean true
#d-i partman-auto/choose_recipe select atomic

# Newer ubiquity command
ubiquity partman-auto/disk string /dev/sda
ubiquity partman-auto/method string regular
ubiquity partman-lvm/device_remove_lvm boolean true
ubiquity partman-md/device_remove_md boolean true
ubiquity partman-auto/choose_recipe select atomic

# This makes partman automatically partition without confirmation
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

# Locale
d-i debian-installer/locale string en_US
d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string us

# Network
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/choose_interface select auto

# Clock
d-i clock-setup/utc-auto boolean true
d-i clock-setup/utc boolean true
d-i time/zone string US/Pacific
d-i clock-setup/ntp boolean true

# Packages, Mirrors, Image
d-i mirror/country string US
d-i apt-setup/multiverse boolean true
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true

# Users
d-i passwd/user-fullname string User
d-i passwd/username string user
d-i passwd/user-password-crypted password yourEncryptedPasswd
d-i passwd/user-default-groups string adm audio cdrom dip lpadmin sudo plugdev sambashare video
d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password rootEncryptedPasswd
d-i user-setup/allow-password-weak boolean true

# Grub
d-i grub-installer/grub2_instead_of_grub_legacy boolean true
d-i grub-installer/only_debian boolean true
d-i finish-install/reboot_in_progress note

# Custom Commands
ubiquity ubiquity/success_command string \
  sed -i -e 's/dns=dnsmasq/#dns=dnsmasq/' /target/etc/NetworkManager/NetworkManager.conf ;\
  cp -a /cdrom/scripts/ /target/root/ ;\
  cp -a /cdrom/salt/ /target/root/

请注意这些内容,因为我出于说明目的而保留它们,并且它们在您的预置命令中可能会有所不同。

  • 您需要添加用户/root 密码。这里该链接向您展示了创建 crypt 3 密码的 3 种不同方法。
  • 您可能想要更改您的用户被分配到的组。
  • 您肯定会想要更改 success_command。我留下它是为了展示如何格式化以及如何使用/目标环境。

创建新 ISO

创建 ISO,以便测试预置文件。如果你使用预置文件或自己制作预置文件,则需要对其进行测试,因为这将可能是您的流程失败的地方。我编写了一个用于快速测试的脚本,但您只需将预置文件指向 http:// 托管的预置文件,然后通过这种方式快速进行测试即可。

mkisofs -D -r -V "UNATTENDED_UBUNTU" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o /tmp/ubuntu16-desktop-unattended-install.iso /opt/ubuntuiso

请随意更改输出名称和保存它的目录。

刻录 ISO

我建议在虚拟机或类似软件上进行测试,一旦运行正常,就将其刻录到 DVD 上。现在您应该有一张可以运行的无人值守 Ubuntu Desktop 16.04 LTS 安装 DVD。

反馈、更正、错误

我一次性写完了所有内容,可能会有错误、拼写错误或一些混乱的地方。如果有人尝试这样做,请告诉我您在过程中遇到的错误。请记住,如果您创建了自己的预置文件,我可能无法回答为什么您的无人值守安装会中断并且无法正常工作,因为 Ubiquity 喜欢忽略并且不执行预置文件中的某些操作。我希望这对某些人有帮助。

答案2

看一下:https://github.com/core-process/linux-unattended-installation

该项目提供了创建无人值守的 Linux 最小设置安装所需的一切,而最小设置是指最轻量级的设置 - 包括 OpenSSH 服务和 Python - 您可以从 Linux 发行版的标准安装程序中获取。这个想法是,一旦完成最小设置,您将在 Ansible 或类似工具的帮助下完成所有配置和服务的进一步部署。

答案3

Brandon Authier 的帖子和指导非常好,对我帮助很大。

但是,我对您的方法有一个疑问:我发现安装完成并且 PC 重新启动后 GRUB 会挂起。

因此我在 ks.preseed 中添加了以下内容:

# Due notably to potential USB sticks, the location of the MBR can not be
# determined safely in general, so this needs to be specified:

d-i grub-installer/bootdev  string /dev/sda

# To install to the first device (assuming it is not a USB stick):
#d-i grub-installer/bootdev  string default

如果您没有移除 USB 记忆棒,这可以防止 grub 安装崩溃。我从https://www.debian.org/releases/stable/example-preseed.txt

答案4

很遗憾我之前的方法没有奏效。幸运的是,我找到了由 Rinck Sonnenberg 设计的脚本(网生),它可以在 GitHub 上创建无人值守的 Ubuntu Server AMD64 ISO,然后我将其分叉。然后我通过添加创建 I386 ISO 的功能改进了脚本。我还将操作系统从 Ubuntu Server 更改为 Ubuntu Desktop。您无需访问 GitHub 存储库,只需按照以下说明操作即可。

运行以下命令:

$ wget https://raw.githubusercontent.com/iPlus-TechNet/ubuntu-unattended/master/create-unattended-iso.sh
$ chmod +x create-unattended-iso.sh
$ sudo ./create-unattended-iso.sh

有时wget不可用。如果是这种情况,请使用curl

$ curl -O https://raw.githubusercontent.com/iPlus-TechNet/ubuntu-unattended/master/create-unattended-iso.sh

如果没有任何这些工作,下载并移动到您的主文件夹。

然后系统会询问您要安装哪个版本的 Ubuntu,然后会询问您是否要进行手动安装。然后脚本将下载 Ubuntu ISO,然后对其应用请求的更改。现在您有一个已准备好进行无人值守安装的 ISO!

这应该可以回答你的问题,因为对我来说效果很好。这种方法比我之前的答案简单得多,这也是好事。我希望它对你和对我们一样有效。

相关内容