2006.01.03

Berkeley DBからMySQLへ移行(アップデートしました)・・・(Movabletype)

以前から、やろうと思っていたBerkeley DBからMySQLへの移行を行いました。
私のところではDBの容量が約6MBであったのが2MBになり、実行速度もだいぶ向上しました。
MySQLはFreeBSDのpackageから入れることを試みたのですが、インストール条件などが指定できないので、portsから入れ直しました。
MySQLのPortsは/usr/ports/databasesにありますが、mysql323, mysql40, mysql50の3つの版数のものが入っています。 Webで調べるとmysql50はまだ問題を抱えているような記述がありましたのでmysql40を入れることにしました。
一度packageで入れると、packageを削除しても完全には消されていなくて、矛盾を生じるので、入れる前にmake deinstallする必要がありました。
それと、DBの作成先はDefaultでは/var/db/mysqlですが、容量の残りがたっぷりの/usr/db/mysqlとすることにしました。 また、文字コードはeucにしたかったので ujisとしました。 最初文字コードをeucと書いたらエラーになりましたが、調べるとeucの指定はujisだと分かりました。
eucなら日本語以外のも中国語のeucもあるし、eucjpでは長いのでujisとしたのだそうです。
なんだか、言い訳じみています。

# mkdir /usr/db
# cd /usr/ports/databases/mysql40-client
# make deinstall
# make WITH_CHARSET=ujis WITH_XCHARSET=all
DB_DIR=/usr/db install clean

だいぶ時間がかかりましたが無事終了して、次にmysql40-serverのインストールです。

# cd ../mysql40-server
# make deinstall
# make WITH_CHARSET=ujis WITH_XCHARSET=all
DB_DIR=/usr/db install clean

インストールオプションはclientと同じですが、同じでないと具合が悪いようです。
次にMovabletypeから使えるように、p5-DBD-mysql40とp5-Class-DBI-mysqlも入れます。
この順序でないと、エラーがでます。 

# cd ../p5-DBD-mysql40
# make install clean
# cd ../p5-Class-DBI-mysql
# make install clean

ここまで、うまく行ったら、Movabletypeのmt.cgiがインストールされているディレクトリーにあるmt-check.cgiをBrowserから起動してDBIとDBDがインストールされていることを確認します。
この確認も取れたら、いよいよDBの作成です。
以下の作業をします。
(1) /usr/local/share/mysql内にあるmy-medium.cnfをmy.cnfの名前で /etcにコピーします。

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf

(2) /etc/my.cnf に datadir = /usr/db/mysql の1行を追加

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
datadir = /usr/db/mysql ・・・この行を追加
key_buffer = 16M

(3) /usr/local/binにあるmysql_install_dbを使ってdbを設定します。

# mysql_install_db

(4) /usr/local/etc/rc.d内にあるmysql-server.sh は複雑でうまく動かなかったので、/usr/local/shre/mysql内にある mysql.server を/usr/local/etc/rc.dにコピーしmysql-server.shに名前を変えます。

# cd /usr/local/etc/rc.d
# mv mysql-server.sh mysql-server.org
# cp /usr/local/share/mysql.server ./mysql-server.sh

そして起動

# ./mysql-server.sh start

いよいよ、管理者のパスワードを設定です。

# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 6 to server version: 4.0.17
mysql> set password for root=password('設定するパスワード');
mysql> flush privileges;
mysql> exit
Bye

次にmysqlを再起動し、匿名ユーザーを削除します。
インストール直後、自動で作られていますのでセキュリティの点からも削除します。

# mysql -u root -p
Enter password: 設定したパスワード
mysql> use mysql;
mysql> delete from user where password=' ';
mysql> flush privileges;
mysql> exit
Bye

いよいよ、mysqlを起動してDBを作ります。 DBの名前はmtdbとしました。

# mysql -u root -p
Enter password: パスワード
mysql> create database mtdb;
Query OK, 1 row affected (0.00 sec)
mysql>

続いて、MovableType用のデータベースユーザーを作ります。
ユーザー名を mtuser としましたが、作ったデータベース mtdb に対してのすべての権限を与えます。
パスワードはMovabletypeが使うもので新しく決めて、後ほどmt-config-cgiにも書き込みます。

mysql> use mysql;
mysql> grant all privileges on mtdb.*
to mtuser@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.13 sec)
mysql> flush privileges;
mysql> exit
Bye

以上で完了です。
データベース上のテーブルは、MovableTypeが自動で作ります。
mysqlのコマンドは語句にスペルミスがあったりするとエラーになりますので、文末の”;”まで含めて正確に入れるのが要注意点です。
さて、いよいよDBの移行作業です。
mt.cgiのあるディレクトリーにあるmt-config.cgiのコメントアウトされている下記の部分を編集します。
パスワードはDBの作成でmtuserに与えたパスワードです。

ObjectDriver DBI::mysql
Database mtdb
DBUser mtuser
DBPassword パスワード
DBHost localhost

このとき DataSource ./db の設定はそのまま残しておきます。
そして、Brawserから mt-db2sql.cgi を起動します。
設定が正しければ、画面に延々と数字らしきものが表示され、かなりの時間の経過後に All well doneだったと思うが、うまく行ったメッセージが出て終了します。
ここで、先のmt-config.cgiのDataSource ./dbをコメントアウトする。
実際のdbディレクトリは消してもかまわないが、移行したものが正しく動作することが確認されるまでは、取っておくか、名前を変えて温存した方が無難でしょう。
結構、こまかい作業だが、順を追ってやって行けば移行作業は完了します。


MySQLの導入(Package編)・・・(Database)

MovabletypeのDBをBerkley DBからMySQLに移行するために、MySQLをportsから入れる方法を書いた。
知識不足でportsからoptionを付けて入れないとdatabaseの位置などが指定できないと思ったからです。
しかし、Packageからでも自由に構築できるこたが解ったので、以下にその方法を書く。
これは楽だ。
まず、/usr/sbin/sysinstall(FreeBSD 6.0の場合)してpackageのdatabasesを選ぶ。
そして下記をインストール。
(1) mysql-client-4.1.13
(2) mysql-server-4.1.13
(3) p5-DBD-mysql41-3.0002
(4) p5-DBI-1.48
あとは勝ってに依存性を考慮してdependencyとして入れてくれる。
次に、以下の作業をする
(1) /usr/local/share/mysql内にあるmy-medium.cnfをmy.cnfの名前で /etcにコピー。

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf

(2) /etc/my.cnf に datadir = /usr/db/mysql の1行を追加

[mysqld]
datadir = /usr/db/mysql ・・・この行を追加
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 16M

(3) /usr/local/binにあるmysql_install_dbを使ってdbを設定し、mysqlのオーナーをmysqlに変えておく。

# mysql_install_db
# chown -R mysql /usr/db/mysql

(4) /usr/local/etc/rc.d内にあるmysql-server.sh は複雑でうまく動かなかったので、/usr/local/shre/mysql内にある mysql.server を/usr/local/etc/rc.dにコピーしmysql-server.shに名前を変えます。

# cd /usr/local/etc/rc.d
# mv mysql-server.sh mysql-server.org
# cp /usr/local/share/mysql.server ./mysql-server.sh

そして起動

./mysql-server.sh start

いよいよ、管理者のパスワードを設定です。 portsインストールと少し違う。

# mysqladmin -u root password パスワード

これで、mysql -u -p で入れます。
そして、匿名ユーザの削除以降は以前書いた手順と同じですが、説明は省略しますが繰り返し書いておきます。
Berkeley DBからMySQLへ移行(アップデートしました) と合わせ見てください。

# mysql -u root -p
Enter password: 設定したパスワード
mysql> use mysql;
mysql> delete from user where password=' ';
mysql> flush privileges;
mysql> exit
Bye
# mysql -u root -p
Enter password: パスワード
mysql> create database mtdb;
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> use mysql;
mysql> grant all privileges on mtdb.*
to mtuser@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.13 sec)
mysql> flush privileges;
mysql> exit
Bye

これで、Berkley DBからMySQLに移行の準備完了です。


2005.11.24

post2blogでカテゴリー設定・・・(Movabletype)

メールからブログ投稿できるツールとして、post2blogを愛用させていただいている。
post2blogもカテゴリー設定機能がサポートされた新版がでたが、設定できるカテゴリーは固定で都合が悪い。 記事に複数のカテゴリーを設定することは、あまり無いと思えるが、カテゴリーを1つは設定したい。
そこで、メールの第1行目に Cat=山登り などと書いて、カテゴリーが設定できるように改造を試みた。
まず、下記の赤字部のように、$category_id の値は”0″にし、@categoriesの行はコメントアウトする。

my $blog_id = 1;
my $username = 'Melody';
my $password = 'Nelson';
my $category_id = 0;
#my @categories = (2, 3, 4);
my $parse_path = '/Users/Shared/post2blog';

次に、メールから設定したいカテゴリーの語句を取り出すため、下記の赤字部を追加、修正する。

my $cont;
my $dummy;
my $setName;
foreach (@texts) {
open(CONT, $_);
while (<CONT>) {
s/rn/n/g;
s/r/n/g;
if(/^Cat=/){
                   ($dummy,$setName) = split(/=/);
$setName =~ s/n//g;
$setName = $j->set($setName)->utf8;
}else{$cont = $cont.$_;}
}
close(CONT);
}

さらに、新しく投稿をPostしてカテゴリーをPostする間に、現在登録されているカテゴリーのリストを求めて、語句が一致するcategoryのidを求め、得られたidを引き継ぐようにする。

my $ret = $rpc->call('metaWeblog.newPost',
$blog_id,
$username,
$password,
{
'title' => $title,
'description' => $description,
'mt_text_more' => $text_more
},
0,
);
my $post_id = $ret->result();
   $ret = $rpc->call('mt.getCategoryList',
$blog_id,
$username,
$password,
);
my $ref =$ret->result();
my $catID;
my $catName;
my %tmp;
foreach(@$ref){
%tmp = %$_;
$catID = $tmp{"categoryId"};
$catName = $tmp{"categoryName"};
$catName = $j->set($catName)->utf8;
if($catName eq $setName){$category_id = 1;last;}
}
if ($category_id) {
my $cats;
$cats = [{ 'categoryId' => $catID, 'isPrimary' => 1, }];
#   foreach my $cat_id (@categories) {
#               push @$cats, { 'categoryId' => $cat_id };
#       }
$ret = $rpc->call('mt.setPostCategories',
$post_id,
$username,
$password,
$cats,
);
}
$ret = $rpc->call('metaWeblog.editPost',
$post_id,
$username,
$password,
{
'title' => $title,
'description' => $description,
'mt_text_more' => $text_more
},
1
);

これで、メールの1行目に Cat=History などと予め登録されている、カテゴリーの語句を書くと、そのカテゴリーが設定された投稿となる。
Cat=の文がなければ、カテゴリーは当然無設定になる。
最後に、私が現在使っているpost2blogの修正版を以下に付けて置く。
カテゴリー機能付きpost2blog


2005.11.18

使えるVMwareによるFreeBSD (2)・・・(FreeBSD)

VMwareでフルスクリーンでFreeBSDを稼働させるためには、VMware-Toolsが必要と書いたが、その後詳しく調べてみるとVMware-Toolsは必要ないことが分った。
たしかに、/usr/X11R6/lib/modules/driversにはvmware_drv.oがFreeBSDには標準で入っている。
それで、VMware-Toolsで作られたxorg.confを眺めていたら、
HorizSync 1-10000
VertRefresh 1-10000
の指定が、胆であるのが分った。
しかし、vmmouse_drv.oは/usr/X11R6/lib/modules/inputにないと、自由にVMware画面とホストの画面をマウスのポインターが行き来は出来ない。 
結局、vmmouse_drv.oさえ手に入ればVMware Playerで十分で、個人で買うには高いVMware Workstatinなどは必要ないことになる。 マウスぐらいは標準でも、少し不便だが我慢できる範囲でもある。
以下に私が現在使っているxorg.confを載せて置く。

Section "ServerLayout"
Identifier     "X.org Configured"
Screen      0  "Screen0" 0 0
InputDevice    "Mouse0" "CorePointer"
InputDevice    "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
RgbPath      "/usr/X11R6/lib/X11/rgb"
ModulePath   "/usr/X11R6/lib/modules"
FontPath     "/usr/X11R6/lib/X11/fonts/misc/"
FontPath     "/usr/X11R6/lib/X11/fonts/TTF/"
FontPath     "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath     "/usr/X11R6/lib/X11/fonts/CID/"
FontPath     "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath     "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath     "/usr/X11R6/lib/X11/fonts/TrueType/"
EndSection
Section "Module"
Load  "dbe"
Load  "dri"
Load  "extmod"
Load  "glx"
Load  "record"
Load  "xtrap"
Load  "freetype"
Load  "type1"
EndSection
Section "InputDevice"
Identifier  "Keyboard0"
Driver      "kbd"
Driver      "keyboard"
Option      "XkbRules" "xorg"
Option      "XkbModel" "jp106"
Option      "XkbLayout" "jp"
EndSection
Section "InputDevice"
Identifier  "Mouse0"
Driver      "vmmouse" ・・・
・・ vmmouseのdriverが無ければ"mouse"とする
Option      "Protocol" "Auto"
Option      "Device" "/dev/sysmouse"
Option "ZAxisMapping"       "4 5"
EndSection
Section "Monitor"
Identifier   "Monitor0"
VendorName   "GSM"
ModelName    "75N"
HorizSync    1-10000
VertRefresh  1-10000 
Option      "DPMS"
EndSection
Section "Device"
Identifier  "Card0"
Driver      "vmware"
VendorName  "VMware Inc."
BoardName   "Generic SVGA"
BusID       "PCI:0:15:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device     "Card0"
Monitor    "Monitor0"
SubSection "Display"
Viewport   0 0
Depth     16
Modes     "1024x768"
EndSubSection
SubSection "Display"
Viewport   0 0
Depth     24
Modes     "1024x768"
EndSubSection
EndSection

ついでに、Xwindowで日本語が使えるように、自己のホームディレクトリーの.profileに以下の赤字部を追加する。

BLOCKSIZE=K;       export BLOCKSIZE
EDITOR=vi;      export EDITOR
PAGER=more;     export PAGER
LC_ALL=ja_JP.eucJP;    export LC_ALL
LANG=ja_JP.eucJP;      export LANG
XMODIFIERS=@im=kinput2; export XMODIFIERS

Window managerには気に入っているKDEを入れたが、.xinitrcには

kinput2 -canna &
sleep 3   ・・・・ ないと、kinput2での入力がうまく行かない場合が
あるようだ
exec startkde

これで、ktermでも入れておけば日本語のファイルも作れるし、パッケージで入れたfirefox(portsで入れるとえらく時間がかかる)のフォーム入力にも日本語入力が可能になる。
firefox.png


2005.11.17

使えるVMwareによるFreeBSD・・・(FreeBSD)

VMware Playerだけでは、画面が大きくならず、Xwindowで使えるFreeBSDは実現できないことが分ったので、VMware Workstationの30日間トライアル版をダウンロードして作ることにした。 やはり、機能が色々あり自分で勝手にConfiguration fileが作り出せる。
早速、FreeBSDのConfiguration fileを作ってインストール。
Xwindowもインストールして、FreeBSD・・・使いものにならないで書いたようにxorg.confを他から持ってきて修正を施し、立ち上げるがやはり画面は小さいまま。
次にVMware-Toolsを入れるをメニューバーで選び、以下の操作をする。

# mount /cdrom
# cp /cdrom/vmeare* /home/temp ・・ あらかじめ/homeにtempを作っておく
# cd /home/temp
# tar xvzf vmeare-freebsd2-tools.tar.gz
# cd vmeate-tools-distrib
# ./vmware-install.pl

色々、質問が出るが全てDefaultで大丈夫です。
そして、startxでXwindowを起動した。 見事に1024×768の画面が立ち上がった。
xwindow.jpg
         (図-1 : Xwindowsの画面)
めでたし、めでたしでfirefoxもportsからインストールしたが、これは3時間以上かかた。
soundも自分のhost computerのsoundカードを/boot/loader.confで snd_es137x_load=”YES”のように入れれば大丈夫だ。
画面上部のタイトルバーをダブルクリックすると、フル画面表示になり、Ctrl+Altで元の画面に戻るのも便利だ。
textmode.jpg
         (図-2 : Textmodeの画面)
ひとたび、Vmware Workstationでconfiguration fileが出来てしまうと、Vmware Playerでも大きな画面で立ち上げられるので、Workstationの30日のトライアル期間が過ぎても大丈夫だ。 ただし、Vmware-toolsをトライアル期間を過ぎても使いつづけるのがLegalか否かは定かでない。
結局はVMware-ToolsがVMware Playerに付属していないことだけが難点で、多くの人から付属の要請が出ているらしい。
ちなみに、Windows系統ではDisplay Driverの入ったwindows.isoがVMwareのサポートのページで手に入る。
これも、使うのがLergalかどうか分らないが、VMwareに問い合わせたら、短い期間なら良いと答えたというが、なんともアナログな答えでハッキリしない。