很抱歉回答了我自己的问题,但我已经在多个论坛上看到了这篇文章,所以我想把这篇文章贴出来,希望它能对其他人有所帮助。
当试图对较旧的Python解释器--尤其是RedHat 5上的Python2.6 --运行Ansible时,会出现基本的问题,并得到关于“libselinux bindings not available”或类似错误的错误消息。
虽然这可能发生在任何基于Python的应用程序中,但我最常在Ansible上看到它。Ansible假定selinux模块可用,并将始终尝试在运行时导入它。
发布于 2022-01-09 19:19:54
我本想把这篇文章作为对@crankyeldergod上帝的回答的评论(因为他的回答让我想出了解决这个问题的办法),但我还没有足够的帖子来评论。
尽管安装了libselinux-python包,但我仍然收到"Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"错误。我进入/usr/lib64并检查了我在那里找到的python目录,直到找到了存在selinux文件的那个目录。我记下了python的那个版本,并在我的清单文件中显式地声明了它,在我的例子中是- ansible_python_interpreter=/usr/bin/python3.6,这解决了问题。
发布于 2020-04-14 23:42:09
libselinux-python绑定不是一个简单的python模块。该模块必须针对Python的目标版本和libselinux的目标版本进行交叉编译。那些维护Python5EPEL存储库的好心人并没有生成RedHat 2.6/libselinux 1.33模块。
来自标准repos的‘现有’libselinux-python模块将无法工作,因为它特定于所提供的Python2.4解释器。如果您从不同的Python2.6安装--比方说,一个libselinux 6系统--复制了这个模块,那么它也不会工作,因为它是基于错误的RedHat版本构建的。虽然您可以从不同组合产生的各种错误中取乐,但Ansible不会费心区分它们;它只会声明绑定不可用。
解决方案是创建一个'stub‘selinux python模块来安抚Ansible。创建文件
/usr/lib64/python2.6/site-packages/selinux/__init__.py内容如下:
def is_selinux_enabled():
return False
def is_selinux_mls_enabled():
return False(这是Python代码,所以要注意缩进。)这有效地禁止了Ansible使用selinux。此外,在这些系统上运行的任务不应包含任何selinux属性,例如setype或seuser。(老实说,我还没有完全测试它。)但是像命令行文件或命令这样的基本模块现在可以正常工作了。
这不需要禁用selinux;它只阻止Ansible操作selinux属性。如有必要,您始终可以使用命令模块之一来编写脚本。
https://stackoverflow.com/questions/61211678
复制相似问题