WhiteBOX設定編/(3)bbs

Last-modified: 2008-06-30 (月) 15:33:40 (5799d)

掲示板 light.cgiの設定

  • 掲示板はcgiで動いていますが、フリーの「LIGHT BOARD」を使っています。作者はKentさんで、Kent-BBS からダウンロードできます。バージョンの5.6を使用しています。最新はver6.3です。updateしたいのですが、過去にいろいろハマッた経緯があるもので、恐くてなかなか手が付けられません(^^;)
  • Windowsでサーバを本格運用始めた時に採用しましたが、Linuxに入れ替えた後も、そのまま使っています。基本的に、OS環境が変わってもそのまま動くのですが、Linuxで使う場合は、ファイルのアクセス権限の設定や文字コードの扱いがシビアですので要注意です。

インストール

  • ダウンロードしたlzhファイルを解凍して、サーバにコピーします。もともとWindows環境で開発されたものなので、パーミッションは設定されていません。chmod コマンドを使って、以下のように自分で変更する必要があります。
【ディレクトリ構成】 
/var/www/html/index.html  (ホームページ)

/var/www/cgi-bin (掲示板)
    |
    +-- bbs / light.cgi  [755] (掲示板メインプログラム)
         |    light2.cgi [755] (補助プログラム:過去ログ/ログ編集)
         |    light.log  [666] (設定ファイル
         |    jcode.pl   [604] (日本語処理ライブラリー)
         |    pastno.dat [606] ... 過去ログ用カウントファイル
         +-- lock [707] /
         +-- past [707] / 1.html [606] ... 過去ログ...実際はhtml/に配置
  • クラリNETでは、ホームページから掲示板(light.cgi)を呼び出す形になっています。cgiを動かす環境はcgi-binの配下に限定しています。このディレクトリにパスワード認証をかけることで、メンバー限定となっています。(ホームページ自体はオープンです。)
  • パスワード認証の詳細は、WhiteBOX設定編/(2)Apacheを参照してください。
  • 過去ログのディレクトリ構成の調整記録に関してはこちらを参照して下さい。

基本設定

  • 設定関係の主要項目は、light.cgi の先頭部分に固まっています。
    (1) サーバのperlのパスを確認します。
    #!/usr/bin/perl
    スクリプトの第1行に次のような記述があります。Linuxはディストリビューションによって、微妙にディレクトリ構成が異なっています。CGIを動かすための perl はインストールされていてもパスが通っていないと動作しません。まずは、その確認です。
    (2) 次に、管理者用のパスワードを変更します。
    # 管理者用マスタパスワード(半角英数字)
    $pass = '1234';
    これは、必ず変更してください。

クラリNETにおける特別な設定変更個所

以下は、クラリNETにおけるサーバ環境に起因するカスタマイズというか、苦肉の合わせ技です。一般性は全くありませんが、敢えてメモとして残しています。
(1) 過去ログデータのパス合わせ

  • 掲示板の記事は100件を超えると、過去ログとして、1件ずつ自動的に切り出される仕組みになっています。デフォルトのディレクトリ構成のとおり、past/配下の ファイル(1.html)に追加保存されていきます。
  • ところが、CGIが動いている cgi-bin/配下ではファイル表示を規制しています。セキュリティ上の理由で、cgiファイル自体を表示してしまう危険性もあるからです。
  • このため、過去ログディレクトリpast/は html/配下にしましたが、単に移すだけでは、過去ログの検索機能の動作にも問題が出ていたようです。
  • 最終的には、以下のような調整で切り抜けています。
●[light.cgi]の設定変更
# 過去ログのあるディレクトリ
$past_dir  = "../../html/past";

●bbs/past は html/配下の過去ログdirへシンボリックリンクとしました
past -> /var/www/html/past
  • cgi自体が切り出し時に書き込むパスと、過去ログ表示で読み出す時のパス設定が別みたいで、苦肉の策です(^^;)

(2) 文字コードの変更

  • 「LIGHT BBS」のCGIスクリプトの文字コードは、もともとはすべてWindows標準の「シフトJIS」で書かれています。また、生成される掲示板や過去ログデータも基本的にはすべて「シフトJIS」です。
  • ところが、サーバOSをWindowsからLinuxに変更した際に、文字コードの扱いで食い違いが出て、一部のユーザで文字化け問題が発生しました。また、書き出し時にファイル名にゴミキャラクタが付加されてエラーが発生したりしました。 (過去ログでごく一部の記事が欠損しているのは、その時の後遺症なのです。)
  • このため、文字コードをすべてLinux標準の「EUC-JP」に統一することにしました。設定項目だけでなく、CGIスクリプト自体の書換えも必要でしたが、そもそもサポート事項だったので指示通り何個所か修正してOKでした。
  • 面倒だったのは、ファイル自体の文字コード変換でした。nkf(network kanji filter)というコマンドで対応しましたが。

結果的には以上ですが、ここに至るまでは、わからんことが多くてずいぶんと悩みました。

その他一般的な注意事項

  • ふつうは、windows用のcgiでもたいていそのまま動きますが、Linux環境で動かす場合のチェックポイントとしては、
     
    cgi側のperlのパスがあってるのか?
      ディストリビューションによって、perlの所在が異なります。
     
    cgi内で指定しているファイルのパス?
      関連するファイルのコピー先の確認。パスもcgiのルートを基準にして「相対」、「絶対」といろいろあります。簡単なようでハマリます。
     
    関係ファイルのパーミッション関係?
      Linuxの場合、これは極めてシビアです。cgiのドキュメントにも詳細に書いてあるのでそれに合わせる。「chmod」コマンドで設定します。
     
    cgiスクリプトファイルの先頭にゴミが付いていたり、スペースが入っていないか?
      これだけで、cgiが実行不能になっていた。
     
    cgiが作成するファイル名にへんな文字コードが付いていたりしていないか?
      これでファイルオープンエラーでアウト。(winodwsで動かしたcgiをコピーしたときは注意!)
  • 特に、掲示板の過去ロのように、cgi側で生成するファイルがあるときは、要注意です。今回は、最終的には、関連ファイルをすべて完全にEUC化することで収まりました。ホントはあまり関係なかったのかもしれませんが、直すなら徹底してやらないとだめ。
  • エラーもcgiが出すエラーなら、動いている証拠ですからまだ救いです。サーバエラーの場合は、まず、上記のような点がチェックポイントです。
  • 動作環境確認のためなら、いきなり大きなcgi動かずに、数行のサンプルcgiを動かしてみるのもよいでしょう。

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   リンク元