Пост

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

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

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

1
$ sudo yum install createrepo yum-utils

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

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

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

1
2
3
$ 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ 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;
    }
}

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

1
2
3
$ 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 создаем каталог

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

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

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

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

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

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

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

1
2
3
4
$ 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/

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

1
2
3
4
$ 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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ 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

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

1
$ sudo chmod +x /home/repos_update.sh

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ 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

1
2
3
4
5
6
$ 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

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

1
$ sudo yum update
Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.