#navi(WhiteBOX設定編)
* 掲示板 light.cgiのバージョンアップ [#t6ef86c4]
- 掲示板は、フリーの「LIGHT BOARD」を使っていますが、初期の v5.6を使っています。最新はver6.3で、作者も「プログラムは、セキュリティ対策を施した v5.7以降を必ずご使用ください。」と注意喚起しています。
- 過去にいろいろハマッた経緯があるので、なかなか手が出せませんでしたが、意を決して取り組みました。その記録です。
- なお、過去ログの継承については、先輩にたいへんお世話になりました。この場を借りて感謝申し上げます。(2005/2/19)
#contents
** インストール [#e77f9d87]
- ダウンロードした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追記】 [#u0e6cc88]
- 7月末に、誤操作で掲示板cgiの一部を削除してしまいました。再インストールの際に、文字コード変換に関する記録が少なくて作業に難渋しました(^^;) そのためポイントを追記し、今後に期することにしました。
- 主要な点は、文字コードに関するcgiスクリプト自体の修正と、cgiファイル自体の文字コード変換です。
-- スクリプト init.cgi の修正は、この2個所です。&br;
修正個所(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を利用&br;
nkfのインストール&br;
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 でインストールします。&br;
変換する際のコマンドは、
# nkf -ed init.cgi > init_euc.cgi
# mv init_euc.cgi init.cgi
# chmod 604 init.cgi
このときの注意事項ですが、変換したときの出力ファイル(init_euc.cgi)のパーミッションが新規ファイルのデフォルト値(?)644になってしまいます。必ず、再度設定しなおす必要があります。
** 現行ログの変換 [#tf4dd2a4]
- まず、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<><><>&br;
735<>2005/02/13(Sun) 15:36<>Yさん<><>S山へ行ってきました…<> T山へ登るには、天気予報が怖い、新雪で身動きが取れなくなるのが怖い、落ちるのも怖い、と言うわけで、無難な山へ行ってきました。アップしますので、見てやってください。<br><><>ixxx-xxx-xx-xxx-xx.s02.a020.ap.xxx.ne.jp<><>
123<>200x/02/13(Sun) 15:36<>Yさん<><>S山へ行ってきました…<> T山へ登るには、天気予報が怖い、新雪で身動きが取れなくなるのが怖い、落ちるのも怖い、と言うわけで、無難な山へ行ってきました。アップしますので、見てやってください。<br><><>ixxx-xxx-xx-xxx-xx.s02.a020.ap.xxx.ne.jp<><>
-- 変換後のログ(data.cgi)の一部
> 735<>2005/02/13(Sun) 15:36<>Yさん<><>S山へ行ってきました…<> T山へ登るには、天気予報が怖い、新雪で身動きが取れなくなるのが怖い、落ちるのも怖い、と言うわけで、無難な山へ行ってきました。アップしますので、見てやってください。<br><><>ixxx-xxx-xx-xxx-xx.s02.a020.ap.xxx.ne.jp<><><>
> 123<>200x/02/13(Sun) 15:36<>Yさん<><>S山へ行ってきました…<> T山へ登るには、天気予報が怖い、新雪で身動きが取れなくなるのが怖い、落ちるのも怖い、と言うわけで、無難な山へ行ってきました。アップしますので、見てやってください。<br><><>ixxx-xxx-xx-xxx-xx.s02.a020.ap.xxx.ne.jp<><><>
** 過去ログ変換方法のポイント [#x8c919dc]
- いよいよ、問題の過去ログ変換です。実は、作者はホームページで 『ただし、過去ログについては互換性がありませんので、悪しからずご了承ください』と丁寧なお断りをしています。
- 対応方法としては、旧の掲示板を書込み禁止にして残しておき、過去ログだけ閲覧できるようにしておく手も考えられますが、何とか一本化できないかということで先輩が見てくれました。
- まず、ファイル形式を見て見ます。
-- 現行の過去ログ(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>投稿日:200x/11/14(Sun) 22:10</small><p><blockquote>土曜に須坂の米子瀑布に行ってきました。<br>須坂から車で奧へ10数キロ行くと駐車場があり、<br>そこから800m程の山道を登ると不動滝と権現滝が見えます。<br><br><p></blockquote><!--ntngnoxxx.ngno.nt.adsl.ppp.xxxx.ne.jp--><hr>
> <html><head><title>過去ログ</title></head><body background="" bgcolor=D0FFFF text=000000 link=0000FF vlink=800080 alink=FF0000><hr><!--HAJIME-->[123] <font color=green><b>米子瀑布に行ってきました。</b></font><!--T--> 投稿者>:<font color=blue><b>Pさん</b></font> <small>投稿日:200x/11/14(Sun) 22:10</small><p><blockquote>土曜に須坂の米子瀑布に行ってきました。<br>須坂から車で奧へ10数キロ行くと駐車場があり、<br>そこから800m程の山道を登ると不動滝と権現滝が見えます。<br><br><p></blockquote><!--ntngnoxxx.ngno.nt.adsl.ppp.xxxx.ne.jp--><hr>
- ご覧のとおり、html文そのもので、タグが最初から埋め込まれています。
- これに対して、ver6では、タグはつけず、<>で区切って書き込みや関連情報を保存しています。イメージ掲示板も同じような形式で、すっきりしています。
-- 変換後の過去ログ(0001.cgi)の一部
> 635<>2004/11/14(Sun) 22:10<>Pさん<><>米子瀑布に行ってきました。<>土曜に須坂の米子瀑布に行ってきました。<br>須坂から車で奧へ10数キロ行くと駐車場があり、<br>そこから800m程の山道を登ると不動滝と権現滝が見えます。<br><br><><>ntngnoxxx.ngno.nt.adsl.ppp.xxxx.ne.jp<><>
> 123<>200x/11/14(Sun) 22:10<>Pさん<><>米子瀑布に行ってきました。<>土曜に須坂の米子瀑布に行ってきました。<br>須坂から車で奧へ10数キロ行くと駐車場があり、<br>そこから800m程の山道を登ると不動滝と権現滝が見えます。<br><br><><>ntngnoxxx.ngno.nt.adsl.ppp.xxxx.ne.jp<><>
- html用のタグを削除して、新形式に合わせて、項目を抽出するというのが基本的な手順です。詳しくは次項ですが、複雑なので、読み飛ばしていただいて結構です。→ [[飛ばす>#w90b490e]]
** 過去ログ変換の手順 [#w6ce72f4]
- 新旧どちらのフォーマットであっても、一件の書き込みは一行で表現されます。
- 新フォーマットにあてはめ、&color(white,red){''項目名''};を使って一件の書き込みを表現すると次のようになります。
>&color(white,red){''番号''};<>&color(white,red){''投稿日''};<>&color(white,red){''おなまえ''};<>&color(white,red){''Eメール''};<>&color(white,red){''タイトル''};<>&color(white,red){''コメント''};<>&color(white,red){''参照先''};<>&color(white,red){''アクセス元ホスト''};<>&color(white,red){''暗証キー''};<>&color(white,red){''何かの番号''};<>
-- ※ このうち、&color(white,red){''番号''};、&color(white,red){''投稿日''};、&color(white,red){''アクセス元ホスト''};、&color(white,red){''何かの番号''};はperlスクリプトによって自動的に登録される情報です。
- 旧フォーマットにあてはめ、項目名を使って一件の書き込みを表現すると次のようになります。
>[&color(white,red){''番号''};] <font color=green><b>&color(white,red){''タイトル''};</b></font><!--T--> 投稿者>:<font color=blue><b>&color(white,red){''Eメール''};・&color(white,red){''おなまえ''};</b></font> <small>投稿日:&color(white,red){''投稿日''};</small><p><blockquote>&color(white,red){''コメント''};・&color(white,red){''参照先''};</blockquote><!--&color(white,red){''アクセス元ホスト''};--><hr>
-- ※ &color(white,red){''暗証キー''};および&color(white,red){''何かの番号''};については、旧バージョンの過去ログファイルからは回収不能のようです。
- 以上を踏まえて、ログフォーマットを変換していきます。
実際に行ってみた作業は次のとおりです。
【手順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分割されます。
>&color(white,red){''番号''};、&color(white,red){''タイトル''};、&color(white,red){''おなまえ・Eメール''};、&color(white,red){''投稿日''};、&color(white,red){''コメント・参照先''};、&color(white,red){''アクセス元ホスト''};
- &color(white,red){''おなまえ・Eメール''};と&color(white,red){''コメント・参照先''};もそれぞれ、
&color(white,red){''おなまえ''};・&color(white,red){''Eメール''};と&color(white,red){''コメント''};・&color(white,red){''参照先''};に分割する必要がありますが、
&color(white,red){''Eメール''};および&color(white,red){''参照先''};は書き込みに際して登録されないことがあるので、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件で、ログファイルを分割しているようです。)
- 実は、私も完全にフォローしきれてないんですが(^^;)、記録を残しておく意味があると思い、敢えて引用しました。
- 実際の変換用スクリプトと手順はこちらです。
&ref(change_past.txt);
** その他 失敗したこと [#w90b490e]
- 実際には、別ディレクトリに新バージョンをインストールして、動作確認を行った後に切り替えました。新旧のディレクトリ名を入れ替えれば、ホームページ等とのリンクの修正も不要で、難なく呼び出すはずですが。。。
- ところが、アクセス禁止!なるエラーが出てあせった。実は、パスワード認証の引継ぎで失敗しました。「.htacccess」 というユーザ情報を記録した隠しファイルがあるのを忘れてました。これが、旧bbsフィルダーの中にあって、新bbsは実体を持たずにシンボリックリンクを張ってました。
- ディレクトリの名前変更に伴い、リンクが切れてしまったというわけです。
□旧bbsフォルダーのユーザ管理ファイル
bbs/.htaccess →(名前変更で)bbs_old/.htaccess に
□新bbsフォルダーでは、
.htaccess -> ../bbs/.htaccess シンボリックリンク切れた!!
- フィルをコピーして解決ですが、あせった。
** メニュー調整して完了 [#se6a9cd7]
- 掲示板メニューに、イメージ掲示板とバンクナンバーへのリンク、さらに新設した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のメニュー追加で文字数調整のためです。
#navi(WhiteBOX設定編)