黒木の簡易掲示板システム

Copyright (C) 1997 1998 1999 KUROKI Gen <kuroki@math.tohoku.ac.jp>
Mathematical Institute, Tohoku University, Sendai JAPAN.

作者: 黒木 玄  (東北大学大学院理学研究科数学専攻)

From: KUROKI Gen <kuroki@math.tohoku.ac.jp>
Date: Sat Apr 10 17:44:27 JST 1999
Version: 1.9.7

目次

1. 解説
2. インストールの仕方
3. おまけのスクリプト
4. mail2bbs.pl について
5. jweblint の使用方法
6. バージョンアップの歴史

1. 解説

WWW 上で利用できるシンプルな電子掲示板システムです。このシステムは perl で書かれた CGI スクリプトで実現されています。あなたがお使いの web server で perl, sort, sed および CGI が使用可能であれば利用できます。ただし、このシステムは無保証です。自分自身の責任のもとで利用してください。

この版の掲示板システムは

http://www.math.tohoku.ac.jp/~kuroki/pub/kurokibbs/kurokibbs-1.9.7.tar.gz

に置いてあり、最新版は

http://www.math.tohoku.ac.jp/~kuroki/pub/kurokibbs/

から入手でき、古い版および古い版からのパッチは

http://www.math.tohoku.ac.jp/~kuroki/pub/kurokibbs/old/

に保存してあります。この掲示板システムを利用するために必ずしも必要ありませんが、作者自身が使用している jweblint が

http://www.math.tohoku.ac.jp/~kuroki/pub/jweblint/

に置いてあります。また、作者が確認した範囲で、この掲示板システムを使用している方のリストが

http://www.math.tohoku.ac.jp/~kuroki/pub/kurokibbs/kurokibbs-users.html

に置いてあります。

なお、この掲示板システムの実際の使用例を見たければ、作者自身による「黒木のなんでも掲示板」を覗いてみると良いでしょう。

添付したファイルの著作権は以下の通りです。 COPYING は

  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                           675 Mass Ave, Cambridge, MA 02139, USA

です。その邦訳 gpl.text も

  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                           675 Mass Ave, Cambridge, MA 02139, USA

であり、

ftp://ftp.sra.co.jp/pub/gnu/sra/GPL2-j/gpl.text.gz

から取り寄せました。 jcode.pl は

Copyright (c) 1995,1996,1997 Kazumasa Utashiro <utashiro@iij.ad.jp>
Internet Initiative Japan Inc.
3-13 Kanda Nishiki-cho, Chiyoda-ku, Tokyo 101, Japan

Copyright (c) 1992,1993,1994 Kazumasa Utashiro
Software Research Associates, Inc.

であり、

ftp://ftp.sra.co.jp/pub/lang/perl/scripts/utashiro-scripts/

から取り寄せました。cgi-lib.pl は

  Copyright 1994 Steven E. Brenner  

であり、

http://cgi-lib.stanford.edu/cgi-lib/

から取り寄せました。より詳しい情報は各ファイルの先頭の部分を見てください。

これ以外のファイルの著作権は作者の私にあります。それらを COPYING (もしくはその邦訳 gpl.text) に書いてある GNU GPL 2 に従って、自由に使用・配布・改変して下さい。改良した場合には、作者にパッチを送って頂くと助かります。

この掲示板システムの特徴は以下の通りです。

2. インストールの仕方

(0) 必要があれば、計算機の管理者にこの文書を見せて、perl がインストールされているか、http server で CGI を利用できるか、などについてよく聞いておく。

(1) Web 経由でアクセスできるところにディレクトリーを掘る。例えば、そのディレクトリーは /home/userid/public_html/BBS であると仮定する。

  mkdir /home/userid/public_html/BBS

(2) その下に spool という名前のディレクトリーを掘る。

  mkdir /home/userid/public_html/BBS/spool

そして、そのディレクトリーを chmod 777 する。

  chmod 777 /home/userid/public_html/BBS/spool

これを忘れると、掲示板に書き込めなくなる。

(3) Makefile の最初の部分を適切に書き直す。 (make コマンドが使える環境がなければ、(6)にジャンプ。) 例えば、上の仮定のもとでは、

  TOP_DIR = /home/userid/public_html/BBS

と設定しなければいけない。すなわち、TOP_DIR としてインストール先のディレクトリーを設定しなければいけない。さらに、perl のバイナリーが置いてある場所を

  PERL = /usr/local/bin/perl

の行で指定する。

要点: Makefile の TOP_DIR は必ず書き変え、PERL の行も正しいかどうかチェックすること。

(4) common.pl.in の最初の部分を自分の設定に合わせて書き直す。掲示板の名前を $title_of_bbs に設定し、その掲示板の管理者の表示の仕方を $maintainer に設定し、自分のウェブホームページの URL を $homepage に設定する。この3行は必ず書き変えてください。 (weblint の使用に関しては、後の方の節を見よ。)

要点: common.pl.in 内の $title_of_bbs, $maintainer, $homepage の設定を必ず書き変えること。

(5) make を実行する。

  make

すると、bbs.cgi と common.pl が作成される。

(6) make コマンドを使える環境が無い場合は、bbs.cgi.in および common.pl.in のそれぞれを手動で bbs.cgi と common.pl にコピーし、その中の文字列

  %%%%%%PERL%%%%%%
  %%%%%%COMMON_PL%%%%%%
  %%%%%%TOP_DIR%%%%%%

を、それぞれ、例えば以下のように書き直す。((5)に成功した人はする必要はない。)

  /usr/local/bin/perl
  /home/userid/public_html/BBS/common.pl
  /home/userid/public_html/BBS

さらに、(4)と同様に、common.pl の内容を適切に書き変えておく。

(7) make install を実行する。(make コマンドが使える環境がなければ、(8)にジャンプ。)

  make install

これによって、掲示板を利用するために必要最小限のファイルがコピーされる。

(8) make コマンドを使える環境が無い場合は、(1)で作成したインストール先のディレクトリーに、以下のファイルを手動でコピーする。((7)に成功した人はする必要はない。)

  common.pl
  bbs.cgi
  howtopost.pl
  cgi-lib.pl
  jcode.pl

さらに、chmod +x bbs.cgi して、bbs.cgi を実行可能にしておく。

  chmod +x /home/userid/public_html/BBS/bbs.cgi

この時点で、bbs.cgi が実行可能になるので、実際にそれがコマンドラインから実行可能であるか確かめておくと安心です。

(9) rule.html に利用規則を書いて、TOP_DIR で指定したディレクトリーにコピーする。(これは必ずしもやる必要はない。) コピーを、 cp コマンドを使って行なう代わりに、

  make install-rule

を実行することによって行なうこともできる。作者が使っている例を rule.html.in として添付してあるので、それを適切に書き直して利用しても良い。

(10) インストール先のディレクトリーに cd して、touch index.html のようにして、空の index.html は作っておいた方が良い。例えば、上の仮定のもとでは、

  cd /home/userid/public_html/BBS
  touch index.html spool/index.html

このようにしておくと、ディレクトリーの中身を直接に覗かれずにすむ。これとは別に、dot_htaccess を .htaccess の名前でコピーするという方法もある。可能ならば、この後者の方法がおすすめである。 (この(10)の手続きは必ずしも必要ない。)

(11) bbs.cgi に Web 経由でアクセスしてみて、メッセージがポストできるかどうか試してみる。

(12) それに成功したら、さらに自分の好みに合わせて環境を整備する。例えば、howtopost.html に自分の掲示板の主旨の説明を書き加えたりする。 (できるだけ、書き変えるようにして下さい。)

(13) 適当な時期に、リンク集を links.html という名前で作成して、TOP_DIR で指定したディレクトリーにコピーする。コピーを cp コマンドで行なう代わりに、

  make install-links

を実行することによって行なうこともできる。 links.html.in として添付してあるので、それを適切に書き直して利用しても良い。

3. おまけのスクリプト

ディレクトリー utils の下には便利なスクリプトが用意してある。ただし、それらを生成するためには、make all を実行しなければいけない。

  make all

(1) lock.pl: 掲示板への書き込みを禁止する。

(2) unnlock.pl: Lock を解除する。

使用例: log.html を直接編集する。

  lock.pl
  emacs log.html
  unlock.pl

(3) reverse.pl: log.html を食わせるとメッセージの順序を逆転したものを出力する。

使用例: log.html 内のメッセージの順序を逆転した結果を 199712.html に出力する。

  reverse.pl log.html > 199712.html

(4) clear.pl: log.html を食わせるとメッセージを全て削除した結果が出力される。

使用例: 1997年12月分の記録を 199712.html に残し、メッセージの記録を含まない log.html を作成する。

  lock.pl
  mv log.html log199712.html
  reverse.pl log199712.html > 199712.html
  clear.pl log199712.html > log.html
  chmod 666 log.html
  mv post_log post199712_log
  unlock.pl

(5) rotate.pl, monthly.pl: log.html 内の古いメッセージを他のファイルにバックアップし、log.html 内のメッセージを消去し、old.html を更新し、index_YYYYMM*.html を作成する。(次の(6)も参照せよ。)

使用例: 不定期に、手動で rotate.pl を実行する。

使用例: 一月ごとに cron で monthly.pl を実行する。例えば、monthly.pl を /home/userid/public_html/BBS/monthly.pl にコピーし、crontab に

  0 0 1 * * /home/userid/public_html/BBS/monthly.pl

と書いておくと、一月ごとに掲示板関係のファイルが自動的に更新されるようになる。

作者は monthly.pl を使用しています。howtolink.html を Makefile 内の TOP_DIR で指定したディレクトリーに作成すると、その内容を old.html を作成するときにその中に含めてくれます。utils/howtolink.html.in その例が置いてあります。書き変えてから利用してください。

(6) log2index.pl: log.html などからそのインデックスを作成する。この機能は monthly.pl および rotate.pl の中にも組み込まれており、それらを実行するごとにインデックスが自動的に作成される。

使用例: 199801.html から index_199801.html を作成する。

  log2index.pl 199801.html > index_199801.html

これによって、199801.html 内の記事の Name, Subject, Date の一覧が作成される。

4. mail2bbs.pl について

mail2bbs/mail2bbs.pl を用いると、E-mail 経由で掲示板に書き込むことが可能になります。mail2bbs.pl を作成するためには、Makefile 内の MAIL2BBS で指定された E-mail address を変更し(必ず変更すること!)、SUBDIRS の mail2bbs のコメントアウトを外してから、make all してください。

この状態で、make install すると、mail2bbs/howtopost.html がインストール先の howtopost.html に上書きされ、mail2bbs.pl がコピーされます。

使っている web server の名前が、例えば、host.domain.ac.jp であるならば、MAIL2BBS を

  MAIL2BBS = mail2bbs@host.domain.ac.jp

のように設定し、/etc/aliases に

  mail2bbs: "|/home/userid/public_html/BBS/mail2bbs.pl"

のように書き込みます。 (さらに、newaliases を実行することが必要かもしれない。)この作業は root 権限がなければ不可能なので、web server の管理者に頼みましょう。

さらに、mimex の perl scripts のパッケージを、例えば、

http://www.math.tohoku.ac.jp/~kuroki/pub/mimex/

から入手し、その中の rmime を /usr/local/bin にインストールし、 /etc/aliases に

  mail2bbs: "|/usr/local/bin/rmime|/home/userid/public_html/BBS/mail2bbs.pl"

と書き込むことによって、メールのヘッダーの MIME encode された Subject などを decode することもできます。

まとめ: mail2bbs.pl を使うためには、Makefile の mail2bbs 関係に項目を適切に書き変え、make install して、/etc/aliases を書き変えれば良い。

以上の準備のもとで、mail2bbs@host.domain.ac.jp 宛にメールを出すと、その内容が掲示板に書き込まれます。

5. jweblint の使用方法

(0) まず、jweblint を用意し、その使い方を憶える。注意するべきことは、html-ext.pl や jcode.pl などを perl のライブラリを置く場所にコピーすることを忘れないことである。実際に jweblint をインストールしたら、それが実際に使用可能であることを確かめてから先に進んで欲しい。

(1) common.pl.in の $WEBLINT の設定の行のコメントを外し、用意した jweblint を置いた場所と使い方に従って書き直し、make を実行する。 (make コマンドが使用不可能なら、common.pl を直接書き変える。)

(2) 掲示板のシステムを再インストールする。もしくは、(1)で作成した common.pl をインストール先のディレクトリーにコピーする。

(3) bbs.cgi に web 経由でアクセスし、Preview ボタンを押してみる。適当に間違ったタグを textarea に書き込んでから、Preview ボタンを押すと、

Weblint

(4): <hoge> は不明なエレメントです.

のように表示される。jweblint による文法チェックが成功すれば、

Weblint

Successful completion.

と表示される。jweblint の起動に失敗すると、

Weblint

Can not execute "/usr/local/bin/jweblint -x Wilbur".

のように表示される。

6. バージョンアップの歴史

[1999/4/10] Version 1.9.7. $ENV{'REMOTE_HOST'} が空ならば $ENV{'REMOTE_ADDR'} を post_log に残すことにした。 README-j.txt を w3m で作成することにした。できれば、このバージョンで本当に修正を止めることにしたい。

[1998/9/23] Version 1.9.6 beta 4. HTTP_COOKIE の記録も post_log に残すことにした。 POST method 以外で掲示を投稿できないようにした。 $ENV{'HTTP_REFERER'} が $ENV{'SERVER_NAME'} を含んでなければ掲示を投稿できないようにした。 $DONOTUSETAGS が真ならタグの付いた掲示を投稿できなくした。「強姦」氏対策を追加した。

[1998/9/14] Version 1.9.6 beta 3. HTTP_HOST, HTTP_FORWARDED, HTTP_X_FORWARDED_FOR の記録も post_log に残すことにした。

[1998/9/7] Version 1.9.6 beta 2. 各掲示から "\r" = ^M を削除するようにした。

[1998/9/1] Version 1.9.6 beta 1. search.html を見付けたらメニューに追加するようにした。

[1998/8/26] <kbd> </kbd> ではなく <tt> </tt> を使うようにした。 hostopost.html を大幅に書き直した。

[1998/4/24] Version 1.9.5. ニューバージョン 2.x.y でやりたいことを TODO-j.txt にまとめた。このバージョンで 1.x.y の改訂は終了にする予定。

[1998/3/9] bbs.cgi.in を変更して、使えないタグの種類を増やした。

[1998/2/25] log2index.pl.in を変更した。 rule.html に mule 上の w3 を使うときの注意を追加。 gpl.text を追加。

[1998/2/15] Version 1.9.4. jcode.pl, cgi-lib.pl をそれぞれ version 2.6, version 2.15 にバージョンアップした。

[1998/2/8] 掲示板から links.html にリンクをはるようにした。dot_htaccess のバグを取った。古い dot_htaccess を御使用の方は新しい dot_htaccess を利用するようにして欲しい。

[1998/2/4] utils/rotate.pl.in に log2index.pl の機能を追加した。(他にも bbs.cgi.in をちょっとだけいじった。)

[1998/2/3] Version 1.9.3. "Post Your Message", "Read Recent Messages", "Read Old Messages" のそれぞれを "Post Message", "Recent Messages", "Old Messages" に変更した。

[1998/2/2] bbs.cgi が perl 5.004 では

Can't modify ref-to-glob cast in substitution at bbs.cgi line 265, near "s/&/&amp;/;"
というエラーが出てしまうバグを修正した。ちなみに、作者は基本的に perl4 を用いることが多い。そのため、perl5 では他にも問題が生じているかもしれない。一般論。perl5 を入れても perl4 とは互換性がないので、perl4 も入れる必要なことが多い。perl5 で駄目なら perl4 を使ってみましょう。

[1998/2/2] Version 1.9.2. bbs.cgi.in を変更し、Message-Id の中に ':' の文字が入らないようにした。

[1998/2/1] Version 1.9.1. インデックスを作成するためのスクリプト utils/log2index.pl.in を追加し、その内容を utils/monthly.pl.in に追加した。掲示板システム自身の変更は全くしてない。

[1998/1/27] Version 1.9. common.pl.in と bbs.cgi.in を変更した。これによって、Message Accepted のページに [Post Your Message] (bbs.cgi へのリンク)が表示されなくなった。これは、Lynx/2.7.2 ユーザーが簡単に二重投稿をしてしまえなくするためである。Lynx/2.7.2 ユーザーが Message Accepted のページで、[Post Your Message] をクリックすると、同じ記事が二重投稿されてしまう。Netscape や w3 などではこのようなことは起こらないが、Lynx ユーザーのためにはこのような設定をデフォルトにしておいた方が良いであろう。

[1998/1/22] Version 1.8.1. README-j.html の 2 (10) を修正した。rule.html.in に加筆した。

[1998/1/20] Version 1.8. README-j.html を作成し、README-j.txt をそれを用いて作成することにした。

[1998/1/20] 利用規約を書いておくための rule.html を追加した。jcode.pl の version を 2.0 から 2.3 に上げた。

[1998/1/17] common.pl.in と monthly.pl.in を変更した。これによって、monthly.pl が old.html を作成するとき、howtolink.html をその中に include するようにした。ついでに、log.html を次の月の始めに作成するその月分の記録である YYYYMM.html および log_YYYYMM.html に symbolic link するようにした。これによって、その月の log.html に YYYYMM.html および log_YYYYMM.html という名前のファイルを通じて、常にアクセスできるようになった。

[1998/1/16] Version 1.7. perl5 を用いると Message-Id が <時刻@ホスト> の形ではなく <時刻> の形になってしまう不具合を訂正した。この訂正がなくても、実用的には問題ないのだが、直しておいた方が良いだろう。

[1998/1/9] Version 1.6. mail2bbs.pl の "Error: Your message contains bad tags." となるべきではない場合にそうなるというバグを取ったつもり。 (いかんな。こう頻繁にバージョンアップするんじゃ、信用されなくなるのだ。(信用するやつなんか誰もいないか…。)

[1998/1/9] Version 1.5. bbs.cgi の "Error: Your message contains bad tags." となるべきではない場合にそうなるというバグを取ったつもり。

[1998/1/8] Version 1.4. "Post Your Message" や "Read Recent Messages" などの文字列を common.pl.in の中で設定するようにした。これによって、例えば、"Post Your Message" の代わりに "コメントを書き込む" と表示するようにする変更などが易しくなった。(なんか、ダサいやり方しているなあ。はあ…。) 他にも utils/reverse.pl.in のバグを潰した(つもり)。他にも細かい変更。表面的にはほとんど変化なし。

[1997/12/31] Version 1.3. 佐藤大氏の示唆に従って、Post TEXT と Preview TEXT をサポートした。Post TEXT のボタンでポストされた記事においては、HTML のタグが無効になり、入力した改行がそのまま実際の表示において改行になる。

[1997/12/30] $WEBLINT を起動するときに、$SED や $NKF と共に起動していたのを止めた。bbs.cgi が用いる外部コマンドは $WEBLINT だけになり、$NKF などが完全に用済みになった。&Lock() 関係も少し書き変えた。

[1997/12/30] 添付する jcode.pl を version 1.9 から version 2.0 に変えた。

[1997/12/28] mail2bbs/Makefile の install: の行に $(INSTALL_FILES) を付け加えた。このようにしておかないと、インストールに失敗する場合がある。さらに、mail2bbs/mail2bbs.pl.in をオリジナルの Message-Id が付くように改良した。

[1997/12/28] Version 1.0. ついに公開。佐藤大氏の示唆に基き、preview 画面のすぐ下に Post ボタンを付けた。

[1997/12/23] Version 0.9.8a. common.pl.in の $maintainer の定義を "" で囲むのではなく '' で囲むように変更した。このようにしておかないと、@ なんかが悪さをする。

[1997/12/23] Version 0.9.8. Weblint を使う機能を追加した。

[1997/12/22] Version 0.9.7. Preview 時に、「ポストの仕方」を表示しないようにした。(小波さんの示唆による。)

[1997/12/22] Version 0.9.6. 正しい html ファイルを吐かないバグを潰した。(まだ残っているかも。)

[1997/12/22] Version 0.9.5. E-mail 経由で書き込むためのスクリプトを書いた。

[1997/12/21] Version 0.9. $top_dir の下に spool という名前のディレクトリーを掘って、そこに掲示板の記録を置くように変更した。書き込み許可が開いている場所にスクリプトを置いておくのは、セキュリティー上危険であると考えたからである。

[1997/12/21] Version 0.8. bbs.cgi から common.pl を分離した。それに伴い Makefile を大幅に変更した。おまけのスクリプトを全て perl で書き直すことにした。cron で走らせると便利な monthly.pl を作成した。

[1997/12/21] Version 0.7.3. chmod 0666 log.html post_log を実行するようにした。おまけのスクリプト Reverse と Clear を追加した。

[1997/12/20] Version 0.7 まで改良した。まあまあ使えるようになってきた。この時点までに直した大きなバグは以下の通り。

[1997/12/19] Version 0.3 の段階で学内電子掲示板で公開した。しかし、バグだらけであった。

[1997/12/18] Version 0.1 を作成。動作確認。


黒木 玄  <kuroki@math.tohoku.ac.jp>