CentOS のローカル環境内に yum のリポジトリを作成する手順を紹介します。


RHEL(RedHat Enterprise Linux) や CentOS を使っている人には「何を今さら」な情報だと思いますが、アプリケーションやモジュールのインストールには rpm や yum を利用することが多いと思います。

特に yum を利用することで、目的のモジュールを導入するために必要となる前提ライブラリが既にインストールされているかどうかをチェックし、更にその前提ライブラリの前提となるライブラリのインストール状況も調べて・・・で、現在の環境に足りないライブラリやモジュールを順次インストールした上で最終的には目的のモジュールまでインストールしてくれます。非常に便利なツールです。

ただ RHEL にせよ CentOS にせよ、その利用の条件として「yum リポジトリ」と呼ばれる一連のファイル環境を用意する必要があります。DVD などからの新規導入時にはその DVD メディアの中に yum リポジトリが含まれていてそのリポジトリを使ってインストールが行われたり、インターネットアクセス環境が整っている場合はインターネット上の yum リポジトリを参照することでインストールを行うことができます。なので、通常はリポジトリの存在をいちいち意識することなく yum を利用することが大半だと思います。

ところが、インターネット接続のない特殊な環境下の場合、最初の導入時こそ DVD 内のメディアリポジトリを利用して指定したアプリケーションやモジュールを導入することになるので何も変わりませんが、その DVD を取り出して再起動した後からは yum リポジトリにアクセスできなくなってしまうため、後から足りないモジュールを追加インストールする際に苦労します。もちろんそこで改めて DVD メディアをマウントすればそのメディアリポジトリを使うことはできますが、わざわざ DVD メディアを再度用意する必要があります。またその場合でもインストールできるのは DVD 内に含まれている(最新版とは限らない)モジュールだけであって、最新モジュールを yum でインストールするには最新モジュールの含まれたリポジトリの DVD メディアを用意する必要があります。要は色々面倒なわけです。

そこでインターネット接続がない場合でも、メディアを意識せずに yum を使えるようにするためにローカル環境のディスクシステム内に yum リポジトリを作る方法を紹介します。この環境を作っておけばとりあえずそのリポジトリに含まれているモジュールについては yum で(依存関係ごと)導入できるようになるし、モジュールのバージョンアップをしたい場合は必要なモジュールをローカルファイルシステム上にコピーした上で再度リポジトリを作成し直せばいい、ということになります。バージョン管理の面倒さこそありますが、ディスク上にリポジトリを作っておくことで DVD メディアやネット経由のリポジトリよりは高速なアクセスが期待できる、というメリットもあります。


では以下にその手順を紹介します:

まずはリポジトリの元になる DVD のインストールメディア(RedHat や CentOS など)を用意します。このメディアが /mnt にマウントされていて、アクセスできる状態(/mnt/Packages/ というフォルダが存在している状態)になっているものと仮定します。

次にリポジトリを作成するディレクトリを用意します。ここでは /usr/tmp/repo/ というフォルダ以下にローカルリポジトリを作成することにします。

というわけで、まずは /usr/tmp/repo を作成しておきます:
# mkdir /usr/tmp/repo/


このディレクトリ内に centos/ サブディレクトリを作ります(これがリポジトリの名称になります):
# mkdir /usr/tmp/repo/centos


更にこのディレクトリ内を DVD と同じ状態にするべく、Packages/ サブディレクトリを作ります:
# mkdir /usr/tmp/repo/centos/Packages


DVD 内のリポジトリに含まれる一連の rpm ファイルを全て用意したディレクトリ以下へコピーします:
# cp /mnt/Packages/*.rpm /usr/tmp/repo/centos/Packages


ここから /usr/tmp/repo をローカルリポジトリにするための設定を行います。まずは rpm を使ってローカルリポジトリ作成に必要なツールだけを単独で3つ導入します:
# cd /usr/tmp/repo/centos/Packages
# rpm -ivh deltarpm-3.5-0.5.2009093git.el6.x86_64.rpm
# rpm -ivh python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
# rpm -ivh createrepo-0.9.8-4.el6.noarch.rpm
(バージョンの数値は用意したメディアによって異なっている可能性があります。適宜読み変えてください)


導入した createrepo を使って、/usr/tmp/repo 以下にローカルレポジトリを作成します:
# cd /usr/tmp/repo
# createrepo .


yum がこのローカルレポジトリを利用できるよう、以下のファイルを新規に作成・編集します:
# vi /etc/yum.repos.d/centos.repo

(以下、/etc/yum.repos.d/centos.repo の内容)
[centos]
gpgcheck=0
name=My Repo
baseurl=file:///usr/tmp/repo


yum リポジトリを更新します:
# yum clean all
# yum list


これでローカルファイルシステム内に centos という名称の yum リポジトリが作成できました。インターネットに繋がっていなくても、インストール DVD メディアがなくても yum を使ったモジュールのインストールが可能になります。


なお、モジュールを新しいものに更新したい場合や、このローカルリポジトリに別の .rpm ファイルを含めたい場合はそれらを /usr/tmp/centos/Packages/ 以下にコピーして、再度 yum リポジトリを更新(上述)すれば新しい内容の yum リポジトリになります。