Hatena::ブログ(Diary)

cooldaemonの備忘録 RSSフィード

2008-06-20

CentOS 5.1 で、ローカル環境向け yum リポジトリサーバを作ってみる

大人の事情で、仕方なく CentOS を使うハメになりイロイロ勉強中。Linux なんて触りたくないなぁ(w;

apache のインストール

リポジトリを HTTP で配布する事にしたので、apache を入れてみる。

$ yum -y install httpd

適当に httpd.conf を設定して起動しておく。

リポジトリ用のディレクトリを作る

今回は、os と updates だけ対象とする。(addons、extras、centosplus 等は大人の事情で除外)

i386 と x86_64 環境が混在しているので、両方のディレクトリを準備。

$ mkdir -p /var/www/html/yum/centos/5.1/os/i386/CentOS
$ mkdir -p /var/www/html/yum/centos/5.1/os/x86_64/CentOS
$ mkdir -p /var/www/html/yum/centos/5.1/updates/i386/RPMS
$ mkdir -p /var/www/html/yum/centos/5.1/updates/x86_64/RPMS

RPM ファイルを配置する

rsync://ftp.riken.jp/Linux/centos/ 等から取得して、先ほど作ったディレクトリに配置する。

yum コマンドは、mirrorlist.centos.org が返すリポジトリサーバの一覧から使うサーバを選択しているので、http://mirrorlist.centos.org/?release=5&arch=x86_64&repo=os とかで取得した URI から RPM をダウンロードしても良い。

メタデータを生成する

メタデータとは、レポジトリを管理するための情報の事。

まずは、メタデータを生成する為のコマンド createrepo をインストールする。

$ sudo yum install createrepo

次に、メタデータを生成する。

$ cd /var/www/html/yum/centos/5.1/os/i386/
$ createrepo $PWD

これを各ディレクトリで行う。

RPM を更新する度に、createrepo を実行する必要がある。

ミラーリストを配置する

直接、レポジトリサーバを参照させても良いのだけれど、何となくミラーリストを配置してみる。

CGI を作るのは面倒なので、[version]-[repo]-[basearch].txt という形式のファイル名にする。

$ cat /var/www/html/yum/centos/5.1-os-i386.txt
http://yum.foo.jp/yum/centos/5.1/os/i386/

このようなファイルを各リポジトリ毎に準備する。

試してみる

/etc/yum.repos.d/CentOS-Base.repo を下記のように修正する。

$ diff CentOS-Base.repo.org CentOS-Base.repo
16,17c16
< mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
< #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
---
> mirrorlist=http://yum.foo.jp/yum/centos/$releasever-os-$basearch.txt
19c18
< gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
---
> gpgkey=http://yum.foo.jp/yum/centos/RPM-GPG-KEY-CentOS-5
24,25c23
< mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
< #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
---
> mirrorlist=http://yum.foo.jp/yum/centos/$releasever-updates-$basearch.txt
27c25
< gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
---
> gpgkey=http://yum.foo.jp/yum/centos/RPM-GPG-KEY-CentOS-5

RPM-GPG-KEY-CentOS-5 は、/etc/pki/rpm-gpg/ からコピーしておく。

以上で、yum コマンドは yum.foo.jp から RPM ファイルを取得するようになる。

始めに「yum list available」を実行しておいた方が良いのかな?

CentOS 5.1 に perl 5.10 を yum から入れる(ついでに、MySQL 5.0 も・・・)

CentOS 5.1 で、ローカル環境向け yum リポジトリサーバを作ってみる - cooldaemonの備忘録 の続き。

CentOS 5.1 向けの RPM に perl 5.10 は存在しないので Fedora から SRPM をもらってきて、RPM を作る事にする。

ローカルにビルド環境を作る

root で作業したくないので、ローカルに環境を作る。

下記のようにディレクトリを作って・・・

$ mkdir ~/rpmbuild
$ mkdir ~/rpmbuild/BUILD
$ mkdir ~/rpmbuild/SRPMS
$ mkdir ~/rpmbuild/SPECS
$ mkdir ~/rpmbuild/SOURCES
$ mkdir ~/rpmbuild/RPMS

下記のようなファイルを設置する。

$ cat ~/.rpmmacros
%_topdir    $HOME/rpmbuild
%_specdir   %{_topdir}/SPECS
%_builddir  %{_topdir}/BUILD
%_sourcedir %{_topdir}/SOURCES
%_srcrpmdir %{_topdir}/SRPMS
%_rpmdir    %{_topdir}/RPMS

SRPM を取得する

$ rpm -ivh http://ftp.riken.go.jp/Linux/fedora/development/source/SRPMS/perl-5.10.0-26.fc10.src.rpm

これで、~/rpmbuild 配下にイロイロファイルが出来る。

RPM を作る

rpmbuild コマンドをインストールする。

$ sudo yum install rpm-build

事前に、perl 5.10 の RPM が依存している RPM を幾つかインストールしておく。

$ sudo yum install gdbm-devel
$ sudo yum install db4-devel
$ sudo yum install zlib-devel

rsyslog にも依存しているのだけれど、面倒なので ~/rpmbuild/SPECS/perl.spec 内の rsyslog の箇所を sysklogd に変えてしまった。(何か問題あるかな?)

という事でビルド開始。

$ cd ~/rpmbuild
$ rpmbuild -bb SPECS/perl.spec

これで ~/rpmbuild/RPMS/[arch] 配下に RPM ファイルが作成される。

リポジトリサーバに RPM を配置する

CentOS 5.1 で、ローカル環境向け yum リポジトリサーバを作ってみる - cooldaemonの備忘録 では、os と updates というリポジトリを作ったが、ここに配置すると、イロイロ問題が出るので myrepo というリポジトリを作る事にする。

$ mkdir -p /var/www/html/yum/centos/5.1/myrepo/x86_64/RPMS
$ cp ~/rpmbuild/RPMS/x86_64/RPMS/*.rpm /var/www/html/yum/centos/5.1/myrepo/x86_64/RPMS
$ cd /var/www/html/yum/centos/5.1/myrepo/x86_64/
$ createrepo $PWD

ミラーリストを用意する。

$ cat /var/www/html/yum/centos/5.1-myrepo-x86_64.txt
http://yum.foo.jp/yum/centos/5.1/myrepo/x86_64/

myrepo 用に /etc/yum.repos.d/myrepo.repo という専用のファイルを作る。

$ cat /etc/yum.repos.d/myrepo.repo
name=CentOS-$releasever - myrepo
mirrorlist=http://yum.foo.jp/yum/centos/$releasever-myrepo-$basearch.txt
gpgcheck=0

これで、yum から perl 5.10 をインストールする事が可能となる。

注意点

os や updates には、既に perl 5.8.8 の RPM が配置されており、他の幾つかの RPM は perl 5.8.8 に依存している。

perl 5.10 をインストールする場合は、perl 5.8.8 をアンインストールし、os や updates を一時的に enabled=0 にした方が良い。(これに気がつかず、yum install perl-CPAN が失敗して困ってしまった・・・)

perl 5.8.8 に依存している RPM は、perl 5.10 と同様に、Fedora からもらって来る事で回避する。

MySQL 5.0 が、perl に依存しててガックリした・・・。

ちなみに、MySQL 5.0 の RPM は、下記のような感じで作れる。

$ sudo yum install gperf
$ sudo yum install readline-devel.x86_64
$ sudo yum install openssl-devel.x86_64
$ sudo yum install gcc-c++
$ sudo yum install ncurses-devel.x86_64
$ sudo yum install libtool
$ rpm -ivh http://ftp.riken.go.jp/Linux/fedora/development/source/SRPMS/mysql-5.0.51a-1.fc9.src.rpm
$ cd ~/rpmbuild
$ rpmbuild -bb SPECS/mysql.spec