Создаем локальное зеркало репозиториев

repozitoriy

В корпоративной сети с большим количеством серверов под управлением Linux рекомендуется создавать свое собственное зеркало репозиториев.

Рекомендация вызвана прежде всего обеспечением необходимого уровня безопасности, доступности и контроля вносимых изменений, из вторичных проблем — трафик и скорость интернета, доступность Интернета на серверах.

Для создания локальных зеркал будем использовать mrepo, для отдачи rpm нам понадобиться web сервер, в качестве которого можно использовать стандартный apache.

Установка mrepo:

Пакеты mrepo и createrepo доступны из EPEL

В CentOS и Fedora пакет можно установить через yum:

yum install httpd mrepo createrepo

=============================================================================================
 Пакет           Архитектура                    Версия        Репозиторий              Размер
=============================================================================================
Установка:
 mrepo                         noarch                         0.8.7-2.fc14 

Как вариант, mrepo можно установить c сайта http://pkgs.repoforge.org/mrepo/

Далее смотрим и при необходимости настраиваем «/etc/mrepo.conf».

У меня пути немного отличаются от стандартных:

[main]
srcdir = /var/mrepo
wwwdir = /var/www/mrepo
confdir = /etc/mrepo.conf.d
#arch = i386 x86_64
#arch = x86_64
hardlink = yes
shareiso = yes
mailto = root@localhost
smtp-server = localhost
metadata = repomd repoview yum apt

Добавляем репозитория в mrepo:
Создаем conf-файл в папке /etc/mrepo.conf.d/, ниже пример для репозитория CetnOS:

cat /etc/mrepo.conf.d/centos6.conf

[centos6]
release = 6
metadata = yum repomd repoview
arch = x86_64 i386
name=Centos6 - $arch - Source
baseurl=rsync://mirror.yandex.ru/centos/$release/os/$arch/

[centos6] — имя репозитория (папки), которая будет создаваться в srcdir (/var/mrepo/)
name — описание репозитория
release — версия OS, для CentOS 6 будет 6
arch — список архитектур через пробел.
baseurl — имя под-репозитория. Таких записей может несколькою
rsync://mirror.yandex.ru/centos/$release/os/$arch/ — URL откуда нужно брать репозиторий. Параметры $release и $arch будут браться из настроек репозитория (6, x86_64 i386 соответственно).

Обновление репозитариев можно доверить cron:

# vi /etc/cron.d/mrepo
30 4 * * root /usr/bin/mrepo -q -ug

Но лучше проводить обновления руками:

#-u fetch OS updates
mrepo -uvv

#-g generate mrepo repositories
mrepo -gvv

Apache

Проверяем наличие /etc/httpd/conf.d/mrepo.conf для Apache, в случае необходимости создаем или редактируем файл:

NameVirtualHost *:80

        ServerName server-name
        DocumentRoot /var/www/mrepo
        ErrorLog logs/mrepo-error_log
        CustomLog logs/mrepo-access_log combined

Репозиторий на целевой системе

Настраиваем клиента репозитория:

cat /etc/yum.repos.d/localcentos.repo
[localcentos]
name=Packages CentOS
baseurl=http://server-name/mrepo/centos6-x86_64/RPMS.baseurl/
#baseurl=http://server-name/mrepo/centos6-$basearch/RPMS.baseurl/
enabled=1
gpgcheck=0
metadata_expire=7200

[localcentos] — имя репозитория для Yum
name — описание репозитория
baseurl — URL рапозитория.
server-name — полное DNS-имя сервера
centos6-$basearch — $basearch архитектура процессора (можно задать статически)
/RPMS.baseurl/ — RPMS — есть всегда, baseurl — это параметр который мы указывали в mrepo после arch
gpgcheck=0 — говорит о том что Yum не будет проверять GPG подпись репозитория

В случае использования puppet, можно воспользоваться манифестом:

  yumrepo { 'localcentos':
    descr           => 'Packages CentOS',
    enabled         => 1,
    gpgcheck        => 0,
    baseurl         => "http://server-name/mrepo/centos$operatingsystemmajrelease-$architecture/RPMS.baseurl/",
    metadata_expire => 7200,
  }

Проблемы:

  • 5 CentOS иногда ругается на неверную hashlib, в общем-то её нужно поставить руками:
rpm -Uvh http://server-name/mrepo/epel5-i386/RPMS.baseurl/python-hashlib-20081119-4.el5.i386.rpm
  • При создании репозитария для vmware-tools, скорее всего вы получите ошибку:

«Failed with return code: 256»

Сходу данную ошибку исправить не удалось, посему было найдено несколько иное решение:
1. В /etc/mrepo.conf.d созданы vmware-tools5.conf и vmware-tools6.conf, для mrepo:

cat vmware-tools5.conf
[vmware-tools5]
release = 5
arch = x86_64 i386
metadata = yum repomd repoview
name=VMWare tools for virtualized Linux
baseurl=https://packages.vmware.com/tools/esx/latest/rhel5/$arch/

cat vmware-tools6.conf
[vmware-tools6]
release = 6
arch = x86_64 i386
metadata = yum repomd repoview
name=VMWare tools for virtualized Linux
baseurl=https://packages.vmware.com/tools/esx/latest/rhel6/$arch/

2. Для стандартного reposync сконфигурирован vmware-tools.cfg с примерныно таким содержание:

[vmware-tools5-i386]
name=VMware Tools 5 i386
baseurl=http://packages.vmware.com/tools/esx/latest/rhel5/i386
enabled=1
gpgcheck=1

[vmware-tools5-x86_64]
name=VMware Tools 5 x64
baseurl=http://packages.vmware.com/tools/esx/latest/rhel5/x86_64
enabled=1
gpgcheck=1

[vmware-tools6-i386]
name=VMware Tools 6 i386
baseurl=http://packages.vmware.com/tools/esx/latest/rhel6/i386
enabled=1
gpgcheck=1

[vmware-tools6-x86_64]
name=VMware Tools 6 x64
baseurl=http://packages.vmware.com/tools/esx/latest/rhel6/x86_64
enabled=1
gpgcheck=1

3. Сделано обновление для vmware-tools, которое так же надо добавить в cron или выполнять руками

reposync -c vmware-tools.cfg -p /var/mrepo/ -r vmware-tools5-i386
reposync -c vmware-tools.cfg -p /var/mrepo/ -r vmware-tools5-x86_64
reposync -c vmware-tools.cfg -p /var/mrepo/ -r vmware-tools6-i386
reposync -c vmware-tools.cfg -p /var/mrepo/ -r vmware-tools6-x86_64

4. Внутри каждой папки с репозитарием создан симлинк с именем «baseurl» на самуже папке. Костыль дикий, но как сделать иначе я не понял.

# ls -la /var/mrepo/vmware-tools6-x86_64
total 16236
drwxr-xr-x  2 root root    4096 Jun  2 15:29 .
drwxrwxrwx 30 root root    4096 Apr 10 17:46 ..
lrwxrwxrwx  1 root root      41 Jun  2 15:29 baseurl -> /var/mrepo/vmware-tools6-x86_64

5. Создание www представления, делаем  стандартным способом

mrepo -gvv
Вы можете оставить комментарий ниже.