Часть 3. Повседневное управление

Эта часть рассматривает что собственно управление серверами Linux на Предприятии не завершается добрыми процессами сборки - жизненно важно чтобы продолжающееся управление стало действенным и эффективным. В данной части мы изучим применение Ansible и прочих инструментов для достижения таких целей.

Данная часть состоит из следующих глав:

Глава 8. Управление репозиторием предприятия при помощи Pulp

До сих пор в этой книге мы обсуждали различные задачи, относящиеся к сборке конфигураций серверов Linux для развёртывания в некой корпоративной среде. Хотя большая часть выполненной нами работы хорошо масштабируется для охвата большинства ситуаций, следует заметить, что до сих пор мы устанавливали пакеты только из двух источников - либо восходящие репозитории общедоступных пакетов, относящиеся к каждому из используемых нами дистрибутивов Linux, либо, как в случае нашей главы с PXE загрузкой, из выгружаемого нами образа ISO.

Не лишним будет сказать, что это представляет определённые проблемы, в особенности когда речь идёт о создании воспроизводимых, управляемых сборок Linux. Мы более подробно изучим это в разделе с названием Установка Pulp для управления исправлениями, однако достаточно сказать, что две две сборки, выполняемые в два разных дня недели могут отличаться! Метод установки ISO представляет собой иной конец спектра и всегда производит согласованные сборки, причём независимо от того, когда они выполняются, однако в этом случае не применяются обновления безопасности (и прочие)! Требуется некий компромисс между этими двумя крайностями и, к счастью, имеется соответствующая форма пакетирования программного обеспечения с наименованием Pulp.

В данной главе мы изучим Pulp, в частности, обсудим следующее:

  • Установку Pulp для управления поправками

  • Сборку репозиториев в Pulp

  • Процесс внесения исправлений при помощи Pulp

Технические требования

Данная глава содержит примеры, основывающиеся на следующих технологиях:

  • Сервер Ubuntu 18.04 LTS

  • CentOS 7.6

  • Ansible 2.8

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

После того как вы убедились в безопасности той среды, в которой вы работаете, давайте начнём с рассмотрения установки новых программных пакетов при помощи Ansible.

Все обсуждаемые в этой книге примеры доступны в GitHub.

Установка Pulp для управления исправлениями

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

Давайте предположим, что вы собрали некий сервер и развернули в нём некую службу с помощью Ansible, как мы это представили ранее в данной книге. Пока всё хорошо - плейбуки Ansible предоставляют документацию по сборке стандарта и обеспечивают то, что данное построение может быть в точности воспроизведено в более поздний день. Тем не менее, это ловушка. Допустим, несколькими месяцами позже вы вернулись чтобы создать другой сервер - возможно, для масштабирования некого приложения, либо с целью сценария DR (Disaster Recovery, восстановления после сбоя). Может произойти один из следующих моментов, в зависимости от источника ваших пакетов:

  • Когда вы выполняли установку из общедоступных, обращённых в Интернет репозиториев, обе сборки будут обладать самыми последними версиями сборки всех пакетов на дату их установки. Эти отличия могут быть существенными и когда тратится время на проверку и квалификацию программного обеспечения определённой сборки Linux, вы можете не обладать способностью обеспечить это для двух различных версий пакетов. Это вызывает проблемы с воспроизведением, в особенности при обеспечении того, что проверенный в одной среде код будет работать в другой.

  • С другого конца данной линейки находятся репозитории определённой сборки ISO, которые мы применяли в Главе 6, Персональные сборки с PXE загрузкой. Эти никогда не изменяемые (пока некто не выгрузит более новый ISO и не извлечёт его поверх старого), а потому, пока производятся новые сборки, которые обладают полностью известным числом (а следовательно, отвечают нашей цели воспроизводимости), они никогда не получают никаких обновлений безопасности. А это само по себе может составлять проблему.

Основной компромисс, конечно же, находится посредине этих двух конечных пунктов. Что если бы имелась возможность создавать свои собственные репозитории пакетов, которые представляли бы некий моментальный снимок определённого момента времени общедоступного репозитория? Тем самым, они оставались бы статическими на тот момент, как потребуются нам (и тем самым обеспечат согласованные сборки), и в то же время способны обновляться по запросу при выходе важных исправлений безопасности. Здесь на помощь нам приходит проект Pulp и именно он способен выполнять подобные вещи. Он также является компонентом более сложных решений по управлению инфраструктурой, таких как Katello, которое мы рассмотрим в своей следующей главе.

Однако, для установок, в которых не требуется GUI (Graphical User Interface, графический интерфейс пользователя), Pulp оказывается исключительно подходящим. Давайте рассмотрим как мы можем установить его.

Установка Pulp

Как мы уже обсуждали это в Главе 1, Построение стандартной среды работы в Linux данной книги, будут встречаться случаи, в которых даже когда вы можете обладать сборкой некой стандартной операционной среды вокруг заданного дистрибутива Linux, такого как сервер Ubuntu, вам придётся делать некие исключения. Pulp именно тот случай, хотя он и способен управлять как пакетами .rpm, так и .deb (а следовательно, обрабатывать требования репозиториев для широкого разнообразия дистрибутивов Linux), он снабжён пакетами (а следовательно может быть установлен) лишь под операционные системы CentOS, Fedora и на основе RHEL. Вы всё ещё способны управлять с помощью Pulp своим штатом серверов Ubuntu - вам лишь потребуется установить его на CentOS (или иной предпочитаемый вами вариант Red Hat).

[Замечание]Замечание

Имеется ряд обстоятельств установки Pulp. Например, Pulp полагается на установку MongoDB, которая может быть и внешней. Аналогично, он также полагается на шину сообщений и имеется возможность применения либо RabbitMQ, либо Qpid, в зависимости от ваших предпочтений. Большинство организаций будут обладать своими собственными стандартами для этих моментов, а потому мы оставляем их в качестве упражнения для вас по определению той архитектуры, которая лучше подходит вашему предприятию. В данной главе мы осуществим очень простую установку Pulp в неком отдельном сервере для демонстрации вовлечённых в неё этапов.

исходя из относительной сложности установки Pulp, вам рекомендуется создать свой собственный плейбук Ansible для вашей установки Pulp. Тем не менее, в данной главе мы выполним данную установку вручную чтобы продемонстрировать все вовлекаемые в неё работы - не существует сшитой на всех установки Pulp:

  1. Прежде чем мы сможем приступить к установке, нам надлежит собрать виртуальный (или физический) сервер для размещения своих репозиториев Pulp. Например, мы остановимся на CentOS 7.6, который является самой последней поддерживаемой для Pulp версией на момент написания этих строк. Кроме того, обратите на следующие требования к файловой системе:

    • /var/lib/mongodb: Мы соберём свой пример сервера Pulp с MongoDB в одном и том же хосте. База MongoDB способна расти в размере до 10 ГБ и рекомепндуется смонтировать данный путь в некую выдеенную файловую систему на основе LVM с тем, чтобы она могла бы быть запросто увеличиваемой по мере необходимости и с тем, чтобы если даже она будет заполнена, это бы не останавливало остальную систему.

    • /var/lib/pulp: Это именно тот каталог, где расположен дом репозиториев нашего Pulp и опять это должна быть выделенная файловая система на основании LVM. Её размер определяется теми репозиториями, которые вы желаете создавать - например, когда вы желаете зеркалировать восходящий репозиторий в 20 ГБ, тогда для /var/lib/pulp потребуется иметь по крайней мере 20 ГБ. Этой файловой системе также следует основываться на XFS - при создании в ext4 ваши прогоны рискуют исчерпать inode.

  2. Когда эти требования выполнены, нам следует настроить соответствующий репозиторий EPEL, так как наша установка Pulp будет тащить пакеты из него:

    
    $ sudo yum install epel-release
    		
  3. Далее вам потребуется установить файл репозитория самого Pulp:

    
    $ sudo wget -O /etc/yum.repos.d/rhel-pulp.repo https://repos.fedorapeople.org/repos/pulp/pulp/rhel-pulp.repo
    		
  4. Затем мы установим необходимый сервер MongoDB - это следует сделать до того как мы продолжим установку Pulp. Ожидается, что большинство предприятий будут обладать собственными внутренними стандартами для необходимых серверов баз данных, которым они следуют - в нашем случае мы удовлетворимся установкой по умолчанию с шифрованием SSL:

    
    $ sudo yum install mongodb-server
    		
  5. И снова будет справедливым сказать, что большинство предприятий будут иметь свои собственные авторизации сертификатов, причём они могут быть как внутренними, так и внешними. Для нашего примера сервера мы выработаем простой самостоятельно подписываемый сертификат припомощи следующей команды:

    
    $ sudo openssl req -x509 -nodes -newkey rsa:4096 -keyout /etc/ssl/mongodb-cert.key -out /etc/ssl/mongodb-cert.crt -days 3650 -subj "/C=GB/CN=pulp.example.com"
    		
  6. Дадее нам надлежит сцепить свой частный ключ и сертификат в одном файле для того чтобы его подхватил MongoDB:

    
    $ sudo cat /etc/ssl/mongodb-cert.key /etc/ssl/mongodb-cert.crt | sudo tee /etc/ssl/mongodb.pem > /dev/null 
    		
  7. Покончив с этим, нам следует перенастроить MongoDB с тем, чтобы он подхватил вновь созданный файл сертификата и включил SSL. Внесите правки в файл /etc/mongod.conf и настройте следующие параметры (все прочие параметры в этом файле можно пропустить и оставить в их значениях по умолчанию):

    
    # Use ssl on configured ports
    sslOnNormalPorts = true
    
    # PEM file for ssl
    sslPEMKeyFile = /etc/ssl/mongodb.pem
    		
  8. На данном этапе мы теперь можем включить полученную службу MongoDB на запуск при загрузке и запустить её:

    
    $ sudo systemctl enable mongod.service
    $ sudo systemctl restart mongod.service
    		
  9. Обладая запущенным сервером баз данных Mongo, нам теперь требуется установить шину обмена сообщениями. И снова, большинство предприятий будут обладать своими корпоративными стандартами для этого и рекомендуется следовать тому, как они определены. Наш следующий пример является минимально требуемым набором для работы демонстрации - его не следует рассматривать как целиком безопасный, но он функционирует для краткости тестирования и оценки Pulp. Здесь мы просто устанавливаем все необходимые пакеты, а далее включаем и запускаем соответствующие службы.

    
    $ sudo yum install qpid-cpp-server qpid-cpp-server-linearstore
    $ sudo systemctl enable qpidd.service
    $ sudo systemctl start qpidd.service
    		
  10. Имея завершённой лежащую в основе инфраструктуру, мы теперь способны установить сам Pulp. Самые начальные шаги состоят в установке базовых пакетов:

    
    $ sudo yum install pulp-server python-gofer-qpid python2-qpid qpid-tools
    		

    Pulp применяет подключаемую архитектуру для размещения различных репозиториев, которые он способен хранить. На момент написания данных строк, Pulp обладал способностью размещать следующее:

    • Репозитории на основе RPM (например, CentOS, RHEL и Fedora)

    • Репозитории на основе DEB (например, Debian и Ubuntu)

    • Модули Python (к примеру, для зеркалирования содержимого PyPI)

    • Манифесты Puppet

    • Образы Docker

    • Содержимое OSTree

    К сожалению, данная глава не предоставляет нам пространства для того чтобы пройтись по этим модулям более подробно - тем не менее, можно с уверенностью сказать, что на верхнем уровне Pulp работает одинаково для всех этих разнообразных технологий. Независимо от того, работаете ли вы с модулями Python, образами Docker или с пакетами RPM, вы способны создать некий центральный репозиторий, который является стабильным и может управляться версиями для обеспечения современной среды, которую можно сопровождать без утраты контроля над тем, что содержит окружение.

    Для нашего варианта применения Pulp в качестве обслуживания пакетов Linux, мы установим подключаемые модули для поддержки RPM и DEB:

    
    $ sudo yum install pulp-deb-plugins pulp-rpm-plugins
    		
  11. После установки Pulp нам надлежит сконфигурировать необходимые службы ядра. Это осуществляется путём изменения /etc/pulp/server.conf - большинство установленных по умолчанию настроек отлично подходят для подобной нашей демонстрации - тем не менее, раз уж мы включили поддержку SSL в своём сервере MongoDB, мы должны сообщить устанавливаемому серверу Pulp о том что мы это сделали и отключить удостоверение SSL, ибо применяем самостоятельно подписываемый сертификат. Соответствующий раздел [database] упомянутого выше файла далжен выглядеть как- то так:

    
    [database]
    ssl: true
    verify_ssl: false
    		

    Когда вы изучите этот файл, вы обнаружите, что имеется возможность выполнения большого числа настроек, причём все они хорошо документированы комментариями. В частности, вы можете настроить такие разделы:

    • [email]: Отключено по умолчанию, но вы можете выполнить здесь настройку для того, чтобы ваш сервер Pulp отправлял по электронной почте отчёты.

    • [database]: Мы всего лишь включили в этом разделе поддержку SSL, однако когда эта база данных расположена на каком- то внешнем сервере или нуждается в дополнителных расширенных параметрах, их следует определять здесь.

    • [messaging]: Для взаимодействия между различными компонентами Pulp устанавливаемый по умолчанию посредник (брокер) обмена сообщениями Qpid не требует здесь никаких дополнительных настроек, однако, когда вы применяете RabbitMQ и/ или включили поддержку аутентификации/ SSL, тогда их потребуется настраивать тут.

    • [tasks]: Pulp может обладать отдельными посредниками для взаимодействия между компонентами и своими асинхронными задачами и этот посредник для последующего следует настраивать здесь. Поскольку мы пользуемся тем же самым экземпляром Qpid для обеих функций, для данного примера более ничего не требуется.

    • [server]: Применяется для настройки устанавливаемых по умолчанию учётных записей, имени хоста и тому подобного данного сервера.

  12. После настройки своего сервера Pulp, нам следует сгенерировать пару ключей RSA и сертификат CA для Pulp с помощью таких двух команд:

    
    $ sudo pulp-gen-key-pair
    $ sudo pulp-gen-ca-certificate
    		
  13. Для обслуживания содержимого HTTP(S) Pulp пользуется Apache, а потому мы должны здесь настроить его. Прежде всего, мы инициализируем свою базу данных, запустив следующую команду (обратите внимание на запуск от имени пользователя apache):

    
    $ sudo -u apache pulp-manage-db
    		
  14. Если вы намерены применять в Apache транспорт SSL, убедитесь что вы настроили его в соответствии со своими корпоративными требованиями. CentOS устанавливает по умолчанию для SSL Apache самостоятельно подписываемый сертификат, но вы можете пожелать заменить его сертификатом, подписанным CA вашего предприятия. Кроме того, убедитесь в отключении ненадёжных протоколов SSL - как минимум, в /etc/httpd/conf.d/ssl.conf рекомендуется поместить две следующие настройки:

    
    SSLProtocol all -SSLv2 -SSLv3
    
    SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
    		

    Это, конечно же, только начальное руководство, и большинство предприятий будут обладать своими собственными стандартами безопасности, которым стоит следовать здесь.

    [Совет]Совет

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

  15. Получив настроенный Apache установить его запуск при загрузке и запустите его:

    
    $ sudo systemctl enable httpd.service
    $ sudo systemctl start httpd.service
    		
  16. Pulp имеет некоторые прочие лежащие в его основе службы, которые непобходимы в его работе. Каждая из них может быть настроена и отрегулирована как то требуется, но для краткости нашего сервера образца будет достаточным включить и запустить каждую из них:

    
    $ sudo systemctl enable pulp_workers.service
    $ sudo systemctl start pulp_workers.service
    
    $ sudo systemctl enable pulp_celerybeat.service
    $ sudo systemctl start pulp_celerybeat.service
    
    $ sudo systemctl enable pulp_resource_manager.service
    $ sudo systemctl start pulp_resource_manager.service
    		
  17. Наша окончательная задача состоит в установке компонентов администрирования Pulp с тем, чтобы мы имели возможность управления своим сервером:

    
    $ sudo yum install pulp-admin-client pulp-rpm-admin-extensions pulp-deb-admin-extensions
    		
  18. Имеется одна заключительная задача для выполнения её в нашем сервере. Pulp разработан для удалённого управления им, а раз так, он осуществляет взаимодействие поверх SSL для обеспечения безопасности всех транзакций. Хотя у нас имеется созданный целиком- в- одном хосте сервер и на протяжении данной главы будет работать один и тот же администратор с того же самого хоста, нам требуется указать этому клиенту администратора Pulp что мы будем применять самостоятельно подписываемый сертификат - в противном случае мы получим отказ в удостоверении SSL. Для этого внесите изменения в /etc/pulp/admin/admin.conf и в разделе [server] задайте такой параметр:

    
    verify_ssl: False
    		
  19. Наконец, мы можем проверить что наш сервер Pulp работает, зарегистрировавшись в нём. Хотя Pulp и поддерживает множество учётных записей пользователей, и даже интегрируется с серверами LDAP, подобная нашей простейшая установка снабжается лишь единственной учётной записью администратора, в которой и имя пользователя, и пароль, оба установлены в значение admin.

    Если всё прошло как надо, вы должны обнаружить вывод подобный приводимому ниже и иметь возможность запроса состояния сервера (обратите внимание, что для сохранения места вывод был усечён):

     

    Рисунок 8-1



Теперь, когда мы обладаем полностью рабочеспособным сервером Pulp, мы продемонстрируем собственно процесс создания репозиториев для управления стабильными обновлениями и сборкой системы с применением вновь собранной системы Pulp.

Построение репозиториев в Pulp

Хотя в данной главе мы будем пользоваться лишь неким подмножеством доступных в Pulp свойств, предполагается, что здесь продемонстрирован некий жизнеспособный рабочий процесс, который показывает почему именно вы можете выбрать Pulp для управления репозиториями предприятия вместо развёртывания своего собственного решения (например, копирования пакетов из ISO, как мы это делали в Главе 6, Персональные сборки с PXE загрузкой).

Основной процесс обработки репозиториев пакетов на основании RPM и на основании DEB во многом аналогичен.

Давайте начнём с с изучения того как создавать репозитории на основании RPM и управлять ими.

Построение репозиториев на основе RPM в Pulp

Несмотря на то, что установка Pulp достаточно сложный процесс, после её выполнения сам процесс управления репозиториями невероятно простой. Тем не менее, он требует небольших знаний о структуре репозиториев для выбранного вами дистрибутива Linux. Давайте продолжим со своей сборкой CentOS 7, которую мы применяли в качестве примера на протяжении данной книги.

Имеющееся ядро репозиториев CentOS расщепляется надвое - прежде всего имеется сам репозиторий ОС; именно он содержит все необходимые файлы для самого последнего выпуска после точки для CentOS 7 - которым на момент написания являлся 7.6. Последний раз он обновлялся в ноябре 2018 и будет оставаться статичным вплоть до выпуска CentOS 7.7. Все обновления для данного выпуска далее содержатся в отдельном репозитории, а потому для сборки полностью рабочего зеркала CentOS 7 в нашем сервере Pulp требуется зеркалировать оба этих пути.

Давайте начнём с создания зеркала базовой операционной системы:

  1. Самый первый шаг состоит в регистрации в нашем коиенте pulp-admin, как мы это показывали в самом конце своего предыдущего раздела. Затем отсюда мы запускаем такую команду для создания нового репозитория:

    
    $ pulp-admin rpm repo create --repo-id='centos76-os' --relative-url='centos76-os' --feed=http://mirror.centos.org/centos/7/os/x86_64/
    		

    Давайте рассмотрим эту команду по частям:

    • rpm repo create: Это множество ключевых слов требует от сервера Pulp создания нового определения репозитория на основании RPM. Обратите внимание, что на этом этапе ничто не синхронизируется и не публикуется - это всего лишь создание метаданных для нового репозитория.

    • --repo-id='centos76-os': Сообщает Pulp значение идентификатора нашего нового репозитория равное centos76-os - он подобен уникальному ключу и должен применяться отличающим ваш новый репозиторий от прочих.

    • --relative-url='centos76-os': Инструктирует Pulp где публиковвать данный репозиторий - репозитории на основе RPM публикуются по http(s)://pulp-serveraddress/pulp/repos/<relative-url>.

    • --feed=http://mirror.centos.org/centos/7/os/x86_64/: Это значение восходящего местоположения, с которым будет выполняться синхронизация основанного на RPM содержимого.

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

    
    $ pulp-admin rpm repo sync run --repo-id='centos76-os'
    		
  3. Это запускает асинхронную команду, которая осуществляется в фоновом режиме на данном сервере - вы в любой момент можете проверять её состояние при помощи такой команды:

    
    $ pulp-admin rpm repo sync status --repo-id='centos76-os'
    		
  4. Наконец, по завершению необходимой синхронизации, полученный репозиторий следует опубликовать - это в действительности делает всё синхронизованное содержимое доступным через установленный веб сервер Apache, который мы ранее настроили частью инсталяции Pulp:

    
    $ pulp-admin rpm repo publish run --repo-id='centos76-os'
    		

Теперь, покончив с этим, у вас имеется некий внутренний моментальный снимок восходящего потока репозитория ОС CentOS 7.6, определённого значением параметра --feed, который остаётся постоянным в нашем сервере Pulp даже после выхода в свет CentOS 7.7.

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

Мы применим почти идентичный с предыдущим набор команд для создания репозитория обновлений, только на этот раз с двумя ключевыми отличиями:

  • Вместо пути /os/ мы воспользуемся для feed путём /updates/.

  • Для repo-id нам следует устанавливать временную отметку relative-url - естественно, вы можете приспособить и свою собственную систему ведения версий - однако, раз этот репозиторий будет моментальным снимком всех обновлений CentOS на 7 августа 2019, воспользуемся значением даты этого снимка в качестве идентификатора в качестве некого зравого подхода:

    
    $ pulp-admin rpm repo create --repo-id='centos7-07aug19' --relative-url='centos7-07aug19' --feed=http://mirror.centos.org/centos/7/updates/x86_64/
    $ pulp-admin rpm repo sync run --repo-id='centos7-07aug19'
    $ pulp-admin rpm repo publish run --repo-id centos7-07aug19
    		

Выполнив это, мы далее можем применять клиента pulp-admin для инспектирования имеющихся репозиториев и величин использования диска. На данный момент мы можем увидеть, что файловая система Pulp имеет задействованными 33 ГБ, хотя не все они идут под CentOS, поскольку в этой тестовой системе имеются и иные репозитории. Через минутку этот уровень использования станет важным.

В некой корпоративной среде хорошей практикой была бы сборка или обновления тестовых систем CentOS 7 для данного снимка на 8 августа с выполнением необходимых проверок с ними чтобы обеспечить уверенность в такой сборке. Это в особенности важно в которых изменения ядра могут создавать проблемы. Раз для данной сборки была подтверждена достоверность, она превращается в соответствующий базовый уровень для всех систем CentOS 7. Основным моентом в таком сценарии является то, что все системы (в представлении что они применяют данный репозиторий Pulp) будут обладать одними и теми же версиями всех пакетов. Именно это, в сочетании с рекомендуемой автоматизацией, как мы уже не раз обсуждали это на страницах данной книги, привносит практически сопоставимую с Docker стабильность и достоверность в окружение Linux.

Выполняя сборку по данному сценарию, предположим, что сегодня ночью выпускается критически важное обновление безопасности для CentOS 7. Поскольку важно своевременно применять такое исправление, важно также осуществить и его проверку, чтобы убедиться что оно не сломает никакие из уже имеющихся служб. В результате мы не желаем обновлять своё зеркало репозитория centos7-07aug19, так как это известный нам стабильный снимок (иначе говоря, мы его уже проверяли и остались им довольны - он стабилен в нашей среде).

Если бы мы просто пользовались исходящими репозиториями из интерента, тогда мы бы не обладали подобным контролем, а наши серверы CentOS 7 слепо брали бы при следующем запуске имеющееся исправление. Точно также, когда мы вручную обновляем зеркала репозитория сборки при помощи подобных reposync инструментов, мы бы обладали одной из двух возможностей. Во- первых, мы бы могли обновить уже имеющееся у нас зеркало, что стоило бы нам очень небольшого дискового пространства, но привнесло бы ровно те же самые проблемы, что и применение исходящих репозиториев (то есть все серверы выбирали бы самое новое исправление, как только бы запускалось их лобновление). В качестве альтернативы, мы могли бы создать второй снимок для проверки. Я подсчитал, что для зеркалирования обновлений CentOS на сревере Pulp требуется около 16 ГБ дискового пространства, а потому создание второго снимка потребует около 32 ГБ дискового пространства. С теченеим времени потребуются дополнительные снимки и ещё больше дискового пространствва, что невероятно неэффективно.

Именно тут воссияет звезда Pulp - он не только способен создавать репозитории на основе RPM и управлять ими неким действенным способом, но также осведомлён о том что не следует выгружать те пакеты, для которых уже была выполнена синхронизация и он не дублирует пакеты при их публикации - а следовательно, он очень эффективен как в смысле полосы пропускания, так и использования дисков. Благодаря этому мы способны вызывать следующий набор команд для создания нового моментального снимка обновлений CentOS 7 на 8 августа:


$ pulp-admin rpm repo create --repo-id='centos7-08aug19' --relative-url='centos7-08aug19' --feed=http://mirror.centos.org/centos/7/updates/x86_64/
$ pulp-admin rpm repo sync run --repo-id='centos7-08aug19'
$ pulp-admin rpm repo publish run --repo-id centos7-08aug19
		

Вы обнаружите сходство с теми командами, которые мы запускали ранее в этом разделе для создания снимка на 7 августа 2019 - они, по существу, идентичны, за исключением значения нового идентификатора репозитория (--repo-id) и URL (--relative-url), которые заботятся о значении даты в приращении по сравнению с предыдущей. Этот процесс запускается как и раньше, что отображено на приводимом далее снимке экрана - там показано что все пакеты выгружены и на этом этапе мало что известно о том, что происходит за сценой:

 

Рисунок 8-2



Однако давайте проверим использование дисков:

 

Рисунок 8-3



Отсюда мы можем увидеть, что использование диска было округлено до 34 ГБ - вероятно, мы бы обнаружили занятость значительно меньшей, когда воспользовались бы более подробным измерением. Таким образом, Pulp позволяет создавать снимки практически в том виде как нам они и требуются, причём без использования большого дискового протсранства и в то же самое время из соображений стабильности сохраняя старые до тех пор, пока не будет подтверждена надёжность новых, после чего избыточные моментальные снимки могут быть удалены.

В этой связи нелишним будет сказать, что удаление некого репозитория из Pulp не обязательно освобождает дисковое пространство. Основная причина этого состоит в том, что дедупликация определённого пакета в сервере хранения должна быть внимательной и не удалять те пакеты, которые всё ещё требуются. В нашем примере более 99% имеющихся пакетов из снимка на 7 августа также находится и в снимке за 8 августа, а потому при удалении одного из них, чтобы мы не повредили остающиеся.

В Pulp данный процесс носит название восстановления сирот (орфанного) и именно в этом состоит процесс обнаружения пакетов, которые более не относятся ни к какому репозиторию (предположительно, по причине удаления соответствующего репозитория) и приведения их в порядок.

Завершая наш текущий пример, предположим, что мы проверили свой снимок от 8 августа и обновлённые пакеты из него создали при проверке проблемы. Исходя их этого, мы пришли к заключению что этот снимок не подходит для промышленного использования, а пэтому мы удалим его, отложив создание нового моментального снимка до тех пор пока не станут доступными некие исправления:

  1. Прежде всего нам надлежит удалить сам этот репозиторий:

    
    $ pulp-admin rpm repo delete --repo-id='centos7-08aug19'
    		

    Это удаляет определение указанного репозитория и значение пбликуемого в сервере Apache URL с тем, чтобы они больше не применялись.

  2. Для очистки от всех осиротевших пакетов мы можем воспользоваться такой командой:

    
    $ pulp-admin orphan remove --all
    		

    Эта команда является общей очистокой, которая удаляет всех сирот по всему нашему серверу Pulp и выступает хорошим общим этапом сопровождения. Тем не менее, данная команда обладает возможностью получения более тонкого управления над удалением только определённого вида сирот (к примеру, вы можете вычистить все осиротевшие пактеы RPM, исключая пакеты DEB):

     

    Рисунок 8-4



  3. По завершению этого шага мы обнаружим, что было восстановлено наше дополнительное дисковое пространство, которое использовалось последним новым сником:

     

    Рисунок 8-5



В данном разделе мы до сих пор выполняли этапы со всеми командами Pulp вручную - это осуществлялось для того чтобы снабдить вас достойным пониманием всех необходимых шагов по настройке Pulp и сопутствующим репозиториям. Для обслуживания на постоянной основе рекомендуется предписывать выполнение этих шагов с помощью Ansible - однако не существует никаких собственных модуле Ansible для выполнянения всех выполненных в этой главе задач.

Например, модуль pulp_repo (введённый в версии 2.3 Ansible) обладает возможностью создания и удаления репозиториев, что мы выполняли ранее в этой главе с помощью pulp-admin rpm repo create. Тем не менее, он не способен осуществлять очистку сирот, а потому команду для этого требуется вызывать при помощи модулей Ansible shell или command. Полная автоматизация через Ansible оставлена вам в качестве упражнения.

После того как наши репозитории настроены, окончательный этап состоит в помещение их для использования в наши серверы корпоратоивного Linux и мы займёмся рассмотрением этого в своём следующем разделе данной главы.

Перед этим, тем не менее, мы рассмотрим некоторые нюансы управления пакетами DEB в Pulp по сравнению с управлением на основании RPM.

Построение репозиториев на основе DEB в Pulp

Хотя и имеются незначительные отличия в структуре командной строки между подключаемыми модулями репозитория на основе RPM и репозитория DEB, в целом эти процессы схожи. Как и ранее, требуются некие предварительные сведения относительно самой структуры репозитория для создания действенного зеркала. В данной книге мы будем работать с сервером 18.04 LTS Ubuntu, а его множество репозиториев по умолчанию настраивается таким образом:

  • bionic: Именно он выступает репозиторием базового уровня для собственно выпуска 18.04 сервера Ubuntu (с кодовым названием Bionic Beaver - бионический бобёр), причём как и для репозитория ОС в CentOS 7, он не изменяется для последующих выпуском этой операционной системы.

  • bionic-security: Это относящиеся к безопасности обновления для сборки последующих выпусков данной операционной системы bionic.

  • bionic-updates: Это не осносящиеся к безопасности обновления выпусков операционной системы bionic.

Имеются также и прочие репозитории, такие как backports, а дополнительно к соответствующему компоненту main (с которым мы и будем тут иметь дело), имеется широкий массив пакетов, доступных в соответствующих компонентах restricted, universe и multiverse. Более подробное обсуждение структуры репозитория Ubuntu выходит за рамки данной книги, но достаточно сказать что имеется широкий массив доступной по этой теме документации. Хорошей отправной точкой для чтения о различных репозиториях, которые вы можете пожелать зеркалировать является следующая ссылка:https://wiki.ubuntu.com/SecurityTeam/FAQ#Repositories_and_Updates.

Теперь давайте допустим, что мы обновляем некую минимальную сборку сервера 18.04 LTS Ubuntu. Для этого нас интересуют лишь пакеты из компонента main, однако нам не требуется моментальный снимок всех исправлений безопасности на данный момент времени, как мы это делали для своей сборки CentOS 7:

  1. Прежде всего, убедившсь что мы зарегистировались в своём клиенте pulp-admin, как и ранее, мы создадим некий репозиторий в Pulp для компонента main и пакетов самого выпуска операционной системы:

    
    $ pulp-admin deb repo create --repo-id='bionic-amd64-08aug19' --relative-url='bionic-amd64-08aug19' --feed='http://de.archive.ubuntu.com/ubuntu' --releases=bionic --components=main --architectures='amd64' --serve-http=true
    		

    Как вы можете видеть, наша предыдущая команда очень похожа на команду создвания нашего репозитория RPM. Мы определили repo-id и relative-url так же как и ранее и задали URL исходяжего feed (подвода). На этот раз, однако мы определили releases, components и architectures Ubuntu как параметры командной строки, в то время как для нашего примера с CentOS 7, они определялись неявно в самом зеркалированном нами URL. Кроме того, для этих особенных в DEB параметров настройки, мы теперь задаём и значение параметра --serve-http. По умолчанию Pulp обслуживает всё содержимое репозитория только через HTTPS. Тем не менее, из- за обладания в Pulp некоторыми ограничениями на подписи для пакетов DEB, мы должны включать обслуживание содержимого репозитория поверх открытого HTTP.

    [Совет]Совет

    Обратите внимание на то, что как подразумевает наличие параметра --releases, здесь можно определять более одноко выпуска. Хотя это и срабатываем в момент создания репозитория, на момент написания данных строк собственно процесс синхронизации обрывался, а потому следует создавать по одному отдельному репозиторию Pulp для каждого из выпусков Ubuntu, которые мы желаем зеркалировать. Ожидается, что когда- то в будущем это будет исправлено.

    Покончив с этим, мы создадим два дополнительных репозитория для соответствующих репозиториев security и updates:

    
    $ pulp-admin deb repo create --repo-id='bionic-security-amd64-08aug19' --relative-url='bionic-security-amd64-08aug19' --feed='http://de.archive.ubuntu.com/ubuntu' --releases=bionic-security --components=main --architectures='amd64' --serve-http=true
    
    $ pulp-admin deb repo create --repo-id='bionic-updates-amd64-08aug19' --relative-url='bionic-updates-amd64-08aug19' --feed='http://de.archive.ubuntu.com/ubuntu' --releases=bionic-updates --components=main --architectures='amd64' --serve-http=true
    		
  2. По окончанию создания репозиториев мы можем выполнить свои процессы синхронизации, в точности как мы это делали ранее:

    
    $ pulp-admin deb repo sync run --repo-id='bionic-amd64-08aug19'
    
    $ pulp-admin deb repo sync run --repo-id='bionic-security-amd64-08aug19'
    
    $ pulp-admin deb repo sync run --repo-id='bionic-updates-amd64-08aug19'
    		
  3. Наконец, мы публикуем свои репозитории:

    
    $ pulp-admin deb repo publish run --repo-id='bionic-amd64-08aug19'
    
    $ pulp-admin deb repo publish run --repo-id='bionic-security-amd64-08aug19'
    
    $ pulp-admin deb repo publish run --repo-id='bionic-updates-amd64-08aug19'
    		

Стоит обратить внимание на то,что репозитории Ubuntu имеют тенденцию быть намного более крупными чем их конкуренты из CentOS, в особенности в отношении updates и security. В процессе синхронизации все пакеты временно выгружаются в /var/cache/pulp перед их архивированием в соответствующем каталоге /var/lib/pulp. Когда /var/cache/pulp пребывает в файловой системе вашего корня, существует некая опасность переполнения вашей корневой файловой системы, а раз так, может оказаться лучшим создавать для этой цели некий новый том и монтировать его в /var/cache/pulp для предотвращения ситуации с переполнением диска и остановом вашего сервера Pulp.

Подключаемый модуль DEB для Pulp снабжён теми же самыми свойствами дедупликации пакетов, что и его конкурент RPM и публикует пакеты поверх HTTPS (и опционально HTTP) точно так же. при нескольких изменениях в синтаксе самих команд мы можем действенно создавать снимки исходящих репозиториев Linux для большинства основных репозиториев, которые мы находим в корпоративных средах.

В результате выполнения данного раздела вы изучили как создавать свои собственные зеркала в Pulp как для содержимого на основании RMP,так и на основании DEB, которые могут рассматриваться как стабильные и неизменные, а следовательно представляющие исключительную основу для управления исправлениями в неком предприятии.

В своём следующем разделе этой главы мы рассмотрим как развёртывать эти репозитории в двух различных типах серверов Linux.

Процессы исправления при помощи Pulp

В самом начале данного раздела сотит упомянуть, что Pulp поддерживает два основных метода для распространения пакетов из созданных в нём репозиториев. Первый из них это своего рода дистрибутив на основе активной доставки, который применяет нечто, носящее название Потребителя Pulp.

Мы не будем изучать этого в данной главе по следующим причинам:

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

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

Раз так, мы соберём отдельные примеры на основе Ansible для управления репозиториями и обновлениями с помощью тех репозиториев, что мы создали в своём предыдущем разделе с названием Построение репозиториев в Pulp. Ими можно управлять совместно со всеми прочими плейбуками Ansible, а также можно запускать их в некой подобной AWX платформе для обеспечения единого оконного стекла, применяемого для всех возможных задач.

Давайте начнём с рассмотрения того как вносить правки в системы на основе RPM при помощи сочетания Ansible и Pulp.

Исправление при помощи Pulp на основе RPM

В своём предыдущем разделе данной главы мы создали два репозитория для своей сборки CentOS - один для самого выпуска операционной системы и другой, содержащий соответствующие обновления.

Собственно процесс некой сборки CenTOS из этих репозиториев, на верхнем уровне, выполняется так:

  1. Уберите прочь все имеющиеся определения репозиториев в /etc/yum.repos.d, чтобы обеспечить загрузку репозиториев исключительно со своего сервера Pulp.

  2. Развертывание надлежащих настрокек с помощью Ansible.

  3. Применение Ansible для активной доставки необходимых обновлений (или всех необходимых пакетов) из установленного сервера Pulp при помощи таких новых настроек.

Прежде чем мы продолжим создание необходимых соответствующих плейбуков, давайте взглянем на то как выглядит соответствующий файл определения репозитория в нашей машине CentOS 7если бы мы создавали его вручную. В идеале мы бы хотели чтобы он выглядел как- то так:


[centos-os]
name=CentOS-os
baseurl=https://pulp.example.com/pulp/repos/centos76-os
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
sslverify=0

[centos-updates]
name=CentOS-updates
baseurl=https://pulp.example.com/pulp/repos/centos7-07aug19
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
sslverify=0
 	   

В этой настройке нет ничего особенно уникального - мы применяем созданный нами ранее при помощи pulp-admin свой репозиторий relative-url. Для проверки целостности пакетов мы используем GPG, совместно со значением ключа GPG RPM CentOS 7, который, как нам известно, мы уже установили в своей машине CentOS 7. Единственная регулировка, которую мы выполнили здесь по сравнению со стандартной настройкой состоит в отключении удостоверения SSL, так как наш сервер демонстрации Pulp снабжён самостоятельно подписываемым сертификатом. Конечно же, если бы мы применяли корпоративный сертификат авторизации и соответствующие сертификаты CA были бы установлены на всех машинах, тогда этой проблемы бы не существовало.

С учётом мощности Ansible мы бы могли слегка схитрить с тем как мы это делаем. Нет никакого смысла в создании и развёртывании файлов статической конфигурации, раз уж нам известно, что в определённый момент мы намерены обновлять соответствующий репозиторий - что означает, что по крайней мере может измениться baseurl.

Давайте начнём с создания некой роли с названием pulpconfig для развёртывания верной конфигурации - tasks/main.yml, которая должна выглядеть как- то так:


---
- name: Create a directory to back up any existing REPO configuration
  file:
    path: /etc/yum.repos.d/originalconfig
    state: directory

- name: Move aside any existing REPO configuration
  shell: mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/originalconfig

- name: Copy across and populate Pulp templated config
  template:
    src: templates/centos-pulp.repo.j2
    dest: /etc/yum.repos.d/centos-pulp.repo
    owner: root
    group: wheel

- name: Clean out yum database
  shell: "yum clean all"
 	   

Идущий в комплекте шаблон templates/centos-pulp.repo.j2 должен выглядеть следующим образом:


[centos-os]
name=CentOS-os
baseurl=https://pulp.example.com/pulp/repos/{{ centos_os_relurl }}
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
sslverify=0

[centos-updates]
name=CentOS-updates
baseurl=https://pulp.example.com/pulp/repos/{{ centos_updates_relurl }}
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
sslverify=0
 	   

Обратите внимание на сделанные нами подстановки переменной в самом конце каждой из строк baseurl - это позволит нам придерживаться одного и того же шаблона (который должен быть совместным для большинства целей), но при этом менять URL репозитория со временем, приспосабливаясь к обновлениям.

Далее мы определим вторую роль специально для обновлений самого ядра - это будет очень походить на наш пример, а tasks/main.yml будет содержать следующее:


---
- name: Update the kernel
  yum:
    name: kernel
    state: latest
 	   

Наконец, мы зададим site.yml на самом верхнем уровне структуры своего плейбука для того чтобы собрать всё это воедино. Как мы уже обсуждали ранее, мы можем задать все необходимые переменные для соответствующих URL с целыми хостами на своих местах, однако для краткости данного примера мы поместим их в сам плейбук site.yml:


---
- name: Install Pulp repos and update kernel
  hosts: all
  become: yes
  vars:
    centos_os_relurl: "centos76-os"
    centos_updates_relurl: "centos7-07aug19"

  roles:
    - pulpconfig
    - updatekernel
 	   

Теперь, когда мы выполним это как обычно, мы обнаружим вывод схожий с таким:

 

Рисунок 8-6



До сих пор всё хорошо - значения состояний changed из предыдущего воспроизведения сообщает нам что наша новая конфигурация была успешно применена.

[Совет]Совет

Обладающие зорким взглядом обнаружат предупредительное сообщение соответствующих задач Clean out yum database - Ansible определил когда мы воспользовались простыми командами оболочки перекрытие функциональности с модулем и рекомендовал вам воспользоваться самим модулем вместо этого по причинам воспроизводимости и идемпотентности, которые мы обсуждали ранее. Тем не менее, поскольку мы желаем обеспечить удаление всех отслеживаний любых более ранних баз данных yum (что могло бы создаать проблемы), я воспользовался здесь методом силового принуждения для очистки всех предыдущих баз данных.

Теперь, как я уверен, вы заметили, что самым замечательным моментом в данном подходе является то, что, допустим, когда вы желаете проверить свой снимок репозитория 08aug19, который мы создали в своём предыдущем разделе, нам следует внести изменения в значение блока vars: из site.yml с тем, чтобы он выглядел так:


vars:
    centos_os_relurl: "centos76-os"
    centos_updates_relurl: "centos7-08aug19"
 	   

Следовательно, мы можем повторно применять одни и те же плейбук, роли и шаблоны в разнообразных сценариях просто изменяя одно или два значения переменных. В некой подобной AWX среде эти переменные можно даже изменять при помощи GUI, что делает более простым весь этот процесс.

Таким образом, сочетание Ansible с Pulp само по себе приводит к по- настоящему стабильной инфраструктуре предприятия для управления и распространения (и даже проверки) обновлений. Тем не менее, прежде чем мы рассмотрим этот процесс в Ubuntu, вернемся на пару слов ранее. В своём предыдущем разделе мы предположили что некий пример со снимком на 08aug19 отказал при проверке, а потому подлежал удалению. Что касается серверов CentOS 7, откаты в них не столь прямолинейны как простая установка более ранних определений репозиториев и осуществление обновления, так как такое обновление выявит установленными более новые версии и не предпримет никаких действий.

Сам репозиторий Pulp, безусловно, предоставляет некую стабильную основу для отката обратно - однако откаты в целом обычно достаточно предрасположены к ручному выполнению, поскольку вам требуется указать значение идентификатора транзакции в соответствующей базе данных yum, к которой вы бы пожелали выполнить откат и удостовериться что это действие выполено и следовательно выполнен откат к этому положению. Естетственно, это можно автоматизировать, в предположении что вы обладаете надёжным способом выборки необходимого идентификатора транзакции.

Приводимый ниже снимок экрана отображает простой пример выявления значения идентификатора транзакции для надлежащего обновления ядра для только что автоматизированного нами обновления ядра и установления подробностей произведённых изменений:

 

Рисунок 8-7



Затме мы можем (если мы выбрали именно это) откатить данную транзакцию при помощи отображаемой на следующем снимке экрана команды:

 

Рисунок 8-8



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

В своём следующем разеле мы рассмотрим тот метод, который мы можем применять для того же набора задач, за исключением того что это системы на основе DEB, такие как Ubuntu.

Исправление при помощи Pulp на основе DEB

На самом верхнем уровне процесс управления обновлениями Ubuntu с сервера Pulp в точности тот же самый что и тот, кторым мы управляли обновлениями на основании RPM для CentOS (с сохранением того факта, что мы не не обладаем никаким вариантом относящимся к использованию Потребителя Pulp и должны пользоваться Ansible для данного процеса обновлений).

Однако, когда мы приступаем к использованию Pulp с системой APT репозитория Ubuntu, имеется пара ограничений:

  • На момент написания этих строк существует проблема, в результате которой процесс синхронизации Pulp не зеркалирует значения ключей подписи из исходящего репозитория Ubuntu. Это означает, что даже хот сам исходящий репозиторий и снабжён Release.gpg, он не зеркалируется в установленном сервере Pulp. Надеемся, в будущем это будет исправлено, но в данной главе мы обрабатываем это с помощью добавления неявного доверия для всех пакетов.

  • Поддержка HTTPS в Ubuntu настроена таким образом, чтобы по умолчанию не принимать обновления от сертификатов без удостоверения (то есть самостоятельно подписываемых). Хотя мы и можем отключить удостоверение SSL, как мы это делали для CentOS, диспетчер пактеов APT Ubuntu далее начинает искать файл InRelease (который должен обладать встроенным ключом GPG, упоминавшийся нами ранее). Как мы уже обсуждали это в своём предыдущем пуекте, подключаемый модуль DEB Pulp не поддерживает значения подписей зеркалируемых репозиториев, а потому в настоящее время единственным выходом из подобной ситуации является использование обмена HTTP без шифрования. Надеемся, что в последующих выпусках эти две проблемы будут исправлены - тем не менее, на момент написания этих строк не существовало документированного исправления или обходного пути для них.

Осознавая оба этих ограничения, мы можем определить свой файл источников APT для того набора репозиториев, который мы создали ранее. Следуя примерам своего предыдущего раздела, наш файл /etc/apt/sources.list должен выглядеть как- то так:


deb [trusted=yes] http://pulp.example.com/pulp/deb/bionic-amd64-08aug19 bionic main
deb [trusted=yes] http://pulp.example.com/pulp/deb/bionic-security-amd64-08aug19 bionic-security main
deb [trusted=yes] http://pulp.example.com/pulp/deb/bionic-updates-amd64-08aug19 bionic-updates main
		

Значение строки [trusted=yes] требует игнорировать отсутствия подписей пакетов от соответствующего диспетчера пакетов APT. Сама по себе структура файла невероятно простая, а потому так же как и для примера с CentOS, мы можем создать некий файл шаблона с тем, чтобы соответствующий URL мог запоняться с помощью некой переменной:

  1. Прежде всего мы создадим некую роль с названием pulpconfig и создадим такой шаблон templates/sources.list.j2:

    
    deb [trusted=yes] http://pulp.example.com/pulp/deb/{{ ubuntu_os_relurl }} bionic main
    deb [trusted=yes] http://pulp.example.com/pulp/deb/{{ ubuntu_security_relurl }} bionic-security main
    deb [trusted=yes] http://pulp.example.com/pulp/deb/{{ ubuntu_updates_relurl }} bionic-updates main
    		
  2. Затем мы создадим в этой роли некие задачи для установки данного шаблона и удаления прочь всех старых настроек APT:

    
    ---
    - name: Create a directory to back up any existing REPO configuration
      file:
        path: /etc/apt/originalconfig
        state: directory
    
    - name: Move existing config into backup directory
      shell: mv /etc/apt/sources.list /etc/apt/originalconfig
    
    - name: Copy across and populate Pulp templated config
      template:
        src: templates/sources.list.j2
        dest: /etc/apt/sources.list
        owner: root
        group: root
    
    - name: Clean out dpkg database
      shell: "apt-get clean"
    		
  3. Наконец, мы задаём роль для обновления своего ядра, но на этот раз применяем APT:

    
    ---
    - name: Update the kernel
      apt:
        name: linux-generic
        state: latest
    		
  4. Наш плейбук site.yml для систем Ubuntu теперь вуглядит подобным образом - за исключением отличий с переменной, он почти идентичен тому, что мы имели для CentOS 7, и снова выделим это значение при применнии Ansible в качестве платформы для автоматизации:

    
    ---
    - name: Install Pulp repos and update kernel
      hosts: all
      become: yes
      vars:
        ubuntu_os_relurl: "bionic-amd64-08aug19"
        ubuntu_security_relurl: "bionic-security-amd64-08aug19"
        ubuntu_updates_relurl: "bionic-updates-amd64-08aug19"
    
      roles:
        - pulpconfig
        - updatekernel
    		
  5. Теперь, после совмещения всего этого воедино и запуская это, мыдолжны обнаружить вывод аналогичным тому, который можно увидеть на приводимом далее снимке экрана:

     

    Рисунок 8-9



Оставляя за скобками те ограничения безопасности, которые присутствуют в текущей поддержке Debian Pulp, всё это предоставляет элегантное и эффективное в отношении пространства решение для управления обновлениями Ubunts в корпоративной инфраструктуре таким образом, что оно воспроизводимо и само по себе приводит как подобает к автоматизации. Как и с более ранним примером на сонове CentOS, будет достаточно просто проверять пактеы из нового снимка просто изменяя определения значения переменной, передаваемой в наши роли.

Как и в случае с CentOS, когда некий новый набор пакетов не подходит для промышленного применения, Ansible делает простым восстановление предыдущей конфигурации репозитория. Тем не менее, откат пакетов в Ubuntu (и прочих дистрибутивах на основе Debian) обратно намного более требовательный к работе вручную процесс, чем тот, что мы наблюдали в своём предыдущем разделе. К счастью, имеется обильная история относительно транзакций пакетов, хранимая в /var/log/dpkg.log и в /var/log/apt/history.log*, которой можно воспользоваться для определения того, какие именно мы пакеты устанавливали и/ или обновляли и когда. Далее для установки некой конкретной версии пакетов можно применить команду apt-get с использованием синтаксиса apt-get install <packagename>=<version>. В интернете имеется множемтво решений в сценариях для данной задачи, а потому это оставляется вам для определения того какое из них лучше всего подходит для ваший потребностей и вашей среды.

Выводы

Управление репозиториями пакетов в неких настройках предприятия может представлять множество проблем, в особенности когда дело касается эффективного хранения, сбережения полосы пропускания интернета и обеспечения соответствия сборки. К счастью, пакет программного обеспечения Pulp предоставляет элегантное решение этих вызовов для большинства распространённых дистрибутивов Linux и сам по себе достойно влечёт к действенному управлению в соответствующем предприятии.

В этой главе вы изуили как устанавливать Pulp чтобы начать вносить исправления в некой корпоративной среде Linux. Затем вы на практических примерах изучили как собирать репозитории Pulp как для дистрибутивов Linux на основании RPM, так и для основанных на DEB, перед тем как получили практические знания развёртывания соответствующей конфигурации Pulp и обновления пакетов с помощью Ansible.

В нашей следующей главе мы изучим как инструменты программного обеспечения Katello дополняют Pulp в управлении средой предприятия.

Вопросы

  1. Зачем вы можете пожелать создать некий репозиторий с помощью Pulp вместо того чтобы просто зеркалировать файлы, которые вы могли бы выгружать вручную?

  2. В чём состоят основные проблемы относительно сборки и проверки репозиториев исправлений Linux в некой корпоративной среде?

  3. Какие компоненты требуются Pulp для работы?

  4. Определите требования к файловой системе для успешной установки Pulp.

  5. Как бы вы вносили исправления в некую систему на основе RPM из созданного ранее репозитория Pulp?

  6. Зачем следует применять Ansible для развёртывания исправлений из репозитория Pulp, вместо того чтобы пользоваться Потребителем Pulp?

  7. Будет ли удаление некого репозитория Pulp высвобождать дисковое пространство? Если нет, как это осуществить?

Последующее чтение

Для более глубоких подробностей проекта Pulp и того как применять данный инструментарий, будьте добры ознакомиться с официальной документацией.