在 Ubuntu 中修改内核命令行

在 Ubuntu 中修改内核命令行

我有许多系统需要修改内核命令行并添加一些选项。

目前我使用以下步骤执行此操作:

  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 :(

有人能告诉我是否有办法删除文件来修改默认内核命令行吗?

答案1

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

    GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} extra-option"
    
  3. 跑步update-grub

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

你几乎肯定还需要一个 postinst 脚本来在安装软件包时运行 update-grub,并且为了安全起见,因为它在/ETC你可能还应该将其包括在内配置文件在您的包裹中。但我认为,除非对包裹进行清理,否则它将被遗留,因此这是经销商的选择。

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

我根据 Trusty 编写了此内容。我不知道在多久以前的版本中这仍然适用。我刚刚检查了 Lucid,它不在那里。它在 Precise 中。

答案2

grub 2.02 似乎除了 /etc/default/grub 之外,还源文件与 /etc/default/grub.d/*.cfg 匹配。

这可能也适用于你的 Ubuntu 的任何版本。

答案3

按照grub 文档,您可能会发现使用/etc/grub.d/40_custom以下命令编辑文件很有用grub-mkconfig

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

也许您可以抓取第一个条目之一并将其复制到该配置的末尾,然后附加所需的选项?这应该是面向未来的,因为它基本上保留了现有配置并将您的自定义配置附加为补充菜单选项。


编辑:我知道您要求将其作为默认行,但上述内容是使用破坏性较小的方法进行的编辑的妥协(无论如何,您可以选择使用它grub-mkconfig来执行更大胆的任务,例如更改默认值)

相关内容