0. WEBサーバーを、かなり長い間放置していた。時々ヘンなアクセスが無いかどうか くらいはチェックしていたが、そろそろOSもサーバーソフトも新しいものに更新する のがよかろう。しかし、いきなりサーバーにインストールして動きませんでした、 では悲し過ぎる。まずは、手元のPCでテストしてみるべきだろう。 折角なので Apache 2 も最新のものにアップデートし、PHP も 5 に更新することに したい。 しかし、PC本体がかなり古い。かれこれ10数年前の定番スペックのものだ。果た して最新の OS のインストールに耐えられるのだろうか? 実験に使ったPCのスペックは以下の通り。 CPU : AMD Athlon 650MHz MB : Chipset: VIA Apollo KX133 Memory : 128 MB (= 128MB * 1枚) HDD : 80 GB (Ultra ATA) このメモは、試行錯誤をそのまま記録しているので、かなり分かり難いことを予め強調 しておく。試行に対する成功や失敗は、なるべくタイトルやサブタイトル中で明記する ようにした。 ----- I. OS の更新 ----- この PC、今までは Redhat 8 を走らせていた。Vine Linux 2.6 あたりをインス トールしようとしたこともあるのだが、インストール完了後、再起動すると kernel panic を起こして停止してしまったのだ。知識と技術がある人なら対処もできるのだ ろうが、不幸にも私には、そのような知識や技術は備わっていない。結局、無事イン ストールが完了して、起動した Redhat 8 で使っていた。ちなみに Apache のバー ジョンは 2.0.40、PHP は 4.x.x. である。 当初は、この Redhat 8 のまま、apache 2 と PHP 5 の更新を行うつもりだったが、 PHP のバージョンアップがどうも上手くいかない。OS が古すぎるのだろうか? 結局、 面倒なので OS そのものから再インストールすることにした。 一旦、PC を停止し、現在の起動用 HDD を念のため外して保管、新品の IDE 80 GB のハードディスクを primary/master に接続した。 1.1 Ubuntu 10.10 / Ubuntu 10.04 導入ならず---失敗: たまには慣れていないディストリビューションもいいかと思い、日経 Linux 2010 年 12 月号の付録 DVD から「Ubuntu 10.10 Desktop 日本語 Remix CD」のインスト ールを試みた。DVD をドライブに入れてブート...しかし、どうも PC がパワー不足 らしく、しばらく画面がいろいろ動くものの、結局インストーラーは起動せず。 少しバージョンを下げてみるか、と、今度は日経 Linux 2010年 10 月号の付録 DVD から「Ubuntu 10.04 LTS Desktop 日本語 Remix」をドライブに入れてブート...しかし、 やはり、同様にインストーラーは起動せず。うぬぬ。Ubuntu 9.x を試そうかとも考え たが、今は、これで止めておくことにする。 1.2 Vine Linux 5.2 導入---成功---されど: 次に、日経 Linux 2011 年 2 月号の付録 DVD から「Vine Linux 5.2(32ビット版)」 を試すことにした。DVD をドライブに入れてブート。今度は問題なくインストーラーが 起動。ほとんど全ての設定はデフォルトでインストール開始。1時間近くかかったものの、 無事インストール終了。PC を再起動したところ、ちゃんと Vine 5.2 が立ち上がった。 取り敢えず最新の apache 2 をインストールしてみた(2.2 参照)が、これが大失敗。 改めてネットを彷徨ってみると、Vine Linux 5.2 はまだリリース直後ということも あって、現状では情報が少ないようだ...これはトラブルになった時に怖いかなぁ(既に トラブってるけど)。と、言うことで、Vine Linux 5.2 は放棄することにした。 1.3 Vine Linux 4.2 導入---成功---無難な路線で...: 無難なところで Vine Linux 4.2 をインストールすることにした。 今度は自前でダウンロードした iso ファイルを CD に焼き込んだものを使用。これを ドライブに入れてブート、すると、インストーラーは起動したものの、テキストモード ではないですか!!メモリかグラフィックカードのせいかしら...まぁインストールは できるようだから良しとしよう。 1時間ほどでインストール完了、システムの古さは如何ともし難い。X Window の解像 度が十分に出るか不安ながらも、24ビット、1024x768の解像度を選択して、リブート。 無事、X Window が動きました。 ----- II. Apache 2 の導入 ----- 2.1 Apache 2.2.17 のダウンロード: Apache 2 のソースを、こちらの公式ページからダウンロードした。最新のバージョンは 2.2.17 でファイル名は httpd-2.2.17.tar.gz とのこと。 まぁソースファイルのダウンロードは問題なく終了。 2.2 Vine Linux 5.2 への導入失敗: Vine Linux 5.2 をインストールしたシステムに、Apache 2.2.17 を以下のように導入した。 ソースファイル httpd-2.2.17.tar.gz を適当なディレクトリに置いて、 tar -zxvf httpd-2.2.17.tar.gz cd httpd-2.2.17 ./configure --enable-so --enable-module=so --enable-module=rewrite make make install 古くて遅い CPU だけあって、./configure に3分弱、make に9分弱、make install に1分弱もの時間を要した。しかしこれで、/usr/local/apache2 以下に Apache 2 が インストールされたはず。 ところが、いざ、 /usr/local/apache2/bin/apachectl -v として、apache のバージョン確認を行うとすると、"既にポートは埋まってるよ"という エラーメッセージが表示される。 元々 Vine Linux 5.2 をインストールした時点で httpd サーバーもインストール、起動 していたようなのだ。結局、後からインストールした apache 2 とはシステムが競合して しまう、という事のようだ。面倒なことになった。 まぁ、適当に調整はできるのだろうが、前述したように Vine Linux 5.2 は情報も少ない ということで、今回はこのシステムは放棄することになった。 2.3 Vine Linux 4.2 の既導入 Apache のアンインストール: ここからは Vine Linux 4.2 をインストール完了した直後からの話である。 まずは、Vine Linux 4.2 インストール時に既に導入されている apache(だろう、多分) のアンインストールを行う。 rpm -qa | grep apache などとして、導入されている Apache を確認、apache2-2.2.3-0vl3.2 が導入されている ようだ。そこで、 rpm -e apache2-2.2.3-0vl3.2 として、アンインストールを狙ったが、 エラー: 依存性の欠如: httpd は (インストール済み)mod_ssl-apache2-2.2.3-0vl3.2.i386 に必要と されています httpd-mmn = 20020903 は (インストール済み)mod_ssl-apache2-2.2.3-0vl3.2.i386 に必要とされています とエラーメッセージが出た。まぁ、予想通り。そこで、さらに、 rpm -e apache2-2.2.3-0vl3.2 mod_ssl-apache2-2.2.3-0vl3.2 apache2-manual-2.2.3-0vl3.2 で互いに依存するファイルを全て同時に削除。すると今度は、 警告: /etc/apache2/conf/httpd.conf は /etc/apache2/conf/httpd.conf.rpmsave と して保存されました。 という警告文(?)が出てきたが、問題なく削除は出来たようだ。 2.4 Apache 2.2.17 のダウンロードとコンパイル: root になって、適当な場所にソースを置き、以下のように実行した。 tar -zxvf httpd-2.2.17.tar.gz cd httpd-2.2.17 ./configure --enable-so --enable-module=so --enable-module=rewrite make make install 古くて遅い CPU だけあって、./configure に3分弱、make に9分弱、make install に1分弱もの時間を要した。しかしこれで、/usr/local/apache2 以下に Apache 2 が インストールされたはず。 試しに、 /usr/local/apache2/bin/apachectl -v と入力して、Apache のバージョンをチェック。レスポンスは、 Server version: Apache/2.2.17 (Unix) Server built: Feb 23 2011 23:15:13 と言うことで、無事インストールが確認できました、と。 2.5 httpd.conf などの設定: 続いて、/usr/local/apache2/conf/httpd.conf を編集して、apache 2 の主な動作設定を 行った。以前のバージョン 2.0.40 では、全ての設定を httpd.conf に書き込んだのだが、 バージョンアップの過程で、httpd.conf には基本的な設定のみを記し、それ以外は、/usr/local /apache2/conf/extra の中にある httpd-*.conf というファイルに記すようになったようだ。 今回 httpd.conf に対して行った設定は以下の通り。 29行目 --- ServerRoot "/usr/local/apache2"、デフォルトのまま 40行目 --- Listen 80、デフォルトのまま 65行目 --- User apache 66行目 --- Group apache 88行目 --- ServerAdmin ehehehe_at_u-gakugei.ac.jp (ダミーです) 97行目 --- ServerName gushishi._u-gakugei.ac.jp (ダミーです) 104行目 --- DocumentRoot "/usr/local/apache2/htdocs"、デフォルトのまま 144行目 --- Options FollowSymLinks、「Indexes」を削除 373行目 --- Include conf/extra/httpd-multilang-errordoc.conf、 (コメントアウトを外す) 376行目 --- Include conf/extra/httpd-autoindex.conf (コメントアウトを外す) 379行目 --- Include conf/extra/httpd-languages.conf (コメントアウトを外す) 382行目 --- Include conf/extra/httpd-userdir.conf (コメントアウトを外す) 391行目 --- Include conf/extra/httpd-manual.conf (コメントアウトを外す) 次に、/usr/local/apache2/conf/extra/httpd-languages.conf で言語設定を行う。 78行目 --- LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW、( ja を先頭に) 続いて、/usr/local/apache2/conf/extra/httpd-multilang-errordoc.conf の設定を行う。 31行目 --- LanguagePriority ja en cs de es fr it ko nl pl pt-br ro sv tr、 ( ja を先頭に) /etc/hosts の「127.0.0.1」にサーバー名(例:gushishi._u-gakugei.ac.jp)を対応させる。 サーバー立ち上げ時に、apache が自動起動するように、/etc/rc.d/rc.local に、 /usr/local/apache2/bin/apachectl start を書き加える。 こうしておいて、 /usr/local/apache2/bin/apachectl stop /usr/local/apache2/bin/apachectl start と入力して完了。 適当なインターネットブラウザで、このPCにアクセス(http://gushishi._u-gakugei.ac.jp) すると、「It works !」と表示されるので、問題無く動作しているようだ。ちなみに、この 「It works!」を表示させる html ファイルは /usr/local/apache2/htdocs/ の下にある index.html である。そこで、この index.html の中に META タグの HTTP-EQUIV を用いて、WEBページの トップに飛ぶようにしておけば、今後は http://gushishi._u-gakugei.ac.jp へのアクセスを、 トップページに誘導することができる。 ----- III. PHP 5 の導入 ----- どうやら、PHP のインストールと動作には、Flex と libxml2、re2c が必要らしい。Flex とは字句解析を自動生成する機能を提供するソフトウェア、libxml2 は XML の基本ライブ ラリ、re2c は Flex と似たようなものらしいが、筆者には良く分かりまへんでした。まぁ、 必要というからにはダウンロードして、インストールすることにしよう。 3.1 Flex のダウンロードとインストール Flex 最新版であるバージョン 2.5.35 のソース flex-2.5.35.tar.gz を、こちらからダウン ロードした。これを適当なディレクトリに置いて、 tar -zxvf flex-2.5.35.tar.gz cd flex-2.5.35 ./configure --prefix=/usr/local make make install でOK。 ただし、後述のように、現時点での最新のPHP 5.3.5 は、本システムでコンパイルが 行えず、PHP 5.2.16 を導入することになった。Flex の最新バージョン 2.5.35 は、PHP 5.3.5 に対応しているが、PHP 5.2.16 に対応した Flex は、古いバージョンの 2.5.4a で ある。従って、flex-2.5.4a.tar.gz のダウンロードとインストールが必要になる。ダウン ロードは最新版と同じ場所から辿れる。またインストールも最新版と同じ方法でOK。 で、結局、Vine Linux 4.2 には flex のバージョン 2.5.4a をインストールした。 ただし、最近入手できるようなハードウェアからなるシステムであれば、問題なく、Flex 2.5.35 と PHP 5.3.5 が導入できるだろう。そう、全ては今回用いたシステムが恐ろしく 古いために、筆者はちらほらとトラブルに出会っているのだ。 3.2 libxml2 のダウンロードとインストール libxml2 の公式ページによると、最新版はバージョン 2.7.8とのこと。このソース libxml2-2.7.8.tar.gz を、こちらからダウンロード。これを適当な ディレクトリに置いて、 tar -zxvf libxml2-2.7.8.tar.gz cd libxml2-2.7.8 ./configure --prefix=/usr/local make make install で完了。 これをインストールしておかないと、php 5 の ./configure で「libxml2を確認しなさい」 というエラーが出ることになる。 3.3 re2c のダウンロードとインストール どうやら、re2c もインストールしておいた方が良いらしい。Flex と同じようなものらしいが、 筆者にはよく分かりまへん。最新のバージョン 0.13.5 とのこと。該当する re2c-0.13.5.tar.gz を、こちらのページからダウンロードした。これを例によって 適当なディレクトリに置いて、 tar -zxvf re2c-0.13.5.tar.gz cd re2c-0.13.5 ./configure make rm -f scanner.cc make install で完了。 3.4 PHP 5.3.5 のダウンロードとインストール --- 挫折 PHPの公式ページはこちら。ここから最新版 5.3.5 のソースファイル php-5.3.5.tar.gz をダウ ンロード。これを適当なディレクトリに置いて、 tar -zxvf php-5.3.5.tar.gz cd php-5.3.5 ./configure --prefix=/usr/local/php-5.3.5 --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring make で、しばらく経つと、エラーが出ました! WEBなどを彷徨って調べてみると、どうやらコンパイルに必要なメモリが足りないらしい。 今時 128 MB しか積んでないからなぁ。 ということで、PHP 5.3.5 のインストールは諦めることにする。 3.5 PHP 5.2.16 のダウンロードとインストール・設定 --- 成功 改めて、少し古めの 5.2.16 の php-5.2.16.tar.gz をダウンロード。ただし、3.1 で述べた ように、Flex のバージョンを下げておかないと、./configure だか make で「flex の 2.5.4a」 が無いと怒られるので、改めて、Flex 2.5.4a を導入( 3.1 参照)。そして、 tar -zxvf php-5.2.16.tar.gz cd php-5.2.16 ./configure --prefix=/usr/local/php-5.2.16 --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring make make test make install システムが古いせいもあるが、make もさることながら、make test には 1 時間ほどかか った。どうやらコンパイルしてできた 6000 個強のファイル全ての状態をチェックをしている ようだ。 さらに、 ln -sfn /usr/local/php-5.2.16 /usr/local/php make を実行したディレクトリから、 cp php.ini-dist /usr/local/lib/php.ini として、基本的な設定を行うべく、vi で /usr/local/lib/php.ini を開き、以下のように編集。 これでマルチバイト文字列に対応できるらしい。 ;output_handler = --> output_handler = mb_output_handler ;default_charset = "iso-8859-1" --> default_charset = "UTF8" ;mbstring.language = Japanese --> mbstring.language = Japanese ;mbstring.internal_encoding = EUC-JP --> mbstring.internal_encoding = UTF8 ;mbstring.http_input = auto --> mbstring.http_input = auto ;mbstring.http_output = SJIS --> mbstring.http_output = UTF8 ;mbstring.encoding_translation = Off --> mbstring.encoding_translation = On ;mbstring.detect_order = auto --> mbstring.detect_order = auto ;mbstring.substitute_character = none; --> mbstring.substitute_character = none; PHP から SQLite を使うために、以下の3行のコメントアウトを外す。 ;extension=php_pdo.dll --> extension=php_pdo.dll ;extension=php_pdo_sqlite.dll --> extension=php_pdo_sqlite.dll ;extension=php_sqlite.dll --> extension=php_sqlite.dll 何でも、extension=php_pdo.dll と extension=php_pdo_sqlite.dll は、extension= php_sqlite.dll よりも先に置いておかなければならないらしい。 しかし、どうやらこれら三つの DLL ファイルは Linux には必要無いのか、どこのディレク トリにも存在せず、さらに、上記三箇所のコメントアウトしなくても、phpinfo() で PHP の 設定内容を確認すると、SQLite が使えるように表示されている。うぬぬ。 このコメントアウトが必要なのは、MS-Windows に PHP をインストールする場合なのかしら? 筆者はさりげなく Pukiwiki を使っている。Pukiwiki は PHP の下で動いており、Pukiwiki で大きなサイズ(80MBくらい)のファイルをアップロードできるようにするためには、PHP で も、以下のように設定しておかなくてはならない。 memory_limit = 128M --> memory_limit = 100M(元々 128M しか積んでないので) upload_max_filesize = 2M --> upload_max_filesize = 80M post_max_size = 8M --> post_max_size = 100M これで多分、大丈夫。 3.6 Apache 2 の再設定と再起動 vi で Apache 2 の /usr/local/apache2/conf/httpd.conf を以下のように編集。 LoadModule php5_module modules/libphp5.so(PHP の共有モジュールのロード) AddType application/x-httpd-php .php .phtml(Apache が PHP ファイルを識別する拡張子) AddType application/x-httpd-php-source .phps(PHP ソースをハイライト表示:必要?) これで、設定は終了。 あらためて、Apache 2 を再起動。 /usr/local/apache2/bin/apachectl restart もしくは、 /usr/local/apache2/bin/apachectl stop /usr/local/apache2/bin/apachectl start でOK。