我已经使用打包程序和文件创建了一个自动化的 ubuntu 映像preseed.cfg
,并且我意识到我们使用了多个模板,每个模板都需要相同的预置,但是特定参数需要一些不同的值。
是否可以在预设中创建一个变量来从环境变量中获取值?
如果没有的话我的解决方法可能是:
preseed.cfg
在like中创建一个可替换的值$CUSTOM_VALUE
,并将 preseed 重命名为preseed.cfg.tpl
- 在打包过程之前,运行
sed
替换preseed.cfg.tpl
为$CUSTOM_VALUE
环境变量值并输出文件为preseed.cfg
- 在新的预种子上运行打包程序
另一个解决方法是使用预配置程序,例如racker
读取模板预置,替换值,保存到文件,然后通过管道将 racker 输出到 packer 例如racker ubuntu.rb - | packer build -
答案1
是的。引导参数有这个重要部分:
任何不被接受为上述设置函数的形式“foo = bar”都会被解释为要设置的环境变量。
以及“使用预置自动安装”的附录 B.2.2:
B.2.2. 使用引导参数预置问题 如果预配置文件不能用于预置某些步骤,则安装仍然可以完全自动化,因为您可以在引导安装程序时在命令行上传递预置值。
如果您不想使用预置,而只想为特定问题提供答案,也可以使用引导参数。本手册的其他地方记录了一些有用的示例。
要设置在 debian-installer 内部使用的值,只需为本附录示例中列出的任何预置变量传递 path/to/variable=value。如果要使用值来配置目标系统的软件包,则需要在变量前面加上所有者(debconf 变量(或模板)的所有者通常是包含相应 debconf 模板的软件包的名称。对于安装程序本身使用的变量,所有者为“di”。模板和变量可以有多个所有者,这有助于确定在清除软件包时是否可以将它们从 debconf 数据库中删除。),如owner:path/to/variable=value。如果您不指定所有者,变量的值将不会被复制到目标系统中的 debconf 数据库,因此在配置相关软件包期间将保持未使用状态。
通常,以这种方式预先设定问题意味着不会询问该问题。要为问题设置特定的默认值,但仍询问该问题,请使用“?=”而不是“=”作为运算符。另请参阅第 B.5.2 节“使用预先设定更改默认值”。
请注意,一些在启动提示符下经常设置的变量具有较短的别名。如果有别名,则在本附录的示例中使用它来代替完整变量。例如,preseed/url 变量已别名为 url。另一个示例是任务别名,它转换为 taskel:tasksel/first。
笔记:当前 Linux 内核(2.6.9 及更高版本)最多接受 32 个命令行选项和 32 个环境选项,包括安装程序默认添加的任何选项。如果超出这些数字,内核将崩溃。(对于早期内核,这些数字较低。)
笔记:ubuntu.parmfile 限制为 11 行,每行 80 个字符。(精确限制是 11 行,每行 * 80 个字符加上另外 10 个字符。)因此建议尝试每行指定多个参数,用单个空格分隔参数,并使用尽可能多的(缩短的)别名。但不要跨多行指定单个参数(包括其值)!参数的大小写以及顺序无关紧要。
B.2.4 有一个别名列表:
B.2.4. 预置时有用的别名 使用(自动模式)预置时,以下别名可能很有用。请注意,这些只是问题名称的简短别名,您始终需要指定一个值:例如,auto=true 或 interface=eth0。
priority debconf/priority
fb debian-installer/framebuffer
language debian-installer/language
country debian-installer/country
locale debian-installer/locale
theme debian-installer/theme
auto auto-install/enable
classes auto-install/classes
file preseed/file
url preseed/url
domain netcfg/get_domain
hostname netcfg/get_hostname
interface netcfg/choose_interface
protocol mirror/protocol
suite mirror/suite
modules anna/choose_modules
recommends base-installer/install-recommends
tasks tasksel:tasksel/first
desktop tasksel:tasksel/desktop
dmraid disk-detect/dmraid/enable
keymap keyboard-configuration/xkb-keymap
preseed-md5 preseed/file/checksum