- Создана универсальная роль Python для установки Python 3.12 на всех ОС - Восстановлена роль Docker из git истории - Исправлены все ошибки линтера - Обновлен deploy.yml с правильным порядком ролей: devops → python → docker - Удалена устаревшая роль ping - Добавлена поддержка альтернативных репозиториев для старых ОС Автор: Сергей Антропов Сайт: https://devops.org.ru
246 lines
8.2 KiB
Markdown
246 lines
8.2 KiB
Markdown
# Роль 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 в репозитории проекта. |