libse linux - python привязки и ansible - PullRequest
0 голосов
/ 14 апреля 2020

Извините за ответ на мой собственный вопрос, но я видел, как это возникало на нескольких форумах, поэтому я хотел опубликовать это в надежде, что это поможет кому-то еще.

Проблема basi c возникает при попытке запустить Ansible со старыми интерпретаторами Python - особенно Python 2.6 в RedHat 5 - и при получении сообщений об ошибках о привязках libse linux нет доступные или подобные ошибки.

Хотя это может произойти для любого приложения на основе Python, чаще всего это происходит на Ansible. Ansible предполагает, что модуль se linux доступен и всегда будет пытаться импортировать его во время выполнения.

1 Ответ

0 голосов
/ 14 апреля 2020

Привязки libse linux - python не являются простым python модулем. Модуль должен быть скомпилирован как с целевой версией Python , так и с целевой версией libse linux. Приятные люди, обслуживающие репозитории RedHat 5 EPEL, не генерировали модуль Python 2.6 / libse linux 1.33.

«Существующий» модуль libse linux - python из стандартных репозиториев не будет работать, потому что он указан c для поставляемого Python 2.4 интерпретатора. Если вы скопировали модуль из другой установки Python 2.6 - скажем, из системы RedHat 6 - это тоже не сработает, поскольку она построена на неправильной версии libse linux. В то время как вы можете развлекаться различными ошибками, создаваемыми различными комбинациями, Ansible не станет различать guish между ними; он просто скажет, что привязки недоступны.

Решение состоит в том, чтобы создать модуль 'stub' se linux 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 от работы с se linux. Кроме того, задачи, выполняемые в этих системах, не должны включать какие-либо атрибуты se linux, такие как setype или seuser . (Честно говоря, я не проверял это полностью.) Но основные c модули, такие как lineinfile или команда , теперь работают должным образом.

Это не требует отключения selinux; он только запрещает Ansible манипулировать se linux атрибутами. При необходимости вы всегда можете использовать один из модулей command для создания сценария вокруг него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...