在 Ubuntu 中修改内核 cmdline

peh*_*hrs 5 ubuntu kernel grub

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

目前我使用以下程序进行操作:

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

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

我想做的是:

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

/etc/grub.d/* 中有一堆脚本用于构建实际的菜单配置,但是,没有明显的方式与它们交互。生成配置的脚本似乎只读取 /etc/default/grub :(

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

Jef*_*der 5

  1. 如果目录/etc/default/grub.d不存在,则创建该目录。
  2. 创建一个文件/etc/default/grub.d/myextraoption.cfg添加到您想要的变量(仅附加到它,并带有额外的空间。您要小心不要破坏或破坏那里的任何现有数据。):

    GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} extra-option"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行update-grub

您应该能够安全地将yourpackage.cfg文件包含在您的包中,而不会有被覆盖或破坏其他内容的风险。这些.cfg文件中的任何一个都包含在主默认文件之后,因此请注意这一点并进行相应的计划。

您几乎肯定还需要一个 postinst 脚本来在安装包时运行 update-grub,并且为了安全起见,因为它在/etc 中,您可能还应该将它包含在包的conffiles中。我认为,除非完成对包装的清除,否则这会留下它,因此经销商在这方面的选择。

作为参考, 第 157 行或附近的/usr/sbin/grub-mkconfig读取默认文件,包括与/etc/default/grub.d/*.cfg匹配的任何内容。在我看来,这种情况可能正是它这样做的原因。

我是基于 Trusty 写的。我不知道这仍然适用于多远的版本。我刚刚检查了 Lucid,它不存在。它就在 Precise 中。