Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
    с подключенным расширенным репозиторием (см.
  • Astra Linux Special Edition РУСБ.10015-17
  • Репозитории Astra Linux Special Edition xРУСБ.10015-37 (очередное обновление 7.7: структура, особенности подключения и использования)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
    с подключенным расширенным репозиторием
  • Astra Linux Common Edition 2.12.30 и более поздним обновлениям 

Для Astra Linux Special Edition РУСБ.10015-01 x.7 требуется подключение расширенного репозитория (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования)

  • Astra Linux Common Edition 2.12.30 и более поздним

  • .

    Предупреждение
    Предупреждение
    Развертывание службы Foreman следует выполнять на отдельном сервере, без работающих служб, использующих web-сервер apache2. В частности, не следует применять настоящую инструкция на контроллерах домена FreeIPA (см. Контроллер ЕПП FreeIPA в Astra Linux).

    Введение

    Для управления конфигурациями серверов , и их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansibleвсем жизненном могут использоваться следующие программные компоненты.

    • Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает web-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
    • Puppet - инструмент Инструменты управления конфигурациейконфигурациями, позволяющий позволяющие системным администраторам автоматизировать предоставление, развертывание и настройку и управление серверной инфраструктурой. Требует инфраструктуры. Обычно используется один из этих инструментов:
      • Puppet — требует установки агентского ПО на управляемые компьютеры
      ;Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев. Не
      • .
      • Ansible — не требует установки агентского ПО на управляемые компьютеры
      ;
      • .

    Описание стенда

    Сервер: 10.0.2.120 master.astra.lan

    Клиент: 10.0.2.121 agent1.astra.lan

    Далее подразумевается, что на сервере и клиенте используются одинаковые имена пользователей. Если имена пользователей разные, то нужно необходимо использовать актуальные имена, соответствующим образом изменить изменив команды передачи ключей SSH.

    На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/hosts на сервере и на клиенте.

    Информация
    На сервере должно быть установлено не менее 3ГБ оперативной памяти.

    Установка Puppet

    Настройка сервера

    Имя и адрес сервера

    Коммуникация между службами Puppet Server и Puppet Agent осуществляется по имени хоста, на котором расположена служба. Для правильной работы служб нужно:

    • либо настроить
    DNS-сервер,
    • разрешение имен в службе DNS;
    • либо указать адреса хостов в файлах /etc/hosts на всех хостах (этот вариант используется далее).

    Для сервера используем Серверу назначается имя master.astra.lan, и команда . Команда назначения имени будет иметь следующий вид (команда выполняется на сервере):

    Command

    sudo hostnamectl set-hostname master.astra.lan

    Осуществить настройку каждой машины На каждом хосте необходимо осуществить настройку разрешения имен через файл /etс/hosts, для чего . Для этого внести в файл указание строку с указанием IP-адреса Puppet Server хоста (10.0.2.120) и его имён имен (master.astra.lan, master и puppet). В итоге файл /etc/hosts на сервере должен выглядеть примерно так:

    Блок кода
    127.0.0.1 localhost
    10.0.2.120 master.astra.lan master puppet
    10.0.2.121 agent1.astra.lan agent1
    # The following lines are desirable for IPv6 capable hosts
    ::1 localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters

    Подразумевается, что серверу назначен статический IP-адрес 10.0.2.120, а клиенту - 10.0.2.121.

    Коррекция региональных настроек (locales) на сервере

    .

    Проверить наличие региональной настройки en_US.utf8 выполнив команду:

    Command
    locale -a | grep en_US.utf8

    Если региональной настройки en_US.utf8 нет, то добавить её, выполнив следующие команды

    Command

    echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
    sudo locale-gen

    Или можно выбрать нужные региональные настройки, включая региональную настройку en_US.UTF-8 UTF-8 , в интерактивном режиме, выполнив следующие команды:

    Command
    sudo apt update
    sudo dpkg-reconfigure locales

    Установка Puppet Server

    Предупреждение
    При работе в Astra Linux Special Edition x.7.0 и x.7.1 подключить расширенный репозиторий, для обновлений выпущенный ранее обновления БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) также подключить компонент расширенного репозитория astra-ce (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования).

    Для установки выполнить на сервере следующие команды:

    Command

    sudo apt update
    sudo apt install openjdk-11-jre-headless puppetserver

    Указание пакета в команде установки пакета openjdk-11-jre-headless необходимо для того, чтобы он обновился из расширенного репозитория если был установлен ранее.

    Настройки СЗИ

    Проверить статусы ограничений:

    1. Блокировка бита исполнения:
      Command
      sudo astra-nochmodx-lock status
    2. Блокировка интерпретаторов:
      Command
      sudo astra-interpreters-lock status

    Оба ограничения должны быть отключены. Подробнее см. Инструменты командной строки astra-safepolicy.

    Настройки для работы с ядром hardened

    При использовании ядра hardened выполнить рекомендации статьи: Установлено значение параметра PrivateUsers по умолчанию.

    Установка Puppet Server

    Предупреждение
    При работе в Astra Linux Special Edition x.7.0 и x.7.1 подключить расширенный репозиторий, для обновлений выпущенный ранее обновления БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) также подключить компонент расширенного репозитория astra-ce (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования).

    Для установки выполнить на сервере следующие команды:

    Command

    sudo apt update
    sudo apt install openjdk-11-jre-headless puppetserver

    Указание пакета в команде установки пакета openjdk-11-jre-headless необходимо для того, чтобы он обновился из расширенного репозитория если был установлен ранее.

    Для Для коммуникации Puppet Server использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:

    Command
    sudo ufw allow 8140

    Разрешить автоматический запуск  Puppet Server и запустим его:

    Command

    sudo systemctl enable puppetserver
    sudo systemctl start puppetserver

    Проверить статус сервиса:

    Command
    sudo systemctl status puppetserver

    Установка Puppet Agent на клиентском компьютере

    Имя и адрес клиентского компьютера

    Настроить статический IP-адрес сервера (далее - 10.0.2.121)

    Задать имя компьютера:

    Command
    sudo hostnamectl set-hostname agent1.astra.lan

    Настроить разрешение имён сервера и клиента с помощью файла /etc/hosts. Файл /etc/hosts на клиентском компьютере должен иметь примерно такой вид:

    Блок кода
    127.0.0.1 localhost
    10.0.2.121 agent1.astra.lan agent1
    10.0.2.120 master.astra.lan master puppet
    
    # The following lines are desirable for IPv6 capable hosts
    ::1 localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    

    Можно просто скопировать ранее созданный файл /etc/hosts с сервера.

    Установка агента

    Для установки агента выполнить на компьютере-агенте следующие команды (при этом будет установлен агент и сервер SSH для удалённого управления агентом):

    Command

    sudo apt update
    sudo apt install puppet-agent ssh

    Отредактировать файл /etc/puppetlabs/puppet/puppet.conf, добавив /заменив в секции main параметры:

    Блок кода
    server = master.astra.lan
    show_diff = true

    Для коммуникации агент, как и Puppet Server, использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:

    Command
    sudo ufw allow 8140

    Добавить службу Puppet Agent в автозагрузку и запустить её:

    Command
    sudo systemctl enable puppet
    sudo systemctl start puppet

    Настройка удаленного доступа по протоколу ssh на клиентской машине

    Для настройки доступа к клиентской машине по протоколу ssh:

    1. Создать отдельного пользователя с домашним каталогом:

      Command
      sudo useradd -m <имя_пользователя>

      опция -m указывает на необходимость создания домашнего каталога. Далее выбранное имя пользователя должно быть указано реестре клиентских машин на сервере (файле /etc/ansible/hosts);

    2. Задать пароль для этого пользователя:

      Command
      sudo passwd <имя_пользователя>
    3. Разрешить пользователю выполнять команды с использованием sudo. Это можно сделать создав файл /etc/sudoers.d/<имя_пользователя> с указанием привилегии выполнять любые команды без запроса пароля ALL=NOPASSWD:   ALL:

      Command
      echo "<имя_пользователя>   ALL=NOPASSWD:   ALL" | sudo tee -a /etc/sudoers.d/<имя_пользователя> 
    Информация

    Часто предлагаемый для упрощения вариант использования на клиентской машине пользователя root является нежелательным с точки зрения безопасности. При использовании этого варианта помимо задания пароля для пользователя root необходимо разрешить доступ пользователю root через ssh. Для включения доступа root через ssh в файле /etc/ssh/sshd_config раскомментировать параметр PermitRootLogin, изменить его значение на yes и перезапустить службу SSH (команды выполняются на клиентской машине):

    Command

    sudo passwd root
    sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
    sudo systemctl restart sshd

    Подписание сертификатов клиента

    При первом запуске клиентская служба Puppet Agent отправит на Puppet Server запрос на подпись сертификата. Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду:

    Command
    Titlesudo /opt/puppetlabs/bin/puppetserver ca list
    Requested Certificates: agent1.astra.lan (SHA256) F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E

    В примере выше сервер сообщает, что у него имеется один запрос на подпись сертификата от клиента с именем agent1.astra.lan.

    Подписать сертификат:

    Command
    Titlesudo /opt/puppetlabs/bin/puppetserver ca sign --certname agent1.astra.lan
    Successfully signed certificate request for agent1.astra.lan

    Для проверки правильности работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:

    1. Остановить службу

      Command

      sudo systemctl stop puppet

    2. Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:

      Command
      Titlesudo /opt/puppetlabs/bin/puppet agent --test

      Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
      Info: Creating a new SSL certificate request for agent1.astra.lan
      Info: Certificate Request fingerprint (SHA256): F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
      Info: Downloaded certificate for agent1.astra.lan from puppet
      Info: Using configured environment 'production'
      Info: Retrieving pluginfacts Info: Retrieving plugin
      Info: Retrieving locales
      Info: Caching catalog for agent1.astra.lan
      Info: Applying configuration version '1568370748'
      Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml Notice: Applied catalog in 0.02 seconds

    3. Повторно запустить службу:

      Command
      sudo systemctl start puppet

    Установка

    пакетов

    и настройка Ansible

    и Foreman

    1. Выполнить установку и настройку Ansible в соответствии со статьей Система управления конфигурациями Ansible.
    2. Далее предполагается, что описание серверов находится в каталоге

    Установить пакеты Ansible и Foreman, выполнив на сервере следующие действия:

    Установить пакет ansible из репозитория:

    Command

    sudo apt install ansible

    Настройка
    1. /etc/ansible/hosts
    Отредактировать файл /etc/ansible/hosts, добавив в файл секцию
    1. и представляет собой секцию (группу серверов)  [agents]
    (т.е. добавив группу серверов, с названием этой группы agents). В этой группе пока
    1. . В этой группе  пока будет один сервер с именем agent1.astra.lan и IP-адресом 10.0.2.121:
      Command

      echo -e "agents:\n hosts:\n  agent1.astra.lan:\n   ansible_user: <имя_пользователя>" | sudo tee -a /etc/ansible/hosts

      В качестве значения параметра ansible_user вместо <имя_пользователя> должно быть указано имя пользователя, созданного на клиенте для удаленного доступа.
      В результате файл /etc/ansible/hosts должен иметь следующий вид (пользователь для
    уделенного
    1. удаленного доступа - username):
      Блок кода
      agents:
       hosts:
        agent1.astra.lan:
         ansible_user: username
    Предупреждение
    1. В примере используется YAML-формат файла. Отступы (количество пробелов в начале строки) должны быть соблюдены. Использование символов табуляции не допускается.
    2. Ansible использует подключение ssh без запроса пароля по ключу, поэтому нужно сгенерировать ключ:
      Command

      ssh-keygen -f ~/.ssh/id_rsa -N ''

    Информация
    1. Ключ должен быть сгенерирован и передан от имени пользователя, от которого будут выполняться команды ansible. Если команды ansible предполагается выполнять от sudo, то генерировать и передавать ключ следует также от sudo (можно сгенерировать и передать ключи для нескольких пользователей ).
     
    1. После создания ключа передать его на нужные узлы, подключаясь к ним от имени пользователя, созданного для удаленного доступа:
      Command

      ssh-copy-id -i ~/.ssh/id_rsa <имя_пользователя>@agent1.astra.lan

    2. Проверить работу Ansible, выполнив ansible-пинг на группу серверов agents:
      Command
      Titleansible -m ping agents
      agent1.astra.lan | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }

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

    Установить на сервере пакеты:

    В случае, если ОС была установлена без графической оболочки, установить пакет shared-mime-info, команда:

    Command
    sudo apt install shared-mime-info

    Установить пакет foreman-installer:

    Command
    sudo apt install foreman-installer
    Предупреждение
    Перед При использовании Astra Linux Common Edition 2.12 перед выполнением дальнейших действий следует проверить, что в файле /etc/debian_version указано значение 9.0, и, если там указано иное значение, заменить его на 9.0.

    Запустить установщик:
    Предупреждение

    После установки При завершении работы установщика в его выводе в строке "Initial credentials are admin / ...." будет указан логин admin и указан автоматически созданный пароль для входа в web-интерфейс, его рекомендуется запомнить чтобы использовать для входа в web-интерфейс. В дальнейшем пароль возможно изменить с помощью команды:

    Command
    sudo foreman-rake permissions:reset username=admin password=<новый_пароль>
    Command
    Titlesudo foreman-installer
    Preparing installation Done *
    Foreman is running at https://master.astra.lan
    Initial credentials are admin / NRLJth9ufmAkTsF5 *
    Foreman Proxy is running at https://master.astra.lan:8443 *
    Puppetmaster is running at port 8140 The full log is at /var/log/foreman-installer/foreman.log
    Предупреждение
    В строке "Initial credentials are admin / ...." указан логин admin и указан автоматически созданный пароль для входа в web-интерфейс, его рекомендуется запомнить чтобы использовать для входа в web-интерфейс.

    Проверить работоспособность foreman-proxy:

    Command
    Titlesudo curl -k -X GET -H Accept:application/json https://master.astra.lan:8443/features --tlsv1

    ["httpboot","logs","puppet","puppetca","tftp"]

    Настройка

    Foreman + Puppet

    Открыть в браузере ссылку https://master.astra.lan (подтвердить согласие на подключение)

    В качестве логина и пароля использовать имя admin и автоматически созданный пароль, полученный после выполнения установщика.


    Перейти в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:

    Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах (на клиенте) выполнить команду:

    Command
    sudo systemctl restart puppet

    После чего обновить страницу web-интерфейса.

    Убедиться, что в  "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") имеется отображение созданного по умолчанию proxy. Если proxy не создан, то:

    • Перейти в "Администратор" - "Местоположения" ("Administer" - "Locations");
      • Выбрать Default location;
      • Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
      • Нажать кнопку "Применить" ("Submit");
    • Аналогично "Администратор" - "Организации" ("Administer" - "Organizations");
      • Выбрать Default organization;
      • Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
    • Нажать кнопку "Применить" ("Submit");

    После выполнения этих шагов в  "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") появится отображение созданного по умолчанию proxy.

    Foreman + Ansible

    Установить необходимые плагины:

    • для работы с Ansible:

      • foreman-plugin-ansible

      ,
      • ;

      • foreman-proxy-plugin-ansible

      ;
      • .

    • для запуска Ansible playbooks как запланированные задачи:

      • foreman-plugin-remote-execution

      ,
      • ;

      • foreman-proxy-plugin-remote-execution-

      ssh
    Commandsudo
      • script (foreman-

    installer
      • proxy-plugin-

    enable-
      • remote-execution-ssh).

    Команда для установки плагинов:

    • в обновлениях Astra Linux Special Edition начиная с оперативного обновления 1.7.6 (версия foreman-installer 3.3 и выше):
      Command
      sudo foreman-installer --enable-foreman-plugin-ansible \
      --enable-foreman-proxy-plugin-ansible \
      --enable-foreman-plugin-remote-execution \
      --enable-foreman-proxy-plugin-remote-execution-
    ssh
    • script
    • в более ранних обновлениях:
      Command
      sudo foreman-installer --enable-foreman-plugin-ansible \
      --enable-foreman-proxy-plugin-ansible \
      --enable-foreman-plugin-remote-execution \
      --enable-foreman-proxy-plugin-remote-execution-ssh

    Создать и скопировать ключ для работы каждого клиента с Создать и скопировать ключ для работы каждого клиента с сервера (команда выполняется на сервере от имени пользователя foreman-proxy, подключение выполняется от имени пользователя для удаленного доступа):

    Command

    sudo -u foreman-proxy ssh-keygen -f ~foreman-proxy/.ssh/id_rsa_foreman_proxy -N ''
    sudo -u foreman-proxy ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy <имя_пользователя>@agent1.astra.lan

    Проверить работу связки можно запустив Ansible playbook. Запустить Ansible playbook можно несколькими способами (при этом нужно будет указать команду или сценарий для выпонения на удалённой машине):

    1. Через список узлов (хостов):
      1. открыть страницу "Узлы" ("Узлы" -> "All Hosts");
      2. выбрать необходимые узлы;
      3. нажать "Действия" -> "Scheduled Remote Job";
    2. Через страницу узла:
      1. открыть страницу "Узлы" ("Узлы" -> "All Hosts");
      2. перейти на страницу нужного узла и нажать "Scheduled Remote Job" -> "Run Ansible roles";
    3. Через список заданий:
      1. открыть страницу "Шаблоны заданий"
      2. напротив нужного шаблона нажать "Выполнить"

    Роли ansible могут быть импортированы из смарт-прокси. Для этого необходимо:

    1. перейти на страницу "Ansible roles" ("Настройки" -> "Роли")
    2. выбрать источник импорта из выпадающего меню справа.

    Массовая настройка беспарольного доступа SSH

    Предупреждение
    Далее приводятся примеры команд, выполняющихся без проверки и подтверждения подлинности. Это небезопасно, но может быть необходимо для создания автоматических сценариев массового развертывания клиентских машин.

    Автоматическую передачу паролей для подключения клиенту ssh и инструменту передачи ключей ssh-copy-id обеспечивает инструмент sshpass (пакет sshpass). Пакет может быть установлен командой:

    Command
    sudo apt install sshpass

    Для использования инструмента:

    Создать файл для хранения паролей:

    Command
    touch <имя_файла>

    Запретить чтение файла всем, кроме владельца:

    Command
    chmod 600 <имя_файла>
  • Записать в файл пароль, который будет использоваться для подключения;
  • Команды передачи ключей, приведенные выше, использовать в виде:

    Command
    sshpass -f <имя_файла> ssh-copy-id -i ~/.ssh/id_rsa <имя_пользователя>@agent1.`hostname -d` -o StrictHostKeyChecking=no

    или

    Command
    sudo -u foreman-proxy sshpass -f <имя_файла> ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy <имя_пользователя>@agent1.astra.lan -o StrictHostKeyChecking=no

    где:

    опция -f <имя_файла> указывает из какого файла брать пароль для подключения;
    опция -o StrictHostKeyChecking=no отключает запрос подтверждения подлинности сервера и разрешает автоматическую регистрацию сервера как известного;
  • Другие возможности инструмента sshpass см. в справке:

    Command
    man sshpass

    Пример использования

    См. Настройки служб времени с помощью Ansible и Puppet.

    Возможные проблемы

    Проблема:

    При запуске сервиса foreman появляется ошибка:

    Информация
    /usr/share/foreman/vendor/ruby/2.3.0/gems/pg-1.1.4/lib/pg.rb:56:in `initialize': could not connect to server: No such file or directory (PG::ConnectionBad)

    Решение:

    Отредактировать файл /etc/postgresql/*/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.

    После этого выполнить команду:

    Command
    sudo systemctl restart postgresql foreman
    Проблема:

    Не стартует puppetserver.service. В /var/log/syslog сообщения:

    puppetserver[10217]: Execution error (Error) at puppetlabs.services.master.master-core/validate-memory-requirements! (master_core.clj:1279).
    puppetserver[10217]: Not enough available RAM (1 860MB) to safely accommodate the configured JVM heap size of 1 963MB. Puppet Server requires at least 2 159MB of available RAM given this heap size, computed as 1.1 * max heap (-Xmx). Either increase available memory or decrease the configured heap size by reducing the -Xms and -Xmx values in JAVA_ARGS in /etc/sysconfig/puppetserver on EL systems or /etc/default/puppetserver on Debian systems.

    Настройка интеграции ansible и foreman

    Для настройки передачи данных из ansible в foreman:

    1. При работе в Astra Linux Common Edition 2.12 (и в любых ОС с отсутствующей версией python2) в настройки ansible (файл /etc/ansible/hosts) добавить директиву:

      Блок кода
      ansible_python_interpreter: /usr/bin/python3
      Например
      agents:
       hosts:
        client.astra.lan:
         ansible_user: vagrant
        client2.astra.lan: # ALSE 1.7
         ansible_user: vagrant
        alce.astra.lan: # ALCE 2.12.44
         ansible_user: vagrant
         ansible_python_interpreter: /usr/bin/python3

      Иначе при добавлении хоста с помощью ansible (см. ниже) будет возникать ошибка:

      Блок кода
      "module_stderr": "Shared connection to alce.astra.lan closed.\r\n",
          "module_stdout": "/bin/sh: /usr/bin/python: Нет такого файла или каталога\r\n",
          "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    2. В файл /etc/ansible/ansible.cfg:
      1. в секцию [defaults] добавить строки:

        Блок кода
        bin_ansible_callbacks = True
        callback_whitelist = foreman

        команда для добавления указанных строк:

        Command
        sudo sed -i "/\[defaults\]/a bin_ansible_callbacks = True\ncallback_whitelist = foreman" /etc/ansible/ansible.cfg
      2. Добавить секцию [callback_foreman] следующего вида:

        Блок кода
        [callback_foreman]
        url = https://`hostname`
        ssl_cert = /etc/puppetlabs/puppet/ssl/certs/master.astra.lan.pem
        ssl_key = /etc/puppetlabs/puppet/ssl/private_keys/master.astra.lan.pem
        verify_certs = /etc/puppetlabs/puppet/ssl/certs/ca.pem
        

        команда для добавления:

        Command
        echo "[callback_foreman]
        url = https://`hostname`
        ssl_cert = /etc/puppetlabs/puppet/ssl/certs/master.astra.lan.pem
        ssl_key = /etc/puppetlabs/puppet/ssl/private_keys/master.astra.lan.pem
        verify_certs = /etc/puppetlabs/puppet/ssl/certs/ca.pem" | sudo tee -a  /etc/ansible/ansible.cfg

        Параметры для добавления секции можно скопировать из одноименной секции файла /etc/foreman-proxy/ansible.cfg;

    3. В графическом интерфейсе foreman добавить хост, с которого будет приниматься информация: "Администратор" - "Параметры" - закладка "Безопасность и проверка подлинности" - "Trusted hosts":List of hostnames, IPv4, IPv6 addresses or subnets to be trusted in addition to Smart Proxies for access to fact/report importers and ENC output. Имя хоста указать в квадратных скобках (синтаксис списка python). При необходимости указания подсетей использовать формат бесклассовой адресации (Classless Inter-Domain Routing, CIDR), например 10.2.0.0/24;

    4. Для проверки работы выполнить команду:

      Command
      sudo ansible -m setup localhost

      После выполнения команды в графическом интерфейсе foreman в списке хостов должен появиться новый хост (для команды выше - localhost). Если в команде указать имя клиента, например:

      Command
      sudo ansible -m setup client.example.com

      то в список хостов добавится хост с указанным именем (для команды выше - client.example.com)

    Массовая настройка беспарольного доступа SSH

    Предупреждение
    Далее приводятся примеры команд, выполняющихся без проверки и подтверждения подлинности. Это небезопасно, но может быть необходимо для создания автоматических сценариев массового развертывания и настройки клиентских машин.

    Автоматическую передачу паролей для подключения клиенту ssh и инструменту передачи ключей ssh-copy-id обеспечивает инструмент sshpass (пакет sshpass). Пакет может быть установлен командой:

    Command
    sudo apt install sshpass

    Для использования инструмента:

    1. Создать файл для хранения паролей:

      Command
      touch <имя_файла>
    2. Запретить чтение файла всем, кроме владельца:

      Command
      chmod 600 <имя_файла>
    3. Записать в файл пароль, который будет использоваться для подключения;
    4. Команды передачи ключей, приведенные выше, использовать в виде:

      Command
      sshpass -f <имя_файла> ssh-copy-id -i ~/.ssh/id_rsa <имя_пользователя>@agent1.`hostname -d` -o StrictHostKeyChecking=no

      или

      Command
      sudo -u foreman-proxy sshpass -f <имя_файла> ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy <имя_пользователя>@agent1.astra.lan -o StrictHostKeyChecking=no

      где:

      опция -f <имя_файла> указывает из какого файла брать пароль для подключения;
      опция -o StrictHostKeyChecking=no отключает запрос подтверждения подлинности сервера и разрешает автоматическую регистрацию сервера как известного;

    Другие возможности инструмента sshpass см. в справке:

    Command
    man sshpass

    Пример использования

    См. Настройки служб времени с помощью Ansible и Puppet.

    Возможные проблемы

    Проблема:

    При запуске сервиса foreman появляется ошибка:

    Информация
    /usr/share/foreman/vendor/ruby/2.3.0/gems/pg-1.1.4/lib/pg.rb:56:in `initialize': could not connect to server: No such file or directory (PG::ConnectionBad)

    Решение:

    Отредактировать файл /etc/postgresql/*/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.

    После этого выполнить команду:

    Command
    sudo systemctl restart postgresql foreman

    Проблема:

    Не стартует puppetserver.service. В /var/log/syslog сообщения:

    puppetserver[10217]: Execution error (Error) at puppetlabs.services.master.master-core/validate-memory-requirements! (master_core.clj:1279).
    puppetserver[10217]: Not enough available RAM (1 860MB) to safely accommodate the configured JVM heap size of 1 963MB. Puppet Server requires at least 2 159MB of available RAM given this heap size, computed as 1.1 * max heap (-Xmx). Either increase available memory or decrease the configured heap size by reducing the -Xms and -Xmx values in JAVA_ARGS in /etc/sysconfig/puppetserver on EL systems or /etc/default/puppetserver on Debian systems.

    Решение:

    На сервере должно быть установлено не менее 3ГБ оперативной памяти (как указано в инструкции).

    Обновление Foreman


    Предупреждение
    Обновление через несколько версий (например, с версии 3.11 сразу на версию 3.13) не поддерживается. Для выполнения таких обновлений требуется последовательно обновиться до каждой промежуточной версии, выполняя все инструкции.

    Создание резервных копий

    Перед началом выполнения обновления создать резервные копии:

    1. Создать дамп базы данных Foreman (путь к резервной копии будет указан в выводе), выполнив команду:
      Command
      sudo foreman-rake db:dump
    2. Создать резервную копию конфигурационных файлов:
      Command
      sudo tar -czvf etc_foreman.tar.gz /etc/foreman
      Резервная копия будет создана в файле etc_foreman.tar.gz в текущем рабочем каталоге.
    3. Создать резервную копию сертификатов Puppet:
      Command
      sudo tar -czvf var_lib_puppet_dir.tar.gz /var/lib/puppet/ssl
      Резервная копия будет создана в файле var_lib_puppet_dir.tar.gz в текущем рабочем каталоге.

    Выполнение обновления

    1. Остановить службы Foreman:
      Command
      sudo systemctl stop apache2 foreman.service foreman.socket dynflow\*
    2. Выполнить обновление операционной системы. Подробнее см. Fly-astra-update и astra-update - инструменты для установки обновлений.
    3. Выполнить миграцию базы данных:
      Command

      sudo foreman-rake db:migrate
      sudo foreman-rake db:seed

      Миграция базы данных должна быть завершена без ошибок (команды не должны выводить сообщений).
    4. Очистить кеш и базу данных сессий:
      Command

      sudo foreman-rake tmp:cache:clear
      sudo foreman-rake db:sessions:clear

    5. Опционально:
      1. Выполнить оптимизацию базы данных:
        Command
        su - postgres -c 'vacuumdb --full --dbname=foreman'
      2. Если инструмент foreman-installer использовался ранее для настройки, то проверить конфигурацию с его помощью:
        1. Проверить различия в настройках без сохранения изменений:
          Command
          sudo foreman-installer --noop --verbose
          Из-за того, что служба apache2 остановлена, в процессе проверки будут выдаваться сообщения об ошибках вида:
          Блок кода
          /Stage[main]/Foreman_proxy::Register/Foreman_smartproxy[foreman-hostname.domain]: Could not evaluate: Connection refused - connect(2).
          Эти сообщения можно игнорировать.
        2. По необходимости — откорректировать настройки используя инструмент foreman-installer, и повторить проверку.
        3. Если предложенные изменения настроек приемлемы, то применить их:
          Command
          sudo foreman-installer
    6. Перезапустить службы (не требуется, если была выполнена проверка конфигурации с помощью  foreman-installer):
      Command
      sudo systemctl start apache2 foreman.service foreman.socket

    Решение:

    На сервере должно быть установлено не менее 3ГБ оперативной памяти (как указано в инструкции).