Привет, Хабр!
Незадолго до прихода Рождества, в IT-отделе было решено изучить Spacewalk, — это Red Hat система, бесплатный аналог Satellite, для централизованного управления конфигурациями, обновлений систем, удобной поддержкой всего серверного парка.
Ввиду того, что доступная на официальном сайте документация довольно скудна на дополнительные комментарии различного рода траблшутинга, была дана задача изучить продукт для постепенного введение его сначала на тестовые сервера, а впоследствии и на продукцию.
Основной идеей введения Spacewalk было не только централизация и упрощение контроля, но и чтобы шаловливыми ручками никто самостоятельно не делал обновления на серверах нового проекта, благо прецеденты уже происходили.
Спустя две недели работы все полученные мной знания были внесены во внутренний аналог Confluence, а свободный выходной подтолкнул меня на написание статьи на Хабр.
Перед тем как я начну, хотел бы вкратце осветить, что было и не было затронуто, чтобы не претендовать на полный мануал по работе со Spacewalk:
+ Установка и конфигурация сервера/клиента
+ Настройка системы в GUI
+ Траблшутинг установки/обновления пакетов, работы с конфигурациями
+ Errata (сбор информации о критический обновлениях, уязвимостях и пр.)
— Proxy (пропала надобность, после отказа от HA)
— Cobbler/kickstart
— OpenSCAP
В связи с тем, что вся инфраструктура работает на VMWare, то и работа проводилась на ВМ под управлением CentOS 7. Рекомендуемыми системными требованиями от разработчика являются:
Я же использовал:
Также советую отключить SELinux и, если не используете, firewalld. Либо добавить http сервис в исключения.
Заметка: в конце статьи будут плейбуки для Ansible, как для клиентской, так и для серверной части, а также bash-скрипты. С их помощью можно будет развернуть всю инфраструктуру за пару минут.
Непосредственно установка описана как в официальной документации, так и на нескольких сайтах, однако для целостности статьи позволю себе упомянуть и здесь этот пункт.
Spacewalk работает с двумя СУБД: PostgreSQL и Oracle RDBMS. Я имею опыт работы с первой, ее и буду использовать сейчас.
Есть две возможности установки: как через автоматический инсталлер от Spacewalk, который и себя, и БД установит и настроит, правда, на тот же самый сервер, и установка в ручную, где можно поставить ДБ и приложение на разные сервера. Я рассмотрю оба варианта, начну с раздельной установки.
Также необходимо подключить PL/Tcl модули для PG:
Создадим БД, пользователя, и подключим модуль:
Дабы избежать проблем с подключением, стоит изменить /var/lib/pgsql/data/pg_hba.conf, добавив строки ДО линии all:
Перезапустим все:
Если вы собираетесь ставить приложение и БД на разных серверах, убедитесь, что на сервере БД установлен пакет postgresql-contrib.
Подключаем репозитории:
Также подключим epel:
Java:
Теперь непосредственно установщик для Spacewalk-postgres:
Подключаемся к нашей БД:
В том случае, если вы используете раздельный метод БД/приложение, то в вам будет нужно добавить флаг --standalone и указать IP адрес сервера БД, также не забудьте открыть порт 5432.
Заметка: советую провести тюнинг БД в соответствии в вашим железом для более продуктивной работы всей системы.
Теперь установим сам Spacewalk и запустим установку:
Дальше будет задано несколько вопросов, как по SSL сертификату, так и по БД. Можно вводить все значения вручную, или можно воспользоваться флагом --answer-file, и указать путь к файлу с ответами, чтобы в будущем автоматизировать установку:
Для управления непосредственно приложением, стоит использовать:
Для вывода всех способствующих приложению сторонних сервисов:
После подключения репозиториев, ставим сетапы, и запускаем:
Опять же, будут заданы вопросы касательно БД и SSL, используем ключ --answer-file и путь к файлу с ответами.
Для управления клиентскими станциями, Spacewalk использует систему так называемых каналов, которые могут быть как основными (Base), так и дочерними (Child), к каждому каналу привязывается репозиторий, который вам нужен, а так же ключ — с помощью которого происходит сопряжение клиента с сервером.
Репозитории в итоге синхронизируются с каналами, которые, в свою очередь, связаны с клиентами, так и проходит работа Spacewalk в общем виде. Тут же стоит упомянуть errata, которые можно привязать к каналам, что упрощает обновление и контроль за пакетами.
Всех клиентов можно объединять в группы по разным признакам, причем как с одинаковыми, так и с разными каналами или репозиториями, есть возможность работать с большим количеством клиентов на раз, что очень помогает делать обновления на 100+ серверах.
Доступен список всех пакетов установленных, а после синхронизации репозиториев и возможных для установки. Некоторые пункты интуитивно понятно, и нет смысла рассматривать каждый пункт построчно.
Все действия в Spacewalk происходят по расписанию (Schedule), практически любое действие можно настроить на время, которое вам удобнее всего.
После установки, можно будет перейти на адрес вашего сервера, дальнейшую настройку проводим через графический интерфейс:
Введи пароль, имя администратора, имя организации (что тоже является одним из способов управления клиентами), и переходите на стартовую панель.
Пока можете либо изучать доступные возможности самостоятельно, или же перейдем к созданию каналов.
Channels — Manage Software Channels — Create Channel:
Рекомендую задавать имена каналов в соответствии с типов и видом ОС, которые будут привязаны к этому каналу, например, CentOS_7_x86_64, в качестве чексам смело можно выбирать sha256, поле Channell Summary предназначено для небольшого описания канала. также, можете по желанию указать дополнительную информацию.
Теперь создадим дочерний канал и привяжем его к основному. Идем тем же способом, как создание основного канала, только в поле Parent Channel укажем уже созданный ранее канал.
Привяжем репозитории к основному и дочернему каналам.
Channels — Manage Repositories
Для основных каналов я использую Base Resources, для дочерних — Updates.
После создания репозиториев, нужно соединить их с каналами.
Channels — Manage Software Channels, откройте ваш основной канал, откройте раздел Repositories.
Здесь будут все созданные репозитории, выбирайте нужный вам, отмечайте, и нажмите на Update Resources.
Дальше откройте подраздел Sync:
Где вы можете синхронизировать репозиторий и канал, настроить расписание для синхронизации.
Заметка: в моем случае шаловливых ручек, мне пришлось еще удалить стандартный репозиторий из клиентской системы.
Как я уже упомянул ранее, Spacewalk использует систему ключей от Red Hat Network, с помощью которых происходит сопряжение и управление.
Чтобы создать ключ, идем в Systems — Activation Keys — Create Key:
Тут все предельно просто, разве стоит упомянуть, что сам ключ вы можете задать и сами, его формат всегда будет 1-ХХХХХ, а также, каждый ключ привязывается к каналу. Флаг Universal Default заставляет новые системы подхватывать параметры ключа.
Установка клиента
Подключим клиентский репозиторий и установим необходимые пакеты:
Заметка: rhncfg-actions и deltarpm нужны для корректной работы конфигураций и удаленного управления.
Spacewalk использует rhn_check для синхронизации клиент-сервера, которая проходит каждые 4 часа. Это значение можно убавить до 60 минут, но для меня ни один, ни другой варианты не являлись оптимальными, посему есть два варианта: использовать osad, который идет вместе с Spacewalk, или попросту добавить cronjob для rhn_check, допустим, на каждую минуту, пока мы тестируем систему, потом значение можно поменять, как вам будет угодно.
Также будет не лишним добавить /usr/bin/rhn-actions-control --enable-all в Крон тоже, он используется для развертывания конфигураций, и иногда тупит.
Возвращаемся в управление ключами, и копируем ID ключа, который мы создали, и выполняем:
Только не забываем поменять значения IP и ключа на свои. Опять же, советую использовать флаг --force, так как я замечал проблемы без использования этого флага.
Возвращаемся в Systems — All, довольные замечаем нашу систему. Ее можно теперь открыть и поисследовать, что и как там, а я пока настоятельно рекомендую создать группу для более удобного управления системами.
Systems — System Goups — Create Group, заполняем имя и описание, сохраняем, открываем свежесозданную группу, идем в раздел Systems и добавляем систему в группу.
Теперь подпишем систему к каналу, Systems — Ваша система — Software папка — Software Channels подпапка:
Выбирайте ваш канал и жмите на подтверждение. Можно ради интереса попробовать установить пакет, Software — Packages — Install.
Канал конфигураций
Чтобы управлять конфигурациями между сервером-клиентом/локальной машиной, а так же удаленным управлением, стоит настроить канал конфигураций и привязать к нему систему.
Идем в Configuration — Configuration Channels — Create Config Channel, задаем имя, описание, сохраняем, потом в Configuration — Manage Configuration Channels — Subscribe to Channels и подписываем канал конфигураций к софтверному каналу, и к системе.
Теперь мы можем деплоить конфигурации как с сервера, так и с локальных машин, и создавать разделы.
Configuration — Add Files — Create File/Upload File:
Так же, можем отправлять удаленные команда в виде bash-скрипта:
Напоминаю, что все действия проходят через расписание (Schedule), список всех действий примененных относительно данной системы можно посмотреть в разделе Events:
Errata
Одна из важнейших функций в Spacewalk это поддержка errata, которая удобно привязывается к каналам, и позволяет следить за уровнем важности последних обновлений. Настраивается это прямо на сервере, помимо скриптов, нужно скачать необходимые пакеты для Перла:
Затем создадим основной скрипт обновления и сбора errata, который будет хранится в /etc/rhn/:
В экспорте укажите имя и пароль администратора Spacewalk, который вы указывали в самом начале.
Сделаем скрипт исполняемым, и добавим его в Cron:
Выполним его прямо сейчас, чтобы увидеть изменения в графическом интерфейсе. Выполнение займет некоторое время.
Важный пункт, лично на мой взгляд, который я упустил, это настройка и установка прокси, а также поднятие всей системы как HA. У меня была идея настроить приложение через pacemaker, а на БД проводить синхронизации. По итогу было решено отказаться от этой идеи, в виду не очень большого серверного парка клиентский станций. Однако, если система в ближайшие полгода покажет себя крайне полезной, возможно, придется расширить изначальный сервер.
Сервер:
Клиент:
Всем спасибо за прочтение статьи. Удачи!
Незадолго до прихода Рождества, в IT-отделе было решено изучить Spacewalk, — это Red Hat система, бесплатный аналог Satellite, для централизованного управления конфигурациями, обновлений систем, удобной поддержкой всего серверного парка.
Ввиду того, что доступная на официальном сайте документация довольно скудна на дополнительные комментарии различного рода траблшутинга, была дана задача изучить продукт для постепенного введение его сначала на тестовые сервера, а впоследствии и на продукцию.
Основной идеей введения Spacewalk было не только централизация и упрощение контроля, но и чтобы шаловливыми ручками никто самостоятельно не делал обновления на серверах нового проекта, благо прецеденты уже происходили.
Спустя две недели работы все полученные мной знания были внесены во внутренний аналог Confluence, а свободный выходной подтолкнул меня на написание статьи на Хабр.
Перед тем как я начну, хотел бы вкратце осветить, что было и не было затронуто, чтобы не претендовать на полный мануал по работе со Spacewalk:
+ Установка и конфигурация сервера/клиента
+ Настройка системы в GUI
+ Траблшутинг установки/обновления пакетов, работы с конфигурациями
+ Errata (сбор информации о критический обновлениях, уязвимостях и пр.)
— Proxy (пропала надобность, после отказа от HA)
— Cobbler/kickstart
— OpenSCAP
Системные требования
В связи с тем, что вся инфраструктура работает на VMWare, то и работа проводилась на ВМ под управлением CentOS 7. Рекомендуемыми системными требованиями от разработчика являются:
- 4GB RAM
- 6GB свободного места для /var/satellite/
- 12GB для БД
Я же использовал:
- 6GB RAM
- 4 CPU(s)
- 40GB HDD
Также советую отключить SELinux и, если не используете, firewalld. Либо добавить http сервис в исключения.
Заметка: в конце статьи будут плейбуки для Ansible, как для клиентской, так и для серверной части, а также bash-скрипты. С их помощью можно будет развернуть всю инфраструктуру за пару минут.
Установка
Непосредственно установка описана как в официальной документации, так и на нескольких сайтах, однако для целостности статьи позволю себе упомянуть и здесь этот пункт.
Spacewalk работает с двумя СУБД: PostgreSQL и Oracle RDBMS. Я имею опыт работы с первой, ее и буду использовать сейчас.
Есть две возможности установки: как через автоматический инсталлер от Spacewalk, который и себя, и БД установит и настроит, правда, на тот же самый сервер, и установка в ручную, где можно поставить ДБ и приложение на разные сервера. Я рассмотрю оба варианта, начну с раздельной установки.
PostgreSQL
yum install -y postgresql-server
Также необходимо подключить PL/Tcl модули для PG:
yum install -y postgresql-pltcl
postgresql-setup initdb
systemctl start postgresql
Создадим БД, пользователя, и подключим модуль:
su - postgres -c 'PGPASSWORD=verystrong; createdb spcwlkdb ; createlang plpgsql spcwlkdb ; createlang pltclu spcwlkdb ; yes $PGPASSWORD | createuser -P -sDR spcwlkuser'
Дабы избежать проблем с подключением, стоит изменить /var/lib/pgsql/data/pg_hba.conf, добавив строки ДО линии all:
local spcwlkdb spcwlkuser md5
host spcwlkdb spcwlkuser 127.0.0.1/8 md5
local spcwlkdb postgres ident
Перезапустим все:
systemctl restart postgresql
Если вы собираетесь ставить приложение и БД на разных серверах, убедитесь, что на сервере БД установлен пакет postgresql-contrib.
Spacewalk
Подключаем репозитории:
rpm -Uvh https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8/epel-7-x86_64/00736372-spacewalk-repo/spacewalk-repo-2.8-11.el7.centos.noarch.rpm
Также подключим epel:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Java:
(cd /etc/yum.repos.d && curl -O https://copr.fedorainfracloud.org/coprs/g/spacewalkproject/java-packages/repo/epel-7/group_spacewalkproject-java-packages-epel-7.repo)
Теперь непосредственно установщик для Spacewalk-postgres:
yum -y install spacewalk-setup-postgresql
Подключаемся к нашей БД:
spacewalk-setup-postgresql create --db spcwlkdb --user spcwlkuser --password verystrong
В том случае, если вы используете раздельный метод БД/приложение, то в вам будет нужно добавить флаг --standalone и указать IP адрес сервера БД, также не забудьте открыть порт 5432.
Заметка: советую провести тюнинг БД в соответствии в вашим железом для более продуктивной работы всей системы.
Теперь установим сам Spacewalk и запустим установку:
yum -y install spacewalk-postgresql
spacewalk-setup --external-postgresql
Дальше будет задано несколько вопросов, как по SSL сертификату, так и по БД. Можно вводить все значения вручную, или можно воспользоваться флагом --answer-file, и указать путь к файлу с ответами, чтобы в будущем автоматизировать установку:
admin-email = root@localhost
ssl-set-cnames = spcwlkserver
ssl-set-org = Unicorn
ssl-set-org-unit = EOH
ssl-set-city = Prague
ssl-set-state = HMP
ssl-set-country = CZ
ssl-password = verystrong
ssl-set-email = root@localhost
ssl-config-sslvhost = Y
db-backend=postgresql
db-name=spcwlkdb
db-user=spcwlkuser
db-password=verystrong
db-host=localhost
db-port=5432
enable-tftp=Y
Для управления непосредственно приложением, стоит использовать:
/usr/sbin/spacewalk-service [stop|start|restart]
Для вывода всех способствующих приложению сторонних сервисов:
spacewalk-service status
Вариант второй, автоматическая установка
После подключения репозиториев, ставим сетапы, и запускаем:
yum -y install spacewalk-setup-postgresql
yum -y install spacewalk-postgresql
spacewalk-setup
Опять же, будут заданы вопросы касательно БД и SSL, используем ключ --answer-file и путь к файлу с ответами.
Base & Child Channels, Repos
Для управления клиентскими станциями, Spacewalk использует систему так называемых каналов, которые могут быть как основными (Base), так и дочерними (Child), к каждому каналу привязывается репозиторий, который вам нужен, а так же ключ — с помощью которого происходит сопряжение клиента с сервером.
Репозитории в итоге синхронизируются с каналами, которые, в свою очередь, связаны с клиентами, так и проходит работа Spacewalk в общем виде. Тут же стоит упомянуть errata, которые можно привязать к каналам, что упрощает обновление и контроль за пакетами.
Всех клиентов можно объединять в группы по разным признакам, причем как с одинаковыми, так и с разными каналами или репозиториями, есть возможность работать с большим количеством клиентов на раз, что очень помогает делать обновления на 100+ серверах.
Доступен список всех пакетов установленных, а после синхронизации репозиториев и возможных для установки. Некоторые пункты интуитивно понятно, и нет смысла рассматривать каждый пункт построчно.
Все действия в Spacewalk происходят по расписанию (Schedule), практически любое действие можно настроить на время, которое вам удобнее всего.
После установки, можно будет перейти на адрес вашего сервера, дальнейшую настройку проводим через графический интерфейс:
Введи пароль, имя администратора, имя организации (что тоже является одним из способов управления клиентами), и переходите на стартовую панель.
Пока можете либо изучать доступные возможности самостоятельно, или же перейдем к созданию каналов.
Channels — Manage Software Channels — Create Channel:
Рекомендую задавать имена каналов в соответствии с типов и видом ОС, которые будут привязаны к этому каналу, например, CentOS_7_x86_64, в качестве чексам смело можно выбирать sha256, поле Channell Summary предназначено для небольшого описания канала. также, можете по желанию указать дополнительную информацию.
Теперь создадим дочерний канал и привяжем его к основному. Идем тем же способом, как создание основного канала, только в поле Parent Channel укажем уже созданный ранее канал.
Привяжем репозитории к основному и дочернему каналам.
Channels — Manage Repositories
Для основных каналов я использую Base Resources, для дочерних — Updates.
После создания репозиториев, нужно соединить их с каналами.
Channels — Manage Software Channels, откройте ваш основной канал, откройте раздел Repositories.
Здесь будут все созданные репозитории, выбирайте нужный вам, отмечайте, и нажмите на Update Resources.
Дальше откройте подраздел Sync:
Где вы можете синхронизировать репозиторий и канал, настроить расписание для синхронизации.
Заметка: в моем случае шаловливых ручек, мне пришлось еще удалить стандартный репозиторий из клиентской системы.
Установка клиента, сопряжение клиента с сервером, управление ключами, настройка канала конфигураций
Как я уже упомянул ранее, Spacewalk использует систему ключей от Red Hat Network, с помощью которых происходит сопряжение и управление.
Чтобы создать ключ, идем в Systems — Activation Keys — Create Key:
Тут все предельно просто, разве стоит упомянуть, что сам ключ вы можете задать и сами, его формат всегда будет 1-ХХХХХ, а также, каждый ключ привязывается к каналу. Флаг Universal Default заставляет новые системы подхватывать параметры ключа.
Установка клиента
Подключим клиентский репозиторий и установим необходимые пакеты:
rpm -Uvh https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8-client/epel-7-x86_64/00742644-spacewalk-repo/spacewalk-client-repo-2.8-11.el7.centos.noarch.rpm
yum -y install rhn-client-tools rhn-check rhn-setup rhnsd m2crypto yum-rhn-plugin rhncfg-actions deltarpm
Заметка: rhncfg-actions и deltarpm нужны для корректной работы конфигураций и удаленного управления.
Spacewalk использует rhn_check для синхронизации клиент-сервера, которая проходит каждые 4 часа. Это значение можно убавить до 60 минут, но для меня ни один, ни другой варианты не являлись оптимальными, посему есть два варианта: использовать osad, который идет вместе с Spacewalk, или попросту добавить cronjob для rhn_check, допустим, на каждую минуту, пока мы тестируем систему, потом значение можно поменять, как вам будет угодно.
crontab -e
* * * * * /usr/sbin/rhn_check
Также будет не лишним добавить /usr/bin/rhn-actions-control --enable-all в Крон тоже, он используется для развертывания конфигураций, и иногда тупит.
Возвращаемся в управление ключами, и копируем ID ключа, который мы создали, и выполняем:
rhnreg_ks --serverUrl=http://your-server-ip/XMLRPC --activationkey=1-YOURKEY --force
Только не забываем поменять значения IP и ключа на свои. Опять же, советую использовать флаг --force, так как я замечал проблемы без использования этого флага.
Возвращаемся в Systems — All, довольные замечаем нашу систему. Ее можно теперь открыть и поисследовать, что и как там, а я пока настоятельно рекомендую создать группу для более удобного управления системами.
Systems — System Goups — Create Group, заполняем имя и описание, сохраняем, открываем свежесозданную группу, идем в раздел Systems и добавляем систему в группу.
Теперь подпишем систему к каналу, Systems — Ваша система — Software папка — Software Channels подпапка:
Выбирайте ваш канал и жмите на подтверждение. Можно ради интереса попробовать установить пакет, Software — Packages — Install.
Канал конфигураций
Чтобы управлять конфигурациями между сервером-клиентом/локальной машиной, а так же удаленным управлением, стоит настроить канал конфигураций и привязать к нему систему.
Идем в Configuration — Configuration Channels — Create Config Channel, задаем имя, описание, сохраняем, потом в Configuration — Manage Configuration Channels — Subscribe to Channels и подписываем канал конфигураций к софтверному каналу, и к системе.
Теперь мы можем деплоить конфигурации как с сервера, так и с локальных машин, и создавать разделы.
Configuration — Add Files — Create File/Upload File:
Так же, можем отправлять удаленные команда в виде bash-скрипта:
Напоминаю, что все действия проходят через расписание (Schedule), список всех действий примененных относительно данной системы можно посмотреть в разделе Events:
Errata
Одна из важнейших функций в Spacewalk это поддержка errata, которая удобно привязывается к каналам, и позволяет следить за уровнем важности последних обновлений. Настраивается это прямо на сервере, помимо скриптов, нужно скачать необходимые пакеты для Перла:
yum -y install perl-Frontier-RPC perl-Text-Unidecode
wget https://raw.githubusercontent.com/stevemeier/cefs/master/errata-import.pl
chmod +x errata-import.pl
Затем создадим основной скрипт обновления и сбора errata, который будет хранится в /etc/rhn/:
#!/bin/bash
cd /etc/rhn/
wget -N http://cefs.steve-meier.de/errata.latest.xml
wget -N https://www.redhat.com/security/data/oval/com.redhat.rhsa-all.xml
export SPACEWALK_USER='root'
export SPACEWALK_PASS='verystrong'
./errata-import.pl --server YourServerIPAddress --errata errata.latest.xml --rhsa-oval com.redhat.rhsa-all.xml --publish
unset SPACEWALK_USER
unset SPACEWALK_PASS
В экспорте укажите имя и пароль администратора Spacewalk, который вы указывали в самом начале.
Сделаем скрипт исполняемым, и добавим его в Cron:
chmod +x spcwlk_errata.sh
crontab -e
0 2 * * 7 /usr/bin/sh /etc/rhn/spcwlk_errata.sh
Выполним его прямо сейчас, чтобы увидеть изменения в графическом интерфейсе. Выполнение займет некоторое время.
Итог
Важный пункт, лично на мой взгляд, который я упустил, это настройка и установка прокси, а также поднятие всей системы как HA. У меня была идея настроить приложение через pacemaker, а на БД проводить синхронизации. По итогу было решено отказаться от этой идеи, в виду не очень большого серверного парка клиентский станций. Однако, если система в ближайшие полгода покажет себя крайне полезной, возможно, придется расширить изначальный сервер.
Автоматизация
Сервер:
Bash-скрипт для развертывания сервера (ОТКЛЮЧАЕТ firewalld):
#!/bin/sh
#
rpm -Uvh https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8/epel-7-x86_64/00736372-spacewalk-repo/spacewalk-repo-2.8-11.el7.centos.noarch.rpm
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
(cd /etc/yum.repos.d && curl -O https://copr.fedorainfracloud.org/coprs/g/spacewalkproject/java-packages/repo/epel-7/group_spacewalkproject-java-packages-epel-7.repo)
yum -y install spacewalk-setup-postgresql spacewalk-postgresql wget perl-Frontier-RPC perl-Text-Unidecode perl-XML-Simple
#
mkdir /usr/share/spcwlk-tmp/
echo 'admin-email = root@localhost
ssl-set-cnames = spcwlkserver
ssl-set-org = Unicorn
ssl-set-org-unit = EOH
ssl-set-city = Prague
ssl-set-state = SCK
ssl-set-country = CZ
ssl-password = verystrong
ssl-set-email = root@localhost
ssl-config-sslvhost = Y
db-backend=postgresql
db-name=spcwlkdb
db-user=spcwlkuser
db-password=verystrong
db-host=localhost
db-port=5432
enable-tftp=Y' > /usr/share/spcwlk-tmp/spcwlk_answer
spacewalk-setup --answer-file=/usr/share/spcwlk-tmp/spcwlk_answer
#
systemctl stop firewalld
systemctl disable firewalld
#
Bash-скрипт для установки errata (сначала задать имя и пароль для администратора Spacewalk):
#!/bin/sh
#
wget https://raw.githubusercontent.com/stevemeier/cefs/master/errata-import.pl -P /etc/rhn/
echo '#!/bin/bash
cd /etc/rhn/
wget -N http://cefs.steve-meier.de/errata.latest.xml
wget -N https://www.redhat.com/security/data/oval/com.redhat.rhsa-all.xml
export SPACEWALK_USER='gui username'
export SPACEWALK_PASS='Password to your gui account'
./errata-import.pl --server YourServerIPAddress --errata errata.latest.xml --rhsa-oval com.redhat.rhsa-all.xml --publish
unset SPACEWALK_USER
unset SPACEWALK_PASS' > /etc/rhn/spcwlk_errata.sh
#
chmod +x /etc/rhn/errata-import.pl
chmod +x /etc/rhn/spcwlk_errata.sh
#
echo '#!/bin/bash
#
/etc/rhn/./spcwlk_errata.sh' > /etc/rhn/spcwlk_errata_cron.sh
chmod +x /etc/rhn/spcwlk_errata_cron.sh
echo '0 2 * * 7 /usr/bin/sh /etc/rhn/spcwlk_errata_cron.sh' >> /var/spool/cron/root
/etc/rhn/./spcwlk_errata.sh
#
Ansible плейбук для развертывания сервера (не забудьте добавить answer-file):
- hosts: spcwlk-server
tasks:
- name: Install Spacewalk repo
yum:
name: https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8/epel-7-x86_64/00736372-spacewalk-repo/spacewalk-repo-2.8-11.el7.centos.noarch.rpm
state: present
- name: Install epel repo
yum:
name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
state: present
- name: Install PostgreSQL packages
yum:
name:
- spacewalk-setup-postgresql
- spacewalk-postgresql
- wget
- perl-Frontier-RPC
- perl-Text-Unidecode
- perl-XML-Simple
- name: Creates directory for Spacewalk answer file
file:
path: /usr/share/spcwlk-tmp/
state: directory
mode: 0755
- name: Deploy answer file
copy:
src: /etc/ansible/spcwlk_answer
dest: /usr/share/spcwlk-tmp/spcwlk_answer
- name: Spacewalk Server Deploy
shell: spacewalk-setup --answer-file=/usr/share/spcwlk-tmp/spcwlk_answer
- name: Stop firewalld
systemd:
name: firewalld
state: stopped
enabled: no
Клиент:
Bash-скрипт для развертывания клиента (не забываем про IP и ключ):
#!/bin/sh
#
rpm -Uvh https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8-client/epel-7-x86_64/00742644-spacewalk-repo/spacewalk-client-repo-2.8-11.el7.centos.noarch.rpm
yum -y install rhn-client-tools rhn-check rhn-setup rhnsd m2crypto yum-rhn-plugin rhncfg-actions deltarpm wget
echo '#!/bin/bash
#
/usr/sbin/rhn_check' > rhn_check.sh
mv rhn_check.sh /etc/cron.hourly/
chmod +x /etc/cron.hourly/rhn_check.sh
echo '* * * * * /usr/bin/sh /etc/cron.hourly/rhn_check.sh' >> /var/spool/cron/root
/usr/bin/rhn-actions-control --enable-all
cd /usr/share/rhn/
wget http://YourServerIPAddress/pub/RHN-ORG-TRUSTED-SSL-CERT
rhnreg_ks --serverUrl=http://172.22.64.41/XMLRPC --activationkey=1-xxxxxxxxxxxxxxxxxxxxxxxxxxxx --force
Anisble плейбук для развертывания клиента:
- hosts: spcwlk-clients
tasks:
- name: Install spacewalk repo
yum:
name: https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8-client/epel-7-x86_64/00742644-spacewalk-repo/spacewalk-client-repo-2.8-11.el7.centos.noarch.rpm
state: present
- name: Install client packages
yum:
name:
- rhn-client-tools
- rhn-check
- rhn-setup
- rhnsd
- m2crypto
- yum-rhn-plugin
- rhncfg-actions
- deltarpm
- wget
- name: Create cronjob for rhn_check
cron:
name: "rhn_check"
minute: "*"
hour: "*"
day: "*"
month: "*"
weekday: "*"
job: "/usr/sbin/rhn_check"
- name: Enable controls for config and remote control deployment
shell: /usr/bin/rhn-actions-control --enable-all
- name: Get certificate from server to client
get_url:
url: http://YourServerIPAddress/pub/RHN-ORG-TRUSTED-SSL-CERT
dest: /usr/share/rhn/
- name: Register client to server
rhn_register:
state: present
server_url: http://YourServerIPAddress/XMLRPC
activationkey: "{{ activation_key }}"
Всем спасибо за прочтение статьи. Удачи!
Комментарии (7)
Meklon
10.01.2019 08:26О, спасибо. Подскажи пожалуйста, можно ли прикрутить к нему пре- и пост-инсталляционные скрипты? Например, перед обновлением сложной системы корректно потушить базу данных, пропатчить все до последней версии и конкретно все поднять в нужном порядке.
sazanstheme Автор
10.01.2019 14:01Как remote control, я предполагаю. Несколько задач в расписание задать.
gecube
10.01.2019 17:37Рекомендую посмотреть в сторону AWS (Ansible Tower).
Тем более, что сам Ред Хат рекомендует ansible как средство для организации управлением lifecycle приложенияMeklon
11.01.2019 10:28Ansible Tower стоит очень негуманно, насколько я помню. Машин много, поэтому это критичный вопрос.
gecube
11.01.2019 15:31Извините, не AWS, а AWX. И, да, он бесплатен.
github.com/ansible/awx
habr.com/company/pixonic/blog/352184
SlavikF
Как-то заумно написано… Это наверное, чтобы я не понял.
Просмотрел статью.
И так и не понял зачем нужна эта система?
Может приведёте пару примеров — какие вопросы решает эта система?
gecube
Полностью поддержу. Я абсолютно не понял из статьи зачем нужна эта система. Ну, ок, положим она решает частную задачу — контроль за обновлениями софта на парке серверов, причем сервера можно объединять в группы. Тогда чем это лучше локального клона всех необходимых репозиториев + scm, который будет следить за актуальностью конфигурации и версий ПО на целевых серверах ?!
Я уж не говорю о том, что в статье наличествуют прям сомнительные рекомендации (вроде отключения selinux — стоило написать, что это норм для теста, но не для продакшн) и не раскрыт вопрос: как spacewalk организует репозитории? Он сам их, что ли, хранит?