RHEL: создание локального репозитория-зеркала для просветленных

от автора

Пришёл ученик к мастеру. И спросил:
— Что вы делали до просветления? Как жили?
Мастер ответил:
— Колол дрова, носил воду, готовил еду.
— А что вы делаете после просветления?  — спросил ученик.
— Колю дрова, ношу воду, готовлю еду,  — ответил мастер.
— А что изменилось?
— Да всё!

Хабр, привет!

В этой статье хотим поделиться, как создать локальный репозиторий в RHEL на качественно новом уровне понимания и почему это важно. На проектах мы в «Инфосистемы Джет» неоднократно сталкивались с этой задачей. Поначалу делали зеркало быстро, но по мере погружения пришло понимание, что мы лишаем себя части ценного функционала и данных.

Начнем с азов. Для чего нужен репозиторий, знают практически все. Но что он еще умеет? Давайте разбираться.

1)  Мы можем устанавливать пакеты группами. Например, после minimal install вы передумали и решили установить GUI. В этом случае необязательно устанавливать пакеты вручную. Достаточно найти подходящую группу и выполнить ею инсталляцию:

# yum --disablerepo=* --enablerepo=rhel-7-server-rpms group list Loaded plugins: product-id, search-disabled-repos, subscription-manager There is no installed groups file. Maybe run: yum groups mark convert (see man yum) Available Environment Groups:    Minimal Install    Infrastructure Server    File and Print Server    Basic Web Server    Virtualization Host    Server with GUI Available Groups:    Compatibility Libraries    Console Internet Tools    Development Tools    Graphical Administration Tools    Legacy UNIX Compatibility    Scientific Support    Security Tools    Smart Card Support    System Administration Tools    System Management Done

2) Мы можем устанавливать пакеты по Eratta (не по именам):

# yum --disablerepo=* --enablerepo=rhel-7-server-rpms updateinfo list Loaded plugins: product-id, search-disabled-repos, subscription-manager rhel-7-server-rpms                                                                                                                            | 3.5 kB  00:00:00      (1/2): rhel-7-server-rpms/7Server/x86_64/updateinfo                                                                                           | 4.3 MB  00:00:03      (2/2): rhel-7-server-rpms/7Server/x86_64/primary_db                                                                                           |  94 MB  00:00:11      RHBA-2018:3230 bugfix         GeoIP-1.5.0-13.el7.x86_64 RHBA-2019:2224 bugfix         GeoIP-1.5.0-14.el7.x86_64 RHBA-2017:2925 bugfix         NetworkManager-1:1.8.0-11.el7_4.x86_64 RHBA-2018:0778 bugfix         NetworkManager-1:1.10.2-13.el7.x86_64 RHBA-2018:1406 bugfix         NetworkManager-1:1.10.2-14.el7_5.x86_64 RHBA-2018:2000 bugfix         NetworkManager-1:1.10.2-16.el7_5.x86_64 RHBA-2018:3207 bugfix         NetworkManager-1:1.12.0-6.el7.x86_64 RHBA-2018:3349 bugfix         NetworkManager-1:1.12.0-7.el7_6.x86_64 RHSA-2018:3665 Important/Sec. NetworkManager-1:1.12.0-8.el7_6.x86_64 RHBA-2019:0519 bugfix         NetworkManager-1:1.12.0-10.el7_6.x86_64 RHBA-2019:2302 bugfix         NetworkManager-1:1.18.0-5.el7.x86_64 RHBA-2019:2601 bugfix         NetworkManager-1:1.18.0-5.el7_7.1.x86_64 RHBA-2020:0381 bugfix         NetworkManager-1:1.18.0-5.el7_7.2.x86_64 RHBA-2020:1162 bugfix         NetworkManager-1:1.18.4-3.el7.x86_64

3) Возможна установка и по конкретным патчам безопасности CVE (Common Vulnerabilities and Exposures): 

# yum --disablerepo=* --enablerepo=rhel-7-server-rpms updateinfo list cves Loaded plugins: product-id, search-disabled-repos, subscription-manager  CVE-2018-1000135 bugfix         NetworkManager-1:1.12.0-6.el7.x86_64  CVE-2018-15688   Important/Sec. NetworkManager-1:1.12.0-8.el7_6.x86_64  CVE-2020-10754   Moderate/Sec.  NetworkManager-1:1.18.8-1.el7.x86_64  CVE-2018-1000135 bugfix         NetworkManager-config-server-1:1.12.0-6.el7.noarch  CVE-2018-15688   Important/Sec. NetworkManager-config-server-1:1.12.0-8.el7_6.noarch  CVE-2020-10754   Moderate/Sec.  NetworkManager-config-server-1:1.18.8-1.el7.noarch  CVE-2018-1000135 bugfix         NetworkManager-libnm-1:1.12.0-6.el7.x86_64

4)    Мы можем синхронизировать репозитории не полностью, а «частично», с информацией только по пакетам, которые были добавлены.  

Теперь давайте попробуем создать зеркало. На просторах интернета вы можете столкнуться с множеством упрощенных рекомендаций: выполнили reposync, затем createrepo, и готово. Так ли это? Достаточно ли это? И да, и нет, — отчасти это справедливо для RHEL версий 8 и 9.

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

Подготовительные шаги

В нашем случае мы переносимся в прошлое и начинаем наш экскурс с RHEL7. Проверяем, что установлены необходимые пакеты:

# yum list installed | egrep 'yum-utils|createrepo' createrepo.noarch                0.9.9-28.el7                @rhel-7-server-rpms yum-utils.noarch                 1.1.31-54.el7_8             @rhel-7-server-rpms

Если их нет, то устанавливаем:

# yum install yum-utils createrepo

Создаем папку, которую будем использовать для репозитория:

# mkdir /habr

Синхронизация до просветления

Выполняем синхронизацию репозитория rhel-7-server-ansible-2.4-rpms:

# reposync --repoid=rhel-7-server-ansible-2.4-rpms  -p /habr/ (1/23): ansible-2.4.1.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:05      (2/23): ansible-2.4.0.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:07      (3/23): ansible-2.4.2.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:04      (4/23): ansible-2.4.3.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:06      (5/23): ansible-2.4.4.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:06      (6/23): ansible-2.4.5.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:04      (7/23): ansible-2.4.6.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:03      (8/23): ansible-doc-2.4.0.0-1.el7ae.noarch.rpm                                                                                                                               | 751 kB  00:00:04      (9/23): ansible-doc-2.4.1.0-1.el7ae.noarch.rpm                                                                                                                               | 752 kB  00:00:03      (10/23): ansible-doc-2.4.3.0-1.el7ae.noarch.rpm                                                                                                                              | 762 kB  00:00:03      (11/23): ansible-doc-2.4.2.0-1.el7ae.noarch.rpm                                                                                                                              | 762 kB  00:00:04      (12/23): ansible-doc-2.4.4.0-1.el7ae.noarch.rpm                                                                                                                              | 763 kB  00:00:03      (13/23): ansible-doc-2.4.5.0-1.el7ae.noarch.rpm                                                                                                                              | 763 kB  00:00:05      (14/23): ansible-doc-2.4.6.0-1.el7ae.noarch.rpm                                                                                                                              | 763 kB  00:00:03      (15/23): libtomcrypt-1.17-23.el7.x86_64.rpm                                                                                                                                  | 224 kB  00:00:04      (16/23): libtommath-0.42.0-4.el7.x86_64.rpm                                                                                                                                  |  35 kB  00:00:03      (17/23): python-ecdsa-0.11-4.el7.noarch.rpm                                                                                                                                  |  69 kB  00:00:02      (18/23): python-httplib2-0.9.1-2.1.el7.noarch.rpm                                                                                                                            | 115 kB  00:00:03      (19/23): python-paramiko-2.1.1-2.el7ae.noarch.rpm                                                                                                                            | 267 kB  00:00:03      (20/23): python-paramiko-2.1.1-4.el7.noarch.rpm                                                                                                                              | 268 kB  00:00:02      (21/23): python2-jmespath-0.9.0-4.el7ae.noarch.rpm                                                                                                                           |  39 kB  00:00:03      (22/23): python-passlib-1.6.5-1.1.el7.noarch.rpm                                                                                                                             | 488 kB  00:00:03      (23/23): sshpass-1.06-1.el7.x86_64.rpm                                                                                                                                       |  21 kB  00:00:02

Теперь посмотрим на структуру того, что у нас синхронизировалось. Внутри указанной для reposync директории была создана поддиректория с именем репозитория, а в нем — директория Packages c пакетами:

# ls -la /habr итого 0 drwxr-xr-x.  3 root root  44 Jan 16 15:29 . dr-xr-xr-x. 21 root root 273 Jan 16 11:00 .. drwxr-xr-x.  3 root root  22 Jan 16 15:29 rhel-7-server-ansible-2.4-rpms  # ls -la /habr/rhel-7-server-ansible-2.4-rpms/ итого 0 drwxr-xr-x. 3 root root 22 Jan 16 15:29 . drwxr-xr-x. 3 root root 44 Jan 16 15:29 .. drwxr-xr-x. 6 root root 42 Jan 16 15:29 Packages  # ls -la /habr/rhel-7-server-ansible-2.4-rpms/Packages/ итого 8 drwxr-xr-x. 6 root root   42 Jan 16 15:29 . drwxr-xr-x. 3 root root   22 Jan 16 15:29 .. drwxr-xr-x. 2 root root 4096 Jan 16 15:29 a drwxr-xr-x. 2 root root   90 Jan 16 15:29 l drwxr-xr-x. 2 root root 4096 Jan 16 15:30 p drwxr-xr-x. 2 root root   43 Jan 16 15:30 s

Нам остается только выполнить createrepo:

# createrepo -v /habr/rhel-7-server-ansible-2.4-rpms/ Spawning worker 0 with 23 pkgs Worker 0: reading Packages/a/ansible-2.4.0.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.1.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.2.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.3.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.4.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.5.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.6.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.0.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.1.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.2.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.3.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.4.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.5.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.6.0-1.el7ae.noarch.rpm Worker 0: reading Packages/l/libtomcrypt-1.17-23.el7.x86_64.rpm Worker 0: reading Packages/l/libtommath-0.42.0-4.el7.x86_64.rpm Worker 0: reading Packages/p/python-ecdsa-0.11-4.el7.noarch.rpm Worker 0: reading Packages/p/python-httplib2-0.9.1-2.1.el7.noarch.rpm Worker 0: reading Packages/p/python-paramiko-2.1.1-2.el7ae.noarch.rpm Worker 0: reading Packages/p/python-paramiko-2.1.1-4.el7.noarch.rpm Worker 0: reading Packages/p/python-passlib-1.6.5-1.1.el7.noarch.rpm Worker 0: reading Packages/p/python2-jmespath-0.9.0-4.el7ae.noarch.rpm Worker 0: reading Packages/s/sshpass-1.06-1.el7.x86_64.rpm Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Starting other db creation: Tue Jan 16 15:37:26 2024 Ending other db creation: Tue Jan 16 15:37:26 2024 Starting filelists db creation: Tue Jan 16 15:37:26 2024 Ending filelists db creation: Tue Jan 16 15:37:26 2024 Starting primary db creation: Tue Jan 16 15:37:26 2024 Ending primary db creation: Tue Jan 16 15:37:27 2024 Sqlite DBs complete

Теперь у нас есть работоспособный репозиторий, который мы можем опубликовать для других серверов через подходящий протокол (http, https, ftp). Посмотрим на состав файлов:

# ls -la /habr/rhel-7-server-ansible-2.4-rpms/ итого 4 drwxr-xr-x. 4 root root   38 Jan 16 15:37 . drwxr-xr-x. 3 root root   44 Jan 16 15:29 .. drwxr-xr-x. 6 root root   42 Jan 16 15:29 Packages drwxr-xr-x. 2 root root 4096 Jan 16 15:37 repodata  # ls -la /habr/rhel-7-server-ansible-2.4-rpms/repodata/ итого 320 drwxr-xr-x. 2 root root   4096 Jan 16 15:37 . drwxr-xr-x. 4 root root     38 Jan 16 15:37 .. -rw-r--r--. 1 root root 194421 Jan 16 15:37 5d3a98988d64c0fba42cf6f38c00cc7a56ece841967ad5c1b1f0e23c14c6dbb8-filelists.xml.gz -rw-r--r--. 1 root root   9455 Jan 16 15:37 74446747bb7badc70ec2d426db315fa40c2e4a9a6d24656d350b31c5f4a0b9e5-other.sqlite.bz2 -rw-r--r--. 1 root root  76944 Jan 16 15:37 9c3e51467bb460465294f072070df75f03c748e4a5a47bed869668eefbbc5d40-filelists.sqlite.bz2 -rw-r--r--. 1 root root  14000 Jan 16 15:37 ac4fd8f904f96e48a5a140819f4d6602251f2c155a18617568fb830298824dde-primary.sqlite.bz2 -rw-r--r--. 1 root root   5213 Jan 16 15:37 b24363dba2ecb22acf7afe41d8f79fb0ca33fad510b23c7d45336d687f1a6eac-other.xml.gz -rw-r--r--. 1 root root   5849 Jan 16 15:37 c335203528188fd8d50943a2ba2c4e1724460dbd1cebcc8c7c330b5ad22721c8-primary.xml.gz -rw-r--r--. 1 root root   2983 Jan 16 15:37 repomd.xml

Внутри repodata мы видим следующие файлы, каждый из которых содержит определенные данные:

  • primary.xml.gz — информация о каждом файле в репозитории: имя, версия, зависимости, время, размер и т. д. (обеспечивает работу yum info имя-пакета);

  • filelists.xml.gz  — информация о файлах и директориях внутри пакетов (обеспечивает работу yum provides имя-файла);

  • other.xml.gz  — информация об изменениях из RPM SPEC файлов для каждого пакета в репозитории;

  • *-.sqlite.bz2 — эта же информация, но в формате sqlite;

  • repomd.xml — индекс-файл всего репозитория.

Если оставить репозиторий как есть, то мы лишимся части важного функционала: возможности производить групповые инсталляции и проверять информацию о том, к какой Errata относится патч.

Переходим к демонстрации и создаем репозиторий для локального использования:

# cat /etc/yum.repos.d/habr.repo [rhel-7-habr] name = RHEL7-habr  baseurl = file:///habr/rhel-7-server-ansible-2.4-rpms enabled = 1 gpgcheck = 0

Теперь смотрим информацию об Errata:

# yum --disablerepo=* --enablerepo=rhel-7-habr updateinfo list available Loaded plugins: product-id, search-disabled-repos, subscription-manager rhel-7-habr                                                                                                                                                             | 2.9 kB  00:00:00      updateinfo list done

Ничего нет.

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

Синхронизация после просветления

Чего же нам не хватило и как сделать «правильное» зеркало?

Для начала нам нужно выполнить синхронизацию с ключами —download-metadata и —downloadcomps. Это позволит нам получить файлы comps.xml и updateinfo.xml.gz из оригинального репозитория:

# reposync --repoid=rhel-7-server-ansible-2.4-rpms --download-metadata --downloadcomps -p /habr/ (1/23): ansible-2.4.1.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:05      (2/23): ansible-2.4.0.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:06      (3/23): ansible-2.4.2.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:05      (4/23): ansible-2.4.3.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:05      (5/23): ansible-2.4.4.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:05      (6/23): ansible-2.4.5.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:05      (7/23): ansible-doc-2.4.0.0-1.el7ae.noarch.rpm                                                                                                                               | 751 kB  00:00:04      (8/23): ansible-2.4.6.0-1.el7ae.noarch.rpm                                                                                                                                   | 7.6 MB  00:00:04      (9/23): ansible-doc-2.4.1.0-1.el7ae.noarch.rpm                                                                                                                               | 752 kB  00:00:03      (10/23): ansible-doc-2.4.2.0-1.el7ae.noarch.rpm                                                                                                                              | 762 kB  00:00:03      (11/23): ansible-doc-2.4.4.0-1.el7ae.noarch.rpm                                                                                                                              | 763 kB  00:00:03      (12/23): ansible-doc-2.4.3.0-1.el7ae.noarch.rpm                                                                                                                              | 762 kB  00:00:03      (13/23): ansible-doc-2.4.6.0-1.el7ae.noarch.rpm                                                                                                                              | 763 kB  00:00:03      (14/23): ansible-doc-2.4.5.0-1.el7ae.noarch.rpm                                                                                                                              | 763 kB  00:00:04      (15/23): libtommath-0.42.0-4.el7.x86_64.rpm                                                                                                                                  |  35 kB  00:00:02      (16/23): libtomcrypt-1.17-23.el7.x86_64.rpm                                                                                                                                  | 224 kB  00:00:03      (17/23): python-ecdsa-0.11-4.el7.noarch.rpm                                                                                                                                  |  69 kB  00:00:03      (18/23): python-httplib2-0.9.1-2.1.el7.noarch.rpm                                                                                                                            | 115 kB  00:00:03      (19/23): python-paramiko-2.1.1-2.el7ae.noarch.rpm                                                                                                                            | 267 kB  00:00:03      (20/23): python-paramiko-2.1.1-4.el7.noarch.rpm                                                                                                                              | 268 kB  00:00:02      (21/23): python2-jmespath-0.9.0-4.el7ae.noarch.rpm                                                                                                                           |  39 kB  00:00:02      (22/23): python-passlib-1.6.5-1.1.el7.noarch.rpm                                                                                                                             | 488 kB  00:00:04      (23/23): sshpass-1.06-1.el7.x86_64.rpm                                                                                                                                       |  21 kB  00:00:02

Уже знакомое нам начало, когда внутри указанной директории была создана еще одна — с именем репозитория:

# ls -la /habr/ total 0 drwxr-xr-x.  3 root root  44 Jan 16 10:54 . dr-xr-xr-x. 20 root root 260 Jan 16 10:33 .. drwxr-xr-x.  3 root root 146 Jan 16 10:54 rhel-7-server-ansible-2.4-rpms

Но ее содержимое немного отличается:

# ls -la /habr/rhel-7-server-ansible-2.4-rpms/ total 20 drwxr-xr-x. 3 root root   146 Jan 16 10:54 . drwxr-xr-x. 3 root root    44 Jan 16 10:54 .. drwxr-xr-x. 6 root root    42 Jan 16 10:54 Packages -rw-r--r--. 1 root root   124 Jan 16 10:54 comps.xml -rw-r--r--. 1 root root 10638 Jan 16 10:54 eb6cb5ebcd095094b88bec99ab6557daa2c0dc6a305c540e7e6267298376687e-updateinfo.xml.gz -rw-r--r--. 1 root root  2155 Jan 16 10:54 productid

Что нового появилось:

  • comps.xml — файл, описывающий группы, в которые могут быть объединены пакеты;

  • *-updateinfo.xml.gz — файл, описывающий Errata, к которым относятся пакеты;

  • productid — сертификат, описывающий продукт, распространяемый через данный репозиторий.    

Давайте заглянем в файл productid при помощи специальной утилиты и посмотрим, что данный файл описывает:

# rct cat-cert /habr/rhel-7-server-ansible-2.4-rpms/productid   +-------------------------------------------+ Product Certificate +-------------------------------------------+  Certificate: Path: /habr/rhel-7-server-ansible-2.4-rpms/productid Version: 1.0 Serial: xxxxxxxxxxxxxxxxxxxxx Start Date: 2017-09-13 10:33:12+00:00 End Date: 2037-09-08 10:33:12+00:00  Subject: CN: Red Hat Product ID [xxxxxxxxxxxxxxxxxxxxx]  Issuer: C: US CN: Red Hat Entitlement Product Authority O: Red Hat, Inc. OU: Red Hat Network ST: North Carolina emailAddress: ca-support@redhat.com  Product: ID: 408 Name: Red Hat Ansible Engine Version: 2.4 Arch: x86_64 Tags: ansible-2,ansible-2.4 Brand Type:  Brand Name: 

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

# cat comps.xml  <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd"> <comps />

Если бы мы изначально взяли более крупный репозиторий (например, rhel-7-server-rpms), то увидели бы там долгожданную информацию о группах: 

# grep  "<id>" /xxxxxxxxxxxx/x86_64/rhel-7-server-rpms/comps.xml      <id>virtualization-client</id>     <id>large-systems</id>     <id>mariadb-client</id>     <id>virtualization-hypervisor</id>     <id>print-server</id>     <id>development</id>     <id>backup-client</id>     <id>web-server</id>     <id>x11</id>     <id>directory-server</id>     <id>console-internet</id>     <id>dns-server</id>     <id>legacy-x</id>     <id>hardware-monitoring</id>     <id>debugging</id>     <id>postgresql</id>     <id>mainframe-access</id>     <id>postgresql-client</id>     <id>dial-up</id>     <id>smart-card</id>     <id>guest-agents</id>     <id>file-server</id>     <id>load-balancer</id>     <id>legacy-unix</id>     <id>kde-desktop</id>     <id>ftp-server</id>     <id>infiniband</id>     <id>system-admin-tools</id> --------- cut ---------------------

Теперь, когда мы узнали о содержимом репозиториев чуть больше, давайте создадим наш репозиторий почти привычным способом, но с ключом -g comps.xml:

# createrepo -v /habr/rhel-7-server-ansible-2.4-rpms/ -g comps.xml

Таким образом, мы добавим информацию о группах:

# createrepo -v --update -g comps.xml /habr/rhel-7-server-ansible-2.4-rpms/ Scanning old repo data Could not find valid repo at: /habr/rhel-7-server-ansible-2.4-rpms/ Spawning worker 0 with 23 pkgs Worker 0: reading Packages/a/ansible-2.4.0.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.1.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.2.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.3.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.4.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.5.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-2.4.6.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.0.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.1.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.2.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.3.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.4.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.5.0-1.el7ae.noarch.rpm Worker 0: reading Packages/a/ansible-doc-2.4.6.0-1.el7ae.noarch.rpm Worker 0: reading Packages/l/libtomcrypt-1.17-23.el7.x86_64.rpm Worker 0: reading Packages/l/libtommath-0.42.0-4.el7.x86_64.rpm Worker 0: reading Packages/p/python-ecdsa-0.11-4.el7.noarch.rpm Worker 0: reading Packages/p/python-httplib2-0.9.1-2.1.el7.noarch.rpm Worker 0: reading Packages/p/python-paramiko-2.1.1-2.el7ae.noarch.rpm Worker 0: reading Packages/p/python-paramiko-2.1.1-4.el7.noarch.rpm Worker 0: reading Packages/p/python-passlib-1.6.5-1.1.el7.noarch.rpm Worker 0: reading Packages/p/python2-jmespath-0.9.0-4.el7ae.noarch.rpm Worker 0: reading Packages/s/sshpass-1.06-1.el7.x86_64.rpm Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Starting other db creation: Tue Jan 16 16:47:12 2024 Ending other db creation: Tue Jan 16 16:47:12 2024 Starting filelists db creation: Tue Jan 16 16:47:12 2024 Ending filelists db creation: Tue Jan 16 16:47:13 2024 Starting primary db creation: Tue Jan 16 16:47:13 2024 Ending primary db creation: Tue Jan 16 16:47:13 2024 Sqlite DBs complete

Посмотрим на созданные папки и файлы. В самой папке репозитория всё по-прежнему:

# ls -la /habr/rhel-7-server-ansible-2.4-rpms total 24 drwxr-xr-x. 4 root root   162 Jan 16 16:47 . drwxr-xr-x. 3 root root    44 Jan 16 10:54 .. drwxr-xr-x. 6 root root    42 Jan 16 10:54 Packages -rw-r--r--. 1 root root   124 Jan 16 10:54 comps.xml -rw-r--r--. 1 root root 10638 Jan 16 10:54 eb6cb5ebcd095094b88bec99ab6557daa2c0dc6a305c540e7e6267298376687e-updateinfo.xml.gz -rw-r--r--. 1 root root  2155 Jan 16 10:54 productid drwxr-xr-x. 2 root root  4096 Jan 16 16:47 repodata

А в repodata у нас появились файлы comps (выделены жирным). Это говорит о том, что теперь список групп будет доступен (если бы он был):

# ls -la /habr/rhel-7-server-ansible-2.4-rpms/repodata/ total 328 drwxr-xr-x. 2 root root   4096 Jan 16 16:47 . drwxr-xr-x. 4 root root    162 Jan 16 16:47 .. -rw-r--r--. 1 root root 194421 Jan 16 16:47 5d3a98988d64c0fba42cf6f38c00cc7a56ece841967ad5c1b1f0e23c14c6dbb8-filelists.xml.gz -rw-r--r--. 1 root root   9455 Jan 16 16:47 74446747bb7badc70ec2d426db315fa40c2e4a9a6d24656d350b31c5f4a0b9e5-other.sqlite.bz2 -rw-r--r--. 1 root root  76944 Jan 16 16:47 9c3e51467bb460465294f072070df75f03c748e4a5a47bed869668eefbbc5d40-filelists.sqlite.bz2 -rw-r--r--. 1 root root    124 Jan 16 16:47 a27718cc28ec6d71432e0ef3e6da544b7f9d93f6bb7d0a55aacd592d03144b70-comps.xml -rw-r--r--. 1 root root  14000 Jan 16 16:47 ac4fd8f904f96e48a5a140819f4d6602251f2c155a18617568fb830298824dde-primary.sqlite.bz2 -rw-r--r--. 1 root root   5213 Jan 16 16:47 b24363dba2ecb22acf7afe41d8f79fb0ca33fad510b23c7d45336d687f1a6eac-other.xml.gz -rw-r--r--. 1 root root   5849 Jan 16 16:47 c335203528188fd8d50943a2ba2c4e1724460dbd1cebcc8c7c330b5ad22721c8-primary.xml.gz -rw-r--r--. 1 root root    133 Jan 16 16:47 e1211eb62da7048afd2c51cba1e3e0038f4a90ccadb099ce6092050fb276f5d2-comps.xml.gz -rw-r--r--. 1 root root   3681 Jan 16 16:47 repomd.xml

Но у нас по-прежнему нет информации об Errata:

# yum --disablerepo=* --enablerepo=rhel-7-habr updateinfo list available Loaded plugins: product-id, search-disabled-repos, subscription-manager rhel-7-habr                                                                                                                                                             | 2.9 kB  00:00:00      updateinfo list done

Для решения этой задачи нужно выполнить:

# gzip eb6cb5ebcd095094b88bec99ab6557daa2c0dc6a305c540e7e6267298376687e-updateinfo.xml.gz  # cp eb6cb5ebcd095094b88bec99ab6557daa2c0dc6a305c540e7e6267298376687e-updateinfo.xml repodata/updateinfo.xml  # modifyrepo repodata/updateinfo.xml repodata/ Wrote: /habr/rhel-7-server-ansible-2.4-rpms/repodata/updateinfo.xml.gz            type = updateinfo        location = repodata/eb89e725f7b8ee97b7e6b1f37bfdcfa2193136a7bb6b3645c3e2581388053f8a-updateinfo.xml.gz        checksum = eb89e725f7b8ee97b7e6b1f37bfdcfa2193136a7bb6b3645c3e2581388053f8a       timestamp = 1705441735   open-checksum = f157fad9b0976407328d65ec66466d3a1577fe0ab22a6117898b1ce429370e99 Wrote: /habr/rhel-7-server-ansible-2.4-rpms/repodata/repomd.xml 

Содержимое repodata обновилось, и появился файл *-updateinfo.xml.gz:

# ls -la /habr/rhel-7-server-ansible-2.4-rpms/repodata/ total 388 drwxr-xr-x. 2 root root   4096 Jan 16 16:48 . drwxr-xr-x. 4 root root    159 Jan 16 16:47 .. -rw-r--r--. 1 root root 194421 Jan 16 16:47 5d3a98988d64c0fba42cf6f38c00cc7a56ece841967ad5c1b1f0e23c14c6dbb8-filelists.xml.gz -rw-r--r--. 1 root root   9455 Jan 16 16:47 74446747bb7badc70ec2d426db315fa40c2e4a9a6d24656d350b31c5f4a0b9e5-other.sqlite.bz2 -rw-r--r--. 1 root root  76944 Jan 16 16:47 9c3e51467bb460465294f072070df75f03c748e4a5a47bed869668eefbbc5d40-filelists.sqlite.bz2 -rw-r--r--. 1 root root    124 Jan 16 16:47 a27718cc28ec6d71432e0ef3e6da544b7f9d93f6bb7d0a55aacd592d03144b70-comps.xml -rw-r--r--. 1 root root  14000 Jan 16 16:47 ac4fd8f904f96e48a5a140819f4d6602251f2c155a18617568fb830298824dde-primary.sqlite.bz2 -rw-r--r--. 1 root root   5213 Jan 16 16:47 b24363dba2ecb22acf7afe41d8f79fb0ca33fad510b23c7d45336d687f1a6eac-other.xml.gz -rw-r--r--. 1 root root   5849 Jan 16 16:47 c335203528188fd8d50943a2ba2c4e1724460dbd1cebcc8c7c330b5ad22721c8-primary.xml.gz -rw-r--r--. 1 root root    133 Jan 16 16:47 e1211eb62da7048afd2c51cba1e3e0038f4a90ccadb099ce6092050fb276f5d2-comps.xml.gz -rw-r--r--. 1 root root  10617 Jan 16 16:48 eb89e725f7b8ee97b7e6b1f37bfdcfa2193136a7bb6b3645c3e2581388053f8a-updateinfo.xml.gz -rw-r--r--. 1 root root   4098 Jan 16 16:48 repomd.xml -rw-r--r--. 1 root root  41064 Jan 16 16:48 updateinfo.xml

И теперь всё заработало:

# yum --disablerepo=* --enablerepo=rhel-7-habr updateinfo list available Loaded plugins: product-id, search-disabled-repos, subscription-manager rhel-7-habr                                                                                                                                                                  | 4.0 kB  00:00:00      (1/2): rhel-7-habr/group_gz                                                                                                                                                  |  133 B  00:00:00      (2/2): rhel-7-habr/updateinfo                                                                                                                                                |  10 kB  00:00:00      RHEA-2017:2806 enhancement   ansible-2.4.0.0-1.el7ae.noarch RHBA-2017:3119 bugfix        ansible-2.4.1.0-1.el7ae.noarch RHBA-2017:3406 bugfix        ansible-2.4.2.0-1.el7ae.noarch RHBA-2018:0283 bugfix        ansible-2.4.3.0-1.el7ae.noarch RHBA-2018:1212 bugfix        ansible-2.4.4.0-1.el7ae.noarch RHSA-2018:2022 Moderate/Sec. ansible-2.4.5.0-1.el7ae.noarch RHSA-2018:2152 Moderate/Sec. ansible-2.4.6.0-1.el7ae.noarch RHEA-2017:2806 enhancement   ansible-doc-2.4.0.0-1.el7ae.noarch RHBA-2017:3119 bugfix        ansible-doc-2.4.1.0-1.el7ae.noarch RHBA-2017:3406 bugfix        ansible-doc-2.4.2.0-1.el7ae.noarch RHBA-2018:0283 bugfix        ansible-doc-2.4.3.0-1.el7ae.noarch RHBA-2018:1212 bugfix        ansible-doc-2.4.4.0-1.el7ae.noarch RHSA-2018:2022 Moderate/Sec. ansible-doc-2.4.5.0-1.el7ae.noarch RHSA-2018:2152 Moderate/Sec. ansible-doc-2.4.6.0-1.el7ae.noarch RHEA-2017:2806 enhancement   libtomcrypt-1.17-23.el7.x86_64 RHEA-2017:2806 enhancement   libtommath-0.42.0-4.el7.x86_64 RHEA-2017:2806 enhancement   python-ecdsa-0.11-4.el7.noarch RHEA-2017:2806 enhancement   python-httplib2-0.9.1-2.1.el7.noarch RHEA-2017:2806 enhancement   python-paramiko-2.1.1-2.el7ae.noarch RHSA-2018:1213 Low/Sec.      python-paramiko-2.1.1-4.el7.noarch RHEA-2017:2806 enhancement   python-passlib-1.6.5-1.1.el7.noarch RHBA-2017:3119 bugfix        python2-jmespath-0.9.0-4.el7ae.noarch RHEA-2017:2806 enhancement   sshpass-1.06-1.el7.x86_64 updateinfo list done

Возвращаемся и примеряем полученную информацию на RHEL8 и 9.

Помним две вещи:

1. При использовании reposync нам нужно использовать ключ —download-metadata.

2. В таком случае выполнять createrepo не требуется, так как reposync выкачает всё.

Теперь примеры. Если мы работаем без ключа —download-metadata:

# reposync  --repoid=ansible-2.8-for-rhel-8-x86_64-rpms  -p /habr/ Failed to set locale, defaulting to C.UTF-8 Updating Subscription Management repositories. Red Hat Ansible Engine 2.8 for RHEL 8 x86_64 (RPMs)                                                                                                                 2.2 kB/s | 4.0 kB     00:01     (1/18): sshpass-1.06-3.el8ae.x86_64.rpm                                                                                                                             8.3 kB/s |  27 kB     00:03     (2/18): ansible-2.8.1-1.el8ae.noarch.rpm                                                                                                                            2.9 MB/s |  15 MB     00:05     (3/18): ansible-2.8.0-1.el8ae.noarch.rpm                                                                                                                            2.8 MB/s |  15 MB     00:05     (4/18): ansible-2.8.2-1.el8ae.noarch.rpm                                                                                                                            3.0 MB/s |  15 MB     00:04     (5/18): ansible-2.8.4-1.el8ae.noarch.rpm                                                                                                                            4.4 MB/s |  15 MB     00:03     (6/18): ansible-2.8.3-1.el8ae.noarch.rpm                                                                                                                            4.2 MB/s |  15 MB     00:03     (7/18): ansible-2.8.7-1.el8ae.noarch.rpm                                                                                                                            4.8 MB/s |  15 MB     00:03     (8/18): ansible-2.8.6-1.el8ae.noarch.rpm                                                                                                                            4.5 MB/s |  15 MB     00:03     (9/18): ansible-2.8.5-2.el8ae.noarch.rpm                                                                                                                            3.5 MB/s |  15 MB     00:04     (10/18): ansible-2.8.10-1.el8ae.noarch.rpm                                                                                                                          5.2 MB/s |  15 MB     00:02     (11/18): ansible-2.8.8-1.el8ae.noarch.rpm                                                                                                                           4.9 MB/s |  15 MB     00:02     (12/18): ansible-2.8.11-1.el8ae.noarch.rpm                                                                                                                          4.9 MB/s |  15 MB     00:02     (13/18): ansible-2.8.12-1.el8ae.noarch.rpm                                                                                                                          6.7 MB/s |  15 MB     00:02     (14/18): ansible-2.8.13-1.el8ae.noarch.rpm                                                                                                                          5.2 MB/s |  15 MB     00:02     (15/18): ansible-2.8.15-1.el8ae.noarch.rpm                                                                                                                          5.6 MB/s |  15 MB     00:02     (16/18): ansible-2.8.16-1.el8ae.noarch.rpm                                                                                                                          5.4 MB/s |  15 MB     00:02     (17/18): ansible-2.8.17-1.el8ae.noarch.rpm                                                                                                                          4.6 MB/s |  15 MB     00:03     (18/18): ansible-2.8.18-1.el8ae.noarch.rpm                                                                                                                          3.5 MB/s |  15 MB     00:04      # ls -la /habr/ total 0 drwxr-xr-x.  3 root root  48 Jan 17 02:26 . dr-xr-xr-x. 20 root root 261 Jan 17 02:22 .. drwxr-xr-x.  3 root root  22 Jan 17 02:26 ansible-2.8-for-rhel-8-x86_64-rpms  ls -la /habr/ansible-2.8-for-rhel-8-x86_64-rpms/ total 0 drwxr-xr-x. 3 root root 22 Jan 17 02:26 . drwxr-xr-x. 3 root root 48 Jan 17 02:26 .. drwxr-xr-x. 4 root root 24 Jan 17 02:26 Packages

А если используем его, то видим вот такую картину:

reposync  --repoid=ansible-2.8-for-rhel-8-x86_64-rpms --download-metadata -p /habr/ Failed to set locale, defaulting to C.UTF-8 Updating Subscription Management repositories. Red Hat Ansible Engine 2.8 for RHEL 8 x86_64 (RPMs)                                                                                                                 2.3 kB/s | 4.0 kB     00:01     Red Hat Ansible Engine 2.8 for RHEL 8 x86_64 (RPMs)                                                                                                                 389 kB/s | 2.0 MB     00:05     (1/18): sshpass-1.06-3.el8ae.x86_64.rpm                                                                                                                             8.8 kB/s |  27 kB     00:03     (2/18): ansible-2.8.0-1.el8ae.noarch.rpm                                                                                                                            3.4 MB/s |  15 MB     00:04     (3/18): ansible-2.8.1-1.el8ae.noarch.rpm                                                                                                                            3.3 MB/s |  15 MB     00:04     (4/18): ansible-2.8.2-1.el8ae.noarch.rpm                                                                                                                            4.1 MB/s |  15 MB     00:03     (5/18): ansible-2.8.3-1.el8ae.noarch.rpm                                                                                                                            5.1 MB/s |  15 MB     00:02     (6/18): ansible-2.8.4-1.el8ae.noarch.rpm                                                                                                                            4.0 MB/s |  15 MB     00:03     (7/18): ansible-2.8.5-2.el8ae.noarch.rpm                                                                                                                            6.1 MB/s |  15 MB     00:02     (8/18): ansible-2.8.6-1.el8ae.noarch.rpm                                                                                                                            5.0 MB/s |  15 MB     00:02     (9/18): ansible-2.8.7-1.el8ae.noarch.rpm                                                                                                                            6.7 MB/s |  15 MB     00:02     (10/18): ansible-2.8.8-1.el8ae.noarch.rpm                                                                                                                           5.5 MB/s |  15 MB     00:02     (11/18): ansible-2.8.11-1.el8ae.noarch.rpm                                                                                                                          5.1 MB/s |  15 MB     00:02     (12/18): ansible-2.8.10-1.el8ae.noarch.rpm                                                                                                                          4.1 MB/s |  15 MB     00:03     (13/18): ansible-2.8.12-1.el8ae.noarch.rpm                                                                                                                          6.5 MB/s |  15 MB     00:02     (14/18): ansible-2.8.13-1.el8ae.noarch.rpm                                                                                                                          6.1 MB/s |  15 MB     00:02     (15/18): ansible-2.8.15-1.el8ae.noarch.rpm                                                                                                                          6.0 MB/s |  15 MB     00:02     (16/18): ansible-2.8.16-1.el8ae.noarch.rpm                                                                                                                          4.8 MB/s |  15 MB     00:03     (17/18): ansible-2.8.17-1.el8ae.noarch.rpm                                                                                                                          5.5 MB/s |  15 MB     00:02     (18/18): ansible-2.8.18-1.el8ae.noarch.rpm                                                                                                                          5.5 MB/s |  15 MB     00:02      # ls -la /habr/ansible-2.8-for-rhel-8-x86_64-rpms/ total 4 drwxr-xr-x. 4 root root   38 Jan 17 02:21 . drwxr-xr-x. 3 root root   48 Jan 17 02:21 .. drwxr-xr-x. 4 root root   24 Jan 17 02:21 Packages drwxr-xr-x. 2 root root 4096 Jan 17 02:21 repodata  # ls -la /habr/ansible-2.8-for-rhel-8-x86_64-rpms/repodata/ total 2032 drwxr-xr-x. 2 root root    4096 Jan 17 02:21 . drwxr-xr-x. 4 root root      38 Jan 17 02:21 .. -rw-r--r--. 1 root root    3692 Jan 17 02:21 3a043c6ae0d22cb4fb861f6d56899bfbb361fc943c7636ea303b399aa4341106-primary.xml.gz -rw-r--r--. 1 root root    2139 Jan 17 02:21 50b9a47d-c1b0-4bb1-bc44-1a8c9d9d60f3 -rw-r--r--. 1 root root   13854 Jan 17 02:21 5d2bf6693fa72826821286a65c1977320c0f75c94440391799a1cc23caef2774-primary.sqlite.bz2 -rw-r--r--. 1 root root 1052960 Jan 17 02:21 7c580f8bd872b59639aa04280dd3818115ad10c3eb8fea8c1ce924b27ad9c501-filelists.xml.gz -rw-r--r--. 1 root root     124 Jan 17 02:21 a27718cc28ec6d71432e0ef3e6da544b7f9d93f6bb7d0a55aacd592d03144b70-comps.xml -rw-r--r--. 1 root root   35694 Jan 17 02:21 af5e04be034d62dd035f39b31eb60e1f1b8a26b78f5a91edb9c80a13ea86fdb3-other.sqlite.bz2 -rw-r--r--. 1 root root  922059 Jan 17 02:21 b728eb62aa7e4f6d9ddcef3aee6fade1d89c921323f7f486edb48e629828ccbc-filelists.sqlite.bz2 -rw-r--r--. 1 root root   10323 Jan 17 02:21 d37c42017eefb515ac68f1c14bbe6024d051907690b93a9abf90fee70a54fe58-other.xml.gz -rw-r--r--. 1 root root    5130 Jan 17 02:21 ecddb990a73ab03a16976494303a3ba388dffa64fd0aab6bf670e1139c3fd1a0-updateinfo.xml.gz -rw-r--r--. 1 root root    4127 Jan 17 02:21 repomd.xml

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


ссылка на оригинал статьи https://habr.com/ru/articles/791974/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *