RedHat Package Managerの略でもともとは、RedHat社が開発したパッケージ管理システムです。GPLで提供されているため多くのディストリビューションで採用されています。
RPMは、パッケージ管理システム全体を指すこともあれば、単体のパッケージを表すこともあります。
大きく特定環境でビルドされたバイナリRPMとバイナリRPMを構築するための情報が含まれたソースRPMとに分かれます。
通常、パッケージのファイル名は次の規則にしたがい命名されます。
パッケージ名-バージョン-リリース番号.アーキテクチャ.rpm
バイナリRPMの場合、アーキテクチャ名にはi386やppc,sparcなどのCPUファミリー名が入ります。ソースRPMの場合は、CPUファミリー名ではなく、単にsrcまたはnosrcという文字列が入ります。
ソースRPMなのにソースがない(none source)とはどういうことかと思うかもしれません。
これは、ソースRPMの中にファイルサイズを抑える目的でソースアーカイブやパッチを含まないものです。これを再構築するためには、別途、必要なソースやパッチを入手する必要があります。
このアーキテクチャの部分は特に重要で例えば、PentiumなどのCPUが搭載されているコンピュータでsparcの名前がついたパッケージをインストールしたとしても動作しません。
ただし、emacsのマクロやperlのスクリプトなどで構成されたパッケージについてはCPUアーキテクチャに依存しないため、どのCPUでも共通で使えます。この場合、アーキテクチャの部分には、noarchという文字列が指定されています。
Web上で取得できるバイナリRPMは、多くの場合、RedHat Linux向けにパッケージングされているため、他のディストリビューションでは、インストールしても正常に動作しない場合があります。この場合、ソースRPMからあなたの環境向けにバイナリRPMを再構築する方が無難です。また、お使いのCPU向けにパッケージが用意されていない場合もソースRPMから再構築します。
通常、ソースRPMからバイナリRPMを再構築する場合、次のようにします。
$ rpm --rebuild hoge-ver-rel.src.rpm
環境によっては、rpmが--rebuildや-bbなどのオプションを受け付けない場合があります。
ex. RedHat8.0以上
この場合、代わりにrpmbuildコマンドを使って下さい。
ただし、インストールしたままの環境では、一般ユーザで再構築を実行できない可能性があります。その場合、次項を参考に環境を構築して下さい。
まず、ホームディレクトリに.rpmmacroというファイルを作成します。内容は次の通りです。
%_topdir /home/username/rpm
/home/usernameの部分をあなたのホームディレクトリ名に置き換えて下さい。
次に作成したパッケージを置くためのディレクトリなどを作成します。
$ mkdir -p ~/rpm/{BUILD,SOURCES,SPECS,SRPMS,RPMS/{i386,i586,i686,noarch}}
なおVine Linuxでは、以上の手順を次のコマンドで実行可能です。
$ mkrpmdir ~
こうする事でホームディレクトリに~/rpm以下のディレクトリが作成され、~/.rpmmacroを生成してくれます。ただし、通常はデフォルトで設定が終わっているので使用する機会は少ないかもしれません。
通常、バイナリRPMは一般的なビルドオプション(configureスクリプトのオプション)で構築されているため、使いたい機能を全て利用できるとは限りません。特別なオプションを導入したい場合は、ソースRPMを展開してspecファイルというものを修正して再パッケージングしてやる必要があります。
ソースRPMを展開するには次のコマンドを使います。
$ rpm -ivh hoge-ver-rel.src.rpm
ソースRPMを展開すると~/rpm/SOURCESディレクトリにソースアーカイブ(tarballなど)やパッチが展開され、~/rpm/SPECSディレクトリにパッケージングの情報が記述されたhoge.specというようなファイルが展開されます。
specファイルを編集し終えたら、次のコマンドでバイナリRPMが作成できます。
$ rpm -bb hoge.spec
SPECファイルから、ソースRPMを作成する場合、-bb オプションの代わりに -bs とします。
また、同時にバイナリRPMとソースRPMを作成する場合は、-ba オプションを利用して下さい。
SPECファイルの記述方法やパッケージングの詳細については、JFのRPM-BUILD-HOWTOなどを参考にしてください。(ただし、情報が古いです。どこか、最新版に対応した文書があれば、情報を下さい。)