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が居れば成功。

 さて、OSをインストールしたわけですが、この状態ではほとんど何もできません。レンタルサーバーなら、メニューからちょっと設定するだけですぐメールが使えたり、お仕着せのブログが使えたり、htmlファイルも置くだけでネット公開できちゃったりするわけですが、VPSだとそうはいきません。sendmailだけは動いてるっぽいのですが、POPが無いので手元のメールソフトに届いたメールを持ってくることさえできません。
 VPSのご利用上の注意にも、「さくらのVPSは、お客様にサーバのroot(管理者)権限をお渡しするサービスです。「さくらのレンタルサーバ」などの共用レンタルサーバと異なり、サーバ・OSの設定やアプリケーションのインストール、セキュリティ対策などの運用管理もお客様の作業です。ご利用のOSに関する専門的なサーバ運用知識が必要となりますので、ご注意ください。」と明記してあります。
 つまり、自分でサーバーを立てて管理者をするつもりがあるならVPSは何でもできてその上安いのですけど、それが嫌ならレンタルサーバーやマネージドサーバーのように、運用管理をさくらインターネットにお任せするプランをお薦めします。さくらに限らず他のサーバー屋さんでもですが。

portsを最新版に

 rootになって、


portsnap fetch update
portsnap extract

 で、portsコレクションが最新版になります。これでも追いつかない場合はソースから入れることになります。

何はともあれemacs

 インストール作業が始まると、長い設定ファイルを編集する作業が出てきますので、まずはemacsの準備です。viよりは使いやすい(と私は思う)ので。せっかくportsがあるのでportsから入れちゃいましょう。ただし、最近のemacsはX winodwで動くのが基本のようです。サーバなのでX11不要、テキストベースのMacのコンソールから使いたい、という場合は、X11を使わないものを入れなければなりません。


cd /usr/ports/editors/emacs-nox11
make install

でインストール完了です。

proftpd

 手元のパソコン経由で旧コンテンツを突っ込んだりしなければならないので、ftpdが動いてないと話になりません。


cd /usr/ports/ftp/proftpd
make install

でインストール。途中でオプションをきかれますので、perl互換の正規表現、他正規表現、language supportなどはYESで、IPv6はnoで。
 スタートアップスクリプトは/usr/local/etc/rc.d/proftpd、設定ファイルは/usr/local/etc/proftpd.confになります。設定ファイルで変えたところは次の通り。


ServerName                      "frontier-line ftp server"
UseFtpUsers on

#UseIPv6                         on  ←使わないつもりでコンパイルオプションに入れなかった場合はoffを指定するのではなく丸ごとコメントアウトする。

DefaultRoot ~ !wheel ftplimit

<Anonymous ~ftp>
   User                         ftp
   Group                                ftp

  ### We want clients to be able to login with "anonymous" as well as "ftp"
   UserAlias                    anonymous ftp

  ### Limit the maximum number of anonymous logins
   MaxClients                   10

  ### We want 'welcome.msg' displayed at login, and '.message' displayed
  ### in each newly chdired directory.
   DisplayLogin                 welcome.msg
   # DisplayFirstChdir          .message

  ### Limit WRITE everywhere in the anonymous chroot
   <Limit WRITE>
     DenyAll
   </Limit>
</Anonymous>

<Limit LOGIN>
  DenyAll

  AllowGroup xxxxxx
  AllowGroup user
  AllowGroup ftp
</Limit>

xxxxxxには、ウェブ管理用のアカウントが所属しているグループを記入。
/etc/ftpusersに、ftpアクセスを拒否したいユーザーを列挙。
/etc/shellsは次の通り。


/bin/sh
/bin/csh
/bin/tcsh
/bin/sync

 ログインはさせないがftpはできるユーザを設定するには、passwdファイルの最後のフィールドに/bin/syncなどと書き、/etc/shellsに/bin/syncを追加する。ただしこのユーザは計算機内の全ディレクトリを移動できます。

 proftpdは常駐で立ち上げますので、/etc/inetd.confの、ftpで始まる行をすべてコメントアウトします。
 adduserで、ユーザftpを追加。パスワードなし、ログインシェル無し、homeはanonymous ftpで公開するディレクトリを指定。
 /etc/groupを編集。元々あった、
ftp:*:14:
を削除。
以下を追加。
ftp:*:2001:ftp,xxxxxx,yyyyyy
ftplimit:*:2002 ←/home/WWWに書くユーザはここに入れるとだめ

 xxxxxx,yyyyyyには、ftpで自分のディレクトリのファイルを書き込んだりするユーザーを指定。
 次に、sftpができるようにするため、/etc/ssh/sshd_configで、
Subsystem sftp /usr/libexec/sftp-server
が有効であることを確認しておきます。
 /usr/local/etc/rc.d/proftpdがあることを確認(portsから入れると自動で入ります)。
 /etc/rc.confに、
proftpd_enable=”YES”
を追加。これで、システム起動時に自動的にproftpdが上がります。

 なお、手動での起動は、
/usr/local/sbin/proftpd
でできます。

 ここのサイトはブログもhtmlコンテンツも含めて、さくらのレンタルサーバーのお世話になっています。契約したのが前からなので、スタンダードプランの容量が30GBのままです。まあ、今の使い方をしている限り、向こう数年以上はディスクを気にする必要はないのですが、固定のコンテンツの制作がいろいろ面倒になってきました。今さらフレームレイアウトでもないだろうし、かといってCSSで全部作り直すのも面倒だし、頼りにしていたDreamWeaverは度重なるバージョンアップでとうとう買い取り方式ではなくなった上にだいぶ前からAdobe価格(つまり高価)だし……。
 そこで、contents management system (CMS)を入れて、ナビゲーションの構築などはCMSに任せて、コンテンツ更新の方に集中することにしました。
 すると、今のスタンダードプランでは物足りません。容量的にも機能的にも足りない。かといって専用サーバーを借りると、趣味のサイトにしては高すぎるし。さくらのプランをいろいろ検討した結果、VPSを使うことにしました。さくらのVSP2Gってヤツです。レンタルサーバーとそんなに変わらない価格帯で、固定IP振ってもらえて、rootにもなれる。これまでのように転送データの制限もない。ちょっと写真の多い記事を書いて編集してたらアクセスできなくなるようなこともない。きっと便利になるはずです。
 冬コミがどうなるかわかりませんが、追い込み前にサーバー移転を済ませよう。早速作業を開始します。
 クレカ支払いで申し込むと、30分も経たないうちにサーバが割り当てられて、初期パスワードやIPアドレスがメールで送られてきます。無料お試し期間は2週間。お試しの間はDNSに登録できないといった制約はありますが、旧サーバーで運用しておいて新サーバーの準備が完全に整ったら切り替えるので問題無しです。準備ができればいつでもお試しを終えて利用に入れます。

OSの変更

 初期設定はCent OSだかになってますが、そんなの使うつもりはないので早速変更。VPSコントロールパネルからOSの再インストールを行います。今回は、FreeBSD9.1 AMD64を選びました。インストール手順は、http://support.sakura.ad.jp/manual/vps/mainte/custom_freebsd9.0.htmlとか、http://blog.livedoor.jp/saba_nano/archives/28363307.htmlにあります。インストールを始める前に、パソコンのブラウザでJAVAが実行できるようにしておきます。インストールが始まると、JAVAを利用したコンソールウィンドウが開いて、オプションなどの操作をすることになります。まだ、元のブラウザのウィンドウには、IPアドレスやネットマスク、ゲートウェイなど、最初に設定すべき情報が表示されるので、ウィンドウを注意して見ておきます。

 パーティションはお任せコース(Guided)だと
64KB FreeBSD boot
196GB freebsd-ufs
4GB freebsd swap
で、まあ/varを一緒にすることもないし、自分一人しか使わないから制限をかける必要もないのでこのままいきます。メニューはスペースで選択or決定、TABで項目移動、Enterで決定です。メニューからユーザーを追加できるので、最低一人はパスワードで入れるユーザーを作り、グループwheelにも入れておきます。これをやっておかないと、Macのターミナルから作業するということができません。rootではsshログインできないし、wheelに入っていないユーザーはrootになれないし、直接rootで入れるJAVAのコンソールは狭いので不便です。終了したらリブートして、インストール画面が出るのでshellに戻って、


shutdown -p now

とやって停止させた後、VPSコントロールパネルから再起動します。

最初の作業

 これから長いインストール作業が始まります。が、sshでログインして暫く何もしないと強制ログアウトさせられてしまいます。なので、追い出されないように、/etc/ssh/sshd_configで次のように設定します。


TCPKeepAlive yes
ClientAliveInterval 60

 設定したら、sshdにHUPを送るなどして、設定を読み込ませます。これで、作業中にお茶をのんで休憩しても追い出されることはありません。