Grub
grub 相當於 txt.cfg 中的 append 參數
我們使用的是定制的 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