読者です 読者をやめる 読者になる 読者になる

どこかに向かうらしい話

迷走エンジニアの放浪記

RPMを自作することに対する考察

ひさびさの投稿になります。
本日は「RPM(RPM Package Manager)」のファイルの自作について考察してみます。

RPM(RPM Package Manager)はレッドハット社が開発したソフトウェアのパッケージを管理するためのシステム(パッケージ管理システム)、及びコマンドであり、".rpm"拡張子のファイルを利用する。
RPMを採用するディストリビューションではソフトウェアがRPMパッケージで提供され、yumコマンドやrpmコマンドを利用して簡単にソフトウェアをインストールできる。
しかし、ディストリビューションが提供している以外のソフトウェアを利用したい場合や、提供されているものよりも新しいバージョンのソフトウェアを利用したい場合は、ソースファイルからコンパイルすることになるのが一般的である。

手動コンパイルによるインストールにおいては、以下のようなデメリットが生じる。

  • ソフトウェアの依存関係を個別に管理する必要が生じる
  • べき等性を個別に担保する必要がある

これはすなわちChefやPuppetのような構成管理ツールとの相性がよくないことを示す。
さらにこんなこともある。

  • 大量にスケールするさいに手動インストールだと効率が悪い

手間がかからないうちであれば、手動コンパイルでもよいと思うが、ある程度の規模なりなんなりになってくると、RPM化をしてあげるのがよいだろう。

先進的なDevがパッケージ化されていない最新バージョンのソフトウェアを使いたいという願望も、前向きに答えてあげられるのがOps側の仕事だと思うので。

さて、余談はここまでにして、本編に入ろう。
やはり写経とか参考図書が一番の近道だと思います。
紹介する先を見れば丁寧に記述されていますし、そちらを見ていただくほうが下手にまとめるより皆様の学習になるかと思うので、基本的にはリンクの貼りこみと方針の紹介になります。

自分にとってはCentOSRubyが一番使用する可能性が高いのですが、RPMパッケージとしては1.8.7がいまだに最新という状況。
以下のサイトを参考に、Ruby 1.9.3のRPMファイルを作ってみました。
https://github.com/lnxchk/ruby-1.9.3-rpm

このサイトの情報を見れば、特にコケる要素もなく簡単に作れるからびっくりすると思います。
このあたりの理論的なことについては、以下のサイトが役にたちます。

RPMパッケージ作成メモ」
http://www.02.246.ne.jp/~torutk/linux/centos5/rpmpackagebuild.html

「さくらのナレッジ
カスタムRPMや独自yumリポジトリではじめるソフトウェア管理術」
http://knowledge.sakura.ad.jp/tech/1086/

このあたりのサイトの情報を見ながら、ちょいちょいいじれば、2.0や2.1のRPMも作成できます。
やはり学習するなら、根本から理解したいところ。
RPMについて学習するなら、以下の2冊のうちいずれかは持っていても損はないだろう。
非常に詳細であり、古い本であるがいまだに価値が薄れるとは思わない著書である。
(古いがゆえに、中古で手に入れるしかありませんが…)

Red Hat RPM Guide (redhat PRESS)

Red Hat RPM Guide (redhat PRESS)

Redhat Package Manager Manual & Reference

Redhat Package Manager Manual & Reference

Linuxのパッケージという意味であれば、以下の著書もよい感じ。

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

内容は「プログラムのコンパイルとリンク」「ビルドの自動化とautotools」「ソフトウェアの国際化」「パッチの作成と適用」「ドキュメントの記述」「RPMによるソフトウェア管理」。
RPM自作だけしたいというのであれば、非常に遠回りな内容ではある。
しかしgcc,make,autoconf,patchなどに関する内容をOpsサイドの人間にもわかりやすい形で書かれており、Linuxを扱う人間はどこかのタイミングで一読はするべきだと思います。
(ただしC言語の簡単な知識は必要です)

今回書いていない付随するテーマは以下の通り(かな)。

  1. yum(Yellowdog Updater Modified)の仕組みとyumリポジトリの作成
  2. ほかのパッケージのRPM化(Redis,Nagiosなど)
  3. RPM自作におけるベストプラクティスとそれに対する考察

1.や2.に関してはググればいくらでも出てくると思うけど、3.については断片的に出てるので、これはほとんど引用になることを差し引いても紹介しようかなと思っています。