我正在尝试在无状态的 RHEL6.5 KVM VM 中安装 nfs-utils(以及它的所有依赖项)。/etc/sysconfig/readonly-root
通过文件、我没有实现的 Linux 魔术以及 VM 设置 GUI 中的“只读”选项,将 VM配置为具有只读根。安装是使用virt-customize -a image.img --run install_script.sh
. 该脚本使用 here-document 来构建 .repo 文件(该文件转到 6.5 的 CentOS 保险库),然后我用来yum install -y nfs-utils
进行实际安装。我采用这种方法是因为它看起来比让 VM 在读/写模式下启动、安装、清理然后关闭更容易、更干净、更不容易出错。另外,我不知道如何让它启动读/写。
的输出virt-customize
显示软件包已成功安装。唯一的失败是由于拼写错误而删除了 .repo。
安装完成后,我启动了虚拟机并尝试照常登录。我的尝试现在被拒绝了,因为Login incorrect
.
我检查virt-cat
以确保用户的登录 shell 设置正确,并且加密密码/etc/shadow
看起来与原始密码相同。
我最初的方法是创建一个包含所有依赖项和 nfs-utils 的 ISO 映像,并将其附加到 VM 并让脚本处理安装。那时也发生了同样的问题。我将问题的根源缩小到安装了一个 NFS 包:nfs-utils
或者nfs-utils-lib
(两个之一,我不记得了)和rpcbind
包。当安装这些软件包之一,然后启动 VM 时,登录会中断。我猜这是现在发生的同样的问题。
我用于VM 的映像是cp
从原始 VM 的映像中生成的,因为这是一个测试,以确定如何正确进行安装。
是的,我输入的密码正确。我尝试更改用户的密码(通过libguestfs
工具),但我仍然无法登录,所以我不确定更改是否失败(命令的返回码表示成功)或相同的问题有效.
问题:
- 可以调试和修复登录问题吗?如果是这样,怎么做?
- 如何正确进行安装,以免登录失败?显然这种方式行不通。
这里的核心问题是 SELinux。有多种方法可以将软件安装到 VM 中,但它们归结为正在启动或未启动的 VM。后者是搞砸一切的原因,这就是我在帖子中进行安装的方式。
尽我所能,当虚拟机关闭并安装软件时,例如通过问题中的命令,SELinux 意识到发生了一些变化,它不知道安装后启动虚拟机时发生了什么,并锁定了一切. 允许 SELinux 重新标记解决了这个问题,但对我来说破坏了很多其他的东西。实际上,当系统脱机时,无法编写安装脚本,因为您可能会遇到这种情况。请注意,此问题可能仅与 RHEL6.5 虚拟机及其 SELinux 版本有关(我们的版本锁定为 RHEL6.5)。
为这样的 VM 进行安装的正确方法是将其引导到读/写模式,并通过使用所需 RPM 安装 ISO 或使用包管理器来执行安装。启动时,SELinux 会知道安装,一切都会很好。