我正在尝试运行 Ansible playbook 命令并收到如下错误。
Run Code Online (Sandbox Code Playgroud)fatal: [localhost]: FAILED! => {"changed": false, "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"}
当我检查 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)
小智 9
或者,您可以在当前的 Python venv 中安装 selinux:pip install selinux.
以下是我为解决此问题所做的工作。
对于 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-policycoreutils和python3-libselinux。
所以你可以使用以下命令安装它:
dnf install python3-policycoreutils python3-libselinux
Run Code Online (Sandbox Code Playgroud)
python ansible 无法访问安装在 /usr/lib64/python3.6/site-packages 下的 selinux 软件包。在 .bash_profile 中配置 PYTHONPATH 后。问题得到解决。
导出 PYTHONPATH=/usr/lib64/python3.6/site-packages