Подробный гайд по установке и настройке 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 ищет конфиг в порядке приоритета:
ANSIBLE_CONFIG(переменная окружения)./ansible.cfg(в текущей директории)~/.ansible.cfg/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
- Менеджер пакетов: 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 # показать отличия от дефолта
Итог
- Установите
ansibleчерезapt(илиpip3для свежей версии). - Настройте
ansible.cfgиhosts.ymlв проекте. - Настройте SSH-ключи и
sudoбез пароля для автоматизации. - Используйте
ansible-vaultдля секретов. - Тестируйте через
--checkи--diffперед применением. - Версионируйте конфигурации в Git.
При возникновении ошибок указывайте в диагностике:
ansible --versioncat /etc/os-release- Вывод
ansible -vvv all -m ping