« 2004年05月 | メイン | 2004年07月 »
sgi_fam
2004年06月26日
「WebDAVでのアクセスは減ってきたなぁ~」 「でも、ホントかな?」
なぁんて、/var/log/messagesを見ると、いくつかアクセス拒否した痕跡が...

もう、セキュリティネタばかりになってしまうのですが...

Telnetやsendmailを試みられた形跡が何件かありました。
ったくもう~っ!!

ただ、それとは別に/var/log/secureに山のように出力されていたのが、sgi_famというヤツ。
Jun 25 01:24:03 megu xinetd[1747]: START: sgi_fam pid=25594 from= 
Jun 25 01:24:03 megu xinetd[25594]: FAIL: sgi_fam libwrap from= 
Jun 25 01:24:03 megu xinetd[1747]: START: sgi_fam pid=25595 from= 
Jun 25 01:24:03 megu xinetd[25595]: FAIL: sgi_fam libwrap from= 
Jun 25 01:24:03 megu xinetd[1747]: START: sgi_fam pid=25596 from= 

↑こんな感じです。

sgi_famというサービスが動いていたんですが、止めました...。
しかしながら、sgi_famというサービスが何者かわからない。
英語サイトしか見つからなかったけれど、famって何?
使わないから止めちゃったけれど、んでよかったのか?

みてみたら、再インストール直後から出ていたんです。
設定の問題かも。

追記...どうやらxinetdのバグだったらしいのです。
(http://bugzilla.redhat.com/bugzilla/long_list.cgi?buglist=74696)
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=119918

xinetdのバージョンは2.3.12。
2.3.13にあげればいいみたいだけれど、下記の訂正でもOK。
/etc/xinetd.d/sgi_famに、flags=NOLIBWRAPを追加する。

投稿者 megu : 23:21 | コメント (0)

内部はEUCでも、Webサイト側はUTFで構築...って出来ない?
2004年06月19日

文字コードをUTF-8からEUCへ変換したのはいいのですが...

ふと冷静になってみると...

「私、なんか逆のことやってない?」
ってキモチになりました。

確かにEUCになって、システムとシームレスになって便利になりました。
エディタで開いてもちゃんと見えるし、SQLでもちゃんと見えるし...
ちょっとした更新なら、DBを直接....たとえば
「テンプレートの更新、管理画面を介さなくても出来るようなツールを作ろうかな」
とか欲も出てきました。

でも....なぜ、せっかくUTF-8で表示していたものをEUCにしなくちゃならなかったのか??
世の中の流れは、Unicodeじゃないのかなぁ〜〜 っと...。

そもそも、
1.データベース内の文字コード
2.システムで使う文字コード(ソースコードの中の文字コード)
3.公開するときの文字コード

上記は別のものであっても、よいのでは??と思ったのですが....。

私の環境だたら、
データベースとソースはEUCで、
最終的に構築するサイトはUTF-8で....っというのがベストだと、、、

よく考えてみれば(考えてみなくても?)、そうすることがアタリマエのことのように思えてきました。

なぜ、全部同じじゃなくちゃいけないのか?

そりゃ、それがMTにとって都合がよいからだろうけれど。

...などではなくて、おそらく.....
まだ私の勉強が足りないせいなのだと思います。
(構築時に指定された文字コードに変換なんて、jcodeかけちぇばいいだけですから、簡単にできそうですもんね。)

MTをきちんと研究せずに「とりあえずモード」で使っているから。

もしかしたら、どこかに「設定ファイル」があるのかもしれません。
少し探してみます。

あとひとつ...
文字コードを変換する前、DBの中、UTF-8でした。
ほとんど日本語(2バイト文字)のここのコンテンツをUTF-8で保存するのにはギモンがありました。
たとえば、Perlのソースコードの中にポツポツと日本語(2バイト文字)が出てくるような場合はUTF-8が(格納サイズという意味で)効率が良いと思うのですが、エントリーの内容など、どうみてもほとんど日本語。
絶対UTF-16のほうが効率がいいですよね。

いろいろ考えると、やっぱり、文字コードの使い分けができるのがいちばんいいのかな?
っと思います。

<追記>
mt.cfgのPublishCharsetですが、コメント部に
#Use the PublishCharset option to determine the character encoding that is sent in the HTTP headers.
と書いてあるんです。
「出力するときにこの文字コードセットを使いますよ」
と言っている風に受け取れなくもないので、ちょっと期待して、UTF-8にしてみました。
『もしかしたら、内部のEUC-JPは勝手に判断してくれて、構築する際にUTFに変換してくれないかな』
という、あまい期待を抱いて..

結果は.....
mojibake.png
文字ばけちゃいました(泣)。

う〜ん、甘かったです。

PublishCharasetはEUC-JPに戻してやりなおし....。
どのようにすれば、うまくいくのだろう。

あと、UTFコードでのTrackBackを正常に受け取れるか気になったのでテストしてみました。

トラックバックpingの送信はHTMLを使って簡単にできます。
UTFコードでテスト用のサイトを作って、このエントリーへトラックバックしてみましたが正常に表示されているので、ひと安心です:-)
トラックバックテスト用サイトです。

投稿者 megu : 01:22 | コメント (4)

文字コードの変換をやってみた
2004年06月18日
やっと....文字コードの変換にトライしてみました。

MySQLのデータをセーブする方法、いろいろあるのかもしれませんが、
mysqldumpというコマンドを使って、テーブルのCREATE文やINSERT文を作成する方法をとることにしました。

mysqldump データベース名 > 出力先SQLファイル名 --password=パスワード
これだけです。


&mysqldump kiyo >kiyo.sql --password=*****


とてもカンタン:ー)。

出力されたSQL文をnkfでEUCコードにコンバートして、別データベースでSQLを実行してみたら、あっけないほど簡単にでEUCコードでのデータベースはできがってしまいました。
$ nkf -e kiyo.sql >kiyo.euc.sql
$mysql -ukiyo -p kiyo_euc < kiyo.euc.sql

ためしに、検索してみました。

mysql> select entry_title from mt_entry;
+-------------------------------------------------------------+
| entry_title                                                 |
+-------------------------------------------------------------+
| Movable Type 3.0 Developer Edition日本語版ベータ 設定時メモ |
| コメントのプレビュー の問題、 画像のサムネイル             |
| スタイルシート                                              |
| (続)スタイルシート                                          |
| コメントプレビューの不具合修正について                      |
| MySQLへの移行..あれこれ                                     |
| 今後の課題....文字コード変換など                            |
+-------------------------------------------------------------+
7 rows in set (0.00 sec)

エントリーのタイトルを検索したところ、きちんと表示されました。
MySQLの環境がEUCですので、内容もEUCに変換されたということです。

でも、その先でちょっと戸惑ってしまったのです。

私は、ただ単にmt.cfgのPublishCharsetの部分を変更すればOKと思っていたのですが、ログイン画面のところでエラーがでてきてしまって...

それで、ツールを使えばいいのかな?なんて思ってしまいました。

心機一転、tugaaさんに教えていただいた、Movable Type の文字コード変換スクリプトを利用してみることにしたのです。

これは、解凍したものを設置して、ただ実行するだけのとても簡単なものでした。

バックアップは注意書きにもあるので実行前に取りました。
データベースのバックアップは先ほどのmysqldmpで取ったファイル。
また、サイト全体のバックアップを取っておきました。

ダウンロードしたmt-convert-code.tar.gzを解凍すると、mt-convert-code.cgiというファイルがひとつだけできました。
これを実行すると、下記のように表示されますので、変換前のコードと、変換後のコードを指定します。

convert1.png

そして、Convertボタンを押すだけです...。

convert2.png

こうやって画面が出て...
コンテンツが少ないせいもあり、あっという間に完了してしまいました。

さて、気を取り直して、管理画面にログイン....

っと思ったら、先ほどと変わらないエラーが....(笑)

よく読んでみれば、Movable Type の文字コード変換スクリプトツールって、MT全体の環境を変更してくれるわけではなくて、
「Movable Type 3.0 のデータベースに格納されているデータの、文字コードの変換スクリプトのテスト版を公開します。」
だったのですね....。

今回はあきらめずに、先へ進みました。

ログイン画面に出てきたエラーは下記のようなものです。


Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.


これは、もうMT.pmの869行目を見るしかないですね....泣。

    859     sub translate_templatized {
    860         my $mt = shift;
    861         my($text) = @_;
    862         $text =~ s!<MT_TRANS ([^>]+)>!
    863             my($msg, %args) = ($1);
    864             while ($msg =~ /(\w+)\s*=\s*(["'])(.*?)\2/g) {  #"
    865                 $args{$1} = $3;
    866             }
    867             $args{params} = '' unless defined $args{params};
    868             my $enc = MT::ConfigMgr->instance()->PublishCharset;
    869             my @p = map MT::Util::decode_html($_),
    870                     split /\s*%%\s*/, MT::I18N::encode_text($args{params
        },$enc,'euc-jp');
    871             $mt->translate($args{phrase}, @p);
    872         !ge;
    873         $text;
    874     }

869〜870行目に
my @p = map MT::Util::decode_html($_),
split /\s*%%\s*/, MT::I18N::encode_text($args{params},$enc,'utf-8');

という部分があります。

この、最後のutf-8をeuc-jpに修正したら、エラーは出なくなりました。

ほかにも、lib/MT/L10N/ja.pmがUTF-8で書かれていたので、nkfを使ってEUCに変換したりしてみたのですが、メニューがEUCで表示されるものの、869行目のエラーが消えることはありませんでした。
(考えてみればアタリマエなのですが。)

※ja.pmはもとのUTF-8に戻しましたが、今は正常に表示されています。

やっと....

ここでログインして、再構築をしてみました。

index.htmlの先頭を確かめると....

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
<meta name="generator" content="http://www.movabletype.org/" />

<title>はじめてのウエブログ♪</title>

となっていたので...これでとりあえずは成功!
と考えてよいでしょうか?

このエントリーが上手く登録されたら、とてもうれしいです:-)。

追記....
このあと構築中....のダイアログで、エントリーのタイトルが文字化けしているのを発見しました。
管理画面中の、ブログ名も文字化けしています。
ちなみに、DB内ではブログ名もEUCコードに正しく変換されています。
MTを最初からEUC-JPで構築した場合と、私のように途中から文字コードを変更した場合、どこが異なって、このような文字化け現象が起きるようになるのでしょうか...。
ぽつぽつ調べてゆきたいと思います...とほほ。

投稿者 megu : 19:03 | コメント (0)

WebDAVを経由した不正アクセス?
2004年06月15日

最近WebDAVを経由した不正アクセスが増えています。
#私はWeb経由でファイル更新なんてするつもりはないのでそんな設定してないですよっ!

おしおきに...(笑)、
これからWebDAVアクセスログを公開しちゃうことにしました。

下記リンクで参照することができます。
なお、お申し出があれば削除いたします....。
WebDAVを経由した不正アクセスのログ

アクセスログの取り方(apache、httpd.confの設定の仕方)は下記のメモの通りです。
アクセスログの取り方メモ


その後.....
たくさんアクセスのあったIPアドレスについて、管理者の方と連絡が取れましたので、ログから削除しました。
残りは意外と少なかったです。
それでもまったくないワケではないので、しばらくこのままにしておかせてください

....

投稿者 megu : 12:48 | コメント (0)

今後の課題....文字コード変換など
2004年06月10日

MySQLへの登録も済んで、今はMySQLで運用しているワケですが、それほど速くなったとは感じられないし、相変わらず管理画面は重たいです。

昨日の文章を打ち込んだとき、テキストフォーマットの改行のコンバートをなしにしてみたら、見た目がめちゃくちゃになってしまいました。
それで、スタイルシートを見直していたのですが、この作業をMTの管理画面経由でやっているとどうにも遅くて....。

結局はTelnetでログインして、viエディタでcssを直接編集してリロードしてみる...(もちろん、別の名前で...)なんて、いつもの作業になってしまいました。

これではblogツールの意味、ありませんよね?(苦笑)

もうちょっとサクサク動いたらなぁ〜
スタイルシートを保存→サイトの確認が、エディタで作業するのと同じくらいの感覚でできたら....。

っと思いました。

#やっぱり今度メモリをかってきます.....泣。

さて、今後の課題です。

 1.文字コードの変換


Movable Type 3.0 DEをインストールするとき、文字コードの指定をUTF-8にしてしまったのですが、FedoraをEUCで運用しているのでちょっと不便です。
また、MySQLもeucコードに設定しています。
それで、文字コードの変換にトライしてみようと思っています。
コンテンツはMySQL上ですので、いったんCSVに吐き出して作業...みたいなことになるのでしょうか?

 2.PHP化


巷のウワサで速くなる?と聞いているのですが、本当でしょうか?
たしかに、構築は軽くなるかもしれませんね。
includeすれば、すべてを静的HTMLに変換せずにすみますから。
でも逆に、閲覧されるたびにphpが動くわけですよね?
どっちをとるか?だけの話のような気もするのですが....

そこまでやるなら、データベースから常に最新の情報をphpで表示するようにすればいい?...

なにもやらずにこんなコト言ってるのって駄目ですよね。
とりあえず、見てみなければ、調べてみなければ、どんなカラクリかもわかりませんので、これもトライです。

 3.本当に速くなったかテスト


BerkeleyDBからMySQLへの移行で本当に速くなったのか?
テストしてみたいと思います。

今、ネラっているツールは、JMeterであります。
※これ、使ってみたいの(笑)

あとは、自分でJavaのコードを書いてみる予定も....

 4.MySQLデータのバックアップ


今回、サーバがダウンして、古いハードディスクからコンテンツをひっぱってくるとき、ユーザーごとまるまる環境を持ってくることができました。
BerkeleyDBのデータ領域は、ユーザー以下のフォルダだったのですが、これがMySQLとなるとどうなるでしょう??
定期的バックアップを取るためにどうすればよいか、調べます。
(もしかして....csv形式に出力して、それをimportするだけ?)

投稿者 megu : 13:00 | コメント (2)

MySQLへの移行..あれこれ
2004年06月09日
すみません...。
先週、サーバが立ち上がらなくなってしまいました。
まだ完全には復活できていないのですが、こちらのblogサイトはバックアップからコンテンツを持ってきました。

転んでもタダでは起き上がらない私(笑)、MySQLをインストールし、BerkeleyDBから移行することにしました。

※以前はPostgreSQLを利用していたので、どうしようか迷いました。
でもmt.cfgのデフォルトがmysqlになっているし、とても親切なサイトを教えていただいたので、MySQLで行くことにしました*^^*。

すんなりいく予定だった、移行もちょっとドタバタしてしまいましたので、その経過を記録しておくことにします。

1.データベースの作成

MySQL上に今回利用するデータベースを作成します。

※MySQLははじめてですので、長い前おきになりますがメモ書きさせてください。

rootにならなくても、下記のようにして管理者権限でログインすることができます。

$ mysql -uroot -p

こうやって、mysqlに接続します:-)
mysqlに接続できましたら、

mysql> use mysql
と入力して、「mysqlというdbを使うよ」と宣言します。
mysqlの中には、下記のようなテーブルがあって、ユーザーやdbを管理しているようです。

mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| user            |
+-----------------+

ここで、create database というコマンドを使って、kiyo(仮名)という名前のデータベースを作成します。

mysql> create database kiyo;


2.ユーザーにデータベースへのアクセス権限を与える

上で作成したkiyoというデータベースのすべてのオブジェクトにサーバ上のkiyoというユーザーからアクセスできるように設定します。

mysql上で下記コマンドを実行しました。

mysql> grant all privileges on kiyo.* to kiyo@localhost
    -> identified by '****' with grant option;  ←←****はパスワード


※*****部分はパスワードです。
※権限はひとつずつ与えてもいいのですが、面倒なので全部(all)にしてしまいました(^^;。


権限を与えたら、設定を反映します。
mysql> flush privileges;


3.mt.cfgの設定

やっとここまできました(笑)。
mt.cfgを修正します。
ここはtugaaさんから教えていただいた、、ロリポップさんの説明を参考にしました。


mt.cfgの下記部分を修正しました。
私は直接サーバ上で編集します。
左側の数字は、viエディタでnumberを表示させたものです。
(行番号はオリジナルのときとほぼ変わっていないと思います。)

 21 # The filesystem path to the 'db' directory, where your MT database
 22 # files are stored. You will probably need to change this when you
 23 # first install MT; instructions for doing so are in the Installation
 24 # Instructions, in INSTALLING THE MOVABLE TYPE APPLICATION CODE, Step 8.
 25 # Consider using the MySQL configuration, below.
 26
 27 #DataSource /home/hogehoge/db       ←←コメントアウト


 34 # Configuration for MySQL databases. Add the name of your database
 35 # and the username that you have for logging in to that database
 36 # below. The password needs to go in the file mt-db-pass.cgi.
 37 #
 38 ObjectDriver DBI::mysql         ←←コメントをはずす
 39 Database kiyo                   ←←上で作ったdatabase名をセット
 40 DBUser kiyo                     ←←上で設定したユーザー名をセット
 41 DBHost localhost                ←←同じマシンなのでlocalhost         

4.データベースアクセス時のパスワードの設定

mt-db-pass.cgiを修正します。
内容はただのテキストなのに、なぜ、cgiなのか?
アクセス制御の設定をしようとして、気付きました(鈍すぎ)。
cgiにしておけば、中身を覗かれることはありませんね:-)

mt-db-pass.cgiに先ほど2.で設定した、パスワード(****)を入力してセーブします。

これだけ



5.mt-db2sql.cgi の実行

ここでブラウザを立ち上げ、mt-db2sql.cgiを実行しました。

ん?うまくいくはずがなにやらエラーが....




    Loading database schema...

    Loading data...
    MT::Author

    An error occurred while loading data:

    No ObjectDriver defined at /home/kiyo/public_html/lib/MT/Object.pm line 105.

    泣.....

6.再度、mt.cfgの修正

困った、困った....
「No ObjectDriver って、MySQLのモジュールが足りないの?」
なんて思ったりして...

そこでググってみました。
世の中には立派な方がいらっしゃいます!解決策(google大魔人さんのサイト*^^*)をみつけました。
※それで、私も少し見習おうと、ココに書いています...:-)


それによると、
27 #DataSource /home/hogehoge/db ←←ここ
は、コメントアウトしてはならないらしい....(最終的にはするけれど)

確かにそうですね...
Import先はわかっても、元のデータをどこからExportすればいいのかわかりませんもの...

No ObjectDriverって、、そういう意味だったのか....っと納得。

っで、
27 DataSource /home/hogehoge/db
  と更新して、再トライします。



7.再度、mt-db2sql.cgi の実行

ここでもういちどmt-db2sql.cgiを実行しました。

ん?またまたエラーが....



Loading database schema...


An error occurred while loading data:

Table 'mt_author' already exists at /home/kiyo/public_html/mt-db2sql.cgi line 55.


8.怒涛のテーブルDrop

こんな私でも、上記のエラーの原因はすぐにわかりました。
mt_authorテーブルがすでにありますよっていうエラーですよね。
※すでにあれば、createしなけりゃいいものを、エラーにして終わらせるかぁ??(笑)


確認のために、テーブルを一覧表示してみました。
mysql> show tables ; 
+-----------------+ 
| Tables_in_kiyo  | 
+-----------------+ 
| mt_author       | 
| mt_blog         | 
| mt_category     | 
| mt_comment      | 
| mt_entry        | 
| mt_ipbanlist    | 
| mt_log          | 
| mt_notification | 
| mt_permission   | 
| mt_placement    | 
| mt_plugindata   | 
| mt_session      | 
| mt_tbping       | 
| mt_template     | 
| mt_templatemap  | 
| mt_trackback    | 
+-----------------+ 

予想通りだったので、dropします。
※もちろん、データベースから作り直してもOKですが、私はdropの道を選びました(大袈裟)。

以下はdrop table のスクリプトです。

drop table mt_author;
drop table mt_blog;
drop table mt_category;
drop table mt_comment;
drop table mt_entry;
drop table mt_ipbanlist;
drop table mt_log;
drop table mt_notification;
drop table mt_permission;
drop table mt_placement;
drop table mt_plugindata;
drop table mt_session;
drop table mt_tbping;
drop table mt_template;
drop table mt_templatemap;
drop table mt_trackback;

上のスクリプトをmysql上へコピペすると、下記のように走ります。
mysql> drop table mt_author;
Query OK, 0 rows affected (0.00 sec)

mysql> drop table mt_blog;
Query OK, 0 rows affected (0.00 sec)

....まだまだ続くので以下略....

9.3度目のmt-db2sql.cgi の実行

3度目の正直です。
やっとうまくいきました(感涙)。


Loading database schema...

Loading data...
MT::Author
    1
    2
    3
    4
    5

MT::Blog
    1

MT::Category

MT::Comment
    1
    10
    11

....まだまだ続くので以下略....


10.本当に登録されたか確認

データベース上のレコードをカウントして、データの中身が入ったか確かめてみました。


mysql> select count(*) from mt_entry; 
+----------+ 
| count(*) | 
+----------+ 
|        5 | 
+----------+ 
1 row in set (0.00 sec)

11.mt.cfgを修正

移行が終わりましたので、DataSourceをコメントアウトして無効にします。
27 #DataSource /home/hogehoge/db ←←コメントアウト



とっても疲れました....(笑)。

投稿者 megu : 18:40 | コメント (6)