今天,我有一个包含自动安装的 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
) 进行了测试。