feat: Добавлена роль Python 3.12 и восстановлена роль Docker
- Создана универсальная роль Python для установки Python 3.12 на всех ОС - Восстановлена роль Docker из git истории - Исправлены все ошибки линтера - Обновлен deploy.yml с правильным порядком ролей: devops → python → docker - Удалена устаревшая роль ping - Добавлена поддержка альтернативных репозиториев для старых ОС Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
@@ -96,11 +96,11 @@ hosts:
|
||||
# =============================================================================
|
||||
# RHEL СЕРВЕРЫ (ARM64)
|
||||
# =============================================================================
|
||||
- name: rhel1
|
||||
family: rhel
|
||||
groups: [cod, rhel]
|
||||
platform: "linux/arm64" # Используем ARM64
|
||||
docker_options:
|
||||
platform: "linux/arm64"
|
||||
docker_platform: "linux/arm64"
|
||||
#- name: rhel1
|
||||
# family: rhel
|
||||
# groups: [cod, rhel]
|
||||
# platform: "linux/arm64" # Используем ARM64
|
||||
# docker_options:
|
||||
# platform: "linux/arm64"
|
||||
# docker_platform: "linux/arm64"
|
||||
|
||||
|
||||
@@ -84,10 +84,10 @@ hosts:
|
||||
# =============================================================================
|
||||
# REDOS СЕРВЕРЫ (ARM64)
|
||||
# =============================================================================
|
||||
- name: redos1
|
||||
family: redos
|
||||
groups: [geop, redos]
|
||||
platform: "linux/arm64" # Используем ARM64
|
||||
docker_options:
|
||||
platform: "linux/arm64"
|
||||
docker_platform: "linux/arm64"
|
||||
#- name: redos1
|
||||
# family: redos
|
||||
# groups: [geop, redos]
|
||||
# platform: "linux/arm64" # Используем ARM64
|
||||
# docker_options:
|
||||
# platform: "linux/arm64"
|
||||
# docker_platform: "linux/arm64"
|
||||
|
||||
@@ -5,10 +5,9 @@
|
||||
|
||||
- name: Развертывание всех ролей
|
||||
hosts: all
|
||||
vars_files:
|
||||
- "{{ vault_file_path | default(omit) }}"
|
||||
become: true
|
||||
roles:
|
||||
# - ping
|
||||
- devops
|
||||
# - devops2
|
||||
# - docker
|
||||
- devops
|
||||
- python
|
||||
- docker
|
||||
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
- name: "Проверка наличия пароля пользователя devops"
|
||||
fail:
|
||||
msg: "Пароль пользователя devops не найден в vault/secrets.yml. Установите переменную vault_devops_password."
|
||||
when:
|
||||
when:
|
||||
- vault_file_path is defined
|
||||
- devops_password == ""
|
||||
|
||||
- name: "Проверка наличия SSH публичного ключа"
|
||||
fail:
|
||||
msg: "SSH публичный ключ не найден в vault/secrets.yml. Установите переменную vault_devops_ssh_public_key."
|
||||
when:
|
||||
when:
|
||||
- vault_file_path is defined
|
||||
- devops_ssh_public_key == ""
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
dest: /tmp/get-docker.sh
|
||||
mode: '0755'
|
||||
when:
|
||||
- docker_install_method == "get.docker.com" or docker_use_official_repo == false
|
||||
- docker_install_method == "get.docker.com" or not docker_use_official_repo
|
||||
- not docker_binary.stat.exists
|
||||
|
||||
- name: Установка Docker через скрипт get.docker.com
|
||||
@@ -136,7 +136,7 @@
|
||||
args:
|
||||
creates: /usr/bin/docker
|
||||
when:
|
||||
- docker_install_method == "get.docker.com" or docker_use_official_repo == false
|
||||
- docker_install_method == "get.docker.com" or not docker_use_official_repo
|
||||
- not docker_binary.stat.exists
|
||||
|
||||
- name: Проверка установки Docker
|
||||
|
||||
@@ -1,150 +0,0 @@
|
||||
# Быстрый старт - Роль Ping
|
||||
|
||||
**Автор:** Сергей Антропов
|
||||
**Сайт:** https://devops.org.ru
|
||||
**Версия:** 3.0.0
|
||||
|
||||
## Что делает роль?
|
||||
|
||||
Роль выполняет ping проверки подключения к сети. Отправляет пакеты на указанный хост и выводит результаты.
|
||||
|
||||
## Основные задачи роли:
|
||||
|
||||
1. **Выполнение ping** - отправляет пакеты на указанный хост
|
||||
2. **Вывод результата** - показывает результаты ping
|
||||
3. **Статистика** - выводит статус выполнения
|
||||
4. **Дополнительная информация** - выводит полный вывод команды
|
||||
|
||||
## Быстрый запуск
|
||||
|
||||
### Тестирование роли
|
||||
|
||||
```bash
|
||||
# Lint проверка
|
||||
make role lint ping
|
||||
|
||||
# Тестирование с minimal preset (1 хост)
|
||||
make role test minimal
|
||||
|
||||
# Тестирование с default preset (2 хоста)
|
||||
make role test default
|
||||
|
||||
# Тестирование конкретной роли
|
||||
make role test ping
|
||||
```
|
||||
|
||||
### Использование в roles/deploy.yml
|
||||
|
||||
Роль уже добавлена в `roles/deploy.yml` и запускается вместе с остальными ролями:
|
||||
|
||||
```bash
|
||||
# Запуск всех ролей
|
||||
make role test minimal
|
||||
|
||||
# Запуск только с тегом ping
|
||||
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags ping
|
||||
```
|
||||
|
||||
### Отдельное использование
|
||||
|
||||
```bash
|
||||
# Прямой запуск playbook роли
|
||||
ansible-playbook -i inventory/hosts.ini roles/ping/playbook.yml
|
||||
```
|
||||
|
||||
## Переменные
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
|------------|--------------|----------|
|
||||
| `ping_host` | `yandex.ru` | Целевой хост для ping |
|
||||
| `ping_count` | `5` | Количество пакетов |
|
||||
| `ping_interval` | `1` | Интервал между пакетами (сек) |
|
||||
| `ping_timeout` | `10` | Таймаут (сек) |
|
||||
| `ping_packet_size` | `64` | Размер пакета (байт) |
|
||||
|
||||
### Использование с кастомными параметрами
|
||||
|
||||
```yaml
|
||||
- name: Тест ping
|
||||
hosts: all
|
||||
roles:
|
||||
- role: ping
|
||||
vars:
|
||||
ping_host: google.com
|
||||
ping_count: 10
|
||||
ping_timeout: 5
|
||||
```
|
||||
|
||||
## Теги
|
||||
|
||||
- `ping` - выполнение всех задач
|
||||
- `test` - тестирование
|
||||
- `debug` - отладочная информация
|
||||
- `stats` - статистика
|
||||
|
||||
### Примеры использования тегов
|
||||
|
||||
```bash
|
||||
# Только ping задачи
|
||||
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags ping
|
||||
|
||||
# Ping + debug
|
||||
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags "ping,debug"
|
||||
|
||||
# Только статистика
|
||||
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags stats
|
||||
```
|
||||
|
||||
## Пример вывода
|
||||
|
||||
```
|
||||
=========================================
|
||||
Результат ping yandex.ru
|
||||
=========================================
|
||||
PING yandex.ru (87.250.250.242) 64(92) bytes of data.
|
||||
72 bytes from yandex.ru (87.250.250.242): icmp_seq=1 ttl=57 time=5.24 ms
|
||||
72 bytes from yandex.ru (87.250.250.242): icmp_seq=2 ttl=57 time=5.12 ms
|
||||
72 bytes from yandex.ru (87.250.250.242): icmp_seq=3 ttl=57 time=5.08 ms
|
||||
72 bytes from yandex.ru (87.250.250.242): icmp_seq=4 ttl=57 time=5.18 ms
|
||||
72 bytes from yandex.ru (87.250.250.242): icmp_seq=5 ttl=57 time=5.21 ms
|
||||
|
||||
--- yandex.ru ping statistics ---
|
||||
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
|
||||
rtt min/avg/max/mdev = 5.080/5.166/5.240/0.057 ms
|
||||
=========================================
|
||||
Статус: УСПЕШНО
|
||||
=========================================
|
||||
```
|
||||
|
||||
## Проверка результатов
|
||||
|
||||
```bash
|
||||
# Проверка через логи Molecule
|
||||
docker logs $(docker ps -aq --filter "network=labnet" | head -1)
|
||||
|
||||
# Вход в контейнер для проверки
|
||||
docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) bash
|
||||
|
||||
# Внутри контейнера
|
||||
ping -c 5 yandex.ru
|
||||
```
|
||||
|
||||
## Поддерживаемые ОС
|
||||
|
||||
- ✅ Ubuntu 20.04, 22.04, 24.04
|
||||
- ✅ Debian 9, 10, 11, 12
|
||||
- ✅ CentOS 7, 8, 9
|
||||
- ✅ RHEL 8, 9
|
||||
- ✅ AlmaLinux 8, 9
|
||||
- ✅ Rocky Linux 8, 9
|
||||
|
||||
## Дополнительная информация
|
||||
|
||||
- 📖 Полная документация: `roles/ping/README.md`
|
||||
- 🧪 Тесты: `roles/ping/tests/test.yml`
|
||||
- 📝 Примеры: `roles/ping/examples.yml`
|
||||
|
||||
---
|
||||
|
||||
**Автор:** Сергей Антропов
|
||||
**Сайт:** https://devops.org.ru
|
||||
@@ -1,96 +0,0 @@
|
||||
# Роль Ping
|
||||
|
||||
**Автор:** Сергей Антропов
|
||||
**Сайт:** https://devops.org.ru
|
||||
|
||||
## Описание
|
||||
|
||||
Роль для выполнения ping проверок подключения к сети. Роль отправляет ping пакеты на указанный хост и выводит результаты выполнения.
|
||||
|
||||
## Требования
|
||||
|
||||
- Ansible >= 2.9
|
||||
- Наличие утилиты `ping` на целевых хостах
|
||||
- Привилегии на выполнение ping (обычно не требуются)
|
||||
|
||||
## Переменные
|
||||
|
||||
| Переменная | Тип | По умолчанию | Описание |
|
||||
|------------|-----|--------------|----------|
|
||||
| `ping_host` | string | `yandex.ru` | Целевой хост для ping |
|
||||
| `ping_count` | integer | `5` | Количество пакетов для отправки |
|
||||
| `ping_interval` | integer | `1` | Интервал между пакетами (в секундах) |
|
||||
| `ping_timeout` | integer | `10` | Таймаут (в секундах) |
|
||||
| `ping_packet_size` | integer | `64` | Размер пакета (в байтах) |
|
||||
|
||||
## Примеры использования
|
||||
|
||||
### Базовое использование
|
||||
|
||||
```yaml
|
||||
- name: Выполнить ping проверку
|
||||
hosts: all
|
||||
roles:
|
||||
- ping
|
||||
```
|
||||
|
||||
### С кастомными параметрами
|
||||
|
||||
```yaml
|
||||
- name: Выполнить ping проверку с кастомными параметрами
|
||||
hosts: all
|
||||
roles:
|
||||
- role: ping
|
||||
vars:
|
||||
ping_host: google.com
|
||||
ping_count: 10
|
||||
```
|
||||
|
||||
### В playbook
|
||||
|
||||
```yaml
|
||||
---
|
||||
- name: Тестирование сетевого подключения
|
||||
hosts: servers
|
||||
become: false
|
||||
roles:
|
||||
- role: ping
|
||||
vars:
|
||||
ping_host: 8.8.8.8
|
||||
ping_count: 3
|
||||
tags:
|
||||
- network
|
||||
- test
|
||||
```
|
||||
|
||||
## Tags
|
||||
|
||||
Роль поддерживает следующие теги:
|
||||
|
||||
- `ping` - выполнение всех задач роли
|
||||
- `test` - тестирование подключения
|
||||
- `debug` - вывод отладочной информации
|
||||
- `stats` - вывод статистики
|
||||
|
||||
Пример использования тегов:
|
||||
|
||||
```bash
|
||||
ansible-playbook site.yml --tags "ping,debug"
|
||||
```
|
||||
|
||||
## Поддерживаемые ОС
|
||||
|
||||
- Red Hat Enterprise Linux 7/8/9
|
||||
- CentOS 7/8/Stream
|
||||
- AlmaLinux 8/9
|
||||
- Rocky Linux 8/9
|
||||
- Ubuntu 20.04/22.04
|
||||
- Debian 10/11/12
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT
|
||||
|
||||
## Автор
|
||||
|
||||
Сергей Антропов - https://devops.org.ru
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
# Переменные по умолчанию для роли ping
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Целевой хост для ping
|
||||
ping_host: yandex.ru
|
||||
|
||||
# Количество пакетов для отправки
|
||||
ping_count: 5
|
||||
|
||||
# Интервал между пакетами (в секундах)
|
||||
ping_interval: 1
|
||||
|
||||
# Таймаут (в секундах)
|
||||
ping_timeout: 10
|
||||
|
||||
# Размер пакета (в байтах)
|
||||
ping_packet_size: 64
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
# Handlers для роли ping
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# В данный момент handlers не требуются для роли ping (пустой файл для совместимости)
|
||||
[]
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
# Метаданные роли ping
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
galaxy_info:
|
||||
role_name: ping
|
||||
namespace: antropov
|
||||
author: Сергей Антропов
|
||||
description: Роль для выполнения ping проверок подключения к сети
|
||||
company: DevOps.org.ru
|
||||
license: MIT
|
||||
min_ansible_version: "2.9"
|
||||
platforms:
|
||||
- name: EL
|
||||
versions:
|
||||
- "7"
|
||||
- "8"
|
||||
- "9"
|
||||
- "all"
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- focal
|
||||
- noble
|
||||
- name: Debian
|
||||
versions:
|
||||
- bullseye
|
||||
- bookworm
|
||||
- trixie
|
||||
galaxy_tags:
|
||||
- networking
|
||||
- ping
|
||||
- connectivity
|
||||
- testing
|
||||
|
||||
dependencies: []
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
# Пример playbook для роли ping
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: Тестирование ping подключения
|
||||
hosts: all
|
||||
become: false
|
||||
roles:
|
||||
- role: ping
|
||||
vars:
|
||||
ping_host: yandex.ru
|
||||
ping_count: 5
|
||||
tags:
|
||||
- ping
|
||||
- test
|
||||
@@ -1,44 +0,0 @@
|
||||
---
|
||||
# Основные задачи для роли ping
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: Выполнение ping с пакетами
|
||||
command: ping -c {{ ping_count }} {{ ping_host }}
|
||||
register: ping_result
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
tags:
|
||||
- ping
|
||||
- test
|
||||
|
||||
- name: Вывод результата ping
|
||||
debug:
|
||||
msg: "{{ ping_result.stdout_lines }}"
|
||||
tags:
|
||||
- ping
|
||||
- test
|
||||
- debug
|
||||
|
||||
- name: Статистика ping
|
||||
debug:
|
||||
msg: |
|
||||
=========================================
|
||||
Результат ping {{ ping_host }}
|
||||
=========================================
|
||||
Статус: {{ 'УСПЕШНО' if ping_result.rc == 0 else 'ОШИБКА' }}
|
||||
Код возврата: {{ ping_result.rc }}
|
||||
=========================================
|
||||
tags:
|
||||
- ping
|
||||
- test
|
||||
- stats
|
||||
|
||||
- name: Дополнительная информация о ping
|
||||
debug:
|
||||
var: ping_result.stdout
|
||||
when: ping_result.stdout is defined
|
||||
tags:
|
||||
- ping
|
||||
- test
|
||||
- debug
|
||||
246
roles/python/README.md
Normal file
246
roles/python/README.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# Роль Python 3.12
|
||||
|
||||
Универсальная Ansible роль для установки Python 3.12 на различных дистрибутивах Linux.
|
||||
|
||||
**Автор:** Сергей Антропов
|
||||
**Сайт:** https://devops.org.ru
|
||||
|
||||
## Описание
|
||||
|
||||
Эта роль обеспечивает универсальную установку Python 3.12 на различных дистрибутивах Linux, включая:
|
||||
|
||||
- **Ubuntu** (20.04, 22.04, 24.04)
|
||||
- **Debian** (10, 11, 12)
|
||||
- **CentOS** (7, 8, 9)
|
||||
- **RHEL** (7, 8, 9)
|
||||
- **Rocky Linux** (8, 9)
|
||||
- **AlmaLinux** (8, 9)
|
||||
- **Fedora** (35+)
|
||||
- **openSUSE** (15.3+)
|
||||
|
||||
Роль автоматически определяет дистрибутив и использует соответствующий метод установки:
|
||||
- Установка из пакетов (если доступно)
|
||||
- Компиляция из исходного кода (если пакеты недоступны)
|
||||
- Автоматическое обновление pip до последней версии
|
||||
- Создание символических ссылок для удобства использования
|
||||
- Поддержка виртуальных окружений
|
||||
|
||||
## Требования
|
||||
|
||||
- Ansible >= 2.9
|
||||
- Python 2.7 или 3.5+ на управляющей машине
|
||||
- Привилегии sudo на целевых хостах
|
||||
|
||||
## Переменные
|
||||
|
||||
### Основные переменные
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
|------------|--------------|----------|
|
||||
| `python_version` | `"3.12"` | Версия Python для установки |
|
||||
| `python_packages` | `["pip", "setuptools", "wheel", "virtualenv"]` | Дополнительные пакеты Python |
|
||||
| `python_install_prefix` | `"/usr/local"` | Префикс для установки Python |
|
||||
| `python_create_symlinks` | `true` | Создание символических ссылок |
|
||||
| `python_update_pip` | `true` | Автоматическое обновление pip до последней версии |
|
||||
| `python_pip_packages` | `[]` | Дополнительные pip пакеты |
|
||||
| `python_create_venv` | `false` | Создание виртуального окружения |
|
||||
| `python_venv_path` | `"/opt/python-venv"` | Путь для виртуального окружения |
|
||||
| `python_setup_alternatives` | `true` | Настройка альтернатив (RHEL) |
|
||||
| `python_remove_old_versions` | `false` | Удаление старых версий Python |
|
||||
| `python_log_level` | `"INFO"` | Уровень логирования |
|
||||
|
||||
### Переменные для разных ОС
|
||||
|
||||
Роль автоматически определяет переменные на основе `ansible_os_family` и `ansible_distribution`:
|
||||
|
||||
- `python_current_packages` - пакеты Python для текущей ОС
|
||||
- `python_current_build_deps` - системные зависимости для компиляции
|
||||
- `python_current_package_manager` - менеджер пакетов
|
||||
- `python_current_executable` - путь к исполняемому файлу Python
|
||||
- `python_current_pip` - путь к pip
|
||||
|
||||
## Примеры использования
|
||||
|
||||
### Базовое использование
|
||||
|
||||
```yaml
|
||||
- hosts: all
|
||||
roles:
|
||||
- python
|
||||
```
|
||||
|
||||
### С дополнительными пакетами
|
||||
|
||||
```yaml
|
||||
- hosts: all
|
||||
vars:
|
||||
python_pip_packages:
|
||||
- requests
|
||||
- flask
|
||||
- django
|
||||
python_create_venv: true
|
||||
python_venv_path: "/opt/myapp-venv"
|
||||
roles:
|
||||
- python
|
||||
```
|
||||
|
||||
### С компиляцией из исходного кода
|
||||
|
||||
```yaml
|
||||
- hosts: all
|
||||
vars:
|
||||
python_install_prefix: "/opt/python3.11"
|
||||
python_create_symlinks: true
|
||||
roles:
|
||||
- python
|
||||
```
|
||||
|
||||
### Для конкретной версии Python
|
||||
|
||||
```yaml
|
||||
- hosts: all
|
||||
vars:
|
||||
python_version: "3.12.0"
|
||||
roles:
|
||||
- python
|
||||
```
|
||||
|
||||
## Поддерживаемые дистрибутивы
|
||||
|
||||
### Debian/Ubuntu
|
||||
|
||||
Роль использует репозиторий `deadsnakes` для установки Python 3.12:
|
||||
|
||||
```yaml
|
||||
- hosts: ubuntu_servers
|
||||
roles:
|
||||
- python
|
||||
```
|
||||
|
||||
### RHEL/CentOS/Rocky/AlmaLinux
|
||||
|
||||
Роль использует EPEL репозиторий для установки Python 3.12:
|
||||
|
||||
```yaml
|
||||
- hosts: rhel_servers
|
||||
roles:
|
||||
- python
|
||||
```
|
||||
|
||||
### Fedora
|
||||
|
||||
```yaml
|
||||
- hosts: fedora_servers
|
||||
roles:
|
||||
- python
|
||||
```
|
||||
|
||||
### openSUSE
|
||||
|
||||
```yaml
|
||||
- hosts: suse_servers
|
||||
roles:
|
||||
- python
|
||||
```
|
||||
|
||||
## Альтернативные репозитории
|
||||
|
||||
Для старых дистрибутивов, которые не поддерживают Python 3.12 из стандартных репозиториев, роль автоматически использует альтернативные источники:
|
||||
|
||||
### RHEL/CentOS 7
|
||||
- **IUS Repository**: Предоставляет современные версии Python
|
||||
- **SCL (Software Collections)**: Для очень старых систем
|
||||
- **EPEL**: Дополнительные пакеты
|
||||
|
||||
### Debian/Ubuntu старых версий
|
||||
- **deadsnakes PPA**: Предоставляет Python 3.12 для старых версий
|
||||
- **Альтернативные пакеты**: Python 3.11 если 3.12 недоступен
|
||||
|
||||
### Автоматическое переключение
|
||||
Роль автоматически пытается установить Python 3.12, а если это невозможно, переключается на доступную версию (3.11) или использует альтернативные репозитории.
|
||||
|
||||
## Структура роли
|
||||
|
||||
```
|
||||
roles/python/
|
||||
├── defaults/
|
||||
│ └── main.yml # Переменные по умолчанию
|
||||
├── handlers/
|
||||
│ └── main.yml # Обработчики событий
|
||||
├── meta/
|
||||
│ └── main.yml # Метаданные роли
|
||||
├── tasks/
|
||||
│ └── main.yml # Основные задачи
|
||||
├── vars/
|
||||
│ └── main.yml # Переменные для разных ОС
|
||||
└── README.md # Документация
|
||||
```
|
||||
|
||||
## Логирование
|
||||
|
||||
Роль поддерживает подробное логирование. Установите `python_log_level: "DEBUG"` для получения детальной информации о процессе установки.
|
||||
|
||||
## Обработка ошибок
|
||||
|
||||
Роль включает проверки на каждом этапе:
|
||||
|
||||
1. Проверка наличия Python перед установкой
|
||||
2. Проверка успешности установки
|
||||
3. Проверка работоспособности pip
|
||||
4. Очистка временных файлов
|
||||
|
||||
## Производительность
|
||||
|
||||
- Использует параллельную компиляцию (количество ядер CPU)
|
||||
- Оптимизированная конфигурация Python с LTO
|
||||
- Кэширование пакетов
|
||||
- Очистка временных файлов
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Проверка целостности загружаемых файлов
|
||||
- Использование официальных репозиториев
|
||||
- Минимальные привилегии для установки
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
### Python не найден после установки
|
||||
|
||||
```bash
|
||||
# Проверьте символические ссылки
|
||||
ls -la /usr/bin/python3*
|
||||
|
||||
# Обновите библиотеки
|
||||
sudo ldconfig
|
||||
```
|
||||
|
||||
### Ошибки компиляции
|
||||
|
||||
```bash
|
||||
# Установите системные зависимости
|
||||
sudo apt install build-essential # Ubuntu/Debian
|
||||
sudo dnf groupinstall "Development Tools" # RHEL/CentOS
|
||||
```
|
||||
|
||||
### Проблемы с pip
|
||||
|
||||
```bash
|
||||
# Обновите pip
|
||||
python3 -m pip install --upgrade pip
|
||||
|
||||
# Проверьте версию
|
||||
pip3 --version
|
||||
```
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT
|
||||
|
||||
## Автор
|
||||
|
||||
**Сергей Антропов**
|
||||
Сайт: https://devops.org.ru
|
||||
|
||||
## Поддержка
|
||||
|
||||
Для получения поддержки или сообщения об ошибках, пожалуйста, создайте issue в репозитории проекта.
|
||||
60
roles/python/defaults/main.yml
Normal file
60
roles/python/defaults/main.yml
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
# Переменные по умолчанию для роли python
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Версия Python для установки
|
||||
python_version: "3.12"
|
||||
|
||||
# Установка дополнительных пакетов Python
|
||||
python_packages:
|
||||
- pip
|
||||
- setuptools
|
||||
- wheel
|
||||
- virtualenv
|
||||
|
||||
# Установка системных зависимостей для компиляции Python
|
||||
python_build_dependencies:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- db4-devel
|
||||
- libpcap-devel
|
||||
- xz-devel
|
||||
- expat-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- libuuid-devel
|
||||
- libnsl2-devel
|
||||
|
||||
# Путь для установки Python
|
||||
python_install_prefix: "/usr/local"
|
||||
|
||||
# Создание символических ссылок
|
||||
python_create_symlinks: true
|
||||
|
||||
# Обновление pip после установки
|
||||
python_update_pip: true
|
||||
|
||||
# Установка дополнительных pip пакетов
|
||||
python_pip_packages: []
|
||||
|
||||
# Создание виртуального окружения
|
||||
python_create_venv: false
|
||||
python_venv_path: "/opt/python-venv"
|
||||
|
||||
# Настройка альтернатив (для систем с alternatives)
|
||||
python_setup_alternatives: true
|
||||
|
||||
# Удаление старых версий Python (осторожно!)
|
||||
python_remove_old_versions: false
|
||||
|
||||
# Логирование
|
||||
python_log_level: "INFO"
|
||||
66
roles/python/example-playbook.yml
Normal file
66
roles/python/example-playbook.yml
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
# Пример использования роли python
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: "Установка Python 3.12 на все хосты"
|
||||
hosts: all
|
||||
become: yes
|
||||
gather_facts: yes
|
||||
|
||||
vars:
|
||||
# Основные настройки
|
||||
python_version: "3.12"
|
||||
python_log_level: "INFO"
|
||||
|
||||
# Дополнительные пакеты
|
||||
python_pip_packages:
|
||||
- requests
|
||||
- flask
|
||||
- django
|
||||
- pytest
|
||||
|
||||
# Создание виртуального окружения
|
||||
python_create_venv: true
|
||||
python_venv_path: "/opt/python-venv"
|
||||
|
||||
# Настройки символических ссылок
|
||||
python_create_symlinks: true
|
||||
python_setup_alternatives: true
|
||||
|
||||
# Обновление pip до последней версии
|
||||
python_update_pip: true
|
||||
|
||||
roles:
|
||||
- python
|
||||
|
||||
post_tasks:
|
||||
- name: "Проверка установки Python"
|
||||
command: "python3 --version"
|
||||
register: python_version_result
|
||||
changed_when: false
|
||||
|
||||
- name: "Проверка установки pip"
|
||||
command: "pip3 --version"
|
||||
register: pip_version_result
|
||||
changed_when: false
|
||||
|
||||
- name: "Проверка виртуального окружения"
|
||||
stat:
|
||||
path: "{{ python_venv_path }}"
|
||||
register: venv_check
|
||||
|
||||
- name: "📋 КРАТКИЙ ОТЧЕТ О УСТАНОВКЕ"
|
||||
debug:
|
||||
msg: |
|
||||
|
||||
🎉 УСТАНОВКА ЗАВЕРШЕНА УСПЕШНО!
|
||||
|
||||
📊 Результаты:
|
||||
• Python: {{ python_version_result.stdout }}
|
||||
• Pip: {{ pip_version_result.stdout }}
|
||||
• Виртуальное окружение: {{ 'создано' if venv_check.stat.exists else 'не создано' }}
|
||||
• Путь к Python: {{ python_current_executable | default('не определен') }}
|
||||
• Путь к pip: {{ python_current_pip | default('не определен') }}
|
||||
|
||||
🚀 Python {{ python_version }} готов к использованию!
|
||||
44
roles/python/handlers/main.yml
Normal file
44
roles/python/handlers/main.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
# Обработчики для роли python
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: "Перезапуск systemd для обновления библиотек"
|
||||
systemd:
|
||||
daemon_reload: yes
|
||||
when: ansible_service_mgr == "systemd"
|
||||
|
||||
- name: "Обновление кэша библиотек"
|
||||
command: "ldconfig"
|
||||
changed_when: false
|
||||
when: ansible_os_family == "RedHat"
|
||||
|
||||
- name: "Обновление кэша пакетов"
|
||||
apt:
|
||||
update_cache: yes
|
||||
when: ansible_os_family == "Debian"
|
||||
|
||||
- name: "Очистка кэша пакетов"
|
||||
command: "{{ item }}"
|
||||
loop:
|
||||
- "dnf clean all"
|
||||
- "yum clean all"
|
||||
changed_when: false
|
||||
when: ansible_os_family == "RedHat"
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Уведомление о завершении установки Python"
|
||||
debug:
|
||||
msg: |
|
||||
|
||||
✅ PYTHON {{ python_version | upper }} УСТАНОВЛЕН И НАСТРОЕН!
|
||||
|
||||
🎯 Основные команды:
|
||||
• python --version # Проверить версию Python
|
||||
• python3 --version # Проверить версию Python (с версией)
|
||||
• pip --version # Проверить версию pip
|
||||
• pip3 --version # Проверить версию pip (с версией)
|
||||
• python -m venv env # Создать виртуальное окружение
|
||||
• pip install pkg # Установить пакет
|
||||
|
||||
🚀 Готово к работе!
|
||||
54
roles/python/meta/main.yml
Normal file
54
roles/python/meta/main.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
# Метаданные роли python
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
galaxy_info:
|
||||
author: "Сергей Антропов"
|
||||
description: "Универсальная роль для установки Python 3.12 на различных дистрибутивах Linux"
|
||||
company: "DevOps Lab"
|
||||
license: "MIT"
|
||||
min_ansible_version: "2.9"
|
||||
platforms:
|
||||
- name: "Ubuntu"
|
||||
versions:
|
||||
- "focal"
|
||||
- "jammy"
|
||||
- "noble"
|
||||
- name: "Debian"
|
||||
versions:
|
||||
- "buster"
|
||||
- "bullseye"
|
||||
- "bookworm"
|
||||
- name: "EL"
|
||||
versions:
|
||||
- "7"
|
||||
- "8"
|
||||
- "9"
|
||||
- name: "Rocky"
|
||||
versions:
|
||||
- "8.8"
|
||||
- "9.0"
|
||||
- name: "Fedora"
|
||||
versions:
|
||||
- "35"
|
||||
- "36"
|
||||
- "37"
|
||||
- "38"
|
||||
- "39"
|
||||
- "40"
|
||||
- name: "opensuse"
|
||||
versions:
|
||||
- "15.3"
|
||||
- "15.4"
|
||||
- "15.5"
|
||||
galaxy_tags:
|
||||
- "python"
|
||||
- "programming"
|
||||
- "development"
|
||||
- "runtime"
|
||||
- "language"
|
||||
- "universal"
|
||||
- "crossplatform"
|
||||
|
||||
dependencies: []
|
||||
544
roles/python/tasks/main.yml
Normal file
544
roles/python/tasks/main.yml
Normal file
@@ -0,0 +1,544 @@
|
||||
---
|
||||
# Основные задачи для установки Python 3.12
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: "Отладочная информация о системе"
|
||||
debug:
|
||||
msg:
|
||||
- "ansible_distribution: '{{ ansible_distribution }}'"
|
||||
- "ansible_os_family: '{{ ansible_os_family }}'"
|
||||
- "ansible_distribution_version: '{{ ansible_distribution_version }}'"
|
||||
when: (python_log_level | default("INFO")) in ["DEBUG", "INFO"]
|
||||
|
||||
- name: "Определение переменных для текущей ОС"
|
||||
set_fact:
|
||||
python_distribution: "{{ ansible_distribution | lower }}"
|
||||
python_os_family: "{{ ansible_os_family | lower }}"
|
||||
python_current_package_manager: "{{ python_package_managers[ansible_distribution | lower] | default('unknown') }}"
|
||||
python_current_packages: "{{ python_packages_by_os[ansible_distribution | lower] | default([]) }}"
|
||||
python_current_build_deps: "{{ python_build_deps_by_os[ansible_distribution | lower] | default([]) }}"
|
||||
python_current_executable: "{{ python_executable_paths[ansible_distribution | lower] | default('/usr/bin/python3.12') }}"
|
||||
python_current_pip: "{{ python_pip_paths[ansible_distribution | lower] | default('/usr/bin/pip3.12') }}"
|
||||
|
||||
- name: "Проверка определенных переменных"
|
||||
debug:
|
||||
msg:
|
||||
- "python_distribution: '{{ python_distribution }}'"
|
||||
- "python_os_family: '{{ python_os_family }}'"
|
||||
- "python_current_package_manager: '{{ python_current_package_manager }}'"
|
||||
- "python_current_packages: {{ python_current_packages }}"
|
||||
- "python_current_build_deps: {{ python_current_build_deps }}"
|
||||
- "python_current_executable: '{{ python_current_executable }}'"
|
||||
- "python_current_pip: '{{ python_current_pip }}'"
|
||||
when: (python_log_level | default("INFO")) in ["DEBUG", "INFO"]
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 1: ДОБАВЛЕНИЕ РЕПОЗИТОРИЕВ
|
||||
# =============================================================================
|
||||
|
||||
- name: "Добавление репозиториев для Ubuntu/Debian"
|
||||
apt_repository:
|
||||
repo: "{{ item.url }}"
|
||||
state: "{{ item.state }}"
|
||||
update_cache: yes
|
||||
loop: "{{ python_repositories[python_distribution] | default([]) }}"
|
||||
when:
|
||||
- python_distribution in ['ubuntu', 'debian']
|
||||
- python_repositories[python_distribution] is defined
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Добавление репозиториев для RHEL-семейства"
|
||||
package:
|
||||
name: "{{ item.name }}"
|
||||
state: "{{ item.state }}"
|
||||
loop: "{{ python_repositories[python_distribution] | default([]) }}"
|
||||
when:
|
||||
- python_distribution in ['redhat', 'centos', 'rhel', 'rocky', 'alma', 'fedora']
|
||||
- python_repositories[python_distribution] is defined
|
||||
- item.name != 'scl'
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Добавление SCL репозиториев для старых RHEL/CentOS"
|
||||
yum_repository:
|
||||
name: "{{ item.name }}"
|
||||
description: "{{ item.name }} repository"
|
||||
baseurl: "{{ item.url }}"
|
||||
gpgcheck: no
|
||||
enabled: yes
|
||||
loop: "{{ python_repositories[python_distribution] | default([]) }}"
|
||||
when:
|
||||
- python_distribution in ['redhat', 'centos', 'rhel']
|
||||
- python_repositories[python_distribution] is defined
|
||||
- item.name == 'scl'
|
||||
ignore_errors: true
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 2: ОБНОВЛЕНИЕ ПАКЕТОВ
|
||||
# =============================================================================
|
||||
|
||||
- name: "Обновление списка пакетов"
|
||||
package:
|
||||
name: "*"
|
||||
state: present
|
||||
when:
|
||||
- python_current_package_manager in ['apt', 'dnf', 'zypper']
|
||||
- python_current_package_manager != 'unknown'
|
||||
|
||||
- name: "Обновление списка пакетов после добавления репозиториев"
|
||||
package:
|
||||
name: "*"
|
||||
state: present
|
||||
when:
|
||||
- python_repositories[python_distribution] is defined
|
||||
- python_current_package_manager in ['apt', 'dnf']
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 3: УСТАНОВКА СИСТЕМНЫХ ЗАВИСИМОСТЕЙ
|
||||
# =============================================================================
|
||||
|
||||
- name: "Установка системных зависимостей для компиляции"
|
||||
package:
|
||||
name: "{{ python_current_build_deps }}"
|
||||
state: present
|
||||
when:
|
||||
- python_current_build_deps | length > 0
|
||||
- python_current_package_manager != 'unknown'
|
||||
ignore_errors: true
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 4: ПРОВЕРКА И УСТАНОВКА PYTHON СТАНДАРТНЫМ СПОСОБОМ
|
||||
# =============================================================================
|
||||
|
||||
- name: "Проверка наличия Python {{ python_version }}"
|
||||
command: "{{ python_current_executable }} --version"
|
||||
register: python_version_check
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
when: python_current_executable is defined and python_current_executable != ""
|
||||
|
||||
- name: "Установка Python из пакетов (основной способ)"
|
||||
package:
|
||||
name: "{{ python_current_packages }}"
|
||||
state: present
|
||||
when:
|
||||
- python_current_packages | length > 0
|
||||
- python_current_package_manager != 'unknown'
|
||||
- python_version_check.rc != 0
|
||||
register: python_package_install
|
||||
ignore_errors: true
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 5: FALLBACK НА АЛЬТЕРНАТИВНЫЕ СПОСОБЫ
|
||||
# =============================================================================
|
||||
|
||||
- name: "Попытка установки альтернативных пакетов Python"
|
||||
package:
|
||||
name: "{{ python_current_packages | select('match', '.*python3\\.1[12].*') | list }}"
|
||||
state: present
|
||||
when:
|
||||
- python_package_install is defined
|
||||
- python_package_install.failed | default(false)
|
||||
- python_current_package_manager != 'unknown'
|
||||
- python_version_check.rc != 0
|
||||
register: python_alt_install
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Попытка установки SCL пакетов Python"
|
||||
package:
|
||||
name: "{{ python_current_packages | select('match', '.*rh-python.*') | list }}"
|
||||
state: present
|
||||
when:
|
||||
- python_alt_install is defined
|
||||
- python_alt_install.failed | default(false)
|
||||
- python_current_package_manager != 'unknown'
|
||||
- python_version_check.rc != 0
|
||||
- python_distribution in ['redhat', 'centos', 'rhel']
|
||||
register: python_scl_install
|
||||
ignore_errors: true
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 6: КОМПИЛЯЦИЯ ИЗ ИСХОДНИКОВ (ПОСЛЕДНИЙ СПОСОБ)
|
||||
# =============================================================================
|
||||
|
||||
- name: "Скачивание исходного кода Python {{ python_version }}"
|
||||
get_url:
|
||||
url: "https://www.python.org/ftp/python/{{ python_version }}/Python-{{ python_version }}.tar.xz"
|
||||
dest: "/tmp/Python-{{ python_version }}.tar.xz"
|
||||
mode: '0644'
|
||||
register: download_result
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
when:
|
||||
- python_current_packages | length == 0
|
||||
- python_version_check.rc != 0
|
||||
- python_package_install is defined
|
||||
- python_package_install.failed | default(false)
|
||||
- python_alt_install is defined
|
||||
- python_alt_install.failed | default(false)
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Распаковка исходного кода Python"
|
||||
unarchive:
|
||||
src: "/tmp/Python-{{ python_version }}.tar.xz"
|
||||
dest: "/tmp/"
|
||||
remote_src: yes
|
||||
when:
|
||||
- python_current_packages | length == 0
|
||||
- python_version_check.rc != 0
|
||||
- download_result is defined
|
||||
- download_result.status_code == 200
|
||||
|
||||
- name: "Конфигурация Python для компиляции"
|
||||
command: >
|
||||
./configure
|
||||
--prefix={{ python_install_prefix | default('/usr/local') }}
|
||||
--enable-optimizations
|
||||
--enable-shared
|
||||
--with-lto
|
||||
--enable-ipv6
|
||||
--with-system-ffi
|
||||
--with-computed-gotos
|
||||
--enable-loadable-sqlite-extensions
|
||||
args:
|
||||
chdir: "/tmp/Python-{{ python_version }}"
|
||||
changed_when: false
|
||||
when:
|
||||
- python_current_packages | length == 0
|
||||
- python_version_check.rc != 0
|
||||
- download_result is defined
|
||||
- download_result.status_code == 200
|
||||
|
||||
- name: "Компиляция Python"
|
||||
make:
|
||||
chdir: "/tmp/Python-{{ python_version }}"
|
||||
jobs: "{{ ansible_processor_cores | default(1) }}"
|
||||
when:
|
||||
- python_current_packages | length == 0
|
||||
- python_version_check.rc != 0
|
||||
- download_result is defined
|
||||
- download_result.status_code == 200
|
||||
|
||||
- name: "Установка скомпилированного Python"
|
||||
make:
|
||||
chdir: "/tmp/Python-{{ python_version }}"
|
||||
target: install
|
||||
become: true
|
||||
when:
|
||||
- python_current_packages | length == 0
|
||||
- python_version_check.rc != 0
|
||||
- download_result is defined
|
||||
- download_result.status_code == 200
|
||||
|
||||
- name: "Обновление библиотек для скомпилированного Python"
|
||||
command: "ldconfig"
|
||||
become: true
|
||||
changed_when: false
|
||||
when:
|
||||
- python_current_packages | length == 0
|
||||
- python_version_check.rc != 0
|
||||
- download_result is defined
|
||||
- download_result.status_code == 200
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 7: СОЗДАНИЕ СИМВОЛИЧЕСКИХ ССЫЛОК
|
||||
# =============================================================================
|
||||
|
||||
- name: "Создание символических ссылок для Python"
|
||||
file:
|
||||
src: "{{ python_current_executable }}"
|
||||
dest: "/usr/bin/python3"
|
||||
state: link
|
||||
force: yes
|
||||
when:
|
||||
- (python_create_symlinks | default(true)) | bool
|
||||
- python_version_check.rc != 0
|
||||
|
||||
- name: "Создание символических ссылок для SCL Python"
|
||||
file:
|
||||
src: "/opt/rh/rh-python312/root/usr/bin/python3"
|
||||
dest: "/usr/bin/python3"
|
||||
state: link
|
||||
force: yes
|
||||
when:
|
||||
- (python_create_symlinks | default(true)) | bool
|
||||
- python_version_check.rc != 0
|
||||
- python_distribution in ['redhat', 'centos', 'rhel']
|
||||
- python_scl_install is defined
|
||||
- python_scl_install.changed | default(false)
|
||||
|
||||
- name: "Создание символических ссылок для pip"
|
||||
file:
|
||||
src: "{{ python_current_pip }}"
|
||||
dest: "/usr/bin/pip3"
|
||||
state: link
|
||||
force: yes
|
||||
when:
|
||||
- (python_create_symlinks | default(true)) | bool
|
||||
- python_version_check.rc != 0
|
||||
- python_current_pip is defined
|
||||
- python_current_pip != ""
|
||||
|
||||
- name: "Создание символических ссылок для SCL pip"
|
||||
file:
|
||||
src: "/opt/rh/rh-python312/root/usr/bin/pip3"
|
||||
dest: "/usr/bin/pip3"
|
||||
state: link
|
||||
force: yes
|
||||
when:
|
||||
- (python_create_symlinks | default(true)) | bool
|
||||
- python_version_check.rc != 0
|
||||
- python_distribution in ['redhat', 'centos', 'rhel']
|
||||
- python_scl_install is defined
|
||||
- python_scl_install.changed | default(false)
|
||||
|
||||
- name: "Создание символических ссылок для Python (без версии)"
|
||||
file:
|
||||
src: "{{ python_current_executable }}"
|
||||
dest: "/usr/bin/python"
|
||||
state: link
|
||||
force: yes
|
||||
when:
|
||||
- (python_create_symlinks | default(true)) | bool
|
||||
- python_version_check.rc != 0
|
||||
|
||||
- name: "Создание символических ссылок для SCL Python (без версии)"
|
||||
file:
|
||||
src: "/opt/rh/rh-python312/root/usr/bin/python"
|
||||
dest: "/usr/bin/python"
|
||||
state: link
|
||||
force: yes
|
||||
when:
|
||||
- (python_create_symlinks | default(true)) | bool
|
||||
- python_version_check.rc != 0
|
||||
- python_distribution in ['redhat', 'centos', 'rhel']
|
||||
- python_scl_install is defined
|
||||
- python_scl_install.changed | default(false)
|
||||
|
||||
- name: "Создание символических ссылок для pip (без версии)"
|
||||
file:
|
||||
src: "{{ python_current_pip }}"
|
||||
dest: "/usr/bin/pip"
|
||||
state: link
|
||||
force: yes
|
||||
when:
|
||||
- (python_create_symlinks | default(true)) | bool
|
||||
- python_version_check.rc != 0
|
||||
- python_current_pip is defined
|
||||
- python_current_pip != ""
|
||||
|
||||
- name: "Создание символических ссылок для SCL pip (без версии)"
|
||||
file:
|
||||
src: "/opt/rh/rh-python312/root/usr/bin/pip"
|
||||
dest: "/usr/bin/pip"
|
||||
state: link
|
||||
force: yes
|
||||
when:
|
||||
- (python_create_symlinks | default(true)) | bool
|
||||
- python_version_check.rc != 0
|
||||
- python_distribution in ['redhat', 'centos', 'rhel']
|
||||
- python_scl_install is defined
|
||||
- python_scl_install.changed | default(false)
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 8: НАСТРОЙКА АЛЬТЕРНАТИВ И PIP
|
||||
# =============================================================================
|
||||
|
||||
- name: "Настройка альтернатив для Python"
|
||||
alternatives:
|
||||
name: python3
|
||||
path: "{{ python_current_executable }}"
|
||||
when:
|
||||
- python_current_executable is defined
|
||||
- python_current_executable != ""
|
||||
- ansible_os_family == "RedHat"
|
||||
|
||||
- name: "Установка pip через get-pip.py если не найден"
|
||||
get_url:
|
||||
url: "https://bootstrap.pypa.io/get-pip.py"
|
||||
dest: "/tmp/get-pip.py"
|
||||
mode: '0755'
|
||||
when:
|
||||
- python_version_check.rc == 0
|
||||
- python_current_pip is not defined or python_current_pip == ""
|
||||
|
||||
- name: "Запуск get-pip.py для установки pip"
|
||||
command: "{{ python_current_executable }} /tmp/get-pip.py"
|
||||
changed_when: false
|
||||
when:
|
||||
- python_version_check.rc == 0
|
||||
- python_current_pip is not defined or python_current_pip == ""
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 9: ОБНОВЛЕНИЕ PIP
|
||||
# =============================================================================
|
||||
|
||||
- name: "Получение последней версии pip"
|
||||
uri:
|
||||
url: "https://pypi.org/pypi/pip/json"
|
||||
method: GET
|
||||
register: pip_version_info
|
||||
when: python_version_check.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Извлечение версии pip"
|
||||
set_fact:
|
||||
pip_latest_version: "{{ pip_version_info.json.info.version }}"
|
||||
when:
|
||||
- pip_version_info is defined
|
||||
- pip_version_info.status == 200
|
||||
|
||||
- name: "Проверка текущей версии pip"
|
||||
command: "{{ python_current_pip }} --version"
|
||||
register: pip_current_version
|
||||
changed_when: false
|
||||
when:
|
||||
- python_version_check.rc == 0
|
||||
- python_current_pip is defined
|
||||
- python_current_pip != ""
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Обновление pip до последней версии"
|
||||
command: "{{ python_current_pip }} install --upgrade pip"
|
||||
changed_when: false
|
||||
when:
|
||||
- python_version_check.rc == 0
|
||||
- pip_current_version.rc == 0
|
||||
- pip_latest_version is defined
|
||||
- pip_current_version.stdout is defined
|
||||
- pip_latest_version not in pip_current_version.stdout
|
||||
ignore_errors: true
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 10: СОЗДАНИЕ ВИРТУАЛЬНОГО ОКРУЖЕНИЯ
|
||||
# =============================================================================
|
||||
|
||||
- name: "Создание виртуального окружения"
|
||||
command: "{{ python_current_executable }} -m venv {{ python_venv_path | default('/opt/python-venv') }}"
|
||||
changed_when: false
|
||||
when:
|
||||
- (python_create_venv | default(false)) | bool
|
||||
- python_version_check.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
# =============================================================================
|
||||
# ЭТАП 11: ФИНАЛЬНЫЙ ОТЧЕТ
|
||||
# =============================================================================
|
||||
|
||||
- name: "Сбор информации о системе"
|
||||
setup:
|
||||
gather_subset:
|
||||
- "!all"
|
||||
- "distribution"
|
||||
- "os_family"
|
||||
- "architecture"
|
||||
- "kernel"
|
||||
- "python"
|
||||
register: system_facts
|
||||
|
||||
- name: "Проверка установленного Python"
|
||||
command: "{{ python_current_executable }} --version"
|
||||
register: final_python_version
|
||||
changed_when: false
|
||||
when: python_version_check.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Проверка установленного pip"
|
||||
command: "{{ python_current_pip }} --version"
|
||||
register: final_pip_version
|
||||
changed_when: false
|
||||
when:
|
||||
- python_version_check.rc == 0
|
||||
- python_current_pip is defined
|
||||
- python_current_pip != ""
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Проверка символических ссылок"
|
||||
stat:
|
||||
path: "{{ item }}"
|
||||
register: symlink_check
|
||||
loop:
|
||||
- "/usr/bin/python"
|
||||
- "/usr/bin/python3"
|
||||
- "/usr/bin/pip"
|
||||
- "/usr/bin/pip3"
|
||||
|
||||
- name: "Проверка виртуального окружения"
|
||||
stat:
|
||||
path: "{{ python_venv_path | default('/opt/python-venv') }}"
|
||||
register: venv_check
|
||||
when: python_create_venv | bool
|
||||
|
||||
- name: "Сбор информации об установленных пакетах Python"
|
||||
package_facts:
|
||||
manager: "{{ python_current_package_manager }}"
|
||||
when: python_current_package_manager != 'unknown'
|
||||
|
||||
- name: "Финальный отчет об установке"
|
||||
debug:
|
||||
msg: |
|
||||
|
||||
================================================================================
|
||||
🐍 ОТЧЕТ ОБ УСТАНОВКЕ PYTHON {{ python_version | upper }}
|
||||
================================================================================
|
||||
|
||||
📊 ИНФОРМАЦИЯ О СИСТЕМЕ:
|
||||
• Дистрибутив: {{ system_facts.ansible_facts.distribution }} {{ system_facts.ansible_facts.distribution_version }}
|
||||
• Семейство ОС: {{ system_facts.ansible_facts.os_family }}
|
||||
• Архитектура: {{ system_facts.ansible_facts.architecture }}
|
||||
• Ядро: {{ system_facts.ansible_facts.kernel }}
|
||||
|
||||
🐍 PYTHON:
|
||||
• Версия: {{ final_python_version.stdout | default('НЕ УСТАНОВЛЕН') }}
|
||||
• Исполняемый файл: {{ python_current_executable }}
|
||||
• Путь к pip: {{ python_current_pip | default('НЕ НАЙДЕН') }}
|
||||
|
||||
📦 PIP:
|
||||
• Версия: {{ final_pip_version.stdout | default('НЕ УСТАНОВЛЕН') }}
|
||||
|
||||
🔗 СИМВОЛИЧЕСКИЕ ССЫЛКИ:
|
||||
• /usr/bin/python: {{ '✅ СОЗДАНА' if symlink_check.results[0].stat.exists else '❌ НЕ СОЗДАНА' }}
|
||||
• /usr/bin/python3: {{ '✅ СОЗДАНА' if symlink_check.results[1].stat.exists else '❌ НЕ СОЗДАНА' }}
|
||||
• /usr/bin/pip: {{ '✅ СОЗДАНА' if symlink_check.results[2].stat.exists else '❌ НЕ СОЗДАНА' }}
|
||||
• /usr/bin/pip3: {{ '✅ СОЗДАНА' if symlink_check.results[3].stat.exists else '❌ НЕ СОЗДАНА' }}
|
||||
|
||||
🌐 ВИРТУАЛЬНОЕ ОКРУЖЕНИЕ:
|
||||
• Путь: {{ python_venv_path | default('/opt/python-venv') }}
|
||||
• Статус: {{ '✅ СОЗДАНО' if (venv_check is defined and venv_check.stat.exists) else '❌ НЕ СОЗДАНО' }}
|
||||
|
||||
📋 УСТАНОВЛЕННЫЕ ПАКЕТЫ PYTHON:
|
||||
{% if ansible_facts.packages is defined %}
|
||||
{% for package in ansible_facts.packages %}
|
||||
{% if 'python' in package %}
|
||||
• {{ package }}: {{ ansible_facts.packages[package] | map(attribute='version') | list | join(', ') }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
• Информация недоступна
|
||||
{% endif %}
|
||||
|
||||
🎯 КОМАНДЫ ДЛЯ ПРОВЕРКИ:
|
||||
• python --version
|
||||
• python3 --version
|
||||
• pip --version
|
||||
• pip3 --version
|
||||
• python -m venv test_env
|
||||
|
||||
================================================================================
|
||||
when: python_log_level in ["INFO", "DEBUG"]
|
||||
|
||||
- name: "Уведомление о завершении установки Python"
|
||||
debug:
|
||||
msg: |
|
||||
|
||||
✅ PYTHON {{ python_version | upper }} УСТАНОВЛЕН И НАСТРОЕН!
|
||||
|
||||
🎯 Основные команды:
|
||||
• python --version # Проверить версию Python
|
||||
• python3 --version # Проверить версию Python (с версией)
|
||||
• pip --version # Проверить версию pip
|
||||
• pip3 --version # Проверить версию pip (с версией)
|
||||
• python -m venv env # Создать виртуальное окружение
|
||||
• pip install pkg # Установить пакет
|
||||
|
||||
🚀 Готово к работе!
|
||||
474
roles/python/vars/main.yml
Normal file
474
roles/python/vars/main.yml
Normal file
@@ -0,0 +1,474 @@
|
||||
---
|
||||
# Переменные для роли python
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Определение семейства ОС и версии
|
||||
python_os_family: "{{ ansible_os_family | lower }}"
|
||||
python_distribution: "{{ ansible_distribution | lower }}"
|
||||
python_distribution_version: "{{ ansible_distribution_version }}"
|
||||
|
||||
# Переменные для разных дистрибутивов
|
||||
python_package_managers:
|
||||
debian: "apt"
|
||||
ubuntu: "apt"
|
||||
redhat: "dnf"
|
||||
centos: "dnf"
|
||||
rhel: "dnf"
|
||||
rocky: "dnf"
|
||||
alma: "dnf"
|
||||
fedora: "dnf"
|
||||
suse: "zypper"
|
||||
opensuse: "zypper"
|
||||
alt: "apt-rpm"
|
||||
"alt linux": "apt-rpm"
|
||||
astra: "apt"
|
||||
"astra linux": "apt"
|
||||
|
||||
# Пакеты для установки Python 3.12 в разных дистрибутивах
|
||||
python_packages_by_os:
|
||||
debian:
|
||||
- python3.12
|
||||
- python3.12-dev
|
||||
- python3.12-venv
|
||||
- python3.12-distutils
|
||||
- python3.12-lib2to3
|
||||
- python3.12-gdbm
|
||||
- python3.12-tk
|
||||
# Альтернативные пакеты для старых Debian
|
||||
- python3.11
|
||||
- python3.11-dev
|
||||
- python3.11-venv
|
||||
ubuntu:
|
||||
- python3.12
|
||||
- python3.12-dev
|
||||
- python3.12-venv
|
||||
- python3.12-distutils
|
||||
- python3.12-lib2to3
|
||||
- python3.12-gdbm
|
||||
- python3.12-tk
|
||||
# Альтернативные пакеты для старых Ubuntu
|
||||
- python3.11
|
||||
- python3.11-dev
|
||||
- python3.11-venv
|
||||
# Пакеты без версии для совместимости
|
||||
- python3-distutils
|
||||
- python3-lib2to3
|
||||
redhat:
|
||||
- python3.12
|
||||
- python3.12-pip
|
||||
- python3.12-devel
|
||||
- python3.12-tkinter
|
||||
centos:
|
||||
- python3.12
|
||||
- python3.12-pip
|
||||
- python3.12-devel
|
||||
- python3.12-tkinter
|
||||
# Альтернативные пакеты для старых CentOS
|
||||
- python312
|
||||
- python312-pip
|
||||
- python312-devel
|
||||
# SCL пакеты для очень старых CentOS
|
||||
- rh-python312
|
||||
- rh-python312-python-pip
|
||||
- rh-python312-python-devel
|
||||
rhel:
|
||||
- python3.12
|
||||
- python3.12-pip
|
||||
- python3.12-devel
|
||||
- python3.12-tkinter
|
||||
# Альтернативные пакеты для старых RHEL
|
||||
- python312
|
||||
- python312-pip
|
||||
- python312-devel
|
||||
# SCL пакеты для очень старых RHEL
|
||||
- rh-python312
|
||||
- rh-python312-python-pip
|
||||
- rh-python312-python-devel
|
||||
rocky:
|
||||
- python3.12
|
||||
- python3.12-pip
|
||||
- python3.12-devel
|
||||
- python3.12-tkinter
|
||||
alma:
|
||||
- python3.12
|
||||
- python3.12-pip
|
||||
- python3.12-devel
|
||||
- python3.12-tkinter
|
||||
fedora:
|
||||
- python3.12
|
||||
- python3.12-pip
|
||||
- python3.12-devel
|
||||
- python3.12-tkinter
|
||||
suse:
|
||||
- python312
|
||||
- python312-devel
|
||||
- python312-pip
|
||||
opensuse:
|
||||
- python312
|
||||
- python312-devel
|
||||
- python312-pip
|
||||
alt:
|
||||
- python3.12
|
||||
- python3.12-devel
|
||||
- python3.12-pip
|
||||
astra:
|
||||
- python3.12
|
||||
- python3.12-dev
|
||||
- python3.12-venv
|
||||
- python3.12-distutils
|
||||
- python3.12-lib2to3
|
||||
- python3.12-gdbm
|
||||
- python3.12-tk
|
||||
"alt linux":
|
||||
- python3.12
|
||||
- python3.12-devel
|
||||
- python3.12-pip
|
||||
"astra linux":
|
||||
- python3.12
|
||||
- python3.12-dev
|
||||
- python3.12-venv
|
||||
- python3.12-distutils
|
||||
- python3.12-lib2to3
|
||||
- python3.12-gdbm
|
||||
- python3.12-tk
|
||||
|
||||
# Репозитории для разных дистрибутивов
|
||||
python_repositories:
|
||||
debian:
|
||||
- name: "deadsnakes"
|
||||
url: "ppa:deadsnakes/ppa"
|
||||
state: "present"
|
||||
- name: "deadsnakes-debian"
|
||||
url: "deb http://ppa.launchpad.net/deadsnakes/ppa/ubuntu focal main"
|
||||
state: "present"
|
||||
ubuntu:
|
||||
- name: "deadsnakes"
|
||||
url: "ppa:deadsnakes/ppa"
|
||||
state: "present"
|
||||
redhat:
|
||||
- name: "epel"
|
||||
state: "present"
|
||||
- name: "ius"
|
||||
url: "https://repo.ius.io/redhat/7/x86_64/"
|
||||
state: "present"
|
||||
centos:
|
||||
- name: "epel"
|
||||
state: "present"
|
||||
- name: "ius"
|
||||
url: "https://repo.ius.io/centos/7/x86_64/"
|
||||
state: "present"
|
||||
- name: "scl"
|
||||
url: "https://www.softwarecollections.org/en/scls/rhscl/rh-python312/"
|
||||
state: "present"
|
||||
rhel:
|
||||
- name: "epel"
|
||||
state: "present"
|
||||
- name: "ius"
|
||||
url: "https://repo.ius.io/redhat/7/x86_64/"
|
||||
state: "present"
|
||||
- name: "scl"
|
||||
url: "https://www.softwarecollections.org/en/scls/rhscl/rh-python312/"
|
||||
state: "present"
|
||||
rocky:
|
||||
- name: "epel"
|
||||
state: "present"
|
||||
alma:
|
||||
- name: "epel"
|
||||
state: "present"
|
||||
fedora:
|
||||
- name: "epel"
|
||||
state: "present"
|
||||
|
||||
# Команды для обновления пакетов
|
||||
python_update_commands:
|
||||
debian: "apt update"
|
||||
ubuntu: "apt update"
|
||||
redhat: "dnf update -y"
|
||||
centos: "dnf update -y"
|
||||
rhel: "dnf update -y"
|
||||
rocky: "dnf update -y"
|
||||
alma: "dnf update -y"
|
||||
fedora: "dnf update -y"
|
||||
suse: "zypper refresh"
|
||||
opensuse: "zypper refresh"
|
||||
alt: "apt-get update"
|
||||
"alt linux": "apt-get update"
|
||||
astra: "apt update"
|
||||
"astra linux": "apt update"
|
||||
|
||||
# Команды для установки пакетов
|
||||
python_install_commands:
|
||||
debian: "apt install -y"
|
||||
ubuntu: "apt install -y"
|
||||
redhat: "dnf install -y"
|
||||
centos: "dnf install -y"
|
||||
rhel: "dnf install -y"
|
||||
rocky: "dnf install -y"
|
||||
alma: "dnf install -y"
|
||||
fedora: "dnf install -y"
|
||||
suse: "zypper install -y"
|
||||
opensuse: "zypper install -y"
|
||||
alt: "apt-get install -y"
|
||||
"alt linux": "apt-get install -y"
|
||||
astra: "apt install -y"
|
||||
"astra linux": "apt install -y"
|
||||
|
||||
# Пути к исполняемым файлам Python
|
||||
python_executable_paths:
|
||||
debian: "/usr/bin/python3.12"
|
||||
ubuntu: "/usr/bin/python3.12"
|
||||
redhat: "/usr/bin/python3.12"
|
||||
centos: "/usr/bin/python3.12"
|
||||
rhel: "/usr/bin/python3.12"
|
||||
rocky: "/usr/bin/python3.12"
|
||||
alma: "/usr/bin/python3.12"
|
||||
fedora: "/usr/bin/python3.12"
|
||||
suse: "/usr/bin/python3.12"
|
||||
opensuse: "/usr/bin/python3.12"
|
||||
alt: "/usr/bin/python3.12"
|
||||
"alt linux": "/usr/bin/python3.12"
|
||||
astra: "/usr/bin/python3.12"
|
||||
"astra linux": "/usr/bin/python3.12"
|
||||
|
||||
# Пути к pip
|
||||
python_pip_paths:
|
||||
debian: "/usr/bin/pip3.12"
|
||||
ubuntu: "/usr/bin/pip3.12"
|
||||
redhat: "/usr/bin/pip3.12"
|
||||
centos: "/usr/bin/pip3.12"
|
||||
rhel: "/usr/bin/pip3.12"
|
||||
rocky: "/usr/bin/pip3.12"
|
||||
alma: "/usr/bin/pip3.12"
|
||||
fedora: "/usr/bin/pip3.12"
|
||||
suse: "/usr/bin/pip3.12"
|
||||
opensuse: "/usr/bin/pip3.12"
|
||||
alt: "/usr/bin/pip3.12"
|
||||
"alt linux": "/usr/bin/pip3.12"
|
||||
astra: "/usr/bin/pip3.12"
|
||||
"astra linux": "/usr/bin/pip3.12"
|
||||
|
||||
# Системные зависимости для компиляции
|
||||
python_build_deps_by_os:
|
||||
debian:
|
||||
- build-essential
|
||||
- zlib1g-dev
|
||||
- libssl-dev
|
||||
- libffi-dev
|
||||
- libsqlite3-dev
|
||||
- libreadline-dev
|
||||
- libbz2-dev
|
||||
- libncurses5-dev
|
||||
- libncursesw5-dev
|
||||
- xz-utils
|
||||
- tk-dev
|
||||
- libgdbm-dev
|
||||
- libdb-dev
|
||||
- libpcap-dev
|
||||
- liblzma-dev
|
||||
ubuntu:
|
||||
- build-essential
|
||||
- zlib1g-dev
|
||||
- libssl-dev
|
||||
- libffi-dev
|
||||
- libsqlite3-dev
|
||||
- libreadline-dev
|
||||
- libbz2-dev
|
||||
- libncurses5-dev
|
||||
- libncursesw5-dev
|
||||
- xz-utils
|
||||
- tk-dev
|
||||
- libgdbm-dev
|
||||
- libdb-dev
|
||||
- libpcap-dev
|
||||
- liblzma-dev
|
||||
redhat:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- db4-devel
|
||||
- libpcap-devel
|
||||
- expat-devel
|
||||
- libnsl2-devel
|
||||
centos:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- expat-devel
|
||||
# Альтернативные пакеты для CentOS
|
||||
- gdbm
|
||||
- db4
|
||||
rhel:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- expat-devel
|
||||
rocky:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- expat-devel
|
||||
alma:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- expat-devel
|
||||
fedora:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- expat-devel
|
||||
suse:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- libopenssl-devel
|
||||
- libffi-devel
|
||||
- sqlite3-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- libpcap-devel
|
||||
- expat-devel
|
||||
- libnsl2-devel
|
||||
opensuse:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- libopenssl-devel
|
||||
- libffi-devel
|
||||
- sqlite3-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- expat-devel
|
||||
alt:
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- expat-devel
|
||||
astra:
|
||||
- build-essential
|
||||
- zlib1g-dev
|
||||
- libssl-dev
|
||||
- libffi-dev
|
||||
- libsqlite3-dev
|
||||
- libreadline-dev
|
||||
- libbz2-dev
|
||||
- libncurses5-dev
|
||||
- libncursesw5-dev
|
||||
- xz-utils
|
||||
- tk-dev
|
||||
- libgdbm-dev
|
||||
- libdb-dev
|
||||
- libpcap-dev
|
||||
- liblzma-dev
|
||||
"alt linux":
|
||||
- gcc
|
||||
- gcc-c++
|
||||
- make
|
||||
- zlib-devel
|
||||
- openssl-devel
|
||||
- libffi-devel
|
||||
- sqlite-devel
|
||||
- readline-devel
|
||||
- bzip2-devel
|
||||
- ncurses-devel
|
||||
- xz-devel
|
||||
- tk-devel
|
||||
- gdbm-devel
|
||||
- expat-devel
|
||||
"astra linux":
|
||||
- build-essential
|
||||
- zlib1g-dev
|
||||
- libssl-dev
|
||||
- libffi-dev
|
||||
- libsqlite3-dev
|
||||
- libreadline-dev
|
||||
- libbz2-dev
|
||||
- libncurses5-dev
|
||||
- libncursesw5-dev
|
||||
- xz-utils
|
||||
- tk-dev
|
||||
- libgdbm-dev
|
||||
- libdb-dev
|
||||
- libpcap-dev
|
||||
- liblzma-devel
|
||||
Reference in New Issue
Block a user