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

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


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

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

当メルマガは、3年前の2月末に、第1号を発行しました。
ですので、もうすぐ3年を迎えようとしています。

読みにくい文章や読みづらい構成、ときには誰もついてきていないかも的なネタで、 みなさまを当惑させ続けてきたように思います。
そのようなメルマガにもかかわらず、登録解除せず読み続けていただいたことに、 たいへん感謝しております。

これからも、持てる能力をフル活動させて、なるべくわかりやすく、 かつ役に立つ内容をお送りしたいと思いますので、よろしくお願いします。

そうそう、これを機会に、みなさまに、 あらためてお知らせしておきたいことがあります。

それは、実際に試してみる、ということの大切さです。

所詮、本などを読んで得た知識は、そのときはなるほどと思っても、 時がたつにつれて、記憶が薄れていってしまうものです。
ですが、実際に試して得た経験は、時間がたっても、結構忘れません。
特に、失敗したときの経験は、何十年たっても、鮮明に残っています。

わたしも、最初入った会社で、システム管理を任されたときは、 あちこちのマシンの設定を試しては失敗する、ということをやらかしていました。

たとえば、NIS とか NFS の設定を間違えてしまいますと、OS ごと固まることがあり、 周囲のひとみんなに迷惑がかかります。
ネットワークに関しても、たとえば 10BASE-2 の場合、 うっかりどこかの接続を外してしまいますと、 ネットワーク全体が停止してしまいます。
そんな、当時のお約束的なことを、何度もやらかしました。

…ああ、ちょっと意識しただけで、脳ミソから失敗が、いくつも出てきてしまいます。 (他に、書けない失敗や、思い出になってない失敗も…。)

ひとさまに迷惑をかけることは、もちろんよいことではありません。
しかし、失敗を恐れていてはなにもできない、というのも事実です。
ここは、失敗を通じて経験を得ることで、将来世の中に貢献できるようになるのだ、 と前向きに考えて、周囲の冷たい視線を恐れずに、チャレンジしてみてください。

…と、原点をかえりみたところで、今回も、はりきってまいりましょう!

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

前回、RPM パッケージを手抜きで作成する方法を、ご紹介しました。

Vol.130 - RPM パッケージを作成する
http://www.usupi.org/sysad/130.html

使ってるのは Debian 系だからなぁとか、RPM ばっかりずるいぞ! とか、 厳しい意見がわんさか…なんてことはなく、いつも通り反響がなかったのですが、 読めない空気を読み取って、今回は、 deb パッケージの作成方法を取り上げてみたいと思います。

本質的には、RPM も deb も大差ないと、わたしは思っているのですが、 もちろん、使用するコマンドや、ファイルの構成はかなり異なります。

Debian 系のかたはもちろんですが、そうでないかたも、 となりの芝生が青いかどうかを確認する材料として、読んでいただけますと幸いです。


さて、今回の目標ですが、前回と同様、 パッケージ化したいファイル一式がすでにわかっていて、 それらを deb パッケージにすること、にしたいと思います。
例に挙げる対象も、やはり前回取り上げました、 usuDigest というニセのフリーソフトです。内容はアレですが、 手順は大小にかかわらず同じですので、気にしないふりをして、ご覧ください。

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

  1. deb パッケージを作成する環境を整える。
  2. dh_make コマンドに、必要なファイルを作ってもらう。
  3. control ファイルなどを編集する。
  4. dpkg-buildpackages コマンドで deb パッケージを作成してもらう。

今回は、環境の用意が間に合わず、 Ubuntu 7.10ja と 6.10ja でのみ確認しました。
おそらく、他の Debian 系のディストリビューション上でも、 同じ手順でできるはず…ですが、もしできなかったら、 文句メールを送付ください。
(できるだけ、フォローはさせていただきます。)


まずは、deb パッケージを作成するために必要なものをそろえます。

具体的には、dh-make, fakeroot, dpkg-dev といったところのパッケージが、 必要となります。
それらのパッケージがないか、あるいはあるかどうかがわからないという貴兄は、 以下のように apt-get してください。

  # apt-get install dh-make fakeroot dpkg-dev

 

そして、作業用の適当なディレクトリを作成します。

別に、ホームディレクトリ直下などででも、パッケージを作成することは可能です。 ただ、パッケージ作成の際に、いくつかのファイルができますので、 どのファイルが作られたのかがわかるように、 特定のディレクトリで行うようにしたほうが、無難です。

名前はなんでも構いませんが、ここでは、 ~/debu というディレクトリにしておきます。(…と、特に理由はありません。)

  % mkdir ~/debu

では次に、前回使用したファイルを、お取り寄せします。

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

↑を、ブラウザや wget コマンドなどを使って、入手しましょう。

そして、先ほどの ~/debu に、アーカイブだけを展開します。

  % tar xvfz 130_usudigest.tgz -C ~/debu usudigest-0.1.tgz

さらに、アーカイブを展開し、展開した先へ移動します。

  % tar xvfz ~/debu/usudigest-0.1.tgz -C ~/debu
  % cd ~/debu/usudigest-0.1

ここで、dh_make コマンドを実行し、必要なファイルを自動的に生成してもらいます。

  % dh_make -e usu@usupi.org -f ../usudigest-0.1.tgz
  Type of package: single binary, multiple binary, library, kernel \
  module or cdbs? [s/m/l/k/b]

-e オプションには、あなたのメールアドレスを指定してください。
dh_make コマンドを実行しますと、上記のように質問されます。
今回は、usudigest.pl という実行ファイルが1つだけですので、 s と返事して、single binary であることを伝えます。

すると、最終確認の末、debian というディレクトリが作成されます。
中には、いろいろ必要なファイルがそろっている、という次第です。


さて、そうしましたら、パッケージを作成…の前に、debian 以下にあるファイルを、 編集する必要があります。

まずは、debian/control ファイルです。
これは、パッケージの管理に必要な情報を記述するためのものです。
最低限的には、Section, Priority および Description を記述します。

  ...前略...
  Section: admin
  Priority: optional
  ...中略...
  Description: calculate digest
   usuDigest is a perl script for calculating digest.
   This is very small, simple and experimental.

Section には、パッケージの種別を指定します。
大きくは main, non-free, contrib 等があり、main にはさらに admin, base, devel などがあります。今回は、admin にしておきます。
Priority には、重要度を指定します。今回は、optional とします。
Description には、パッケージの概要を記述します。2行目以降は、 先頭に必ずスペースを入れてください。

そして、debian/copyright および debian/changelog のうち、 <> などで記述されているところを、それらしき記述に書き換えます。
(最悪、そのままでも、パッケージ自体は作成されます。)

他に、debian/rules や debian/docs なども、 本来は編集する必要があることもありますが、今回はそのままでも問題ありません。


さあ、いよいよお待ちかね、deb パッケージの作成です。

作成には、dpkg-buildpackage コマンドを用います。
以下のように実行してください。

  % dpkg-buildpackage -rfakeroot

すると、~/debu の下に、以下のファイルが作成されます。

  • usudigest_0.1-1_i386.deb
    肝心の deb パッケージです。
  • usudigest_0.1.orig.tar.gz
    オリジナルのソースコードです。usudigest-0.1.tgz と同じです。
  • usudigest_0.1-1.dsc
    ソースコードの概要が書かれたファイルです。
  • usudigest_0.1-1.diff.gz
    オリジナルからの変更点の差分です。
    今回の場合、debian 以下のファイルばっかりになります。
  • usudigest_0.1-1_i386.changes
    変更点が書かれたファイルです。

公開する場合は、いくつかのファイルが必要になりますが、 個人や組織の中だけで使用するなら、deb パッケージだけ使えばよいと思います。

まずは、中身を確認してみましょう。
dpkg コマンドを、-I オプションつきで実行しますと、概要を出力しますので、 おかしなところがないか確認しましょう。

  % dpkg -I usudigest_0.1-1_i386.deb

また、-c オプションつきで実行しますと、 パッケージ内のファイル一覧を出力してくれます。 正しいかどうかチェックしてください。

  % dpkg -c usudigest_0.1-1_i386.deb

問題がなさそうでしたら、-i オプションをつけて、インストールを行います。 (root の権限が必要です。)

  # dpkg -i usudigest_0.1-1_i386.deb

どうでしょうか。問題ないでしょうか。
特に問題がなく、そしてもう必要なければ、アンインストールしちゃって構いません。

  # dpkg -r usudigest

dpkg コマンドにつきましては、初期のころにご紹介しております。
よくわからないという貴兄は、以下を見ると、ちょっとわかるかもです。

Vol.033 - パッケージを管理する 〜 deb 編
http://www.usupi.org/sysad/033.html

 

これは余談ですが、deb パッケージは ar 形式ですので、 ar コマンドで中身を見ることもできます。

  % ar t usudigest_0.1-1_i386.deb
  debian-binary
  control.tar.gz
  data.tar.gz

それぞれのファイルの内容については、各自でご確認くださいまし。


以上、なんちゃって deb パッケージの作成方法を、ご紹介しました。

これは、あくまでも、 ありもののファイルを簡単にパッケージ化するための方法です。
本来は、ソースコードをもとにコンパイルなどを行ってパッケージにするまでを、 自動的に行うべきだということを、忘れないでくださいまし。

ちなみに、deb パッケージの作成や公開に関しては、以下が参考になると思います。

Debian 新メンテナガイド
http://www.debian.org/doc/maint-guide/

今回のように、個人や組織内でのみ使用し、公開する予定はない、という場合は、 ある程度読み飛ばせます。
(もちろん、全部読んで理解するほうが、望ましいと思います。)

宿題の答え

前回の宿題は、

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

でした。

今度は、実際にある Perl モジュールを対象にしてみたいと思います。

どれがふさわしいのか悩むところですが、Vine Linux4.2 にはなかった、 Digest::SHA2 の RPM パッケージを、簡易作成してみようと思います。
パッケージ名を perl-Digest-SHA2 と仮定して、作成していきましょう。

まずは、以下から、ソースコードを取り寄せます。

Digest::SHA2
http://www.cpan.org/modules/by-module/Digest/Digest-SHA2-1.1.1.tar.gz

これを展開して、とある場所にインストールします。

  % tar xvfz Digest-SHA2-1.1.1.tar.gz
  % cd Digest-SHA2-1.1.1
  % perl Makefile.pl
  % make
  % make test
  % mkdir /tmp/dest-usu
  % make DESTDIR=/tmp/dest-usu install

手順は、INSTALL ファイルに書いてある方法と、ほぼ同じです。
ただ、書いてある通りにインストールするのではなく、 /tmp/dest-usu というディレクトリを作成し、その下にインストールしています。

次に、前回使用した以下のファイルを、入手してください。
もとは架空のパッケージ用ですが、以下ではこれを雛型として使います。

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

これを、適当な場所で展開します。

  % tar xvfz 130_usudigest.tgz
  % ls
  usudigest-0.1.tgz usudigest.spec

さらに usudigest-0.1.tgz を展開し、ディレクトリ名を変更します。

  % tar xvfz usudigest-0.1.tgz
  % mv usudigest-0.1 perl-Digest-SHA2-1.1.1

まずは、README ファイルを、Digest::SHA2 のものに変更します。

  % cp -p ~/Digest-SHA2-1.1.1/README perl-Digest-SHA2-1.1.1/

もちろん、インストール内容も差し替えます。
dest を、先ほどインストールした /tmp/dest-usu に差し替えます。

  % rm -rf perl-Digest-SHA2-1.1.1/dest
  % mv /tmp/dest-usu perl-Digest-SHA2-1.1.1/dest

これを tar+gzip で圧縮し直せば、(偽の)ソースアーカイブは完成です。

  % tar cvfz ~/rpm/SOURCES/perl-Digest-SHA2-1.1.1.tgz \
  perl-Digest-SHA2-1.1.1

あと、忘れてはいけないのが、肝心の SPEC ファイルですよね。
以下のようにリネームして、それらしき内容に書き換えます。

  % mv usudigest.spec ~/rpm/SPECS/perl-Digest-SHA2.spec

よくわからないという貴兄は、以下を参考にしてください。
(諸般の事情により変なファイル名ですが、気にしないでください。)

http://www.usupi.org/sysad/131_digest_sha2_spec.txt

ここまでたどり着きましたら、あとはパッケージを作成するだけです。

  % rpmbuild -bb ~/rpm/SPECS/perl-Digest-SHA2.spec

以上で、RPM パッケージが完成します。(するはず…です。)

ただ、先ほども書きましたが、これはあくまでも、邪道なやりかたです。
ソースコードがあるなら、SPECファイルの記述方法を理解して、 rpmbuild に configure や make をさせて、パッケージにしてください。

今回の宿題

今回の宿題は、

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

です。

前回の宿題と同様、ホンモノを deb パッケージにしてみます。
手順はほぼ同様ですので、是非作成してみてください。

あとがき

みなさまの中には、システム管理を専業とされているかたもいらっしゃると思いますが、 SE やプログラマー、あるいはサポート業務などの合間に管理しているかたも、 大勢いらっしゃるのではないかと思います。

いずれにしましても、大半のかたがたが、朝から夜中まで、 平日だけではなく土日も出勤して、納期などと戦われていることと思います。

そんな生活をしていますと、結婚してもすれちがい的な生活になったり、 それ以前に出会いがなかったりして、いろいろと悩まれているのではないでしょうか。

さて、本題に入りましょう。
当メルマガとは姉妹関係にあります、サーチマン佐藤さんが、 SE と結婚して幸せになれるかどうかアンケートを行い、 200人強のかたがたの結果をまとめたものを、無料レポートにされました。↓

7年間ほったらかしの彼女は、SEの彼氏に何を求める?
SE200人への緊急アンケート調査を公開します。
http://www.searchman.info/repo.html

理論的なことも大事だと思いますが、似たような境遇に置かれているひとたちが、 どのように考えているのか、生の声を聞くことも大事ではないでしょうか。

わたしも拝見させていただきましたが、どちらか両極端に二分されるのかと思いきや、 思った以上にさまざまな意見があって、既婚者からみても、 いろいろと参考になりました。

もちろん、これから結婚する(かもしれない)というひとにとっても、参考になります。 メールアドレスを登録するだけで読めますので、是非読んでみてください。

 

今日は、珍しく昼間ひとりでしたので、いつもよりゆったりと書くことができました。 だからでしょうか、とうとう400行を越えてしまいました。
…うーん、次回は、もう少し簡潔にまとめたいですね…。

あ、次回は、2週間後ではなく、その次の3月9日にさせていただきます。
もちろん、月2回発行は守っていきますので、よろしくお願いします。

 

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

 

「いますぐ実践! 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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本