Feb 23, 2006
MySQLのデータベースにBBSのログファイルをインポートする
データベースとPerlないしPHPの連携は、進化するwebページに必須のことのようだ。
そこで、試しにBBSのログファイルをデータベースにインポートしてみた。
まずMySQLにBBSというデータベースを作り、そこに、gs_bookというテーブルを作る。
これはPhpmyadminから実行した。
CREATE TABLE gs_book (
id int(11) NOT NULL,
bbs_date text NOT NULL,
bbs_auth text NOT NULL,
bbs_mail text,
bbs_msg text NOT NULL,
bbs_ip text NOT NULL,
PRIMARY KEY (id)
);
この場合、どうしてもPRIMARY KEYを設定する必要があるので、ログの各行に通番をふる。しかも通常の順とは逆に古いものを若い番号にする。
これは、perlでやる。
open(LOG,'logfile');
@all=<LOG>;
$num=1;
while($gyou=(pop @all)){
print $num,'|',$gyou;
$num++;
}
区切り子は、各ログファイルで違うが、<>が多いようだ。ぼくの場合はこの区切り子をviで|に直してしまったが、その必要はないかもしれない。
mysql -uroot -pパスワード --local-infile=1
を実行する。
この「--local-infile=1」は重要である。ぼくもなぜかはわからないが(^^)。これをいれないとエラーになる。
つづいて、
mysql>use BBS;
mysql> load data local infile './logfile' into table gs_book
-> fields terminated by '|'
-> lines terminated by '\n';
を実行する。
なおテキストファイルからのインポートは、Phpmyadminからもできる。
これでPerl DBIを使っていろいろできるし、BBSのログを全部リアルタイムでデータベースに送ることもできる。
Feb 17, 2006
Perl CGIでメールアドレスをエンティティ化する
掲示板などでメールアドレス収集ロボットに捕捉されないようにするには、まず、
HTML::Entities
モジュールをCPANからインストールして、
スクリプトに、
use HTML::Entities;
と書いたうえで、メールアドレスの保存に次のサブルーチンを通す。
sub entitiy{
$email=(encode_entities($_[0] ,"\x00-\xff"));
}
試しに右のリンクの「灰皿町ゲストブック」に使ったらうまくいった。
まだ巷の掲示板ではエンティティ化は行われていないようだ。灰皿町では徐々にメールアドレスの表示にエンティティ化された文字列を使うようにしていきたい。
Feb 12, 2006
Mozillaのjava plug-in設定
Mozillaでjavaアプレットやゲームなどを表示させるには、plug-in登録が必要である。
「編集」から「設定」の「ヘルパーアプリケーション」とたどる。
「新しいタイプ」を押して、
「MIMEタイプ」に、「application/x-java-jnlp-file」
「説明」「拡張子」に「jnlp」
「このタイプのファイル処理法」の「アプリケーション」のラジオボタンを押して、
「/usr/lib/j2sdk1.5-sun/jre/javaws/javaws」
を選択する(下図参照)。
JAVAで使うfontと環境変数の設定
fontの設定
fontはなぜかkochiだと駄目なようなので、sazanamiをインストールする。
#apt-get install ttf-sazanami-mincho ttf-sazanami-gothic
まず下のディレクトリに行く。もちろん「j2sdk1.5-sun」の部分はインストールしたバージョンによって違う。
shimirin@debian2:/usr/lib/j2sdk1.5-sun/jre/lib$
rootになって、
#cp fontconfig.RedHat.8.0.properties.src fontconfig.properties
とする。
#vi fontconfig.properties
から、中で
:%s/-misc-kochi /-sazanami-/g
とすると、40カ所ぐらい置換されるはずである。kochiの後に空白を1つ入れないと駄目。
環境変数の設定
「/etc/profile」をrootからviで開き、次の2行を追加する。
export JAVA_HOME=/usr/lib/j2sdk1.5-sun
export PATH=${JAVA_HOME}/bin:$PATH
ログアウトして、またログインして、
java -versionを実行。
shimirin@debian2:~$ java -version
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
と表示されればOKである。
もうひとつ、Mozillaのplug-inに設定しなければならないが、また後ほど。
Feb 11, 2006
J2SE SDKのインストール(Debian GNU/Linux)
まず、java-packageをインストールしておく。
手順としては、
1.java-packageをインストール
2.Sunのサイトから、J2SE SDKのLinux用自己解凍のファイルを入手(自己解凍を実行するわけではない)。
3.Debian GNU/Linux上で、J2SE SDKのパッケージを作成して、インストール(NetBeans同梱でないものを選ぶ)。
4.fontの設定
である。
#apt-get install java-package
「Java 2 Platform Standard Edition 5.0 のダウンロード」から、 「JDKのダウンロード」を選び、表のなかから「jdk-1_5_0_06-linux-i586.bin」(現在最新のもの)を選んで、保存する。
3.上記の「java-package」をインストールすると、「fakeroot」もインストールされるので、それを使う。保存したディレクトリに行って、
$fakeroot make-jpkg jdk-1_5_0_06-linux-i586.bin
とすると、ライセンス承諾などで「yes」と答えて最終的に、「sun-j2sdk1.5_1.5.0+update06_i386.deb」ができる。
これはユーザプロンプトから「fakeroot」しないと、abortされる。
rootになって、
#dpkg -i sun-j2sdk1.5_1.5.0+update06_i386.deb
と実行すると、インストール終了。このままだと文字化けする。4.はまた後ほど。
Feb 09, 2006
SSIモジュールのLoad
このあいだも書いたが、Apacheのモジュールのロードの仕方が、1.3系の新しいのだと変わっている。
shimirin@debian2:/etc/apache$ cat modules.conf
# Autogenerated file - do not edit!
# This file is maintained by the apache package.
# To update it, run the command:
# /usr/sbin/apache-modconf apache
それで、SSIを有効にするには、
#/usr/sbin/apache-modconf apache enable mod_include
とする。
「mod_include.c」でも「mod_include.so」でもなく、「mod_include」だけでないと駄目なようだ。うまくいくと、
「Replacing config file /etc/apache/modules.con with new version」と表示が出る。
Feb 05, 2006
CD-ROMドライブをejectする
通常、Devbian GNU/Linuxをインストールするときには、rootと一人のuserを設定する(ぼくの場合はshimirin)。CD-ROMドライブで音楽を聴いたり、Linux OS バイナリが入ったDVD-ROMを入れるとき、まずejectして、手でCDないしDVDを入れて閉じる。
cdromグループにすでにuserは入っているはずなので、CD-ROMドライブを開けるときには、
shimirin@debian2:~$ eject
とする。
入れて閉じるときには、
shimirin@debian2:~$ eject -t
とする。まあ一度だけボタンを手で押すのを節約するだけだが(^^)。
Feb 03, 2006
必要なPerlモジュールのインストール
このblosxom blogには、
HTTP::Request::Common
Jcode
LWP::Simple
LWP::UserAgent
という4つのモジュールが必要なので、インストールする。
このうちJcode以外はすでにインストールされていた。
rootになって、
#perl -MCPAN -e shell
cpan>install Jcode
とやる。初めにMCPANにアクセスするときには、前に書いたように、地域などの設定をしなければならないが、一度設定してしまうと、上のコマンドのみでOKである。
Feb 02, 2006
PHP4とMYSQLのインストール
php4とMySQL関係のインストールは、apt-getでやればいいのでとても簡単である。まずApacheをインストールしておく。ぼくのインストールしたプログラムは以下のようである。一つインストールすると依存関係から、複数インストールされたり提案されるものがあるが、それも書いてある。
○php4関係
php4
phpdoc
libapache-mod-php4
php4-common
php4-dev
libssl-dev
php4-gd
libgd2-xpm
libgd-tools
php4-pear
php4-cli
libphp-jpgraph
php4-imagick
○MySQL関係
mysql-common
mysql-client
mysql-server
php4-mysql
phpmyadmin
libdbd-mysql-perl
libdbi-perl
libmysqlclient12
libnet-daemon-perl
libplrpc-perl
Feb 01, 2006
Apacheの設定
Apacheの設定は、「/etc/apache/httpd.conf」を書き換えることで行う。
○サーバの名前は「/etc/hosts」の名前と同じにする。たとえば「i.love.belle.cxm」。
○perl cgiを使うので、
#AddHandler cgi-script .cgi .pl
のシャープを外す。
○Directory /home/*/public_htmlの次の1行に、「Options」を追加する。
AllowOverride FileInfo AuthConfig Limit Options
となる。
このディレクティブの後に、
ScriptAlias /~*/cgi-bin/ "/home/*/public_html/cgi-bin/"
を追加。また、
<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
を追加する。
○たいていのCGIスクリプトの実行を、「/usr/local/bin/perl」と書いているので、シンボリックリンクを作成する(rootで)
#ln -s /usr/bin/perl /usr/local/bin/perl
○「DefaultCharset」をoffにする。
○「AddLanguage」のところの、
AddCharset ISO-2022-JP .jis
の後に、
AddCharset EUC-JP .euc
AddCharset SHIFT_JIS .sjis
を追加する。
この2つをやらないと文字化けする。
SSHでHostbasedAuthenticationの再設定
rsyncのためのSSHでHostbasedAuthenticationの再設定で、2〜3日ハマった。
Vine3.0で設定してあった「sshd_config」とクライアントマシンである、Debian GNU/Linux sargeの「ssh_config」は共にプリントしてあったので、そのとおりにしたのに、HostbasedAuthenticationでパスワードなしの接続ができない。
バックアップのための肝心要のものなので、早めに解決しなければならない。
結論からいえば、rysnc設定のメモで書いた「.shosts」(ユーザのホームディレクトリに置く。アクセスモード644)の記述に、ホスト、サーバともに次のようにIPアドレスだけでなく名前も追加したら解決した。これを発見するまでにじたばたしたわけである。この記述法は、インターネットでは情報が載っていなくてぼくが試みたらうまくいったという事柄である。
192.168.0.5 shimirin
i.love.belle.cxm shimirin
前には上の1行だけ書けばうまくHostbasedAuthenticationができていたのに不思議である。なお、Debian GNU/Linux sargeの現在の状態だと、sshdの再起動のコマンドは「/etc/init.d/ssh restart」で「sshd restart」ではない。また「rsync」はデスクトップをインストールしたときに自動でインストールされないので「apt-get install rsync」としてインストールする必要がある。
SSHの再設定で、設定ファイルを見直した。要の部分を書いてみる。
「/etc/ssh/ssh_config」(クライアント側、双方向なら両方)。
HostbasedAuthentication yes
EnableSSHKeysign yes
PreferredAuthentications hostbased,publickey,password
IdentitiyFile ~/.ssh/id_rsa
真ん中の2行は書き加える。
「/etc/ssh/sshd_config」(要の部分だけ。ホスト側、双方向なら両方)。
PermitRootLogin no
StrictModes yes
RSAAuthentication no
PubkeyAuthentication yes(noでもいいが、設定を実験しているときは下のPasswordAuthenticationとともにyes)
RhostsRSAAuthentication no
HostbasedAuthentication yes
IgnoreRhosts no
IgnoreUserKnownHosts no
PasswordAuthentication yes(でもnoでもいいが、noが推奨かも。なぜなら、クライアント側の認証の試みの順序が最初にhostbaseになっていればうまくいけば関係ないから。hostbaseが失敗した場合、外部公開している場合はセキュリティ上、noのがいい)
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePam no
全体的にいえば、上の設定でRSA1のバージョンでなく、RSA2を使い、認証にHostbasedAuthentication(RSA2のみ)を使うことを設定している。