将参数传递给 Autoinstall

将参数传递给 Autoinstall

今天,我有一个包含自动安装的 ISO,它可以安装我的产品。我userdaya.yml看起来有点像下面这样 -

#cloud-config
autoinstall:
  version: 1
  identity:
    hostname: ubuntu-server
    password: "XXX"
    username: userfoobar
  late-commands:
    - cp -r /cdrom/copy_to_iso/ /target/opt/
  user-data:
    runcmd:
      - |
        mv -v /opt/copy_to_iso/foo_or_bar /opt/foo_or_bar
        bash -x /opt/foo_or_bar/install.sh foo

您可能会注意到,我将参数传递foo/opt/foo_or_bar/install.sh,并且此脚本会安装我的产品。我正在寻找一种动态安装的方法或者酒吧根据我传递给脚本的参数/opt/foo_or_bar/install.sh。我应该从哪里获取参数?从 grub 菜单,今天看起来像这样 -

set timeout=30

loadfont unicode

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry "Ubuntu FOO" {
    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

我想添加这样的内容 -

menuentry "Ubuntu BAR" {
    set gfxpayload=keep
    linux   /casper/vmlinuz   autoinstall   ds=nocloud\;s=/cdrom/nocloud/  ---
    initrd  /casper/initrd
}

如果用户在菜单中选择此选项,它将安装(通过install.sh酒吧, 并不是

所以我的问题是 - 有没有办法通过 grub 菜单中选择的选项将参数传递给自动安装?

答案1

我的建议是向内核传递一个参数。grub 配置将包括类似以下内容的内容

menuentry "Ubuntu FOO" {
    set gfxpayload=keep
    linux   /casper/vmlinuz   autoinstall   ds=nocloud\;s=/cdrom/nocloud/  foo ---
    initrd  /casper/initrd
}
menuentry "Ubuntu BAR" {
    set gfxpayload=keep
    linux   /casper/vmlinuz   autoinstall   ds=nocloud\;s=/cdrom/nocloud/  bar ---
    initrd  /casper/initrd
}

内核参数在 中可用/proc/cmdline。这是一个自动安装片段示例,它显示了如何根据所使用的内核参数更改行为。

#cloud-config
autoinstall:
  late-commands:
    - |
      if grep -q foo /proc/cmdline ; then
        touch /target/foo
      fi
      if grep -q bar /proc/cmdline ; then
        touch /target/bar
      fi
      true

笔记

  • 我使用 Ubuntu 22.04 ( subiquity 22.04.2) 进行了测试。

相关内容