Dracut 在 initramfs 构建期间跳过新的自定义 dracut 模块

Dracut 在 initramfs 构建期间跳过新的自定义 dracut 模块

好的,我有一个运行 RHEL 6 服务器的系统,由于硬件限制,RHEL 6 是我可以使用的最新版本。其次,我尝试为 pxe 操作创建一个实时网络可启动 initramfs。在较新的系统 RHEL 7/8 中,我只需包含 dmsquash-live-root 和 livenet dracut 模块即可为我的 initramfs 文件提供远程根和实时启动功能。我的 RHEL 6 服务器没有 livenet,只有 dmsquash-live-root。因此,我从新系统复制了 90livenet 目录并将其放置在 /usr/share/dracut/modules.d/ 目录中,如下图所示。在此输入图像描述

然后它看起来并包含与我的 RHEL 7 系统相同的内容。但是当我使用下面的 conf 文件运行以下 dracut 命令时,dracut 只是跳过模块,就像它不存在一样。这对我来说很奇怪,因为如果你指定一个不存在的模块,dracut 命令会抱怨并且通常会失败,但在这种情况下,它不会抱怨包含 livenet,而是似乎简单地浏览它。

dracut -v -f -c dracut.conf initramfs-3.10.0-693.72.1.rt56.672.el6rt.x86_64.img 3.10.0-693.72.1.rt56.672.el6rt.x86_64 > output.txt
                                             #Dracut.conf 
# Dracut modules to add to the default
add_dracutmodules+="nfs network dmsquash-live livenet"

# additional kernel modules to the default
add_drivers+="nfs nfs4"

omit_dracutmodules+="biosdevname"

Soo 我的问题是,任何人都可以指出我的命令或conf使用中的错误,或者有人可以解释我需要执行的额外步骤,除了将模块目录和内容包含到modules.d目录中之外。(ps我也尝试过。 /module-setup.sh 只是为了查看在使用 dracut 命令之前是否必须运行该安装脚本 - 某些模块具有名为 install 的脚本,因此不确定我是否需要,但安装脚本看起来与其他工作模块的安装脚本非常相似)

我可以 grep 该配置文件中的所有其他内容,除了我注入的 livenet 模块之外,它都在那里。

答案1

由于 RHEL 6 于 2010 年发布,其版本dracut可能不支持module-setup.sh.看起来这是在 2011-02-02 发布的版本 008 中引入的。

尝试转换module-setup.sh为单独的脚本。每个check, depends, install,installkernel函数都应该是其自己的同名脚本(无.sh后缀)。仅应复制函数内部({和之间的文本)。}为了安全起见,请确保包含 shebang ( #! /bin/bash) 并使脚本可执行 ( chmod +x check depends install installkernel)。

例如,如果你/usr/lib/dracut/modules.d/90livenet/module-setup.sh看起来像这样:

#! /bin/bash

check () {
A
}

depends () {
B
}

install () {
C
}

installkernel () {
D
}

您应该将其替换为以下文件:

/usr/lib/dracut/modules.d/90livenet/check:

#! /bin/bash

A

/usr/lib/dracut/modules.d/90livenet/depends:

#! /bin/bash

B

/usr/lib/dracut/modules.d/90livenet/install:

#! /bin/bash

C

/usr/lib/dracut/modules.d/90livenet/installkernel:

#! /bin/bash

D

相关内容