Репозитории программного обеспечения - это коллекции программных пакетов, которые могут быть использованы пользователями для загрузки, установки и обновления программных пакетов на своей системе. Обычно эти репозитории расположены в интернете, чтобы к ним могли получить доступ многие пользователи. Менеджеры пакетов, такие как Yum, поддерживают список репозиториев программного обеспечения для загрузки и установки пакетов на вашу систему. Иногда вам может понадобиться создать и поддерживать локальный репозиторий программного обеспечения в вашей системе и разрешить доступ к нему другим пользователям в вашей сети.
Это необходимо, в основном, если вам нужно поддерживать репозиторий во внутренней сети организации, или ваше программное обеспечение должно быть изолировано от внешней сети. Такая конфигурация не требует подключения к Интернету, поскольку пользователи могут легко устанавливать программные пакеты через вашу интрасеть/LAN. В этой статье мы узнаем, как настроить локальный репозиторий yum в CentOS или RHEL.
Yum - это популярный менеджер пакетов для систем CentOS/RHEL. Он поддерживает список интернет-репозиториев для легкой загрузки и установки пакетов. Но вы можете настроить его на получение пакетов и из вашего локального репозитория.
Как установить локальный репозиторий Yum в CentOS/RHEL
Здесь описаны шаги по настройке локального репозитория yum в CentOS/RHEL. Наш репозиторий yum будет размещен на HTTP-сервере NGINX в системе CentOS, а наш клиент также будет системой CentOS.
1. Установите сервер NGINX
Сначала мы установим сервер NGINX для размещения нашего репозитория. Откройте терминал и выполните следующую команду, чтобы сделать то же самое из репозитория EPEL с помощью менеджера Yum.
1 2 | yum install epel-release yum install nginx |
После установки сервера NGINX вы можете запустить его в первый раз и включить его автоматический запуск при перезагрузке системы, используя следующие команды.
1 2 3 | systemctl start nginx systemctl enable nginx systemctl status nginx |
Далее необходимо открыть порты 80 и 443 для разрешения веб-трафика на сервер NGINX, обновить службу брандмауэра для разрешения входящего HTTP и HTTPS, используя следующие команды.
1 2 3 | firewall-cmd --zone=public --permanent --add-service=http firewall-cmd --zone=public --permanent --add-service=https firewall-cmd --reload |
После установки сервера NGINX вы можете протестировать его, открыв веб-браузер и перейдя по следующему URL. Замените SERVER_DOMAIN_NAME_OR_IP на IP-адрес или доменное имя вашего сервера.
http://[SERVER_IP]
2. Создание локального репозитория Yum
Далее необходимо выполнить следующую команду для создания, настройки и управления локальным репозиторием.
1 | yum install createrepo yum-utils |
Далее создайте необходимые каталоги, в которых будут храниться пакеты yum.
1 | mkdir -p /var/www/html/repos/{base,centosplus,extras,updates} |
Далее выполним следующую команду для синхронизации репозиториев CentOS Yum с локальными каталогами.
Для CentOS 7
1 2 3 4 | reposync -g -l -d -m --repoid=base --newest-only --download-metadata --download_path=/var/www/html/repos/ reposync -g -l -d -m --repoid=centosplus --newest-only --download-metadata --download_path=/var/www/html/repos/ reposync -g -l -d -m --repoid=extras --newest-only --download-metadata --download_path=/var/www/html/repos/ reposync -g -l -d -m --repoid=updates --newest-only --download-metadata --download_path=/var/www/html/repos/ |
Ниже приведено краткое объяснение различных опций, используемых в вышеуказанных командах.
- -g - включить удаление пакетов, которые не прошли проверку подписи GPG после загрузки
- -l - включить поддержку плагинов yum.
- -d - включить удаление локальных пакетов, больше не присутствующих в репозитории.
- -m - включить загрузку файлов comps.xml.
- --repoid - указать идентификатор репозитория.
- --newest-only - указать reposync извлекать только пакеты последней версии.
- --download-metadata - включить загрузку всех метаданных, не используемых по умолчанию.
- --download_path - укажите путь для загрузки пакетов.
Для CentOS 8
1 2 3 4 | dnf reposync --delete --remote-time --download-metadata --repo=baseos -p /var/www/html/repos/ dnf reposync --delete --remote-time --download-metadata --repo=appstream -p /var/www/html/repos/ dnf reposync --delete --remote-time --download-metadata --repo=extras -p /var/www/html/repos/ dnf reposync --delete --remote-time --download-metadata --repo=extras-common -p /var/www/html/repos/ |
Затем выполните следующую команду для проверки локальных каталогов, чтобы убедиться, что все пакеты синхронизированы локально.
1 2 3 4 5 6 7 8 | ls -l /var/www/html/repos/base/ ls -l /var/www/html/repos/base/Packages/ ls -l /var/www/html/repos/centosplus/ ls -l /var/www/html/repos/centosplus/Packages/ ls -l /var/www/html/repos/extras/ ls -l /var/www/html/repos/extras/Packages/ ls -l /var/www/html/repos/updates/ ls -l /var/www/html/repos/updates/Packages/ |
Далее создайте новые реподанные для локальных репозиториев, выполнив следующие команды, где флаг -g используется для обновления информации о группе пакетов с помощью XML-файла.
1 2 3 4 | createrepo -g comps.xml /var/www/html/repos/base/ createrepo -g comps.xml /var/www/html/repos/centosplus/ createrepo -g comps.xml /var/www/html/repos/extras/ createrepo -g comps.xml /var/www/html/repos/updates/ |
Далее нам нужно создать серверный блок в NGINX, который будет отвечать на запросы пакетов и репозиториев.
1 | sudo nano /etc/nginx/conf.d/repos.conf |
1 2 3 4 5 6 7 8 9 | server { listen 80; server_name <strong>[server_name_or_ip]</strong>; root /var/www/html/repos; location / { index index.php index.html index.htm; autoindex on; #enable listing of directory index } } |
Перезапустите сервер NGINX, чтобы применить изменения. Откройте браузер и перейдите на сайт http://[server_ip].
3. Создание задания Cron для синхронизации и создания репозиториев
Мы создадим задание cron, которое будет автоматически синхронизировать ваши локальные репозитории с официальными репозиториями CentOS, загружать последние обновления и патчи безопасности.
1 | sudo nano /etc/cron.daily/update-localrepos |
Добавьте следующие строки в вышеуказанный пустой файл скрипта.
1 2 3 4 5 6 7 8 | #!/bin/bash ##укажите все локальные репозитории в одной переменной LOCAL_REPOS="base centosplus extras updates" ## цикл для обновления репозиториев по одному за раз for REPO in ${LOCAL_REPOS}; do reposync -g -l -d -m --repoid=$REPO --newest-only --download-metadata --download_path=/var/www/html/repos/ createrepo -g comps.xml /var/www/html/repos/$REPO/ done |
Сохраните и выйдите из файла. Выполните следующую команду, чтобы сделать его исполняемым.
1 | chmod 755 /etc/cron.daily/update-localrepos |
Теперь этот скрипт будет автоматически выполняться ежедневно.
4. Установка локального репозитория Yum на клиенте
Вам необходимо выполнить следующие шаги на клиентской системе (не на сервере). Для этого добавьте локальный репозиторий в конфигурацию Yum.
1 | sudo nano /etc/yum.repos.d/local-repos.repo |
Добавьте в него следующие строки. Замените часть, выделенную жирным шрифтом, на IP-адрес или доменное имя вашего сервера.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [local-base] name=CentOS Base baseurl=http://[server_ip]/base/ gpgcheck=0 enabled=1 [local-centosplus] name=CentOS CentOSPlus baseurl=http://[server_ip]/centosplus/ gpgcheck=0 enabled=1 [local-extras] name=CentOS Extras baseurl=http://[server_ip]/extras/ gpgcheck=0 enabled=1 [local-updates] name=CentOS Updates baseurl=http://[server_ip]/updates/ gpgcheck=0 enabled=1 |
Сохраните изменения и выйдите из файла.
Выполните следующую команду для просмотра локальных репозиториев в списке доступных репозиториев на клиентских машинах.
1 | yum repolist |
ИЛИ
1 | yum repolist all |
Вы увидите список доступных репозиториев в вашей системе.