Как настроить локальный репозиторий HTTP Yum на CentOS 7

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

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

Однако вы можете создать и настроить локальный репозиторий на своем компьютере и получить доступ к нему как одному пользователю или разрешить доступ другим компьютерам в LAN (локальной сети).

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

В этой статье мы расскажем, как настроить локальный веб-сервер YUM-хранилища через HTTP (Nginx) на CentOS 7 VPS, а также покажем, как найти и установить пакеты программного обеспечения на клиентских компьютерах CentOS 7.

Наша тестовая среда

Yum HTTP Repository Server:	CentOS 7 [192.168.0.100]
Client Machine:		CentOS 7 [192.168.0.101]

Шаг 1. Установка веб-сервера Nginx

1. Сначала запустите установку HTTP-сервера Nginx из репозитория EPEL с помощью диспетчера пакетов YUM следующим образом:

# yum install epel-release
# yum install nginx

2. После того как вы установили веб-сервер Nginx, вы можете запустить его в первый раз и включить его для автоматического запуска при загрузке системы.

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

3. Затем вам нужно открыть порты 80 и 443, чтобы разрешить веб-трафик службе Nginx, обновить правила брандмауэра системы, чтобы разрешить входящие пакеты по HTTP и HTTPS, используя приведенные ниже команды:

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent --add-service=https
# firewall-cmd --reload

4. Теперь вы можете убедиться, что ваш сервер Nginx поднят и запущен, используя следующий URL-адрес; если вы видите веб-страницу Nginx по умолчанию, все хорошо.

http://SERVER_DOMAIN_NAME_OR_IP

Шаг 2: Создайте локальный репозиторий Yum

5. На этом этапе вам необходимо установить необходимые пакеты для создания, настройки и управления локальным репозиторием.

# yum install createrepo  yum-utils

6. Затем создайте необходимые каталоги (репозитории yum), которые будут хранить пакеты и любую связанную с ними информацию.

# mkdir -p /var/www/html/repos/{base,centosplus,extras,updates}

7. Затем используйте инструмент reposync для синхронизации репозиториев CentOS YUM с локальными каталогами, как показано ниже:

# 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/

Пример вывода:

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.fibergrid.in
* epel: mirror.xeonbd.com
* extras: mirrors.fibergrid.in
* updates: mirrors.fibergrid.in
base/7/x86_64/group                                                    | 891 kB  00:00:02
No Presto metadata available for base
(1/9911): 389-ds-base-snmp-1.3.7.5-18.el7.x86_64.rpm                   | 163 kB  00:00:02
(2/9911): 389-ds-base-devel-1.3.7.5-18.el7.x86_64.rpm                  | 267 kB  00:00:02
(3/9911): ElectricFence-2.2.2-39.el7.i686.rpm                          |  35 kB  00:00:00
(4/9911): ElectricFence-2.2.2-39.el7.x86_64.rpm                        |  35 kB  00:00:00
(5/9911): 389-ds-base-libs-1.3.7.5-18.el7.x86_64.rpm                   | 695 kB  00:00:04
(6/9911): GConf2-devel-3.2.6-8.el7.i686.rpm                            | 110 kB  00:00:00
(7/9911): GConf2-devel-3.2.6-8.el7.x86_64.rpm                          | 110 kB  00:00:00
(8/9911): GConf2-3.2.6-8.el7.i686.rpm                                  | 1.0 MB  00:00:06

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/

9. Теперь создайте новую реподату для локальных репозиториев, запустив следующие команды, где флаг -g используется для обновления информации о группе пакетов с использованием указанного XML-файла.

# 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/

10. Чтобы включить просмотр репозиториев и пакетов в них, через веб-браузер создайте блок сервера Nginx, который указывает на корень ваших репозиториев, как показано.

# vim /etc/nginx/conf.d/repos.conf

Добавьте следующую конфигурацию в файл repos.conf.

server {
listen   80;
server_name  repos.test.lab;	#change  test.lab to your real domain
root   /var/www/html/repos;
location / {
index  index.php index.html index.htm;
autoindex on;	#enable listing of directory index
}
}

Сохраните файл и закройте его.

11. Затем перезапустите сервер Nginx и просмотрите репозитории из веб-браузера, используя следующий URL-адрес.

http://repos.test.lab

Шаг 3. Создание задания Cron для синхронизации и создания репозиториев

12. Затем добавьте задание cron, которое автоматически синхронизирует ваши локальные репозитории с официальными репозиториями CentOS, чтобы захватить обновления и исправления безопасности.

# vim /etc/cron.daily/update-localrepos

Добавьте эти команды в скрипт.

#!/bin/bash
##specify all local repositories in a single variable
LOCAL_REPOS=”base centosplus extras updates”
##a loop to update repos one at a time
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

Сохраните скрипт и закройте его и установите для него соответствующие разрешения.

# chmod 755 /etc/cron.daily/update-localrepos

Шаг 4: Настройка локального репозитория Yum на клиентских машинах

13. Теперь на ваших клиентских компьютерах CentOS добавьте локальные репозитории в конфигурацию YUM.

# vim /etc/yum.repos.d/local-repos.repo

Скопируйте и вставьте конфигурацию ниже в файл local-repos.repo (внесите необходимые изменения).

[local-base]
name=CentOS Base
baseurl=http://repos.test.lab/base/
gpgcheck=0
enabled=1
[local-centosplus]
name=CentOS CentOSPlus
baseurl=http://repos.test.lab/centosplus/
gpgcheck=0
enabled=1
[local-extras]
name=CentOS Extras
baseurl=http://repos.test.lab/extras/
gpgcheck=0
enabled=1
[local-updates]
name=CentOS Updates
baseurl=http://repos.test.lab/updates/
gpgcheck=0
enabled=1

Сохраните файл и начните использовать локальные зеркала YUM.

14. Затем запустите следующую команду, чтобы просмотреть локальные репозитории в списке доступных репозиториев YUM на клиентских компьютерах.

#  yum repolist
или
# yum repolist all