Для корректного отображения сайта вам необходима поддержка Javascript и Cookies.

Создаем локальный RPM репозитарий

Опубликовал Dematron в чт, 20/10/2011 - 13:45

Обновлено в вт, 01/11/2011 - 08:32

По моим представлениям, каждый Linux администратор, рано или чуть позже сталкивается с необходимостью создания локальной базы пакетов программ, установленных на клиентских или серверных машинах. Причин тому может быть много. Вот некоторые из тех что сподвигли меня на создание такой базы:

  1. быстрая установка пакетов на новую систему без использования интернета
  2. тестирование новых пакетов из тестовой ветки репозитария
  3. установка только проверенных версий пакетов
  4. установка требуемых версий пакетов, а не только официально представленных
  5. установка пакетов собственной сборки

Причин много, и это, пожалуй, еще не все (не вспомню уже что еще сподвигло на это дело), но и этих вполне достаточно.

Основными для себя дистрибутивами я избрал 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 В данном примере:

  1. centos - название дистрибутива,
  2. 5 - версия (чаще нужно указывать именно старшую версию без подверсий, а их просто отзеркалить через символьные ссылки),
  3. i386 - архитектура.

Далее следует поместить все имеющиеся пакеты в соответствующие подпапки. Я особо не вдавался в подробности того, как это делают другие но я делаю следующим образом:

  1. Пакеты с соответствующей архитектурой помещаю в соответствующие папки (получается i386 и x86_64). Если у вас перемешены пакеты разных архитектур то для отбора требуемых можно использовать команду типа
    find /var/cache/yum/ -name '*i*86.rpm' -exec mv {} /var/www/html/rpms/ \; 

    Таким образом все пакеты с архитектурами i[3456]86 переместятся в папку /var/www/html/rpms/

  2. Пакеты не привязанные к архитектуре помещаю в папку 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

Добавить комментарий