首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libselinux-python绑定和ansible

libselinux-python绑定和ansible
EN

Stack Overflow用户
提问于 2020-04-14 23:42:09
回答 2查看 2.3K关注 0票数 0

很抱歉回答了我自己的问题,但我已经在多个论坛上看到了这篇文章,所以我想把这篇文章贴出来,希望它能对其他人有所帮助。

当试图对较旧的Python解释器--尤其是RedHat 5上的Python2.6 --运行Ansible时,会出现基本的问题,并得到关于“libselinux bindings not available”或类似错误的错误消息。

虽然这可能发生在任何基于Python的应用程序中,但我最常在Ansible上看到它。Ansible假定selinux模块可用,并将始终尝试在运行时导入它。

EN

回答 2

Stack Overflow用户

发布于 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,这解决了问题。

票数 1
EN

Stack Overflow用户

发布于 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。创建文件

代码语言:javascript
复制
 /usr/lib64/python2.6/site-packages/selinux/__init__.py

内容如下:

代码语言:javascript
复制
def is_selinux_enabled():
  return False

def is_selinux_mls_enabled():
  return False

(这是Python代码,所以要注意缩进。)这有效地禁止了Ansible使用selinux。此外,在这些系统上运行的任务不应包含任何selinux属性,例如setypeseuser。(老实说,我还没有完全测试它。)但是像命令行文件命令这样的基本模块现在可以正常工作了。

这不需要禁用selinux;它只阻止Ansible操作selinux属性。如有必要,您始终可以使用命令模块之一来编写脚本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61211678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档