Создаем локальный RPM репозитарий
По моим представлениям, каждый Linux администратор, рано или чуть позже сталкивается с необходимостью создания локальной базы пакетов программ, установленных на клиентских или серверных машинах. Причин тому может быть много. Вот некоторые из тех что сподвигли меня на создание такой базы:
- быстрая установка пакетов на новую систему без использования интернета
- тестирование новых пакетов из тестовой ветки репозитария
- установка только проверенных версий пакетов
- установка требуемых версий пакетов, а не только официально представленных
- установка пакетов собственной сборки
Причин много, и это, пожалуй, еще не все (не вспомню уже что еще сподвигло на это дело), но и этих вполне достаточно.
Основными для себя дистрибутивами я избрал RedHat-based дистрибутивы - Fedora (точнее RFRemix) на собственной машине и CentOS (начиная с 6 версии больше Scientific Linux) на серверах. Пользуюсь и Debian, но больше для расширения кругозора и тестов.
Посему создание локального репозитария будит касаться именно RedHat-based дистрибутивов.
Перво наперво что нам потребуется, это сконфигурировать http-сервер, или просто его запустить, обычно и просто после установки он вполне работоспособен, по крайней мере Apache точно. Затем создадим папку, например rpms, в которой у нас будут лежать все наши пакеты. Создать ее нужно там куда без проблем можно достучаться через web - в частности у меня это /var/www/html/rpms
Если мы используем несколько дистрибутивов и несколько архитектур, то для того, чтобы не запутаться в пакетах, лучше всего создать несколько подпапок с указанием версии дистрибутива и его архитектуры, например /var/www/html/rpms/centos/5/i386 В данном примере:
- centos - название дистрибутива,
- 5 - версия (чаще нужно указывать именно старшую версию без подверсий, а их просто отзеркалить через символьные ссылки),
- i386 - архитектура.
Далее следует поместить все имеющиеся пакеты в соответствующие подпапки. Я особо не вдавался в подробности того, как это делают другие но я делаю следующим образом:
-
Пакеты с соответствующей архитектурой помещаю в соответствующие папки (получается i386 и x86_64). Если у вас перемешены пакеты разных архитектур то для отбора требуемых можно использовать команду типа
find /var/cache/yum/ -name '*i*86.rpm' -exec mv {} /var/www/html/rpms/ \;
Таким образом все пакеты с архитектурами i[3456]86 переместятся в папку /var/www/html/rpms/
-
Пакеты не привязанные к архитектуре помещаю в папку noarch, потом использую команду типа
find /var/www/html/rpms/fedora/15/noarch/ -name '*noarch*.rpm' -exec ln -s {} /var/www/html/rpms/fedora/15/i386/ \;
для создания символьных ссылок на noarch-пакеты в папках с привязанных к архитектуре. Это делается для того, чтобы при установке пакетов на системе с архитектурой i386 пакеты не привязанные к архитектуре были тоже доступны.
Далее для того чтобы наши репозитарии можно было использовать необходимо проиндексировать наши пакеты. Но перед тем как это сделать нужно установить пакет createrepo если такового нет в системе. Далее выполняем команду индексирования. В общем виде это выглядит так:
createrepo --database /var/www/html/rpms/<путь>/<до>/<файлов базы>/
У меня репозитарий располагается на машине с установленной Fedora RFRemix 15, и это накладывает определенный отпечаток но то, как будут формироваться базы репозитариев.
Для разных дистрибутивов формирование хэша репозитария осуществляется по разному. Мой рабочий вариант следующий:
для Scientific Linux 6.х (думаю подойдет и для 6 версии CentOS или RHEL), и собственно Fedora 15
createrepo --update -d /var/www/html/rpms/<путь>/<до>/<файлов базы>/
для CentOS 5.x
createrepo --update -d -s sha -p /var/www/html/rpms/<путь>/<до>/<файлов базы>/
Далее создаем файл репозитария и копируем его в папку /etc/yum.repos.d/ на удаленной машине. Файл может называться например local.repo
Примерное содержимое файла
[localrepo] name=Local packages (Scientific Linux 6.0) baseurl=http://repo-ip-adress/rpms/scientific/$releasever/i386/ enabled=1 gpgcheck=0 priority=1 proxy=_none_ skip_if_unavailable=1
Если у вас в сети используется прокси то важна установка его параметров, точнее того чтобы он игнорировался, так как если работа с локальным репозитарием будут производится через прокси возможны разные непонятные ошибки. Для этого вписываем параметр proxy=_none_ (именно с подчеркиваниями в начале и в конце). Этот параметр доступен только с 6 версии RHEL и кажется с 13 версии Fedora.
Так же полезен будит параметр skip_if_unavailable=1 (пропускать репозтарий если он недоступен, а не стопорить процесс установки)
Вот пожалуй и все. Осталось только добавить несколько вкусных плюшек напоследок.
Для работы с пакетами в репозитарии можно использовать команду repomanage.
Если например выполнить такую комманду
repomanage --old /var/www/html/rpms/<путь>/<до>/<файлов базы>/ | xargs rm -f
то в конечной папке останутся только самые последние версии пакетов, остальные удалятся. Однако стоит не забывать про то, что если мы чистим папку noarch, то предварительно стоит удалить все символьные ссылки в папках i386 и x86_64, чтобы не запутатся и не оставить ссылок на несуществующие файлы, а потом просто их заново создать.
Данная комманда доступна из пакета yum-utils (у меня это yum-utils-1.1.31-2.fc15.noarch).
Для того чтобы ваш репозитарий был приоритетным надо установить пакет yum-plugin-priorities. Уровень приоритета мы уже прописали в файле репозитария
priority=1
- 14821 просмотр
Добавить комментарий