« 日経ソフトウエア10月号でLL魂レポート | メイン | ITpro Challenge!でニコLT発表してきました »

ついカッとなってGopherサーバを立ててみた

gopherは非常に簡単なプロトコルのため、 telnetでGopherサーバにアクセスする方法 もお手軽です。HTTPと比べて、バイク小屋の議論となるようなサーバシグネチャもありません。

そういうのの相手するくらいならhttpdはぜんぶ捨ててgopherに戻りたい…。
(gopher対ゲイツ様 : ひろ式めもちょう)

今日はなぜか空前のGopherブームでしたので、「昔のgopher時代に戻ったらどうなるのか」を真剣に考えるため、実際にGopherサーバを立ててみました。

gopher://wafful.org/

gopher://wafful.org/ (※ Firefoxやlynxでアクセスできます)

どう見ても時代に逆行していますが、 私達が今JavaScriptを弄っているのも10年前の技術の再発見に他なりません。 もしかしたらそこに新しい未来が開けている可能性があるのかもしれません。

追記:Web2.0時代のGopher新サービス

GopherSnake

Gopher専用ソーシャルブックマークサイト「GopherSnake」が早速ローンチしてました。tokuhiromさん、相変わらず仕事が速すぎです。


■ GoFish - Gopher/Web Server

2005-10-21 に最新版 1.1 がリリースされている GoFish Gopher Serverを使ってみることにしました。他のGopherサーバソフトウェアは既に配布を終了していたり、10年に更新を停止してたりするので、非常に危険です。でも、GoFishなら./configureもついてます。今でも十分通用しそうです。 sourceforge.netから最新のgofish-1.1.tar.gzをダウンロードできます

CentOS 4.xでビルドしたソースRPM

自分が今メインで使っているサーバがCentOSなLinuxのため、RPMパッケージが欲しかったのでした。 rpmfind.netでgofishを検索すると0.29のバージョンまでしかでてきません。 1.0以降のspecファイルがメンテナンスされていないようでしたので、 最新の gopher-1.1 に対応したRPMパッケージを作成しました。

gopher経由で配布していますので、gopher対応クライアントより入手してください。

残念ながらrpmコマンドやwgetコマンドはgopherプロトコルをサポートしていませんが、lwpのGETコマンドやlynxはgopherに対応しています。 w3mはgopherに対応していません。 追記: w3mは./configure時に --enable-gopher を付けてコンパイルすれば gopher 対応になるとのことでした。(ukaiさん、yshlさん、ご指摘ありがとうございました。)

gofishサービスの再起動

$ service gofish stop
$ service gofish start

インストール時の注意事項などのBKは、すべてgofish.specファイルに記述しております。

■ gofish.spec ファイル(抜粋)

Summary: GoFish Gopher Server
Name: gofish
Version: 1.1
Release: 1
License: GPL
Group: Networking/Daemons
Source: %{name}-%{version}.tar.gz
URL: http://gofish.sourceforge.net/
BuildRoot: %{_tmppath}/%{name}-%{version}-root
AutoReqProv: no
Conflicts: gopher, gopherd

%description
GoFish is a simple gopher / web server. It is designed with security
and low resource usage in mind. GoFish uses a single process that
handles all the connections. This provides low resource usage, good
latency (no context switches), and good scalability.

GoFish runs in a chroot(2) environment. This means that GoFish can
only serve files from the root directory or below. While GoFish must
run at root privilege to be able to use port 70, it drops to a normal
user while accessing files.

%prep

%setup -n %{name}
%configure

%build
%{__make}

%install
%{__rm} -rf $RPM_BUILD_ROOT
perl -p -i.bak -e 's{(daemon /usr/sbin/gofish).*$}{mkcache -r -c /etc/gofish.conf && $1 -d -c /etc/gofish.conf};' init-gofish
perl -p -i.bak -e 's{^;(root|logfile|pidfile|port)}{$1};s{gopherd\.}{gofish.};' gofish.conf
%{__make} DESTDIR=$RPM_BUILD_ROOT install
%{__mkdir} -m 0755 -p $RPM_BUILD_ROOT/etc/rc.d/init.d
%{__install} -m 0755 init-gofish $RPM_BUILD_ROOT/etc/rc.d/init.d/gofish
%{__mkdir} -m 0755 -p $RPM_BUILD_ROOT/etc/logrotate.d
%{__cat} <<EOF> $RPM_BUILD_ROOT/etc/logrotate.d/gofish
/var/log/gofish.log {
    weekly
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
}
EOF
%{__rm} -f $RPM_BUILD_ROOT/etc/gofish-www.conf
%{__rm} -f $RPM_BUILD_ROOT/usr/bin/check-files

%clean
%{__rm} -rf $RPM_BUILD_ROOT

%post
if [ "$1" = 1 ] ; then
    %{__chown} gopher /var/gopher
    /sbin/chkconfig --add gofish
    /sbin/service gofish start 2>&1 >/dev/null
fi

%preun
if [ "$1" = 0 ] ; then
    /sbin/service gofish stop 2>&1 >/dev/null
    /sbin/chkconfig --del gofish
    /sbin/chkconfig --del gofish
fi

%files
%defattr(-,root,root)
%doc COPYING README INSTALL NEWS AUTHORS ChangeLog
/usr/sbin/gofish
/usr/bin/mkcache
/etc/rc.d/init.d/gofish
/etc/logrotate.d/gofish
%{_mandir}/man1/*
%{_mandir}/man5/*
/var/gopher/icons/*
/var/gopher/.gopher+
/var/gopher/.cache
/var/gopher/Configure_GoFish
%config(noreplace) /etc/gofish.conf

どうぞご利用ください。

トラックバック

この一覧は、次のエントリーを参照しています: ついカッとなってGopherサーバを立ててみた:

» [net] 次は誰がいちはやくWAISサーバを立ち上げるか競争ですね>< from in-between days
「昔のgopher時代に戻ったらどうなるのか」を真剣に考えるため、実際にGopherサーバを立ててみました。 http://labs.cybozu.co... [詳しくはこちら]

コメント

w3m は ./configure --enable-gopher で。

> ukaiさん
w3mはきちんと対応していたのですね。確認不足で失礼しました。yshlさんからもはてなブックマークのコメントで同様の指摘をいただいたので記事の方を修正しておきたいと思います。ありがとうございました。

コメントを投稿