вторник, 18 марта 2014 г.

Создаём собственный yum репозиторий












Подготовим плацдарм на web сервере.

В моём случае это debian.
Поэтому:
apt-get install -y apache2 rsync

Поскольку репозиторий у нас будет yum, создадим для него каталог, и договоримся о том, что пользователь от которого вы будете выкладывать пакеты будет "repmgr".
Вообще пользователь может быть любым, я назвал его так для наглядности, и предполагаю, что он уже есть в системе.



Итак создадим каталог, и проставим на него права:
mkdir -p /srv/yum
chown -R repmgr:repmgr /srv/yum
Далее опишем для конфигурацию apache2 для нашего репозитория:
cat > /etc/apache2/sites-available/yum_repo.conf <<EOF

  ServerAdmin yourname@example.com
  ServerName yum.example.com


  DocumentRoot /srv/yum
  
    Options FollowSymLinks
    AllowOverride None
    Options Indexes FollowSymLinks MultiViews     AllowOverride All     Order allow,deny     allow from all      LogLevel warn   ErrorLog /var/log/apache2/yum_repo-error.log   CustomLog /var/log/apache2/yum_repo-access.log combined   ServerSignature On EOF ln -s /etc/apache2/sites-available/yum_repo.conf /etc/apache2/sites-enabled/yum_repo.conf

И перезапустим apache2:
service apache2 restart 
 Restarting web server: apache2 ... waiting .

Теперь apache2 должен отвечать по запросу http://yum.example.com листингом пустого каталога.


Подготовка окружения на машине source машине

Для подготовки репозитория нам понадобится любой RHEL-like дистрибутив.
В данном случае я использую Scientific Linux 6.5.

Установим createrepo
[root@builder-host ~]# yum install createrepo rsync -y 
Подготовим директории для репозитория
[builder@builder-host ~]$ mkdir -p ~/repo/rhel/6/x86_64/
[builder@builder-host ~]$ mkdir -p ~/repo/pub/
Скопируем RPM'ки и публичный ключ(если он у вас есть)
[builder@builder-host ~]$ cp ~/rpmbuild/RPMS/x86_64/* ~/repo/rhel/6/x86_64/
[builder@builder-host ~]$ cp RPM-GPG-KEY-MYORG.public ~/repo/pub/RPM-GPG-KEY-MYORG
Подпишем RPM'ки (если у вас есть GPG ключ, и если вы их еще не подписывали)
[builder@builder-host ~]$ rpm --resign ~/repo/rhel/6/x86_64/*.rpm
Enter pass phrase: 
Pass phrase is good.
/home/builder/repo/rhel/6/x86_64/kernel-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/kernel-debug-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/kernel-debug-debuginfo-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/kernel-debug-devel-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/kernel-debuginfo-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/kernel-debuginfo-common-x86_64-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/kernel-devel-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/kernel-firmware-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/kernel-headers-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/perf-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/perf-debuginfo-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/python-perf-2.6.32-431.el6.myorg.x86_64.rpm:
/home/builder/repo/rhel/6/x86_64/python-perf-debuginfo-2.6.32-431.el6.myorg.x86_64.rpm:
Настало время создать репозиторий
[builder@builder-host ~]$ createrepo ~/repo/rhel/6/x86_64/
Spawning worker 0 with 13 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

После обновления RPM'ок, нужно будет обновить файлы метаданных
[builder@builder-host ~]$ createrepo --update ~/repo/rhel/6/x86_64/

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
Репозиторий готов, настало время выливать его в на web server.
[builder@builder-host ~]$ rsync -avz --delete ~/repo/ repmgr@yum.example.com:/srv/yum/
The authenticity of host 'yum.example.com (123.123.123.123)' can't be established.
RSA key fingerprint is c6:bb:05:2f:52:ef:87:52:b6:2a:96:bb:98:3f:eb:7b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'yum.example.com,123.123.123.123' (RSA) to the list of known hosts.
repmgr@yum.example.com's password: 
sending incremental file list
./
pub/
pub/RPM-GPG-KEY-MYORG
rhel/
rhel/6/
rhel/6/x86_64/
rhel/6/x86_64/kernel-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/kernel-debug-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/kernel-debug-debuginfo-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/kernel-debug-devel-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/kernel-debuginfo-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/kernel-debuginfo-common-x86_64-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/kernel-devel-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/kernel-firmware-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/kernel-headers-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/perf-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/perf-debuginfo-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/python-perf-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/python-perf-debuginfo-2.6.32-431.el6.myorg.x86_64.rpm
rhel/6/x86_64/repodata/
rhel/6/x86_64/repodata/0aba24b2168e97f43d15e1fbbe8243384ecae5f3e0f02505e15eec91b160cf28-other.sqlite.bz2
rhel/6/x86_64/repodata/1ef882fa678df2ba2ab1e8401a702061344d7f3f16f1317bfa53ced680b4efc8-other.xml.gz
rhel/6/x86_64/repodata/3750519bcd5461a7c9ec375942df9f6fd35011c48b94f22b8b446ea0372b36fe-filelists.xml.gz
rhel/6/x86_64/repodata/89fc2ed9424e6601062d01c77572079fd01558ea9304041a77b765ad5abf52dd-primary.xml.gz
rhel/6/x86_64/repodata/bfa923056ac76a89a1958e63046d410e9255dd31ed778dc771db3b44b809c468-primary.sqlite.bz2
rhel/6/x86_64/repodata/d94ca190c7d622d6747b51fcd2acd7fbc0f8f28848eb53477c34c2b365a5fd57-filelists.sqlite.bz2
rhel/6/x86_64/repodata/repomd.xml

sent 661676844 bytes  received 434 bytes  10101943.18 bytes/sec
total size is 688558480  speedup is 1.04

Теперь на целевой системе описываем наш репозиторий, и можно использовать
cat /etc/yum.repos.d/myorg.repo <<EOF
[myorg]
name=Packages for MY CUSTOM SERVER
baseurl=http://yum.example.com/rhel/6/$basearch
enabled=1
gpgcheck=1
gpgkey=http://yum.example.com/pub/RPM-GPG-KEY-MYORG
EOF
Теперь можем установить что ни будь из нового репозитория
yum install -y kernel-firmware-2.6.32-431.el6.myorg.x86_64

Источники информации:
http://yum.baseurl.org/wiki/RepoCreate
Enhanced by Zemanta