我有许多系统需要修改内核命令行,添加一些选项。
目前,我使用以下程序进行操作:
- 打开 /etc/default/grub
- 修改 GRUB_CMDLINE_LINUX_DEFAULT,添加选项
- 运行更新-grub
- 重启
但是,我更愿意将此过程自动化作为数据包安装的一部分,并避免修改默认文件(因为这通常很脆弱)。
我想做的是:
- 删除文件(在 /etc/grub.d/? 中),覆盖 GRUB_CMDLINE_LINUX_DEFAULT 或类似文件
- 运行 update-grub 并重新启动
/etc/grub.d/* 中有一堆脚本用于构建实际的菜单配置,但是,没有明显的方式与它们交互。生成配置的脚本似乎只读取 /etc/default/grub :(
如果有办法删除文件来修改默认内核命令行,有人可以启发我吗?
创建一个文件/etc/default/grub.d/myextraoption.cfg添加到您想要的变量(仅附加到它,并带有额外的空间。您要小心不要破坏或破坏那里的任何现有数据。):
运行
update-grub
。你应该能够安全地在你的包中包含一个yourpackage.cfg文件,而不会有被覆盖或破坏其他东西的风险。这些.cfg文件中的任何一个都包含在主要默认文件之后,因此请注意这一点并做出相应的计划。
您几乎肯定还需要一个 postinst 脚本在安装包时运行 update-grub,并且为了安全起见,因为它位于/etc中,您可能还应该将它包含在包的conffiles中。我认为除非完成包装的清洗,否则这将留下它,因此经销商在这方面的选择。
作为参考,第 157 行或附近的 /usr/sbin/grub-mkconfig 是读取默认文件的内容,包括与/etc/default/grub.d/*.cfg匹配的任何内容。在我看来,这种情况正是它这样做的原因。
我是根据 Trusty 写的。我不知道这在多远的版本中仍然适用。我刚刚检查了 Lucid,但它不存在。它在 Precise 中。
除了 /etc/default/grub 之外,grub 2.02 似乎还匹配 /etc/default/grub.d/*.cfg 的源文件。
也许这也适用于您的 Ubuntu 的任何版本。
根据grub 文档
/etc/grub.d/40_custom
,您可能会发现使用 ; 编辑文件很有用grub-mkconfig
。也许您可以获取第一个条目并将其复制到该配置的末尾,然后附加您想要的选项?这应该是面向未来的,因为它基本上保留了现有配置并将您的自定义配置附加为补充菜单选项。
编辑:我意识到您要求将其作为默认行,但以上是使用潜在破坏性较小的方法对编辑进行的折衷(并且在任何情况下,您都可以选择用于
grub-mkconfig
执行更大胆的任务,例如更改默认)