いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.130 / 読者数:1275名

こんばんは、うすだです。

最近、我が家では、「デルトラクエスト」の小説が大人気です。

デルトラクエスト (小説)
http://www.iwasaki-deltoraquest.com/
デルトラクエスト (TVアニメ)
http://www.deltoraquest.jp/

最初は、子どもが読みはじめ、よめがつられて読みはじめて、母子の会話には、 デルトラクエストがしばしば出てくるようになりました。

…ただ、わたしは、今のところまったく読んでいません。

「どう森」ブームのときも、母子間では盛り上がっていたものの、 わたしは会話についていけませんでした。ですので、今回は乗り遅れないぞ! と思ってましたが、残念ながら、乗り遅れてしまっております。
やはり、30代も後半になると、新しいものを始めることが、 億劫になってくるものなのでしょうか…。

うーん、なんだか悔しいので、 今年の目標は「デルトラクエストを読む」にしたいと思います。

微妙な結論に達したところで、今回も、はりきってまいりましょう!

今回のお題 - RPM パッケージを作成する

最近は、新しいモノでも、はじめから、 RPM や deb 形式のパッケージで提供されることが、 かなり当り前になってきたように思います。

ソース・アーカイブを伸長して、 configure とか make とかしていたころから比べますと、 ずいぶん便利な世の中になりました。
(Makefile やソースコードを書き換える時代もありましたね…(遠い目))

しかし、すべてが RPM パッケージ化されているわけではありません。
広く公開されていないモノ、過去の遺産、社内で開発されたモノなどは、 パッケージになっていない場合が、意外に多いのではないでしょうか。

それが逆に、システム管理者の腕の見せ所だったりするのかもしれませんが、 とはいえ、システム管理者も人の子です。楽できるなら、楽をしたいと思うのが、 人情というものでしょう。

というわけで、今週は、自力で RPM パッケージに仕立てあげる方法を、 なるべく簡単にご紹介したいと思います。


RPM パッケージと書いている以上、 RedHat 系のディストリビューションに限られてしまうということは、 ご理解いただけると思います。
Debian 系や Slackware 系などをお使いの貴兄は、RPM ってそうなってるんだーと、 他人事のように読んでいただけますと幸いです。

さて、今回の目標は、パッケージ化したいファイル一式がすでにわかっていて、 それらを RPM パッケージにすること、にしたいと思います。
以下では、わたしがさっとでっちあげた、usuDigest というフリーソフトをもとに、 その方法をご紹介していきます。

というわけで、RPM パッケージ化の手順は、以下の通りです。

  1. RPM パッケージを作成する環境を整える。
  2. SPEC ファイルを記述する。
  3. ソース・アーカイブを作成する。
  4. rpmbuild コマンドに RPM パッケージを作成してもらう。

この順番で、ご説明していきたいと思います。


まずは、RPM パッケージを作成するための環境を準備します。

一般ユーザの権限で行うほうがよいそうですので、ホームディレクトリの直下に、 rpm というディレクトリを用意します。
さらに、rpm ディレクトリの下に SPECS や SOURCES というディレクトリを作成します。

  % mkdir -p ~/rpm/{SPECS,SOURCES,BUILD,SRPMS,RPMS}

そして、~/.rpmmacros にその旨を記述します。
テキストエディタを用いて、以下を ~/.rpmmacros に追加してください。

  %_topdir ${HOME}/rpm

ただ、Fedora さんの場合、${HOME} を解釈してくれないようですので、 以下のように直接指定してください。(ホームが /home/usu の場合)

  %_topdir /home/usu/rpm

ちなみに、Vine のかたは、すでにそうなっていますので、何もしなくて結構です。


次に、「SPECファイル」というものを用意します。

SPECファイルには、ライセンスや提供元から、コンパイルやインストール方法まで、 さまざまな情報を記述する必要があります。

SPECファイルの記述方法を一からご紹介しますと、とっても膨大になってしまいます。 当メルマガは、「習うより慣れろ」をモットーとしていますので、今回は、 パッケージの作成に重点を置くことにして、SPECファイルの説明は、 ごっそり割愛させていただきます。

というわけで、まずは、以下のSPECファイルをご覧ください。

http://www.usupi.org/sysad/130_usudigest_spec.txt

これが、今回使用する SPECファイルです。
(本当は、"パッケージ名.spec" というファイル名にする必要がありますが、 諸般の事情により、変な名称になっています。ご了承ください。)

最初に申し上げた、usuDigest というツールの SPECファイルです。
中身の説明はすっとばしますが、別のパッケージを作る際に、 この SPECファイルを流用するなら、以下の手順で、書き換えてみてください。

  • まず、冒頭の以下の行を変更してください。
    バージョンとかそのままでもいいなら、変更の必要はありません。
    (とはいえ、少なくとも、パッケージ名は変えてくださいまし。)
      Name: パッケージ名
      Summary: パッケージの概略
      Version: バージョン
      Release: リリース
      License: ライセンス(GPL とか BSD とか Commercial とか)
    
  • 次に、%description とある直後に、 作成するパッケージの説明を記述してください。
      %description
      パッケージの説明文。
    
  • そして、%files に続く行の以下の部分(ここに… の所)に、パッケージに必要なファイルすべてを、フルパスで記述します。
      %files
      %defattr(-, root, root)
      %doc README
      ここに、パッケージに加えるファイルを羅列します。
    
    とあるディレクトリ以下すべてが含まれる場合は、そのディレクトリを指定しますと、 ディレクトリ以下すべてが対象となります。
  • 最後に、変更履歴を、%changelog とある直後に記述します。
      %changelog
      * 曜日 月 日 年 製作者 <URL> バージョン-リリース
      - 変更概要。
    

ただ、今回は、usuDigest の RPM パッケージを作成しますので、 これをそのまま使用します。


それでは次に、ソース・アーカイブを用意します。

中身は、Makefile と、説明が書いてある README ファイル、そして肝心の、 パッケージにするファイル群です。

Makefile は、以下のように、dest ディレクトリ以下にあるファイルを、 $(DESTDIR) 以下へ、ごっそりコピーするだけのものです。

  install:
	@[ -d $(DESTDIR) ] || mkdir -p $(DESTDIR)
	@tar cf - -C dest . | tar xfp - -C $(DESTDIR)

ですので、dest という名前のディレクトリを作成し、 パッケージに必要なファイルすべてを、dest ディレクトリにコピーします。

そして、Makefile, README と dest を、 "パッケージ名-バージョン" というディレクトリの下に置き、 tar+gzip のアーカイブにします。

  % ls usudigest-0.1
  Makefile  README  dest/
  % tar cvfz usudigest-0.1.tgz usudigest-0.1
  ...

そして最後に、rpmbuild コマンドで、パッケージに仕立てあげます。
(rpmbuild がない場合は、yum install rpmbuild などとしてください。)

SPECファイルを ~/rpm/SPECS に、ソース・アーカイブを ~/rpm/SOURCES に置きます。

  % ls ~/rpm/SPECS/usudigest.spec ~/rpm/SOURCES/usudigest-0.1.tgz
  /home/usu/rpm/SOURCES/usudigest-0.1.tgz
  /home/usu/rpm/SPECS/usudigest.spec

そして、rpmbuild コマンドを実行します。

  % rpmbuild -bb ~/rpm/SPECS/usudigest.spec

引数には、SPECファイルを指定します。
また、-bb オプションを指定することで、 バイナリパッケージの作成までをお願いしています。

すると、うまくいけば、RPM パッケージが作成されます。

  % rpm -qlp ~/rpm/RPMS/noarch/usudigest-0.1-usu0.noarch.rpm
  /etc/usudigest.conf
  /etc/usudigest.d
  /etc/usudigest.d/hosts
  /etc/usudigest.d/passwd
  /usr/sbin/usudigest.pl
  /usr/share/doc/usudigest-0.1
  /usr/share/doc/usudigest-0.1/README

README ファイルは、/usr/share/doc/パッケージ名-バージョン/ の下に置いてくれます。
usuDigest は noarch で作成されますが、アーキテクチャ依存なので困るという貴兄は、 SPECファイル中の以下の1行を消してください。
(noarch ではなく、i386 とかになります。)

  BuildArch: noarch

さて、これで RPM パッケージが完成しました。
あとは、あちこちのマシンに、インストールしていくだけですね。

  # rpm -i usudigest-0.1-usu0.noarch.rpm

もちろん、要らなくなったら、rpm -e で一発消去できます。(便利〜)

  # rpm -e usudigest

以上、簡易的な RPM パッケージ化の方法を、ご紹介しました。

今回使用したファイルを、以下にまとめておきました。
よろしければ、ご自由にお使いください。

http://www.usupi.org/sysad/130_usudigest.tgz

また、RPM パッケージの作成方法に関しては、以下の本が、とても参考になりました。

Inside Linux Software オープンソースソフトウェアのからくりとしくみ
http://www.amazon.co.jp/exec/obidos/ASIN/4798112836/usupiorg06-22

RPM パッケージだけでなく、autoconf や libtool, 国際化等についても詳細な説明があり、かゆいところに手が届く、便利な本です。

今回、パッケージの依存関係がなく、インストール前後に必要な作業などもない、 という簡単なケースでご説明しました。
しかし、そういったしがらみがある場合や、 単に SPECファイルについて理解を深めたいという貴兄は、 一読することをお勧めします。

宿題の答え

前回の宿題は、

  Cygwin で xinetd を起動してみましょう。

でした。

まず、当然ですが、xinetd が必要です。
見当たらないかたは、setup.exe を起動し、Net -> xinetd にチェックを入れて、 パッケージを追加しましょう。

追加しましたら、xinetd-config を起動します。

  $ xinetd-config -y

-y オプションは、ssh-host-config と同様、 すべての問いに「はい」と答えるための呪文です。
これにより、最低限的に設定ができましたので、手動で起動できます。

  $ xinetd

素の状態でも、echo とか daytime とか chargen が動きます。

  % telnet Cygwinが動いているマシン daytime
  Trying 192.168.1.222...
  Connected to Cygwinが動いているマシン.
  Escape character is '^]'.
  24 JAN 2008 01:54:28    
  ^]
  telnet> close
  Connection closed.

これにより、xinetd を試すための環境ができたことになります。
xinetd 上でなにかを動かすネタは、過去に何度か取り上げています。
ちょこっとでも興味のある貴兄は、実際に試してみてください。

Vol.006 - うそうそWWWサーバを作る
http://www.usupi.org/sysad/006.html
Vol.007 の宿題の答え (/proc/meminfo を返すモノ)
http://www.usupi.org/sysad/007.html
Vol.092 - サービスを遠隔監視する
http://www.usupi.org/sysad/092.html
Vol.126 の宿題の答え (chroot して動くモノ)
http://www.usupi.org/sysad/126.html

また、Windows の起動時に xinetd を自動起動させるには、 initscripts と chkconfig が必要です。 その手順を書くとまた長くなってしまいますので、超大雑把に説明しますと、 init をサービスに登録して、init 経由で xinetd が起動するように設定します。
あとは、自由研究ということで、各自お悩みくださいませ。
# 実は、ややうまくいかなかったので、ごまかしているだけだったり…。

今回の宿題

今回の宿題は、

  今回のファイルを使用して、実際に RPM パッケージを作成しましょう

です。

http://www.usupi.org/sysad/130_usudigest.tgz
を利用して、独自の RPM パッケージを作成してみてください。

ご説明した手順で、SPECファイルの一部を書き換え、 ソース・アーカイブの dest/ 以下を変更するだけでできます。 是非トライしてみましょう。

あとがき

正直に申し上げますと、Inside Linux Software という本は、今年の1月に、 図書館で借りてきました。(正式に延長して、まだ借りています。)

簡単に RPM パッケージ化できることがわかってからは、 いろいろなものをパッケージにして、将来に備えて(?)います。

最近、勝手に RPM パッケージにしたのは、IPAフォントです。

IPAフォント
http://ossipedia.ipa.go.jp/ipafont

最近、無償で利用できるようになった TrueType フォントです。
ZIP ファイルで配布されていますが、出し入れしやすくするため、 自分でパッケージにしてみました。
ファイルを所定の位置に置いて、インストール時に fc-cache コマンドを起動して、 自動的に組み込めるようにするまでを、自力で記述することができました。

本業と直接関係ないところに情熱を注ぐのは、今も昔も変わりません。
みなさんも、仕事に行き詰まったら、能動的な逃避行動として、実践してみてください。

 

いやしかし、今日は寒いですね。
ここ名古屋では、雪は降っていませんが、関東では雪が積もっているそうですね。 風邪など引かぬよう、みなさまご自愛くださいませ。

 

今回も、ここまで読んでいただき、ありがとうございました。
では、次回は 2月17日 頃に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」− 調子は本業と反比例しているかも…栗の絵なサイトです。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本