C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

openSUSE-12.2にdarkhttpdをcheckinstallしてrpmで入れる

コマンドからさくっと使える割に一時的な物置きのみならずウェブ開発用にも重宝する簡易HTTPdのdarkhttpdを導入しましょう。

と、思ったけれど、

% zypper se darkhttpd
 ...

やはり出て来なかった。ウェブのパッケージ検索でも出てこない

darkhttpdは普通にソースをtar玉で公開しているし、ビルドも数秒と掛からないコンパクトな良い子。`make`して`cp darkhttpd ~/opt/bin`とかしても構わないのだけど、checkinstallでお手軽にrpmにして導入してみる。

先ずはcheckinstallを導入しましょう。こちらはzypperで導入できます。

% zypper in checkinstall-lang
 ...

langの依存パッケージで本体も入るのでコマンド打つのが楽なんですゴメンナサイゴメンナサイ・w・

さて、checkinstallを導入できたなら早速使ってみましょう。なお、zypperで導入したcheckinstallは`/usr/sbin`に導入されています。よってrootじゃないと使えません。

% sudo su
 ...
% which checkinstall
/usr/sbin/checkinstall

checkinstallを今回はdarkhttpdのtar玉を展開したディレクトリーで実行します。

% ls
AUTHORS  Makefile  README  darkhttpd.c
% checkinstall
 ...

対話を進めます。

checkinstall 1.6.2, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
           このソフトウェアはGNU GPLの下でリリースしています。


The package documentation directory ./doc-pak does not exist. 
Should I create a default set of package docs?  [y]: 

パッケージのドキュメンテーションを準備..OK

使用するパッケージ方式を選んでください。
Slackwareなら[S], RPMなら[R], Debianなら[D]を入力R


このパッケージの説明を書いてください
説明の末尾は空行かEOFにしてください。
>> When you need a web server in a hurry.
>> 

**************************************
**** RPM package creation selected ***
**************************************

このパッケージは以下の内容で構成されます: 

1 -  Summary: [ When you need a web server in a hurry. ]
2 -  Name:    [ darkhttpd ]
3 -  Version: [ 1.8 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ Applications/System ]
7 -  Architecture: [ x86_64 ]
8 -  Source location: [ darkhttpd-1.8 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ darkhttpd ]

変更するものの番号を入力してください。Enterで続行します: 

Installing with make...Installing with install...

========================= インストールの結果 ===========================
make: *** ターゲット `install' を make するルールがありません.  中止.

****  インストールは失敗しました。パッケージの作成を中断します

クリーンアップ..OK

Bye.

oops!!

darkhttpdのMakefileにはinstallルールが無いのでした。

% cat Makefile
CC?=cc
CFLAGS?=-O
LIBS=`[ \`uname\` = "SunOS" ] && echo -lsocket -lnsl`

.PHONY: all clean

all: darkhttpd

darkhttpd: darkhttpd.c
        $(CC) $(CFLAGS) $(LIBS) darkhttpd.c -o $@

clean:
        rm -f darkhttpd core darkhttpd.core

installルールを追記しましょう・w・;

% echo -e '\ninstall: darkhttpd\n\tinstall darkhttpd /usr/local/bin\n' >> Makefile

さてさてワンモア・x・

% checkinstall

checkinstall 1.6.2, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
           このソフトウェアはGNU GPLの下でリリースしています。



使用するパッケージ方式を選んでください。
Slackwareなら[S], RPMなら[R], Debianなら[D]を入力R


**************************************
**** RPM package creation selected ***
**************************************

このパッケージは以下の内容で構成されます: 

1 -  Summary: [ When you need a web server in a hurry. ]
2 -  Name:    [ darkhttpd ]
3 -  Version: [ 1.8 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ Applications/System ]
7 -  Architecture: [ x86_64 ]
8 -  Source location: [ darkhttpd-1.8 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ darkhttpd ]

変更するものの番号を入力してください。Enterで続行します: 

Installing with make...Installing with install...

========================= インストールの結果 ===========================
cc -O `[ \`uname\` = "SunOS" ] && echo -lsocket -lnsl` darkhttpd.c -o darkhttpd
install darkhttpd /usr/local/bin

======================== インストールに成功しました ==========================

Copying documentation directory...
./
./AUTHORS
./README

tempディレクトリにファイルをコピー..OK

Stripping ELF binaries and libraries...OK

manページを圧縮..OK

ファイルリストを作成..OK

RPMパッケージを作成..OK

注意: パッケージはインストールされません

tempファイルを削除..OK

バックアップパッケージを書き込み..OK
OK

temp dirを削除..OK


**********************************************************************

 Done. The new package has been saved to

 /usr/src/packages/RPMS/x86_64/darkhttpd-1.8-1.x86_64.rpm
 You can install it in your system anytime using: 

      rpm -i darkhttpd-1.8-1.x86_64.rpm

**********************************************************************

先ほど失敗した際に定義済みだった内容が残っているので Enter 1回で rpm 作成まで進みました。最後に出ているメッセージを基に、パッケージを`rpm -i`でインストールしましょう。

% rpm -i /usr/src/packages/RPMS/x86_64/darkhttpd-1.8-1.x86_64.rpm

rootから抜けて一般ユーザーで`darkhttpd`を使ってみましょう。

% exit
% which darkhttpd
/usr/local/bin/darkhttpd
% darkhttpd . --daemon && curl http://localhost:8080 && pkill darkhttpd
darkhttpd/1.8, copyright (c) 2003-2011 Emil Mikulic.
listening on: http://0.0.0.0:8080/
<html>
<head>
 <title>/</title>
</head>
<body>
<h1>/</h1>
<tt><pre>
<a href="..">..</a>/
<a href="AUTHORS">AUTHORS</a>                                          56
<a href="Makefile">Makefile</a>                                        274
<a href="README">README</a>                                         1352
<a href="backup-120220121215-pre-darkhttpd-1.8.tgz">backup-120220121215-pre-darkhttpd-1.8.tgz</a>   5201601
<a href="darkhttpd">darkhttpd</a>                                     47038
<a href="darkhttpd.c">darkhttpd.c</a>                                   74774
<a href="description-pak">description-pak</a>                                  39
<a href="doc-pak">doc-pak</a>/
</pre></tt>
<hr>
Generated by darkhttpd/1.8 on Sun, 02 Dec 2012 03:28:58 GMT
</body>
</html>

動作テストの簡単の為`curl`でHTTP GETしていますが、もちろんChrome等のウェブブラウザーでも確認できます。なお、darkhttpdの使い方についてはオプション無しで`darkhttpd`を実行すれば表示されます。