Warning: Error while sending QUERY packet. PID=9814 in /home/uls/public_html/wordpress/wp-includes/class-wpdb.php on line 2351 FreeBSDな生活

2006.01.15

sshの設定・・・(FreeBSD)

ほとんど、自宅内からしかアクセスしないからとssh接続の設定を行っていなくて通常のtelnetを使っていたが、使ってみようと設定することにした。
設定と言っても/etc/rc.confにsshd_enable=”YES”が入っていればsshdは既に起動しているので、もっぱらWindowsのクライアント側の作業となる。
最初、使っていたTeraTerm ProにTSSHをダウンロードして入れて設定しようとしたが、この組み合わせではSSH1しか使えず、最近のSSH2は使えないのでもっと新しいTeraTerm Pro UTF-8 対応版をダウンロードして新しく入れた。
ダウンロードするのはteratermj_utf8_425.exeで、ダウンロード後これをクリックするとインストールが始まる。
インストールしたら、起動すると図-1のような画面が現れるので、最初はまず通常のtelnetモードでloginする。
tterm01.jpg
      (図-1 )
loginできたら、設定のSSH KeyGeneratorを選ぶと図-2のような画面が現れるのでKey TypeにRSAを選んでKey Passphraseを入れてGenerateを押してKeyを生成する。
tterm03.jpg
      (図-2)
keyはpublic key(公開鍵)とprivate key(秘密鍵)の2つがそれぞれid_rsa.pubとid_rsaの名前で出来上がるので、この2つを保存しておく。
次に自分のhome directoryに .sshというDirectoryを作りftpでid_rsa.pubを送り込み、authorized_keysとファイル名を変える。
これで準備が出来たので、Tera Termを一度終わらせて再度Tera Termを起動し今度はsshを選んでOKボタンを押す。
(図-3)のような画面になるのでUse RSA/DSA Key to loginを選びPrivate Key fileを押して先に保存したid_rsaを選択してPassphraseにKey生成で用いたのと同じPassphraseを入れOKを押すと、見事にlogin出来る。

これで準備が出来たので、Tera Termを一度終わらせて再度Tera Termを起動し今度はsshを選んでOKボタンを押す。
(図-3)のような画面になるのでUse RSA/DSA Key to loginを選びPrivate Key fileを押して先に保存したid_rsaを選択してPassphraseにKey生成で用いたのと同じPassphraseを入れOKを押すと、見事にlogin出来る。
tterm04.jpg
      (図-3)
ここで、従来使っていたPasswordとPassphraseの違いを述べておくと、passwordは通常10字程度の記号と英数字でスペースは許されないが、Passphraseはもっと長くスペースも許されるので、
I can see beautiful mountainsのような文章とすることが出来る。
そして、文は文法的に誤りがあったり、スペルミスがある方が良いとされる。
しかし、長い文はloginのたびに入れるのが大変なので、自宅内だけなら簡単なpasswordと同じものでも良いと思う。


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