grub 相当于 txt.cfg 中的追加参数

grub 相当于 txt.cfg 中的追加参数

我们使用的是自定义 Ubuntu 20.04,需要在启动过程中传递变量。在 16.04 上,我们使用 ISOLINUX 引导加载程序,我们的 txt.cfg 如下所示:

label m1
  menu label Install srv (SINGLE DISK)
  kernel /install/vmlinuz
  append auto file=/cdrom/preseed/srv_preseed _C=param1 _S=param2

然后,param1 和 param2 可用作引导环境中的环境变量。

在 Ubuntu 20.04 中,我们切换到 UEFI,因此需要对 grub 进行更改。我们的 grub.cfg 看起来像这样:

menuentry "srv" {
                set gfxpayload=keep
                linux   /casper/vmlinuz _C=param1 "ds=nocloud;s=/cdrom/inst/" quiet autoinstall ---
                initrd  /casper/initrd
}

但是,_C=param1 在引导环境中不可用。

传递这些参数的正确方法是什么?我们还有什么遗漏的吗?

答案1

根据这个问题,我相信您正在使用 16.04“服务器”安装程序和 20.04“实时服务器”安装程序。旧的“服务器”安装程序(基于debian-installer)正在被新的“live-server”安装程序(基于subiquity)逐步淘汰。对于 20.04,旧的“服务器”映像被重命名为“legacy-server”。

如果你使用旧服务器映像那么你可以继续使用你的 16.04 技术。

如果您使用“live-server”映像,那么这取决于您要在何处使用环境变量。通用的解决方案是/etc/environment在安装程序环境中进行修改。

这是用于在安装程序环境中添加变量的部分user-data文件。使用 shell 检查输出将显示安装程序进程中存在的自定义环境变量。autoinstallcloud-init/etc/environment/run/my_env.txt

#cloud-config
autoinstall:
  version: 1
  early-commands:
    - env | sort >> /run/my_env.txt
write_files:
  - path: /etc/environment
    content: |
      _C=param1
      _S=param2
    append: true

如果您想继续使用内核参数来设置变量,那么更有创意的解决方案可以从 PID 1 获取变量。这是一个部分user-data文件,假设内核参数用作环境变量,以_.

#cloud-config
autoinstall:
  version: 1
  early-commands:
    - env | sort >> /run/my_env.txt
bootcmd:
  - cat /proc/1/environ | tr '\0' '\n' | grep ^_ >> /etc/environment

相关内容