В корпоративной сети с большим количеством серверов под управлением 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