yumリポジトリの構築

前回カスタムRPMパッケージを作ったのですが、他の人に配布するにあたって、どうするのがいいでしょうか?
パッケージを共有ディレクトリなどへ入れておき、使いたい人にそこから取得してもらってもいいのですが、パッケージをアップデートする度に同じことを行うのは面倒ですよね。
そこで、yumコマンドで楽にインストールできるよう、リポジトリを構築することにしてみます。

まずは、リポジトリ作成に必要なcreaterepoコマンドをインストールします。


# yum install createrepo

次に、RPMおよびSRPMを格納するディレクトリを作成します。リポジトリへのアクセスはHTTP経由にしますので、今回はCentOSのApache標準のDocumentRootである /var/www/html/ 以下へ作成します。


# mkdir -p /var/www/html/repos/cent5/{i386,i686,x86_64,SRPMS}

作成したディレクトリへ提供したいRPMパッケージをコピーします。


# cp /home/user/rpm/RPMS/i386/vim-*.rpm /var/www/html/repos/cent5/i386/
# cp /home/user/rpm/RPMS/i686/vim-*.rpm /var/www/html/repos/cent5/i686/
# cp /home/user/rpm/RPMS/x86_64/vim-*.rpm /var/www/html/repos/cent5/x86_64/
# cp /home/user/rpm/SRPMS/vim-*.rpm /var/www/html/repos/cent5/SRPMS/

最後に、各ディレクトリへリポジトリ情報を作成します。


# createrepo -v /var/www/html/repos/cent5/i386/
1/4 - vim-common-7.0.109-3.el5.3vs1.i386.rpm
2/4 - vim-enhanced-7.0.109-3.el5.3vs1.i386.rpm
3/4 - vim-minimal-7.0.109-3.el5.3vs1.i386.rpm
4/4 - vim-X11-7.0.109-3.el5.3vs1.i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata


# createrepo -v /var/www/html/repos/cent5/i686/
1/4 - vim-common-7.0.109-3.el5.3vs1.i686.rpm
2/4 - vim-enhanced-7.0.109-3.el5.3vs1.i686.rpm
3/4 - vim-minimal-7.0.109-3.el5.3vs1.i686.rpm
4/4 - vim-X11-7.0.109-3.el5.3vs1.i686.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata


# createrepo -v /var/www/html/repos/cent5/x86_64/
1/4 - vim-common-7.0.109-3.el5.3vs1.x86_64.rpm
2/4 - vim-enhanced-7.0.109-3.el5.3vs1.x86_64.rpm
3/4 - vim-minimal-7.0.109-3.el5.3vs1.x86_64.rpm
4/4 - vim-X11-7.0.109-3.el5.3vs1.x86_64.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata


# createrepo -v /var/www/html/repos/cent5/SRPMS/
1/1 - vim-7.0.109-3.el5.3vs1.src.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata

ひとつひとつ作成するのが面倒な場合は、次のように一気に実行すれば楽かと思います。


# find /var/www/html/repos/cent5/ -maxdepth 1 -mindepth 1 -exec createrepo -v {} \;

これでリポジトリの準備はできましたので、今度は取得する側のマシンにて設定を行います。

まず、リポジトリを追加するため /etc/yum.repos.d/CentOS-Asial.repo を作成します。


# CentOS-Asial.repo
[asial]
name=CentOS-5 - Asial
baseurl=http://yourserver/repos/cent5/$basearch/
gpgcheck=0
[asial-source]
name=CentOS-5 - Asial Source
baseurl=http://yourserver/repos/cent5/SRPMS/
gpgcheck=0
enabled=0

設定はこれだけですので、あとはyumコマンドを実行します。


# yum check-update
Loading "installonlyn" plugin
Loading "fastestmirror" plugin
Setting up repositories
asial                     100% |=========================|  951 B    00:00
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
primary.xml.gz            100% |=========================| 2.2 kB    00:00
################################################## 4/4
vim-common.i386                          2:7.0.109-3.el5.3vs1   asial
vim-enhanced.i386                        2:7.0.109-3.el5.3vs1   asial
vim-minimal.i386                         2:7.0.109-3.el5.3vs1   asial

無事リポジトリが追加され、アップデートできるパッケージが表示されました!

なお、すでにi386のほうが入っているマシンへi686のほうをインストールしたい場合は、/etc/yum.repos.d/CentOS-Asial.repoの「$basearch」を「i686」へ変更し、/etc/yum.confの「exactarch=1」を一時的に「exactarch=0」へ変更してからyumコマンドを実行します。そして、インストールが終わったら/etc/yum.confを「exactarch=1」へ忘れずに戻します。

次に、SRPMも取得できるか試してみます。


$ yumdownloader --enablerepo=asial-source --source vim
Loading "installonlyn" plugin
asial-source              100% |=========================|  951 B    00:00
primary.xml.gz            100% |=========================|  899 B    00:00
################################################## 1/1
vim-7.0.109-3.el5.3vs1.sr 100% |=========================|  11 MB    00:02

こちらも無事取得できましたね。

これで、リポジトリサーバ側でパッケージを更新して再度createrepoコマンドを実行すれば、他のマシンではyum updateするだけで更新されたパッケージを取得できます。

簡単!便利!おススメです。