好的,我有一个运行 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