Подробный гайд по установке и настройке Ansible на ALT Linux

Руководство по установке Ansible на ALT Linux: настройка SSH, инвентаря, sudo, vault и плейбуков для автоматизации управления инфраструктурой.

2026.04.07                  


Подробный гайд по установке и настройке Ansible на ALT LinuxПодробный гайд по установке и настройке Ansible на ALT Linux Ansible на ALT Linux используется для автоматизации администрирования и управления парком машин.

Основные сценарии:

• Централизованная установка, обновление и удаление пакетов через штатный apt
• Настройка пользователей, прав доступа, сетевых интерфейсов, брандмауэров и системных сервисов
• Массовое развёртывание приложений и конфигурационных файлов
• Применение политик безопасности, аудит и соответствие стандартам (в т.ч. требованиям импортозамещения)
• Автоматизация резервного копирования, мониторинга и плановых обновлений
• Интеграция в CI/CD-конвейеры и управление инфраструктурой как кодом (IaC)

Почему именно для ALT Linux:

  • платформа активно используется в госсекторе, образовании и корпорациях РФ, где требуется управлять десятками или сотнями одинаковых узлов. Ansible не требует установки агентов (работает по SSH + Python 3), корректно взаимодействует с репозиториями p10/p11/Sisyphus и позволяет стандартизировать среду, сократить рутину и минимизировать ошибки при масштабировании.

Данный гайд актуален для ALT Linux p10/p11/Sisyphus и охватывает установку, базовую настройку, работу с инвентарём, SSH, безопасностью и типичные проблемы. Ansible устанавливается на управляющий узел (control node), а на целевые машины (managed nodes) требуется только SSH и Python 3.

1. Подготовка системы

Обновление репозиториев и системы

sudo apt update
sudo apt full-upgrade -y

Проверка доступности пакета Ansible

apt search ansible

В ALT Linux пакет обычно называется ansible. Если его нет в активных репозиториях, убедитесь, что подключены main и non-free для вашей ветки (p10, p11 или sisyphus).

Установка базовых зависимостей

sudo apt install openssh-clients python3 python3-pip python3-devel git -y

2. Установка Ansible

Способ 1: Через пакетный менеджер (рекомендуется)

sudo apt install ansible -y

Проверка версии:

ansible --version

Примечание:

  • В ALT Linux версия в репозиториях может отставать от upstream. Если требуется свежая версия или конкретные модули, используйте pip.

Способ 2: Через pip3 (для актуальной версии)

sudo pip3 install ansible
# или без sudo для пользовательской установки:
pip3 install --user ansible
export PATH=$HOME/.local/bin:$PATH  # добавьте в ~/.bashrc, если нужно

Способ 3: Из исходников (редко требуется)

git clone https://github.com/ansible/ansible.git --recursive
cd ansible
source ./hacking/env-setup

3. Базовая настройка

3.1. Конфигурационный файл ansible.cfg

Ansible ищет конфиг в порядке приоритета:

  1. ANSIBLE_CONFIG (переменная окружения)
  2. ./ansible.cfg (в текущей директории)
  3. ~/.ansible.cfg
  4. /etc/ansible/ansible.cfg

Создайте локальный конфиг в вашем рабочем каталоге:

mkdir ~/ansible-project && cd ~/ansible-project
ansible-config init --disabled > ansible.cfg

Отредактируйте ключевые параметры:

[defaults]
inventory = ./hosts.yml
remote_user = ansible_user
host_key_checking = False   # только для тестов! В продакшене True
forks = 10
log_path = ./ansible.log
interpreter_python = auto_silent

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

3.2. Инвентарь (Inventory)

Рекомендуется формат YAML. Создайте hosts.yml:

all:
  children:
    webservers:
      hosts:
        web1.example.com:
          ansible_user: admin
        web2.example.com:
          ansible_user: deploy
    dbservers:
      hosts:
        db1.example.com:
          ansible_user: dbadmin
          ansible_become: yes

Проверка синтаксиса:

ansible-inventory --list -y

4. Настройка SSH и доступов

Генерация и распространение ключей

ssh-keygen -t ed25519 -C "ansible-control-node"
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@web1.example.com

Настройка управляемого узла (ALT Linux)

На целевых машинах достаточно:

sudo apt install python3 openssh-server -y
sudo systemctl enable --now sshd

Убедитесь, что пользователь, от имени которого подключается Ansible, имеет права sudo без пароля (только для автоматизации):

echo "ansible_user ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible_user
sudo chmod 440 /etc/sudoers.d/ansible_user

Важно:

  • В продакшене лучше использовать become_ask_pass = True или внешние секреты (HashiCorp Vault, Ansible Vault).

5. Проверка работоспособности

ansible all -m ping
ansible webservers -m ping
ansible db1.example.com -m setup -a "filter=ansible_distribution*"

Ожидаемый вывод:

web1.example.com | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

6. Работа с коллекциями и модулями

Современный Ansible использует коллекции.

Установим базовые:

ansible-galaxy collection install ansible.posix community.general

Пример плейбука test.yml:

---
- name: Тестовый плейбук для ALT Linux
  hosts: webservers
  become: yes
  tasks:
    - name: Обновить кэш пакетов
      ansible.builtin.apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Установить nginx
      ansible.builtin.package:
        name: nginx
        state: present

    - name: Запустить и включить nginx
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: yes

Запуск:

ansible-playbook test.yml -i hosts.yml --check --diff
ansible-playbook test.yml -i hosts.yml

7. Безопасность: Ansible Vault

Шифрование секретов (пароли, ключи, токены):

ansible-vault create secrets.yml
# откроется редактор, введите:
# db_password: "SuperSecret123!"

Запуск плейбука с Vault:

ansible-playbook deploy.yml -i hosts.yml --ask-vault-pass
# или через файл пароля:
echo "my_vault_password" > .vault_pass
chmod 600 .vault_pass
ansible-playbook deploy.yml -i hosts.yml --vault-password-file .vault_pass

8. Типичные проблемы и решения

Проблема Причина Решение
ModuleNotFoundError: No module named 'ansible' Python не в PATH или установлен через --user export PATH=$HOME/.local/bin:$PATH или используйте sudo pip3 install ansible
FAILED! => {"msg": "Timeout (12s) waiting for privilege escalation prompt"} Запрос пароля sudo или requiretty Добавьте ansible_become_ask_pass: yes или настройте NOPASSWD в sudoers
Could not detect package manager Ansible не распознал ALT Linux Укажите явно: ansible_pkg_mgr: apt в инвентаре или ansible.builtin.apt вместо ansible.builtin.package
SSH connection failed Файрвол, неверный ключ, StrictHostKeyChecking Проверьте sshd_config, права ~/.ssh (700), authorized_keys (600), отключите проверку временно в ansible.cfg
Python 3.6+ is required Старая ветка ALT или кастомная сборка Обновите систему или укажите ansible_python_interpreter: /usr/bin/python3

9. Рекомендации для ALT Linux

  1. Менеджер пакетов: Ansible корректно определяет apt в ALT Linux p10+. При сомнениях используйте ansible.builtin.apt явно.

2. Пути коллекций:

  • Системный: /usr/share/ansible/collections
  • Пользовательский: ~/.ansible/collections

3. SELinux/AppArmor:

  • В ALT по умолчанию MAC-системы отключены. Если включены, проверьте контексты SSH и Python.

4. Локализация:

При ошибках с кодировкой добавьте в ansible.cfg:

[defaults]
ansible_python_interpreter = /usr/bin/python3 -c "import sys; sys.stdout.reconfigure(encoding='utf-8'); exec(open('/dev/stdin').read())"

(обычно не требуется в современных версиях)

10. Полезные команды

ansible-doc -l                     # список всех модулей
ansible-doc <module_name>          # документация по модулю
ansible-playbook playbook.yml --list-tasks
ansible-playbook playbook.yml --tags "install,config"
ansible-playbook playbook.yml --step  # пошаговый режим
ansible-vault encrypt_string "secret" --name 'my_var'
ansible-config dump --only-changed # показать отличия от дефолта

Итог

  1. Установите ansible через apt (или pip3 для свежей версии).
  2. Настройте ansible.cfg и hosts.yml в проекте.
  3. Настройте SSH-ключи и sudo без пароля для автоматизации.
  4. Используйте ansible-vault для секретов.
  5. Тестируйте через --check и --diff перед применением.
  6. Версионируйте конфигурации в Git.

При возникновении ошибок указывайте в диагностике:

  • ansible --version
  • cat /etc/os-release
  • Вывод ansible -vvv all -m ping