[目次へ][2章へ][2.2へ][2.3へ] 最終更新:$Date: 2002/10/18 01:02:46 $

SRPMは簡単バージョンで逃げ


■■ [2.2] Red Hat Linuxで楽をする
■■■ [2.2.1] RPMのインストール方法
■■■ [2.2.2] SRPMからRPMを作ってみよう


■■2.2 Red Hat Linuxで楽をする

最近のフリーUNIXでのインストールは、パッケージ管理機構を利用するのが 簡単です。Linuxでは、Red Hat Linuxから発生したRPMという機構が広く使われています。本節では、このRPMを利用し、CVSをパッケージとしてインストールする方法を紹介します。

本節では、次のような利用者環境を想定して、RPMからのインストール方法を紹介します。なお、本書ではRed Hat Linux(i386)を中心に話を進めます。

@ システムにCVSがインストールされていない(最近のものではまずないでしょうが)

A CVSはインストール済みだけど、より新しいバージョンが出たので利用したい

なお、システムにCVSがインストールされているかどうか調べるには、【図2.2.1】のようにrpmコマンドを実行します。

【図2.2.1】CVSが入っているかな?
▼
% rpm -q cvs
cvs-1.11.1p1-7
▲

rpmコマンドに問い合わせ(query)の意味の-qオプションを指定して、パッケージ名cvsを渡します。この例のシステムはRed Hat Linux 7.3で、OS標準のcvs-1.11.1p1が入っています。

なお、システムに既にインストールされている場合には、特に理由が無い限り、入れ換える必要はありません。「バージョンが古くて希望に合わない」、「knjwrp patchなどパッチをあてたものを使いたい」、などという場合は、独立にインストールするか、SRPMを利用して目的に合わせたRPMを作成・インストールする必要があります。ここで、SRPMというのはソースコードとRPMの作り方が一体になったソースパッケージのことです。

SRPMについては、は2.2.2項で簡単に説明します。今回は余力がなかったので、SRPMに漢字コード変換機能のあるcvs-jp-1.11.1p1-3.tar.gzを組み込んでRPMを作成することはしませんでした。替わりに、新しいバージョンのOSに付属しているSRPMを利用して、旧バージョンのOS用のRPMを作成する方法について紹介します。

■■■2.2.1 RPMのインストール方法

CVSがシステムにインストールされていなかったら、システムに合ったRPMパッケージをどこからか入手してインストールする必要があります。OSのディストリビューション内に入っているものを使うのがいちばん楽です。ただし、OS付属のものは最新とは限りませんし、knjwrp patchもあたっていません。

CVSのRPM(バイナリ)ファイルは以下の形式をしています。

▼
cvs-v.vv.v-x.i386.rpm
▲ 

ここで、v.vv.vの場所にはcvsのバージョンが入ります。例えば、1.10.8や、1.11.2などです。その次のxはRPMを作る途中でどれくらい変更されたかを示すそのRPMのバージョン番号です。末尾のrpmの前についているi386というのは、このパッケージがCPUがi386系のPC/AT互換機向けのものであることを意味しています。Alpha、Sparcなどi386以外のアーキテクチャを利用する場合には該当するファイルをそれぞれ利用してください。それぞれalpha.rpm、sparc.rpmというサフィックスが付きます。

Red Hat Linux 7.0は、cvs-1.10.8、7.1はcvs-1.11、7.2および7.3はcvs-1.11.1p1がOSの標準です。cvsは通常OSのCD-ROMに収録されていますが、次のftpサイト、またはそのミラーサイトからも入手できます。

▼Red Hat Inc.のFTPサイト
[ftp://ftp.redhat.com/pub/redhat/linux/]

■■■■RPM(バイナリ)パッケージのインストール

対象とするRPMを適当なところに置き、rpmコマンドの引数にそのファイル名を指定すれば(CD-ROM上のファイルを直接指定しても構いません)、インストールすることができます。rpmコマンドを使えば、引数としてURLを直接指定してもインストールできますが、ここではカレントディレクトリにrpmパッケージをコピーした場合を例としてあげておきます。

CVSを新規にインストールする場合は、-iオプションを使います【図2.2.2】。-hと-vオプションは進捗状況を視覚的に見えるようにするオプションなので、気にならなければ省いても構いません。大事なのは-iだけです。

【図2.2.2】RPMのインストール(-iオプション)
▼
% rpm -hvi cvs-1.10.7.i386.rpm
▲

既に入っているCVSを新しいバージョンに置き換える場合は、-Uオプションを使います【図2.2.4】。

【図2.2.3】RPMのアップデート(-Uオプション)
▼
% rpm -hvU cvs-1.10.7.i386.rpm
▲

-eオプションで削除【図2.2.4】しておいてから、-iオプションでインストールしても構いません。マイナーアップデートの場合は、この手段を使います。また、--forceオプションで強制的に上書きという方法もありますが、あまりお勧めしません。

【図2.2.4】RPMの削除(-eオプション)
▼
% rpm -hve cvs
▲

■■■2.2.2 SRPMからRPMを作ってみよう

最新版を利用したい場合や、パッチをあてたバージョンが欲しい場合には、ソースコードからコンパイルするしかありません。しかし、2.2.1節で述べたパッケージマネージャから独立して入れてしまうと、アンインストール時に必要のないファイルが残ったり、うっかり上書きインストールしてしまったりと、困ったことが起こるかもしれません。それでもよいという人は、2.2節の方法でインストールしてください。

ソースコードと作り方が一塊になったSRPMから、RPMを作る方法を詳しく述べていると、それだけで本が一冊書けてしまいます。そこで本書では、ごくごく簡単な、最新OSに付属のSRPMからちょっと古いOSのためのRPMを作る例を取り上げます。なお、SRPMの作り方に関して詳しく知りたい人は、次のRPM-BUILD-HOWTO、または、『らぶらぶLinux3「もっと知りたい」人のためのパッケージ管理&構築入門』という書籍を参照してください。

▼らぶらぶLinuxサポートページ
URL http://member.nifty.ne.jp/village/

▼RPM-BUILD-HOWTO(RPMを使ったパッケージの作成方法)
URL http://www.linux.or.jp/JF/JFdocs/RPM-BUILD-HOWTO.html

■■■■ Red Hat Linux 7.0.1用のRPMをRed Hat Linux 7.2に付属のSRPMから作る

最新のOSを再インストールするまではないのだけれども、ちょっと前のOSに今のOSで使われているバージョンを入れたい、ということは結構あるのではないかと思います。5.xに6.xのもの、あるいは6.xに7.xものを入れるのはちょっと難しいのですが、7.x-1に7.xのものを入れる、程度でしたら比較的簡単にできます。

ここでは、7.3標準のcvs-1.11.1p1-7.src.rpmを使用して、7.0.1にcvs-1.11.1p1を入れることを考えてみます。まず、普通にcvs-1.11.1p1-7.i386.rpmをそのまま入れたらどうなるか、見てみましょう【図2.2.5】。

【図2.2.5】試しに入れてみる
▼
% rpm -hvi cvs-1.11.1p1-7.i386.rpm
エラー: 依存性の欠如:
        libc.so.6(GLIBC_2.2.3)  は cvs-1.11.1p1-7 に必要とされています
▲

怒られてしまいました…しくしく。このバイナリのRPMファイルが想定している標準ライブラリ(libc.so.6)が新しくて、現システムのものでは合わないようです。かと言って、標準ライブラリを入れ替えるのは、他のコマンドも依存していますから危険です。こういう場合には、再コンパイルしてライブラリを現システムのものを使うようにしてしまうのが、簡単です。つまり、対応するSRPMファイルを取ってきてRPMファイルを作り直します。

対応するSRPMファイルは、OSのCD-ROMから取るなり、上述のFTPサイトから入手してください。入手が済んだら、作成を開始します。

SRPMからRPMファイルを作成するには、まずSRPMファイルをrpmコマンドと-iオプションを使ってインストールします【図2.2.6】。

【図2.2.6】SRPMファイルのインストール
▼
% rpm -hvi cvs-1.11.1p1-7.src.rpm
cvs                         ################################################## 
▲

インストールされる先は、通常は/usr/src/redhatというディレクトリですが、設定によっては変わっているかもしれません。このディレクトリの所有者は、通常rootですので、rootで作業するか、あらかじめ所有者もしくは書き込み権限をユーザが書き込めるように変更しておくとよいでしょう。あるいは、ユーザの設定で、インストール先ディレクトリを変更してもよいでしょう(.rpmrcでできるはずですが、詳細は本書では触れません)。

以下では/usr/src/redhatを使用しているものとして話を進めます。/usr/src/redhatの構成を眺めてみましょう【図2.2.7】。

【図2.2.7】/usr/src/redhatの構成
▼
% ls -F /usr/src/redhat
BUILD/  RPMS/  SOURCES/  SPECS/  SRPMS/
▲

このディレクトリは5つのサブディレクトリを持っています。SPECSというのが、SPECファイルが置かれるところ、SOURCESというのが、構築に必要なソースコードとパッチが置かれる場所です。rpm -i xxx.src.rpmを実行すると、その中に含まれていたSPECファイルとソースコード/パッチがこれらのディレクトリにコピーされます。これらから実際の実行ファイルなどを構築する作業領域が、BUILDというディレクトリです。RPMSとSRPMSというディレクトリはできあがったRPMファイルとSRPMファイルを置く場所です。

SPECSに置かれたSPECファイルを使用して、このOSの環境に合ったバイナリのRPMを作成しましょう。SRPMを作成する必要は無いので、rpmコマンドを-bbオプションをつけて実行します【図2.2.8】。このオプションはバイナリのRPMファイルまでを作成するという意味のオプションです。

【図2.2.8】RPMファイルを作成しよう
▼
% rpm -bb /usr/src/redhat/SPECS/cvs.spec >& s.log&
[1] 10356
% tail -f s.log
(前略)
書き込み中: /usr/src/redhat/RPMS/i386/cvs-1.11.1p1-7.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.43869
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd cvs-1.11.1p1
+ '[' /var/tmp/cvs-root '!=' / ']'
+ rm -rf /var/tmp/cvs-root
+ exit 0
^C(Cntl-C)
[1]+  Done                    rpm -bb /usr/src/redhat/SPECS/cvs.spec 1>&s.log
▲

コンパイルしてまとめあげられたRPMファイルはRPMSディレクトリに置かれます。

RPMSはマシンのアーキテクチャ毎にi386やalphaなどのサブディレクトリを持ちます。ここでは、AT互換機を使用していますので、i386に置かれます。これをインストールしましょう【図2.2.9】。

【図2.2.9】できたRPMファイルをインストール
▼
% rpm -hvU /usr/src/redhat/RPMS/i386/cvs-1.11.1p1-7.i386.rpm
cvs                         ##################################################
▲

今回は無事インストールできました。良かった良かった。

無事入りはしましたが、OSが違いライブラリが違いますから、動作確認されたものではありません。ほとんど、問題はないかと思いますが、場合によっては不都合があるかもしれません。そうした場合にはオープンソースの流儀に従って、状況や中を眺めて問題点をはっきりさせ、自分で解決が図れない場合にはコミュニティーに相談したりするようにしてください。