WhiteBOX設定編/(7)bbsのverup のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- WhiteBOX設定編/(7)bbsのverup へ行く。
- 1 (2008-06-30 (月) 15:40:11)
掲示板 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>
- 現行の過去ログ(4.html)の一部
- ご覧のとおり、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件で、ログファイルを分割しているようです。)
- 実は、私も完全にフォローしきれてないんですが(^^;)、記録を残しておく意味があると思い、敢えて引用しました。
- 実際の変換用スクリプトと手順はこちらです。 change_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のメニュー追加で文字数調整のためです。