Grub

grub 相當於 txt.cfg 中的 append 參數

  • August 4, 2021

我們使用的是定制的 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 在引導環境中不可用。

傳遞這些參數的正確方法是什麼?我們還缺少什麼嗎?

基於這個問題,我相信您正在使用 16.04“伺服器”安裝程序和 20.04“實時伺服器”安裝程序。debian-installer新的“live-server”安裝程序(基於 )正在逐步淘汰舊的“伺服器”安裝程序(基於subiquity)。對於 20.04,舊的“伺服器”映像被重命名為“舊伺服器”。

如果您使用舊版伺服器映像,那麼您可以繼續使用 16.04 技術。

如果您使用“實時伺服器”映像,那麼這取決於您要在哪裡使用環境變數。一個通用的解決方案是/etc/environment在安裝程序環境中進行修改。

這是一個部分user-data文件,用於autoinstall在安裝程序環境中cloud-init添加變數。/etc/environment使用 shell 檢查輸出/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

引用自:https://unix.stackexchange.com/questions/662766