WhiteBOX設定編/(7)bbsのverup のバックアップ(No.1)



掲示板 light.cgiのバージョンアップ

  • 掲示板は、フリーの「LIGHT BOARD」を使っていますが、初期の v5.6を使っています。最新はver6.3で、作者も「プログラムは、セキュリティ対策を施した v5.7以降を必ずご使用ください。」と注意喚起しています。
  • 過去にいろいろハマッた経緯があるので、なかなか手が出せませんでしたが、意を決して取り組みました。その記録です。
  • なお、過去ログの継承については、先輩にたいへんお世話になりました。この場を借りて感謝申し上げます。(2005/2/19)

インストール

  • ダウンロードしたlight6.lzhファイルを解凍して、サーバにコピーします。前回同様、以下の前処理を行います。
    • パーミッションの変更 chmod コマンド使用で【これは必須】
    • 文字コードの変換 nkf コマンド使用(これは必ずしも必要ないが、いきがかり上。。)
【ディレクトリ構成】 
 /var/www/cgi-bin (掲示板)
    +-- bbs / light.cgi  [705] (掲示板メインプログラム)
         |    admin.cgi  [705] (管理者用設定プログラム)
         |    init.cgi   [604] (初期設定プログラム)
         |    light.dat  [606] (掲示板設定データ
         |    data.cgi   [606] (掲示板書込みデータ:ログ)
         |    jcode.pl   [604] (日本語処理ライブラリー)
         |    pastno.dat [606] ... 過去ログを生成する場合
         +-- lock [707] /
         +-- past [707] / 0001.cgi [606] ... 過去ログを生成する場合
  • ファイル構成が大幅に変更しました。管理プログラムが分離されました。
  • もう一つの大きな特徴は、過去ログファイの拡張子が .cgi になった点です。ファイル形式の変更内容の詳細は後で説明しますが、html形式ではなくなったのでプログラムと同じディレクトリーに置くことが可能になりました。
  • これで、いままでの「ロンパリ」構成を脱することができ、ずいぶんすっきりしました。その代わり、過去ログの継承という大問題を抱えることになります。

文字コードの変換 【2005/08/03追記】

  • 7月末に、誤操作で掲示板cgiの一部を削除してしまいました。再インストールの際に、文字コード変換に関する記録が少なくて作業に難渋しました(^^;) そのためポイントを追記し、今後に期することにしました。
  • 主要な点は、文字コードに関するcgiスクリプト自体の修正と、cgiファイル自体の文字コード変換です。
  • スクリプト init.cgi の修正は、この2個所です。
    修正個所(1) 入力された文字を、保存するときに変換する文字コード種別の指定
    # S-JISコード変換
    &jcode'convert(*val, "sjis", "", "z"); 
       "sjis"  ⇒ "euc"  
    修正個所(2) html文で出力する際に付加するヘッダの文字種別コード
    #  HTMLヘッダ
    <META HTTP-EQUIV="Content-type" CONTENT="text/html;charset=Shift_JIS">
       Shift-JIS ⇒ EUC-JP
    スクリプトを直しても、cgiファイル自体の文字コードが変換されていないと、文字化けが出ます。
  • 文字コードの変換 nkfを利用
    nkfのインストール
    nkfは基本的なコマンドですが、なぜかWhiteBOX Enterprise Linux3では nkf のパッケージが廃止されており実行できません。このため自分でインストールする必要があります。
    ●入手先
    ftp://ftp.riken.jp/pub/Linux/redhat/linux/9/en/os/i386/RedHat/RPMS/
    nkf-2.01-2.i386.rpm  	65 KB  	2003/02/24  	0:00:00
    これを rpm -i でインストールします。
    変換する際のコマンドは、
    # nkf -ed init.cgi > init_euc.cgi
    # mv init_euc.cgi init.cgi
    # chmod 604 init.cgi
    このときの注意事項ですが、変換したときの出力ファイル(init_euc.cgi)のパーミッションが新規ファイルのデフォルト値(?)644になってしまいます。必ず、再度設定しなおす必要があります。

現行ログの変換

  • まず、v5→v6になって、掲示板ログの形式が変更したので、現行ログを変換する必要があります。幸い、これは作者がサポートしており、専用のツール light6chg.cgi を使えば、旧 light.log → data.cgi に自動的に変換了します。
  • ファイル形式自体はそれほど大きな差はなく、ヘッダを少し削除して、項目を並べ替えている程度です(かね)。
  • 現ログ(light.log)の一部

    LIGHT<>クラリNET-BBS<>008080<>6<>MS Pゴシック<><>D0FFFF<>000000<>0000FF<>800080<>FF0000<>../index.html<>100<>green<>blue<><><>
    735<>2005/02/13(Sun) 15:36<>Yさん<><>S山へ行ってきました…<> T山へ登るには、天気予報が怖い、新雪で身動きが取れなくなるのが怖い、落ちるのも怖い、と言うわけで、無難な山へ行ってきました。アップしますので、見てやってください。<br><><>i220-109-69-163.s02.a020.ap.plala.or.jp<><>

  • 変換後のログ(data.cgi)の一部

    735<>2005/02/13(Sun) 15:36<>Yさん<><>S山へ行ってきました…<> T山へ登るには、天気予報が怖い、新雪で身動きが取れなくなるのが怖い、落ちるのも怖い、と言うわけで、無難な山へ行ってきました。アップしますので、見てやってください。<br><><>i220-109-69-163.s02.a020.ap.plala.or.jp<><><>

過去ログ変換方法のポイント

  • いよいよ、問題の過去ログ変換です。実は、作者はホームページで 『ただし、過去ログについては互換性がありませんので、悪しからずご了承ください』と丁寧なお断りをしています。
  • 対応方法としては、旧の掲示板を書込み禁止にして残しておき、過去ログだけ閲覧できるようにしておく手も考えられますが、何とか一本化できないかということで先輩が見てくれました。
  • まず、ファイル形式を見て見ます。
    • 現行の過去ログ(4.html)の一部

      <html><head><title>過去ログ</title></head><body background="" bgcolor=D0FFFF text=000000 link=0000FF vlink=800080 alink=FF0000><hr><!--HAJIME-->[635] <font color=green><b>米子瀑布に行ってきました。</b></font><!--T--> 投稿者>:<font color=blue><b>Pさん</b></font> <small>投稿日:2004/11/14(Sun) 22:10</small><p><blockquote>土曜に須坂の米子瀑布に行ってきました。<br>菅平>のそばの滝なんですが車では真田側から直接行けずに、<br>須坂経由となります。<br>須坂から車で奧へ10数キロ行くと駐車場があり、<br>そこから800m程の山道を登ると不動滝と権現滝が見えます。<br>(少し離れているので同時にはみえません。)<br>遊歩道の標識を見ると根子岳まで8.6キロ、四阿山まで8.1キロでした。行って見たい気もしましたが、母も一緒だったので<br>行きませんでした。<br><br><a href=http://www.dynax.co.jp/sinsen/gallery/suzaka/fall/yonago_falls.html target=_top>http://www.dynax.co.jp/sinsen/gallery/suzaka/fall/yonago_falls.html</a><p></blockquote><!--ntngno057235.ngno.nt.adsl.ppp.infoweb.ne.jp--><hr>

  • ご覧のとおり、html文そのもので、タグが最初から埋め込まれています。
  • これに対して、ver6では、タグはつけず、<>で区切って書き込みや関連情報を保存しています。イメージ掲示板も同じような形式で、すっきりしています。
  • 変換後の過去ログ(0001.cgi)の一部

    635<>2004/11/14(Sun) 22:10<>Pさん<><>米子瀑布に行ってきました。<>土曜に須坂の米子瀑布に行ってきました。<br>菅平のそばの滝なんですが車では真田側から直接行けずに、<br>須坂経由となります。<br>須坂から車で奧へ10数キロ行くと駐車場があり、<br>そこから800m程の山道を登ると不動滝と権現滝が見えます。<br>(少し離れているので同時にはみえません。)<br>遊歩道の標識を見ると根子岳まで8.6キロ、四阿山まで8.1キロでした。行って見たい気もしましたが、母も一緒だったので<br>行きませんでした。<br><br>http://www.dynax.co.jp/sinsen/gallery/suzaka/fall/yonago_falls.html<><>ntngno057235.ngno.nt.adsl.ppp.infoweb.ne.jp<><>

  • html用のタグを削除して、新形式に合わせて、項目を抽出するというのが基本的な手順です。詳しくは次項ですが、複雑なので、読み飛ばしていただいて結構です。→ 飛ばす

過去ログ変換の手順

  • 新旧どちらのフォーマットであっても、一件の書き込みは一行で表現されます。
  • 新フォーマットにあてはめ、項目名を使って一件の書き込みを表現すると次のようになります。

    番号<>投稿日<>おなまえ<>Eメール<>タイトル<>コメント<>参照先<>アクセス元ホスト<>暗証キー<>何かの番号<>

  • ※ このうち、番号投稿日アクセス元ホスト何かの番号はperlスクリプトによって自動的に登録される情報です。
  • 旧フォーマットにあてはめ、項目名を使って一件の書き込みを表現すると次のようになります。

    [番号] <font color=green><b>タイトル</b></font><!--T--> 投稿者>:<font color=blue><b>Eメールおなまえ</b></font> <small>投稿日:投稿日</small><p><blockquote>コメント参照先</blockquote><!--アクセス元ホスト--><hr>

  • 暗証キーおよび何かの番号については、旧バージョンの過去ログファイルからは回収不能のようです。
  • 以上を踏まえて、ログフォーマットを変換していきます。 実際に行ってみた作業は次のとおりです。
【手順1】旧バージョンの過去ログファイルを一つのファイルにまとめる。
  cat *.html|sed 's/^\[//g'|sort -nr|grep -v "^<" > tmp1

【手順2】tmp1に対して次の処理を行う。
  置換 '] <font color=green><b>'                          を "\t" へ
  置換 '</b></font><!--T--> 投稿者:<font color=blue><b>' を "\t" へ
  置換 '</b></font> <small>投稿日:'                      を "\t" へ
  置換 '</small><p><blockquote>'                          を "\t" へ
  置換 '</blockquote><!--'                                を "\t" へ
  削除 "--><hr>$"
  • これによって、一件の書き込みは次のように6分割されます。

    番号タイトルおなまえ・Eメール投稿日コメント・参照先アクセス元ホスト

  • おなまえ・Eメールコメント・参照先もそれぞれ、 おなまえEメールコメント参照先に分割する必要がありますが、 Eメールおよび参照先は書き込みに際して登録されないことがあるので、2つめの手順として一括して行うことができませんでした。これは、手順を分けて次の3つめの手順で行いました。
【手順3.1】「おなまえ」・「Eメール」の分割
    連結された項目列を抽出し、次の作業を行います。
    置換 "^"                   を "\t" へ
   削除 '</a>'
   削除 "\t<a href=\"mailto:"
   置換 '">'                  を "\t" へ

【手順3.2】「コメント」・「参照先」の分割
    連結された項目列を抽出し、次の作業を行います。
 ・「参照先」の抽出
   <a href=http://* target='_top'> と </a> とで囲まれたurlを抽出する。
 ・「コメント」の抽出
   「参照先」の削除
     <p><a href=http://* target='_top'> から </a> までの間
 ・ 自動リンクの削除
    <a href=http://* target=_top> と </a>

【手順4】
  ・ 項目順を入れ替え、"\t"を"<>"に変換して終了です。
  ・ 必要があれば、ログファイルを分割します。&br;
     (デフォルトは400件で、ログファイルを分割しているようです。)
  • 実は、私も完全にフォローしきれてないんですが(^^;)、記録を残しておく意味があると思い、敢えて引用しました。
  • 実際の変換用スクリプトと手順はこちらです。 filechange_past.txt

その他 失敗したこと

  • 実際には、別ディレクトリに新バージョンをインストールして、動作確認を行った後に切り替えました。新旧のディレクトリ名を入れ替えれば、ホームページ等とのリンクの修正も不要で、難なく呼び出すはずですが。。。
  • ところが、アクセス禁止!なるエラーが出てあせった。実は、パスワード認証の引継ぎで失敗しました。「.htacccess」 というユーザ情報を記録した隠しファイルがあるのを忘れてました。これが、旧bbsフィルダーの中にあって、新bbsは実体を持たずにシンボリックリンクを張ってました。
  • ディレクトリの名前変更に伴い、リンクが切れてしまったというわけです。
    □旧bbsフォルダーのユーザ管理ファイル
      bbs/.htaccess →(名前変更で)bbs_old/.htaccess に
    
    □新bbsフォルダーでは、
      .htaccess -> ../bbs/.htaccess シンボリックリンク切れた!!
  • フィルをコピーして解決ですが、あせった。

メニュー調整して完了

  • 掲示板メニューに、イメージ掲示板とバンクナンバーへのリンク、さらに新設したWikiへのリンクを張って終了です。
    □light.cgi の修正個所
    
    print <<"EOM";
    <hr width="90%">
    [<a href="$home" target="_top">トップに戻る</a>]
    [<a href=\"../bbs16/bbs16.cgi\">イメージ掲示板</a>→<a href=\"/bbs16/bbsdata/bn.html?\">山記録</a>]
    [<a href=\"/wiki/\">wiki</a>]
  • なお、イメージ掲示板バックナンバーは、今回から「山記録」と変更しました。ココロは、wikiのメニュー追加で文字数調整のためです。

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   リンク元