FastNetMon

Monday, 29 March 2010

Создание собственного репозитория для CentOS

Ставим служебный софт:
yum install -y createrepo


Создаем папку для хранения пакетов:

mkdir -p /var/www/html/centos_repository
cd /var/www/html/centos_repository


Теперь необходимо положить тестовый пакет в наше репозиторий:
wget http://fastvps.googlecode.com/files/mpt-status-1.2.0_RC7-3.i386.rpm


Запускаем генерацию метаданных репозитория:
createrepo .


После этого будет сгенерирована служебная папка repodata с данными о всех наших пакетах:

./mpt-status-1.2.0_RC7-3.i386.rpm
./repodata
./repodata/repomd.xml
./repodata/other.xml.gz
./repodata/filelists.xml.gz
./repodata/primary.xml.gz


Теперь нам необходимо настроить Apache, чтобы указанная папка была полностью доступна по протоколу HTTP, это осильте сами, пожалуйста.

В итоге у нас получится веб-страница http://repo.domain.ru/centos_repository с одним файлом mpt-status-1.2.0_RC7-3.i386.rpm и папкой repodata, но "правильные" репозитории выглядят немного иначе: http://mirror.yandex.ru/epel/5/

То есть внутри папки репозитория создается папка 5, соответствующая версии дистрибутива, далее создаются подпапки под требуемые архитектуры i386, x86_64 или даже SRPMS, а уже внутри них располагаются rpm пакеты и папка repodata. Если так делают сильные мира сего, то и мы поступим аналогично, чтобы не получить помойки с пакетами (например, такой как у OpenVZ репозитория - http://download.openvz.org/kernel/branches/rhel5-2.6.18/current/ и как следствие этой "помойки" при установке пакетов из их репозитория приходится явно указывать его (пакета) платформу, то есть вместо "package" приходится писать "package.x86_64", что крайне неудобно).

Переделываем на "как правильно":
rm -rf /var/www/html/centos_repository
mkdir /var/www/html/centos_repository
cd /var/www/html/centos_repository
mkdir 5
cd 5
mkdir {i386,x86_64,SRPMS}
cd x86_64
wget http://fastvps.googlecode.com/files/mpt-status-1.2.0_RC7-3.i386.rpm
cd ..


Создаем repodata:

createrepo i386

Saving Primary metadata
Saving file lists metadata
Saving other metadata

createrepo x86_64/
1/1 - mpt-status-1.2.0_RC7-3.i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata

createrepo SRPMS/

Saving Primary metadata
Saving file lists metadata
Saving other metadata


Если же в процессе эксплуатации репозитория Вы планируете добавлять новые пакеты, то используйте другой синтаксис createrepo:
createrepo --update x86_64
createrepo --update i386
createrepo --update SRPMS


Теперь немного автоматизации для удобного апдейта репо:
vi /var/www/html/centos_repository/5/Makefile


Со следующим контентом:
update:
createrepo --update x86_64
createrepo --update i386
createrepo --update SRPMS


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

make -C /var/www/html/centos_repository/5 update


Теперь наш репозиторий необходимо подключить к клиентской машинке (у меня она 64 битная, и с 32 битной мой пример работать не будет), создаем файл описание репозитория:
vi /etc/yum.repos.d/myrepo-centos.repo


Со следующим содержанием:

[myrepo-centos]
name=My Personal Yum Repo
baseurl=http://domain.ru/centos_repository/5/$basearch
enabled=1
# not secure
gpgcheck=0


Теперь запускаем yum и убеждаемся, что не выдано никаких ошибок в отношении нашего репозитория:
yum update


Получаем информацию о тестовом пакете в нашем репозитории:

yum info mpt-status
Loaded plugins: fastestmirror, versionlock
Loading mirror speeds from cached hostfile
* addons: ftp.plusline.de
* base: centos.copahost.com
* epel: mirror.andreas-mueller.com
* extras: ftp.plusline.de
* openvz-kernel-rhel5: openvz.copahost.com
* openvz-utils: openvz.copahost.com
* updates: centos.copahost.com
Reading version lock configuration
Available Packages
Name : mpt-status
Arch : i386
Version : 1.2.0_RC7
Release : 3
Size : 27 k
Repo : myrepo-centos
Summary : MPT Fusion raid inquiry tool
URL : http://www.drugphish.ch/~ratz/mpt-status/
License : GPL
Description: mpt-status give informations about raid status for LSI Fusion controllers.
: This is quite a modified version to the original mpt-status-1.0 package.


Ставим его (собственно, ради этого все и затевалось):

yum install -y mpt-status


Ну вот и все :)

Добавление новых пакетов в репозиторий

Просто кладем новые rpm в папку, соответствующую архитектуре и после этого делаем --update, как указано выше. Как результат увидим следующее:
make
createrepo --update x86_64
2/2 - vzprocps-2.0.11-6.13.swsoft.i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
createrepo --update i386
2/2 - vzprocps-2.0.11-6.13.swsoft.i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
createrepo --update SRPMS

Saving Primary metadata
Saving file lists metadata
Saving other metadata

Источник: http://blog.kagesenshi.org/2007/01/howto-creating-your-own-yum-rpm.html

2 comments :

  1. Со следующим контентом:
    update:
    createrepo --update x86_64
    createrepo --update i386
    createrepo --update SRPMS
    ======
    Перед createrepo необходим таб! Иначе ругается.

    ReplyDelete
  2. посмотреть, что в нужной репе (кроме уже установленного оттуда)
    # yum —disablerepo «*» —enablerepo «base» list available
    с установленным хз, без available выдаст +вообще все поставленные пакеты

    ReplyDelete

Note: only a member of this blog may post a comment.