在Ubuntu中修改内核cmdline

我有一些系统需要修改内核cmdline,添加一些选项。

目前我使用下列步骤来做:

  1. 打开/ etc / default / grub
  2. 修改GRUB_CMDLINE_LINUX_DEFAULT,添加选项
  3. 运行update-grub
  4. 重启

但是,我宁愿将这个过程自动化为数据包安装的一部分,并且避免修改默认文件(因为这通常是脆弱的)。

我想要做的是这样的:

  1. 删除一个文件(在/etc/grub.d/中),覆盖GRUB_CMDLINE_LINUX_DEFAULT或类似的
  2. 运行update-grub并重启

/etc/grub.d/*中有一堆脚本用于构build实际的菜单configuration,但是没有明显的方式与它们进行交互。 生成configuration的脚本似乎只读/ etc / default / grub 🙁

如果有办法删除文件来修改默认的内核命令行,有人可以启发我吗?

  1. 创build/etc/default/grub.d目录,如果它不存在。
  2. 创build一个文件/etc/default/grub.d/myextraoption.cfg添加到你想要的variables中(追加到只有一个额外的空间,你要小心,不要在那里打破或破坏现有的数据):

     GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} extra-option" 
  3. 运行update-grub

您应该能够安全地在包中包含一个yourpackage.cfg文件,而不会被覆盖或破坏别的东西。 这些.cfg文件中的任何一个都包含在主要的默认文件之后,因此只需要注意这一点,并相应地进行规划。

几乎可以肯定的是,当你的软件包被安装的时候,你几乎肯定会想要一个postinst脚本来运行update-grub,并且为了安全起见,因为它在/ etc中,你应该也可以把它包含在你的软件包的conff中。 我想虽然这样做会使它落后,除非清除包装,所以经销商的select。

作为参考,第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文档 ,你可能会发现用grub-mkconfig编辑/etc/grub.d/40_custom文件是很有用grub-mkconfig ;

/etc/grub.d/40_custom对于添加整个自定义菜单条目特别有用; 只需在该文件末尾键入要添加的菜单项,确保至less保留前两行完好无损。

也许你可以抓住第一个条目之一,并将其​​复制到该configuration的末尾,并追加你想要的选项? 这应该是未来的保证,因为它基本上保留了现有的configuration,并附加您的自定义configuration作为补充菜单选项。


编辑:我知道你要求它是默认的行,但上面是编辑妥协与一个较less的潜在破坏性的方法(在任何情况下,你可以select使用grub-mkconfig来执行一个更大胆的任务如更改默认)