我们使用的是自定义 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 检查输出将显示安装程序进程中存在的自定义环境变量。autoinstall
cloud-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