Локальный YUM репозиторий в Centos 7

local yum repo

Репозиторий — место, где хранятся и поддерживаются какие-либо данные. Чаще всего данные в репозитории хранятся в виде файлов, доступных для дальнейшего распространения по сети.
Среди дистрибутивов Linux популярны репозитории с форматом метаданных YUM для дистрибутивов на базе RPM-пакетов, и репозитории с метаданными APT для дистрибутивов на основе DEB-пакетов.

Устанавливаем софт

$ sudo yum install createrepo yum-utils

Создаем каталоги os, updates, extras

$ mkdir -p /var/www/repo/centos/7/{os,updates,extras}/x86_64

Для синхронизации будем использовать зеркало Яндекса, т.к. у них заявлена поддержка rsync (873 исходящий порт)

$ rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/os/x86_64/ /var/www/repo/centos/7/os/x86_64/
$ rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/updates/x86_64/ /var/www/repo/centos/7/updates/x86_64/
$ rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/extras/x86_64/ /var/www/repo/centos/7/extras/x86_64/

Далее надо поднять вэб-сервер.
Пример конфигурации NGINX:

$ sudo cat /etc/nginx/site-avaliable/repo.conf
server {
    listen 80 default_server;
    server_name _;
    root /var/www/repo;
    charset UTF-8;
    default_type text/plain;

    location / {
        autoindex_exact_size off;
        autoindex on;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

Создаем репозитории

$ createrepo -v /var/www/repo/centos/7/os/x86_64
$ createrepo -v /var/www/repo/centos/7/updates/x86_64
$ createrepo -v /var/www/repo/centos/7/extras/x86_64

Локальный репозиторий EPEL

Для создания локального репозитория EPEL создаем каталог

$ mkdir -p /var/www/repo/centos/7/epel/x86_64

Синхронизируемся c mirror.logol.ru, т.к. у них заявлена поддержка rsync для зеркала EPEL

$ rsync -iavrt --delete --exclude='repo*' rsync://mirror.logol.ru/epel/7/x86_64/ /var/www/repo/centos/7/epel/x86_64/

Создаем репозиторий

$ createrepo -v /var/www/repo/centos/7/epel/x86_64

Обновление репозиториев

Для обновления репозиториев надо выполнить синхронизацию с источником

$ rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/os/x86_64/ /var/www/repo/centos/7/os/x86_64/
$ rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/updates/x86_64/ /var/www/repo/centos/7/updates/x86_64/
$ rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/extras/x86_64/ /var/www/repo/centos/7/extras/x86_64/
$ rsync -iavrt --delete --exclude='repo*' rsync://mirror.logol.ru/epel/7/x86_64/ /var/www/repo/centos/7/epel/x86_64/

И обновит служебную информацию

$ createrepo --update /var/www/repo/centos/7/os/x86_64
$ createrepo --update /var/www/repo/centos/7/updates/x86_64
$ createrepo --update /var/www/repo/centos/7/extras/x86_64
$ createrepo --update /var/www/repo/centos/7/epel/x86_64

Данный набор из 4-х репозиториев на диске занимает приблизительно 60 Gb

Автоматическое обновление репозиториев

Для автоматического обновления репозиториев создадим скрипт

$ sudo nano /home/repos_update.sh
#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

# os
rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/os/x86_64/ /var/www/repo/centos/7/os/x86_64/
createrepo --update /var/www/repo/centos/7/os/x86_64

# update
rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/updates/x86_64/ /var/www/repo/centos/7/updates/x86_64/
createrepo --update /var/www/repo/centos/7/updates/x86_64

# extras
rsync -iavrt --delete --exclude='repo*' rsync://mirror.yandex.ru/centos/7/extras/x86_64/ /var/www/repo/centos/7/extras/x86_64/
createrepo --update /var/www/repo/centos/7/extras/x86_64

# epel
rsync -iavrt --delete --exclude='repo*' rsync://mirror.logol.ru/epel/7/x86_64/ /var/www/repo/centos/7/epel/x86_64/
createrepo --update /var/www/repo/centos/7/epel/x86_64

Делаем скрипт исполняемым

$ sudo chmod +x /home/repos_update.sh

И добавляем задание по обновлению в crontab

$ crontab -e
# ежедневно в час ночи
0 1 * * * /home/repos_update.sh

Добавить локальные репозитории на клиентские ПК / сервера

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

$ find /etc/yum.repos.d -type f -exec sed -i "s/enabled=1/enabled=0/g" {} \;

Создаем файл с настройками для локальных репозиториев

$ sudo nano /etc/yum.repos.d/local.repo
[local]
name=Local Yum Repo
baseurl=http://192.168.1.9/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=0
priority=1

[local-update]
name=Local Yum Repo for update packages
baseurl=http://192.168.1.9/centos/$releasever/updates/$basearch/
enabled=1
gpgcheck=0
priority=1

[local-extras]
name=Local Yum Repo for extras packages
baseurl=http://192.168.1.9/centos/$releasever/extras/$basearch/
enabled=1
gpgcheck=0
priority=1

Создаем файл с настройками для локального репозитория EPEL

$ sudo nano /etc/yum.repos.d/local-epel.repo
[local-epel]
name=Local Extra Packages for Enterprise Linux 7
baseurl=http://192.168.1.9/centos/$releasever/epel/$basearch/
enabled=1
gpgcheck=0

Теперь можно обновляться с локальных репозиториев

$ sudo yum update

Максим Макаров

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

Оцените автора
IT Draft
Добавить комментарий

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