さて、apacheとPHPとMySQLが入ったので、これで日記帳とかはいつでも引っ越せます。次は、htmlで作っていたページの移行です。無料のCMSはいくつかありますが、ploneが良さそうなので使ってみることにします。
 ploneを走らせる場合、sudoコマンドでrootでないユーザーで実行するのですが、FreeBSDにsudoは入っていません。なので先に入れます。
cd /usr/ports/security/sudo
make install

オプションはデフォルトのまま。AUDITのみ選択。
設定はvisudoで行うが、何もしなくてもインストールはできるし使えます。

 plone最新版は4.3.1r1ですが、
libxml2 must be version 2.7.8 or greater; libxslt must be 1.1.26 or greater.
が条件です。最新版のportsを確認してもこれよりバージョン番号は小さいです。ということで、ソースから入れることになります。
 ソースをもらってきましょう。
ftp xmlsoft.org
get libxml2-2.9.1.tar.gz
get libxslt-1.1.28.tar.gz

 libxmlの前にiconvを入れないとダメです。もらってきましょう。
ftp ftp.gnu.org
cd /gnu/libiconv
get libiconv-1.9.2.tar.gz

tar zxvf libiconv-1.9.2.tar.gz
cd libiconv-1.9.2
./configure
make check
make install

tar zxvf libxml2-2.9.1.tar.gz
cd libxml2-2.9.1
./configure
make install

tar zxvf libxslt-1.1.28.tar.gz
cd libxslt-1.1.28
./configure
make install

 準備ができたのでploneを入れます。plone.orgからソースをもらってきます。
tar zxvf Plone-4.3.1r1-UnifiedInstaller.tgz
cd Plone-4.3.1r1-UnifiedInstaller
./install.sh –build-python –password=******* –target=/usr/local/Plone standalone

 ******には初期パスワードを入れます。–passwordを指定しなければインストーラが勝手にパスワードを設定してくれます。

 なぜか1回目は、
Python build has failed.
Installation has failed
になりました。インストールログを見ると、最後の方に、
pybuilddir.txt: No such file or directory
と出ています。
 もう一回同じオプションで./install.shを実行すると、今度は問題なくインストールが終了しました。
 起動します。このバージョンから、ploneではなくplone_daemonが実行ユーザになりました。
sudo -u plone_daemon /usr/local/Plone/zinstance/bin/plonectl start
ps auxして動いていることを確認したら、
http://133.242.169.139:8080/
にアクセス。新しいサイトをつくるかきいてくるので、
サイト名 FrontierLine
説明 Frontier Line
言語 日本語
を選びます。これで、
http://133.242.169.139:8080/FrontierLine
で、サイトを見ることができます。初期パスワードでploneに入った後、ユーザーを作って管理権限を与えてサイト管理者にします。
 停止は、
sudo -u plone_daemon /usr/local/Plone/zinstance/bin/plonectl stop
です。

 自動起動の設定ファイルは、ソースを展開したディレクトリPlone-4.3.1r1-UnifiedInstaller/init_scripts/FreeBSDの下にあります。README.txtの通りに、standaloneの場合は、
cp zope2_10 /usr/local/etc/rc.d
chmod 555 /usr/local/etc/rc.d/zope2_10

 /etc/rc.confに、
zope2_10_enable=”YES”
zope2_10_instances=”/opt/Plone-3.0/zinstance”
を追加します。

 PHPmyadminを入れます。
インストールに先立って、mcryptを入れます。

cd /usr/ports/security/php5-mcrypt
make install

 phpの設定ファイル /usr/local/lib/php/php.iniを変更。

session.save_path = “/tmp”
mcrypt.algorithms_dir=”/usr/local/lib/libmcrypt”
mcrypt.modes_dir=”/usr/local/lib/libmcrypt”

 phpを再インストールします。./configureでmcryptを追加しました。
./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql –enable-mbstring –enable-mbregex –with-libmbfl –enable-pcntl –with-zlib -with-openssl –with-gd –with-freetype-dir=/usr/local –with-curl=/usr/local –with-mcrypt=/usr/local
make install

いよいよPHPmyadminのインストールです。
phpMyAdmin-4.0.6-all-languages.zipを入手、 /home/WWWに置く。
su webadmin
cd /home/WWW
unzip phpMyAdmin-4.0.6-all-languages.zip
mv phpMyAdmin-4.0.6-all-languages phpMyAdmin

 この例ではインストール後のディレクトリをphpMyAdminにしましたが、実際には別の名前にしています。外部に見せる意味はありませんので。
 設定ファイルを作ります。

cd /home/WWW/phpMyAdmin
cp config.sample.inc.php conrig.inc.php

 最初に変更するのは、
$cfg[‘blowfish_secret’] = ‘******’ パスフレーズは適当に決めた。
$cfg[‘DefaultLang’] = ‘ja-utf-8’; ←追加(デフォルト言語)
$cfg[‘Lang’] = ‘ja-utf-8’; ←追加(言語)
$cfg[‘DefaultCharset’] = ‘utf-8’;

$cfg[‘PropertiesIconic’] = TRUE; TRUE又はbothにする。

です。これができたら、http://mydomain/phpMyAdminをブラウザでアクセスし、MySQLのインストール時にコマンドラインで設定したパスワードを使ってログインします。
 まず、パスワードのないユーザとユーザー名が空欄の匿名ユーザーを削除。
 高度な機能の設定をしろといってくるので、examples/create_tables.sqlをパソコンにダウンロード。crreate_tables.sqlをphpMyAdminの画面からインポートします。
 一旦ログアウトし、conrig.inc.phpを編集。

/* Storage database and tables */ 高度な設定のため。
$cfg[‘Servers’][$i][‘pmadb’] = ‘phpmyadmin’;
$cfg[‘Servers’][$i][‘bookmarktable’] = ‘pma__bookmark’;
$cfg[‘Servers’][$i][‘relation’] = ‘pma__relation’;
$cfg[‘Servers’][$i][‘table_info’] = ‘pma__table_info’;
$cfg[‘Servers’][$i][‘table_coords’] = ‘pma__table_coords’;
$cfg[‘Servers’][$i][‘pdf_pages’] = ‘pma__pdf_pages’;
$cfg[‘Servers’][$i][‘column_info’] = ‘pma__column_info’;
$cfg[‘Servers’][$i][‘history’] = ‘pma__history’;
$cfg[‘Servers’][$i][‘table_uiprefs’] = ‘pma__table_uiprefs’;
$cfg[‘Servers’][$i][‘tracking’] = ‘pma__tracking’;
$cfg[‘Servers’][$i][‘designer_coords’] = ‘pma__designer_coords’;
$cfg[‘Servers’][$i][‘userconfig’] = ‘pma__userconfig’;
$cfg[‘Servers’][$i][‘recent’] = ‘pma__recent’;
/* Contrib / Swekey authentication */
$cfg[‘Servers’][$i][‘auth_swekey_config’] = ‘/etc/swekey-pma.conf’;

 編集したら保存して再びログインすると、設定が有効になります。

 Safari5.1.9とphpMyAdmin-4.0.6の組み合わせでは、アイコンやロゴが全く出ません。Safariの開発メニューを表示させてエラーコンソールを確認すると、
refuse to load image……because of Content-Security-Policy
というエラーで、画像ファイルが拒否されています。
 libraries/Header.class.phpを開き、public function sendHttpHeaders() の中を、


                header(
                    "X-WebKit-CSP: allow 'self' "
                    . $GLOBALS['cfg']['CSPAllow'] . ';'
                    . "options inline-script eval-script;"
//                    . "img-src 'self' data: "
//                    . $GLOBALS['cfg']['CSPAllow']
//                    . ($https ? "" : $mapTilesUrls)
//                    . ";"

のようにコメントアウトします。これで、safariでアイコンが出るようになります。

 PHPをインストールします。
 PHPの機能をいろいろ使おうとすると、前もって入れておかなければならない定番のライブラリがいくつかあります。順番としては、
libpng
jpeg
freetype
libgd
curl
php
だとうまくいきます。ひたすら、/usr/local/srcにダウンロードしてはインストール、という繰り返しです。一旦手元のパソコンに持って来てしまったものは、ftpでサーバーに突っ込んだ後、root権限で移動させて/usr/local/srcにまとめておきます。

http://sourceforge.net/projects/libpng/files/libpng16/1.6.3/
より。
tar zxvf libpng-1.6.3.tar.gz
cd libpng-1.6.3
./configure –enable-shared –prefix=/usr/local
make install

http://www.ijg.org/ よりjpegsrc.v9.tar.gz
tar zxvf jpegsrc.v9.tar.gz
cd jpeg-9
./configure –enable-shared –with-png=/usr/local
make install

http://www.freetype.org/ より
freetype-2.5.0.tar.gz
tar zxvf freetype-2.5.0.tar.gz
cd freetype-2.5.0
env GNUMAKE=”/usr/local/bin/gmake” ./configure –enable-shared
gmake intall

 freetypeはインストールの途中でエラーを起こすと、cleanしてもうまくいかないことがある。展開したのを消して、tar.gzを開くところからやり直せばうまくいく。

http://libgd.bitbucket.org/ から、https://bitbucket.org/libgd/gd-libgd/downloads 経由。
libgd-2.1.0.tar.gz
tar zxvf libgd-2.1.0.tar.gz
cd libgd-2.1.0
./configure –enable-shared –with-png=/usr/local

 gdがpngとjpegを要求するので、gdの前にこの2つを入れています。

http://curl.haxx.se/download.htmlより入手
tar zxvf curl-7.32.0.tar.gz
cd curl-7.32.0
./configure
make
make install

 これで、やっとPHPのインストールに入れます。
tar zxvf php-5.5.3.tar.gz
cd php-5.5.3
./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql –enable-mbstring –enable-mbregex –with-libmbfl –enable-pcntl –with-zlib -with-openssl –with-gd –with-freetype-dir=/usr/local –with-curl=/usr/local
make install

 待たされるのでお茶でも飲みましょう。

 終わったら、/usr/local/apache2/conf/httpd.confに、
LoadModule php5_module modules/libphp5.so
があることを確認。無ければエディタで追加します。変更したら/usr/local/apache2/bin/apachectl restartを忘れずに。

 設定ファイルは、テンプレートをコピーしてきます。
cp /usr/local/src/php-5.5.3/php.ini-production /usr/local/lib/php/php.ini
/usr/local/lib/php/php.iniが設定ファイルになります。
変更箇所は次の通り。

short_open_tag = On
expose_php = Off
error_log = /var/log/php_errors.log

max_execution_time = 30
max_input_time = 3000
memory_limit = 1700M
post_max_size = 1600M

doc_root =”/home/WWW”
upload_tmp_dir = /tmp
upload_max_filesize = 1500M

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none
mbstring.func_overload = 0
mbstring.strict_detection = Off

 変更したら、/usr/local/apache2/bin/apachectl restartしておく。転送ファイルのサイズがやたら大きいのは、アップローダを運用しているから。

<?php
phpinfo();
?>
なるファイルを作ってtest.phpとして保存,ブラウザでアクセスする。設定一覧が表示されたら、apacheもphpも動いている。

 WordPressその他を使うためにMySQLを入れます。これを先にいれておかないと、MySQL対応でPHPをインストールしようとするとコケます。
 portsの最新版はバージョン5.6ですが、5.6から設定ファイルがテンプレートのみになってて、どこで詳細設定をしているのかがさっぱりわかりません。本家サイトも見に行ったのですが、設定例が見つかりません。ですから、5.5を入れることにします。

cd /usr/ports/databases/mysql55-server
make install

 途中のオプションは、SSLのみを指定します。サーバを入れるとクライアントも一緒に入れてくれます。

 自動起動のため、/etc/rc.confに
mysql_enable=”YES”
を追加。一度リブートして、mysqが動いていることを確認。

 設定は、/usr/local/etc/my.cnfで行います。まず、設定ファイルをコピーします。
cd /usr/local/share/mysql
cp my-medium.cnf /usr/local/etc/my.cnf

 コピーしたら次を追加。

[client]
default-character-set = utf8

[mysqld]
skip-character-set-client-handshake
character-set-server=utf8

datadir=/var/db/mysql

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

 my.cnfを変更したら、
/usr/local/etc/rc.d/mysql-server restart
で再起動。

 次に、rootユーザーを作ります。
mysqladmin -u root password ******
としてパスワードを設定。******にはパスワードを入れます。

mysql -u root -p
Enter password:
でログインできることを確認。sqlのコマンドラインが出ます。
show variables like ‘char%’;
とやると、文字コードがutf-8になっているかどうか確認できます。
helpとかexitのあとにかならず;入力が必要。SQLなので。
 ここでパスワードのないユーザーの削除とかをやってもいいのですが、すぐにPHPmyadminを入れるので、そっちでやる方が楽なので何もせず抜けます。

 なお、このインストールで、/usr/localの下の各ディレクトリに関連ファイルが突っ込まれます。PostgreSQLのように1カ所にまとまっていません。また、何もしなくてもデフォルトのデータディレクトリは/var/db/mysqlです。
 動かない時のログファイルは、
/usr/local/mysql/data
にあります。

 手動での起動と停止は、
/usr/local/etc/rc.d/mysql-server start
/usr/local/etc/rc.d/mysql-server stop
でできます。

 ファイルは自由出し入れできるようになりましたが、突っ込んだhtmlファイルを表示するには、apache httpd serverを入れなければなりません。また、この日記帳を引っ越すには、MySQLとPHPが必要です。PHPのファイルにアクセスがあった場合、実行結果を返すのもapacheの仕事です。一方、PHPのインストール時には利用するデータベースを指定する必要があります。
 ということで、インストールの順番は、apache→MySQL→PHP→PHPmyadmin(MySQLの管理ツール)となります。

apache

 apache2の最新版を使うことにします。portsではなくソースからのインストールになるので、/usr/local/srcディレクトリを作って、もらってきたソースをまとめることにしました。

ftp ftp.apache.org
cd /pub/apache/httpd
ls 最新版を確認
get httpd-2.4.6.tar.gz

これ以外に、
apache/apr/apr-1.4.8.tar.gz
apache/apr/apr-util-1.5.2.tar.gz
もgetしてきます。httpdのあったディレクトリのサブディレクトリaprの下にあります。

 apacheの前に、libxml2とexpatを入れておく必要があります。こちらはportsから入れてしまいましょう。実は、後でlibxmlをソースから入れる羽目になるのですがそれはそれとして。
cd /usr/ports/textproc/libxml2
make install
/usr/ports/textproc/expat2
make install
で2つともインストール完了。

 apacheのインストール。
cd /usr/local/src
tar zxvf httpd-2.4.6.tar.gz
apache本体を展開したら、aprの関連ファイルをsrclibディレクトリで展開。
cp apr-1.4.8.tar.gz httpd-2.4.6/srclib
cp apr-util-1.5.2.tar.gz httpd-2.4.6/srclib
cd httpd-2.4.6/srclib
tar zxvf apr-1.4.8.tar.gz
tar zxvf apr-util-1.5.2.tar.gz
mv apr-1.4.8 apr
mv apr-util-1.5.2 apr-util
cd ..
/configure –prefix=/usr/local/apache2 –enable-so –enable-mods-shared=all –enable-rewrite=shared
make
make install

 コンパイルが終わるまで暫く待つ。インストールディレクトリは/usr/local/apache2。

 自動起動の準備は、/usr/local/etc/rc.d/apache.shという名前で次の内容のファイルを作り実行許可ビットを立てておく。


#! /bin/sh
#
#  rc file for Apache
#
apachectl=/usr/local/apache2/bin/apachectl

case "$1" in
start)
        if [ -x $apachectl ]; then
                $apachectl start && echo -n ' httpd(apache)'
        fi
        ;;
stop)
        if [ -x $apachectl ]; then
                $apachectl stop && echo -n ' httpd(apache)'
        fi
        ;;
*)
        echo "usage: $0 {start|stop}" 1>&2
        exit 1
        ;;
esac

 設定は、/usr/local/apache2/conf/httpd.conf、変更箇所とか活きているモジュールとかはこんな感じ。

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule xml2enc_module modules/mod_xml2enc.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.soLoad
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so

User nobody
Group nobody

ServerAdmin r.hirokawa@frontier-line.org

DocumentRoot “/home/WWW”
<Directory “/home/WWW”>
Options FollowSymLinks MultiViews ExecCGI
AllowOverride All
Require all granted
</Directory>

<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>

<FilesMatch “\.inc$”>
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch “\.conf$”>
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch “\.func”>
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch “\.php$”>
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch “\.phps$”>
SetHandler application/x-httpd-php-source
</FilesMatch>

ErrorLog “logs/error_log”
CustomLog “logs/access_log” combined

ScriptAlias /cgi-bin/ “/home/WWW/cgi-bin/”

Addtype application/x-httpd-php .php  ←<IfModule mime_module>のところに追加。

<fModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

ServerTokens Prod
ServerSignature Off

AcceptFilter http none
AcceptFilter https none

 最後の2行は、
[core:warn] [pid 1112:tid 34389128192] (2)No such file or directory: AH00075: Failed to enable the ‘httpready’ Accept Filter
というメッセージが毎回出るのを避けるためのもの。http://www.skymerica.com/blog/yotsumoto/arch/2007/06/11/000799.htmlに情報がある。FreeBSDのカーネルにaccf_http.koをロードすれば良いのだが、VPSだとカーネルを触れないので、設定で強制的にAcceptFilterを無効にする。ちょっともったいない気もするけど暇なサーバーだからまあいいかねえ。

起動
/usr/local/apache2/bin/apachectl start
停止
/usr/local/apache2/bin/apachectl stop
設定変えたとき
/usr/local/apache2/bin/apachectl reload
*.confの文法チェック
/usr/local/apache2/bin/apachectl -t

 文法チェックかけて、手動で起動後、ps auxしてhttpdが走っていることを確認。一旦停止させてリブート後、ps auxしてhttpdが居れば成功。