中止,目标使用 selinux 但未安装 Python 绑定 (libselinux-Python)

Nag*_*adi 11 python ansible

我正在尝试运行 Ansible playbook 命令并收到如下错误。

fatal: [localhost]: FAILED! => {"changed": false, "msg": "Aborting, target
uses selinux but python bindings (libselinux-python) aren't installed!"}
Run Code Online (Sandbox Code Playgroud)

当我检查 libselinux-python 时,它显示它已经可用。

[root@host all]# sudo yum list installed |grep libselinux-python
libselinux-python3.x86_64            2.5-15.el7              @rhel-7-server-rpms
Run Code Online (Sandbox Code Playgroud)

如果有人遇到并解决了这个问题,请提供您的意见。

下面是我安装在服务器上的 Python 和 Ansible 版本。

[root@ xxx bin]# python --version
Python 3.6.5

[root@xxx bin]# which python
/root/.pyenv/shims/python

[root@xxx bin]# ansible --version
ansible 2.9.9
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /root/.pyenv/versions/3.6.5/lib/python3.6/site-packages/ansible
  executable location = /root/.pyenv/versions/3.6.5/bin/ansible
  python version = 3.6.5 (default, Jun 18 2020, 17:32:20) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

[root@ xxx bin]#
Run Code Online (Sandbox Code Playgroud)

小智 29

我刚刚失去了一整天的时间这一点,我设法解决它运行 sudo yum install libselinux-python3


小智 9

或者,您可以在当前的 Python venv 中安装 selinux:pip install selinux.

  • 这是 venvs 的正确答案,请参阅 https://pypi.org/project/selinux/ 上此包的描述(TLDR:正是针对这种情况的垫片)。请注意,您仍然需要“sudo yum install libselinux-python3”或等效命令。 (2认同)

Roa*_*ner 6

以下是我为解决此问题所做的工作。

对于 RHEL 上的 Python3,您可以使用以下命令安装 SE Linux

sudo yum install -y libselinux-python3
Run Code Online (Sandbox Code Playgroud)

然后创建一个虚拟环境来隔离您的依赖项并授予其访问系统 site-packages 目录的权限:

python3 -m venv .venv --system-site-packages
Run Code Online (Sandbox Code Playgroud)

如果您不使用--system-site-packages,您的虚拟环境将无法访问selinux,因为它放置在/usr/lib64/python3.6/site-packages.

然后激活此虚拟环境并运行 ansible playbook 命令:

source .venv/bin/activate
ansible-playbook -i my_inventory my_playbook.yml -vvv
deactivate
Run Code Online (Sandbox Code Playgroud)

PYTHONPATH尽管它有效,但按照以下答案之一进行修改通常是不好的做法。


小智 6

这些答案现在可能有点旧了,所以我会说,在使用 Rocky Linux 8.4(RHEL 克隆)时,dnfAnsible 文档中的包名称已更改。Ansible 说应该是,policycoreutils-python但实际上是python3-policycoreutilspython3-libselinux

所以你可以使用以下命令安装它:

dnf install python3-policycoreutils python3-libselinux
Run Code Online (Sandbox Code Playgroud)


Nag*_*adi 1

python ansible 无法访问安装在 /usr/lib64/python3.6/site-packages 下的 selinux 软件包。在 .bash_profile 中配置 PYTHONPATH 后。问题得到解决。

导出 PYTHONPATH=/usr/lib64/python3.6/site-packages