WordPressデータベースの設定

まずは

mysql_secure_installation

を実行してrootのパスワードの設定、ロカールからのみのアクセス制限、初期ユーザーやデータベースの削除を指示通り行う。

次にmysqlの対話モードに入る。

mysql -u root -p

対話コマンドでデータベースの作成とアクセスするユーザーの登録を行う。

create database wordpressdb;

grant all on wordpressdb.* to ‘wordpress’@’localhost’ identified by ‘Password’;

末尾の;はコマンドの終了を意味するので、ついつい忘れがちだが忘れない。ここで作成したデータベース名’wordpressdb’、アクセスユーザー’wordpress’、パスワード’Password’はWordPressの初期セットアップに必要なので忘れないこと。初期セットアップが済んだら忘れてもよい。

 

MySQLの導入

続いてdatabases/mysql55-serverからMySQLを導入する。

導入後、/usr/local/share/mysql/my-medium.cnfを/var/db/mysql/my.cnfにコピーする。その後、my.cnf内の[mysqld]セクションに

character_set_server = utf8
collation_server = utf8_general_ci

を追記してデータベースのデフォルト言語をutf-8に設定する。

さらに/etc/rc.confに

mysql_enable=”YES”

を書いてから

/usr/local/etc/rc.d/mysql-server start

でmysqlサーバーを起動する。

WordPressの導入

portsコレクションの中にjapanese/wordpressがあったので、とりあえずこれでさっくり導入する事にする。WordPress本体は/usr/local/www/wordpress/にインストールされる模様。

重要なのは途中でPHP5のインストールがあるので、そこでApache Moduleをオプションで選んでおくこと。これとは別にlang/php5-extensionsを導入して、途中のオプションでmbstringとGDとMySQLとZLIBチェックする。GDとZLIBが必要かどうかわからないがよく入れろと書いてあるので念のため入れておく。

/usr/loca/etc/php.ini を用意しないといけないが、WordPress導入記事をつらつらと探していたらmbstringでutf-8を設定してあるサンプルがウェブに転がっていた(http://www.kishiro.com/FreeBSD/php5.html)のでとりあえずこれで良しとする。ていうかphp.iniの設定は複雑すぎて手に負えない。

これで大丈夫かと思ったら肝心のMySQLが入っていないじゃないか。

 

サーバーアップグレード

サーバーのOSであるFreeBSD 7.4-RELEASEが2013年1月末でEnd of Lifeを迎える。

というわけで、freebsd-updateで8.3-RELEASEにアップグレード。時間はかかったが基本的なサービスは問題なく動いている模様。楽ちん楽ちん。

と思ったら、危惧していた通りPython24&Zope29で動かしていたCOREBlog-1.2.5が動いていない。というかPython自体が参照ライブラリが見当たらないのでZopeそのものが上がっていない。

というわけで、さっくりこれらをアンインストールして、WordPressに移行することにする。

ついでにapacheもログローテーション

Zopeのログ・ローテーションで気になって調べてみたらapacheも全くローテーションされておらずとんでもない(というほどでもないが)サイズになっていた。というわけで、こちらもnewsyslog.confに設定追加。
/var/log/httpd-access.log 644 7 * @T00 J /var/run/httpd.pid /var/log/httpd-error.log
644 7 * @T00 J /var/run/httpd.pid
こちらは@T00の設定で毎日0時にログをロ…

Zopeのログ・ローテーションで気になって調べてみたらapacheも全くローテーションされておらずとんでもない(というほどでもないが)サイズになっていた。というわけで、こちらもnewsyslog.confに設定追加。

/var/log/httpd-access.log 644 7 * @T00 J /var/run/httpd.pid
/var/log/httpd-error.log 644 7 * @T00 J /var/run/httpd.pid

こちらは@T00の設定で毎日0時にログをローテーションして1週間保管する設定に。FreeBSDのportsからインストールしたapacheは/var/run/httpd.pidにデフォルトでpidを書き出すので、設定変更していたら注意すること。

ログのローテーションがちゃんと出来てるかは後日ちゃんとチェックしないといけないか。

ついでに、httpd-error.logを見たら、cgiが呼び出されるたびにjcode.plが妙なエラーを吐いていることに気が付く。たぶんjcode.plが古いせいだろう。長年メンテナンスしてないからなあ。というわけで、japanese/jcode.plをportsからインストールし、cgiに記入してあった

require ‘./jcode.pl’;

require ‘jcode.pl’;

に変更してcgiと同ディレクトリに置いてあった古いjcode.plからportsからインストールされた新しいjcode.plを参照する様に変更したところ、エラーを吐き出さなくなった。めでたしめでたし。

ついでに、cgiにおかしなアクセスをするスパマーをはじく為に書いている拒否ディレクティブが長くなってきてうっとうしくなってきたので、cgi-binセクションを別ファイルに切り分けることに。portsからインストールされるapache22は/usr/local/etc/apache22/Includes内においた*.confファイルを最期に一気に全て読み込むようになっているので、cgi-binセクションを別ファイルにしてcgi-bin.confとしてこのディレクトリに置いて、本体のhttpd.confからセクションを丸ごとコメントアウト。これで、cgi-binに追加の拒否ディレクティブを書き足すのが楽になるよ。

Zopeのログローテーション

サーバーのディスクがぱんぱんになっていたので何が原因かと調べていたら、どうも稼働時からZopeのログがまったくローテーションされていないのでログが膨大なサイズに膨れ上がっていた。というわけで、ちょこちょこ調べてログがローテーションされるように設定。
具体的にはFreeBSDにはnewsyslogというログをローテーションするシステムがあるので、その設定ファイルである/etc/newsyslog.confに記述を追加。
/usr/local/www/Zope29/log/Z2.log www:w…

サーバーのディスクがぱんぱんになっていたので何が原因かと調べていたら、どうも稼働時からZopeのログがまったくローテーションされていないのでログが膨大なサイズに膨れ上がっていた。というわけで、ちょこちょこ調べてログがローテーションされるように設定。

具体的にはFreeBSDにはnewsyslogというログをローテーションするシステムがあるので、その設定ファイルである/etc/newsyslog.confに記述を追加。

/usr/local/www/Zope29/log/Z2.log www:wheel 644 5 5000 * J /usr/local/www/Zope29/var/Z2.pid
/usr/local/www/Zope29/log/event.log www:wheel 644 5 5000 * J /usr/local/www/Zope29/var/Z2.pid

これでZopeのログが5MBに達するごとにローテーションしてからZopeのプロセスにログの再始動を促してくれる。ミソはZopeが書き出すpidファイルを参照してnewsyslogにどのプロセスに再始動のシグナルを送ればよいかを教えてあげること。デフォルトではSIGUSR1を送るらしい。SIGUSR1によるログの再始動に対応していないプロセスの場合はSIGHUP1を送る様に設定の最期にシグナルのナンバーを記述すればいいのだろうか?

rootでnewsyslog -Fで強制的にログをローテーションするテストが出来るので動作確認。

でも、最大の圧迫の原因は何年もデータベースのパックをしてなかったためにデータベースがロールバック用のアンドゥデータでぱんぱんに膨れ上がっていたためでした。こっちも自動で定期パックするようにした方がいいのかもしれないけど、あんまり高頻度にパックするとたまにデータベースが壊れるらしいので、当面は手動のままでいこう。毎日のdfの出力結果を注視しておかないと。

OpenVPN on Mac OS X Leopard その7

以上でLeopardクライアント版でOpenVPNによるVPNサーバーの設定は完了。後は、クライアントにOpenVPNをインストールしてクライアントキーを与えれば、クライアントのtunデバイスに自動的にIPが与えられ、同時にクライアントのデフォルトルートがVPNサーバーに設定されるので、クライアントから出る通信は全てVPNサーバーに送られ、そこでNATで変換されてインターネットに出て行く様になる。
もし、一時的にVPNサーバーを止めたいと思った場合は sudo
launchctl unload…

以上でLeopardクライアント版でOpenVPNによるVPNサーバーの設定は完了。後は、クライアントにOpenVPNをインストールしてクライアントキーを与えれば、クライアントのtunデバイスに自動的にIPが与えられ、同時にクライアントのデフォルトルートがVPNサーバーに設定されるので、クライアントから出る通信は全てVPNサーバーに送られ、そこでNATで変換されてインターネットに出て行く様になる。

もし、一時的にVPNサーバーを止めたいと思った場合は

sudo launchctl unload -w /Library/LaunchDaemons/org.macports.openvpn2
sudo launchctl unload -w /Library/LaunchDaemons/net.waterroof.rules.plist

で自動起動をとめ、再起動すればいい。逆にその状態からまたサーバーを再開したい場合には、上記のunloadをloadに変えて実行すればいい。

OpenVPN on Mac OS X Leopard その6

ここまでくれば後一息。クライアントからの通信をインターネットに中継する為にNATを有効化してVPNルーターとして働く様にする。
幸いな事に、FreeBSDベースのMac OS
Xはサーバー用でなくてもipfwとnatdが最初から用意されている。というわけで、ここでipfwとnatdをさくさくと設定したいところだが・・・どうにもlaunchdの為の設定を書くのは難しい。
ということで、ここは簡単なツールに頼る事にする。その名もWaterRoofというMac
OS Xのファイヤーウォールの設定をG…

ここまでくれば後一息。クライアントからの通信をインターネットに中継する為にNATを有効化してVPNルーターとして働く様にする。

幸いな事に、FreeBSDベースのMac OS Xはサーバー用でなくてもipfwとnatdが最初から用意されている。というわけで、ここでipfwとnatdをさくさくと設定したいところだが・・・どうにもlaunchdの為の設定を書くのは難しい。

ということで、ここは簡単なツールに頼る事にする。その名もWaterRoofというMac OS Xのファイヤーウォールの設定をGUIからいじる為のフロントエンドツールがちゃんと出回っている。

WaterRoof

Leopard用の最新のものをダウンロードして、アプリケーションフォルダにでも突っ込んでおく。

さて、起動したらまずするべきは、WaterRoofによるファイヤーウォールの設定が起動時に反映する様に自動実行スクリプトをインストールする。これはWaterRoofのメニューからTools -> Startup Script -> Install Startup Scriptを選べばいい。これで、launchd用の設定と実際に起動時に実行されるwrapperである/etc/waterroof.shが用意される。さらにTools -> Forwarding -> Enable ForwardingでNATに必要なインターフェース間のパケットの転送の許可をカーネルに指示する様にしておく。

次にnatdを実行する様に設定する。ウィンドウからNAT Setupを選び、NATの出口になるインターフェースを設定する。今回のサーバーは有線接続なのでen0を指定する。それから、Default configuration -> Save configuration -> Start NAT -> Enable NAT auto startと順に押すだけで設定完了。ipfwに対する設定まで全部自動で済ませてくれる。

さて、このままだと実はなぜか自動実行時には設定途中で止まってしまってnatdが起動して来ない。natdが起動しないと外との通信もなにもかも出来なくなってしまうので、非常にこまる。ということで、/etc/waterroof.shを書き換えてちゃんとnatdが上がる様にする。

悪さをしているのは、

ipconfig waitall

という行。これは、起動時に全てのインターフェースが起動するのを待ってから設定を始める為に必要なんだけど、OpenVPN起動時のtunデバイスの起動とはどうも相性が悪いらしい。そこで、これをコメントアウトして、代わりに単純な秒読みウェイトをいれてあげる。

sleep 5

試した限りでは5秒も待たせれば十分なようだ。単にコメントアウトしただけではダメだったので、少しはウェイトを入れる必要があるんだろう。初回起動時にはログイン後に5秒ほど待つとネットが使える様になるが、5秒なんてOSがデスクトップの描画の準備をしている間に過ぎてしまうので実用上の問題は無いだろう。

再起動してログインして

ps -ax | grep natd

でnatdが起動しているのが確かめられれば問題は無い。

後は、

sudo ipfw list

でen0を通るパケットに対してdivertルールが適用されているか、と

sysctl net.inet.ip.forwarding

でこの値が1(true)になっているかも念のため確認しておこう。

OpenVPN on Mac OS X Leopard その5

さて、次は自動的にMac OS
X起動時にOpenVPNが起動される様に設定する。
本当はMacPortsのお作法的にはdaemondoにdaemonとして起動してもらう様な設定を書くのが正しいのだと思うが、どうにもdaemondoに関するドキュメントが見当たらないので、OS
Xのlaunchdを使って自動的に起動してもらうことにした。止めるときの事はあんまり考えない様にする。
これには、以下のファイルを用意する。
/Library/LaunchDaemons/org.macports.open…

さて、次は自動的にMac OS X起動時にOpenVPNが起動される様に設定する。

本当はMacPortsのお作法的にはdaemondoにdaemonとして起動してもらう様な設定を書くのが正しいのだと思うが、どうにもdaemondoに関するドキュメントが見当たらないので、OS Xのlaunchdを使って自動的に起動してもらうことにした。止めるときの事はあんまり考えない様にする。

これには、以下のファイルを用意する。

/Library/LaunchDaemons/org.macports.openvpn2


<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>org.macports.openvpn2</string>
<key>ProgramArguments</key>
<array>
<string>/opt/local/sbin/openvpn2</string>
<string>/opt/local/etc/openvpn2/server.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

後は、以下のコマンドで有効にする。

sudo launchctl load -w /Library/LaunchDaemons/org.macports.openvpn2

これで起動してるはず。

ps -ax | grep openvpn2
ifconfig -a

でプロセスが起動しているか、tunデバイスが設定されているかを確認しよう。これが動いていれば再起動しても自動的に起動する様になってるはず。

逆に止めたければ、先ほどのlaunchctlのコマンドでloadをunloadにすればいい。

OpenVPN on Mac OS X Leopard その4

設定ファイルは人それぞれだと思うが、とりあえず今回使った設定をのせておく。
/opt/local/etc/openvpn2/server.conf — port 1194 proto udp dev tun0 ca
/opt/local/etc/openvpn2/keys/ca.crt cert /opt/local/etc/openvpn2/keys/Server.crt
key /opt/local/etc/openvpn2/keys/Server.key dh /opt/local/…

設定ファイルは人それぞれだと思うが、とりあえず今回使った設定をのせておく。

/opt/local/etc/openvpn2/server.conf


port 1194
proto udp
dev tun0
ca /opt/local/etc/openvpn2/keys/ca.crt
cert /opt/local/etc/openvpn2/keys/Server.crt
key /opt/local/etc/openvpn2/keys/Server.key
dh /opt/local/etc/openvpn2/keys/dh1024.pem
server 192.168.50.0 255.255.255.0
push “redirect-gateway def1”
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /opt/local/etc/openvpn2/openvpn-status.log
verb 3

ミソはpushディレクティブで、これによりクライアントが接続後、自動的にOpenVPNを通して全ての通信を送る様にルーティング設定される。

さて、ここまで出来たら、一度

/opt/local/sbin/openvpn2 /opt/local/etc/openvpn2/server.conf

とやってちゃんと起動するかを確かめよう。