Плейбук ансибл завершался с ошибкой
>>The module failed to execute correctly, you probably need to set the interpreter.\nSee stdout/stderr for the exact error
на целевом узле установлен Python 3.6.8, а ошибка связана с функциональностью, введенной в Python 3.7 и выше.Решение этой задачи осложнялось, так как обновить Python на CentOS 7 невозможно из-за EOL (End of Life) статуса.
Шаги для установки Python 3.8 из исходников:
Установите необходимые зависимости:
yum groupinstall "Development Tools"
yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make
Скачайте исходный код Python 3.8:
wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz
После того как файл скачан, распакуйте его:
tar -xvzf Python-3.8.10.tgz
cd Python-3.8.10
Теперь нужно настроить сборку с нужными параметрами. Запустите команду ./configure, чтобы подготовить исходный код Python для сборки:
./configure --enable-optimizations --prefix=/usr/local --enable-optimizations --prefix=/usr/local
--enable-optimizations включает дополнительные оптимизации для ускорения Python.
--prefix=/usr/local указывает, куда установить Python (по умолчанию это будет /usr/local/bin/python3.8)
После конфигурации можно начать процесс сборки:
make -j$(nproc)
make altinstall
После завершения установки, убедитесь, что Python 3.8 установлен корректно:
python3.8 --version
Чтобы сделать Python 3.8 доступным через команду python3.8, можно создать символическую ссылку:
ln -s /usr/local/bin/python3.8 /usr/bin/python3.8
Но в пайплайне вылезла ошибка
TASK [Gathering Facts] *********************************************************
fatal: [pop-demo]: FAILED! => {
"ansible_facts": {},
"changed": false,
"failed_modules": {
"ansible.legacy.setup": {
"failed": true,
"module_stderr": "Unauthorized access has denied!\nTraceback (most recent call last):\n File "", line 520, in _get_decompress_func\nModuleNotFoundError: No module named 'zlib'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "", line 568, in _get_data\n File "", line 523, in _get_decompress_func\nzipimport.ZipImportError: can't decompress data; zlib not available\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "", line 107, in \n File "", line 99, in _ansiballz_main\n File "", line 44, in invoke_module\n File "", line 241, in load_module\n File "", line 709, in _get_module_code\n File "", line 570, in _get_data\nzipimport.ZipImportError: can't decompress data; zlib not available\n",
"module_stdout": "",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}
}
}
я не стал пересобирать с модулем zlib, пошел другим путем.
Установка rh-python38
Поправим репозиторий
cat /etc/yum.repos.d/centos-sclo-rh.repo
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
Чистим кеш и ставим
sudo yum clean all
sudo yum makecache
sudo yum install rh-python38
Комментарии (15)
CrazyElf
25.12.2024 12:49Поместите код в соответствующую разметку, тяжело без этого код на глаз воспринимать.
mixsture
25.12.2024 12:49Чтобы сделать Python 3.8 доступным через команду python (если вы не используете полную команду python3.8), можно создать символическую ссылку:
sudo ln -s /usr/local/bin/python3.8 /usr/bin/python3.8
sudo ln -s /usr/local/bin/pip3.8 /usr/bin/pip3.8И нет, это переносит между местами запуска для рута и обычного пользователя, а вот под описание "через команду python" не подходит.
Беда чатжпт - что его нужно тщательно проверять, что требует ничуть не меньших знаний.
dinky Автор
25.12.2024 12:49сделал текст более человечным
почему я сразу нормально понимаю chatGPT, wake up Neo, matrix has you :)
mixsture
25.12.2024 12:49Еще я бы предложил после этих действий прибраться за собой: удалить пакеты, нужные исключительно для разработки.
И раз вы собираетесь поддерживать вышедший из техподдержки линукс - то рано или поздно не сможете через пакетный менеджер установить пакеты разработки, а значит число собираемых из исходников пакетов будет расти и будет напоминать целую экосистему вокруг требуемого пакета. Поэтому, имхо, собирать следует на отдельной машине статические версии (https://wiki.python.org/moin/BuildStatically), а уже потом их распространять на боевые. Тем более, что вы писали вначале про ансибл - наверно, собирались устанавливать это на большом числе машин - устанавливать уже собранный статический пакет намного проще.dinky Автор
25.12.2024 12:49От centos 7 нужно уходить - это вопрос времени. А пока - мой костыль.
В данной задачея молодецпайплайн запустился. И я поделился решением.
phaggi
25.12.2024 12:49На мой взгляд, это совершенно бесполезная трата времени. Python, встроенный в систему, не нужно трогать вообще.
Кроме того, у Python специально реализованы возможности создавать окружения и в них использовать любую нужную версию как Python так и другого ПО, причем совершенно не трогая другие версии. Python можно устанавливать на комп хоть все версии сразу в разные папки и они будут мирно сосуществовать. Просто активируй нужное окружение с нужной в твоем проекте версией, и радуйся.
SLASH_CyberPunk
И у вас не будет python под root пользователем, т.к. /usr/local/bin не относится к PATH у root.
Захотите переделать на root через /usr/bin и отвалится pip и необходимо будет очень много "приседаний" почти как у redhat разработчиков:
P.S. подобная статья на хабре уже есть для python3.10, которую так же взяли из ChatGPT...
dinky Автор
С статье сказано, как решить вопрос с /usr/bin.
>>ссылку:sudo ln -s /usr/local/bin/python3.8 /usr/bin/python3.8sudo ln -s /usr/local/bin/pip3.8 /usr/bin/pip3.8
pip ansible не нужен
SLASH_CyberPunk
Это не решение =))
dinky Автор
я не спорю, от centos 7 нужно уходить. Это вопрос времени. А пока - мой костыль.
dinky Автор
Я не нашел. Поэтому написал свой велосипед.