自作NAS第8回その2 初心者向け設定でCentOS6にapache2.4とphp5.4をソースからインストールする(後編)

php

[2013/01/20 追記]
mysqlのpdoがうまく使えなかったようなので、configureオプションを修正しました。
–with-pdo-mysql の追加。

前回のエントリでapacheがとりあえず立ち上がったので、次にphpを入れましょう。
これを見ている人は多分phpとか既に知っていると思われるのですが、私がエンジニアに転向したばかりはphpのインストールにも一苦労したり。。
なんか思い入れの深いスクリプト言語っていうか。。

そんな話はどうでも良い!! はやくインストールだ!!!!

ちなみに公式のインストール手順はこちらです。
http://php.net/manual/ja/install.unix.apache2.php

けど、公式のページとか見たいくないんですよねwww かけだしのエンジニアとかだとorz

ではまいります。

ソースのDLと展開ですね。 お約束です

phpのソースの置き場はこちらです。 いつも通りまずソースを落としましょう。

http://www.php.net/downloads.php

DLし展開、 その後configureという同じ流れですが、今回もどうせつまづきまくるので(笑)
先に必要なライブラリ群を入れておいてから最後にコンパイルを実行しましょう。
なんか、私ブログを書くのに少し慣れてきたかなw

今回の山場、コンパイル実行の際configureオプションは以下を狙います。

./configure –enable-mbstring –with-apxs2=/usr/local/apache2/bin/apxs –enable-pdo –with-gd –with-png-dir=/usr/local –with-jpeg-dir=/usr/local –with-pdo-mysql

このオプションの内容を簡単に説明します。
すいません、私も詳しくないので心配だったら公式を確認してください。

–enable-mbstring
マルチバイト文字列関数のmbstringを有効にしたいためです。 この関数はよく使うと思います。

–with-apxs2=/usr/local/apache2/bin/apxs
apacheの動的モジュールとしてこのphpを追加する場合。 こうするらしい(いや、今回初めてしりました。)

–enable-pdo
接続先DBを変更する度に、使う関数を変えなくていい っていう保守性が高くなるヤツ。
mySQLだけでやっていけそうな気がするけど一応入れておく。

–with-gd
画像イメージデータのやり取りや加工をウェブ上で実施する際に使うヤツですね。
サイト内にグラフデータを設置する際とかでよく活用されてたらしいですが、最近はjsとかでカッチョいいグラフがかけます。
どんどん必要性が減って行くかも。。

このページが参考になります。
http://www.zobe.jp/pw/passwiki.php?site_id=programming&page=PHP+with+GD%2FGD%A4%CB%A4%C4%A4%A4%A4%C6

必ずしも必須にはならないかもしれませんが。
あると非常に便利なときがあると思います。

–with-png-dir
–with-jpeg-dir
gdでpngとjpeg画像のレンダリングができるように指定するオプション達です。

–with-iconv
文字エンコード変換のモジュール。 iconvと効くとrubyとかでもあるなー って思ってて
別に必須じゃないような気がしました。 けど以下のブログが絶賛してるのでとりあえず入れることにします。
気負わない日記さん

–with-pdo-mysql
上で、pdoをオプション指定してたけど、なぜかmysqlにつながらず
could not find driver
とかエラーが出てたので、追加してコンパイルしなおしました。 MySQLを使用する予定のある人は入れておいた方がいいかと思われます。

そして、各オプション等に必要な事前に入れておくライブラリ等

configureを実行する前に必ず入れておくヤツがあって、以下紹介です。
私はこれらのインストールがすんでなかったのでコンパイル時に怒られました。

# yum -y install libxml2-devel

はい、さくっと入ります。

PDOを入れるので、あらかじめmysqlを入れておきます。
mysqlとかは今後ガッツガッツ使って行く予定もないので、、、 とかいってると使いたくなるんだけどw
とりあえずyumで逃げますw

# yum -y install mysql-server

さくっと入ります。

gdの jpegとpngのライブラリを入れておきます。

# yum -y install libjpeg-devel
 # yum -y install libpng-devel

さくっと入ります。

configureを実行しる

どーん

# ./configure --enable-mbstring --with-apxs2=/usr/local/apache2/bin/apxs --enable-pdo --with-gd --with-png-dir=/usr/local --with-jpeg-dir=/usr/local

必要なライブラリが入っていれば、Thank you for using PHP.みたいな文面が出てくると思います。

で、うまくとおれば

# make
# make install

ですね。

phpのインスコが完了すると、apacheのhttpd.confLoadModuleとかがツラツラ書かれている行の最後に
LoadModule php5_module modules/libphp5.so
という行がポコっと追加されます。
やったね♪

けど、Module設定はデフォで組み込んでくれているのに、拡張子の設定はやってくれません。
なんでなんでしょうか。 まぁいいや。 とにかくhttpd.conf
AddTypeディレクティブです。
最後にポコっと
AddType application/x-httpd-php .php .phtml
と追記してやります。

httpd.confは前回のエントリで書いたと思うんですけど、たぶん
/usr/local/apache2/conf あたりに入ってます。

以上です。

で、次にphp.iniの設定ですが ソースから落としてきた今回の場合は.iniなファイルは2個同梱されています。
まぎらわしいですね。 (※わたしが情弱なんですけども)

# locate php.ini
 /usr/local/src/php-5.4.9/php.ini-development
 /usr/local/src/php-5.4.9/php.ini-production

とりあえず、いろんな先人がdevelopmentの.iniファイルを使っているのでこれを採用することにします。

公式の案内に従って・・・

# cd /usr/local/src/php-5.4.9
 # cp php.ini-development /usr/local/lib/php.ini

で、オフィシャルのHPに書いてくれてないんですがtimezoneの設定は必須です。
なので、

# vi /usr/local/lib/php.ini
 で開いて、[Date]の項目までいきます。
 date.timezone の設定がされていないので、

date.timezone = Asia/Tokyo

と記述して保存。
まぁ、私埼玉県民なんですけどね。

で、apacheを起動させますー
起動スクリプトは/etc/init.d/httpd とかに設定してなければ
/usr/local/apache2/bin/apachectl start   とか restart ですね。

MySQLを使う人の場合は。。

なお、–with-pdo-mysqlを指定した場合はphp.iniに以下の設定を追加しておきます。
[Pdo_mysql]のステートメントに書くところがあります。

pdo_mysql.default_socket=/var/lib/mysql/mysql.sock

mysql.sockの場所は locate mysql.sock とかコマンドうってみればすぐにわかるかと思います。
最初入れてなくて以下エラーが出てきたので焦りました。

SQLSTATE[HY000] [2002] No such file or directory

動作確認をしようず!

最後に動作確認ですが、ドキュメントルート(ソースから落としたデフォルトのままなので、/usr/local/apache2/htdocs/)に行って
毎度おなじみのphp infoちゃんを実行します。

# cd /usr/local/apache2/htdocs
 # vi test.php


とかいて保存

ブラウザから 192.168.X.X/test.php を叩いてテスト。 例のあの子が登場すれば完了です。

けど、今回もネットで色々と確認しながらphpのインストールを実施しましたが、正直かなり時間かかりますね。
すげー面倒でした。

あ!
自動起動の設定を入れておかなければ!!

私、よくブレーカー落としちゃうんですよねw
エアコン電子レンジドライヤートリプルアクセルは必ず落ちます。
そんな時、ポチっと手でサーバーの電源を再びONにするハメになるから、 自動起動設定は入れておきたいところ。

apache2.4系をソースからインストールした場合はこちらのブログがかなり分かりやすく解説されています。
ブログというか、メモ?さんのブログ (名前面白いっw)
項目6です。
非常にありがたいです。

最後にエラーログについて調整(したい人はする)

今回いれたバージョンのソースですと、phpのエラーログレベルが E_ALL(全てのエラーを吐く)に設定されてました。
なんでだろう。。

とにかく、php.ini

error_reporting = E_ALL &~E_NOTICE

へ変更しました。

これだとNOTICEのエラーまで出ません。
※場所は/usr/local/lib/php.ini

あと、エラーが何もでなければいいですが

エラーをディスプレイに表示しない(ブラウザ側に出さないようにする)設定も入れて起きます。
display_errors = Off

公開するウェブサービスとかだと基本的にOffにすると思うけど、個人的にはほしかった。
けどAjaxでJSONを返却する時にエラーが出る都度jsが動かなくなったりしたのでヤダなと。。
なのでoffにしちゃいました

はい終わりですーー

phpのインストールとか1年に1回やるかやらないか。
いや、もっとやらないですかね。。
こういうのめちゃ詳しい人ってなんで詳しいんだろうと毎回思います。
余談でしたw おわり



関連記事

コメント2件

 mejiro | 2013.01.22 23:52

はじめまして。自作NASで自宅ファイルサーバー読ませて頂きました。
私は最近ソフトウェアRAIDのストレージサーバーを構築しようと思っていたところなのですが、この記事を読んでからハードウェアRAIDがとても気になっています。

ひとつお聞きしたいのですが、KEGANIさんのようにHDDケースをusbでサーバーに接続している場合、もしCentOSをインストールしているSSDに障害が起きてCentOSが起動しなくなってもHDDケースを普段使用しているWindowsPCなどに直接繋げば中のデータは無事に使用できるのでしょうか?

またftpでサーバーにアップロードするには少し時間がかかりそうだなといった大容量のファイルを扱う場合にも、サーバーからHDDケースを外してWindowsPCなどに繋ぎusbで直接ファイルを転送することも可能なのでしょうか?

 altarfの管理人 | 2013.01.26 15:50

はじめまして。
コメントありがとうございます。 
今回ご質問いただいた件ですが、私としては以下の様に考えています。

①HDDケースをはずしてWindowsPCで中のデータを使用できるか?
基本的にファイルシステムによっては可能だと思われます。 私の環境の場合windowsはNTFSで、今回のLinuxはext4でフォーマットしていますが、windowsPCでext4のデータを読み書きできるアプリがあるようです。 参考)http://linux.ikoinoba.net/index.php?UID=1297182890
ただし、HDDケースが双方でちゃんと認識できるかというケース側のドライバも注意した方がいいかもしれません。(まぁ、もしだめだったら中のHDDを直接windowsにSATAでつなぐって手もあるかもですね)

②Windowsから直接HDDにファイル転送できるか?
これもファイルシステムに依存するところではあると思いますが、基本的に①と同じで、Linuxで扱うファイルシステムのフォーマットで書き込みを行えば後でLinux側でも普通に扱えるかと思います。

いずれにせよ実際に試した事がないので、もし事前に検証できればされておいた方がいいかと思います(というか私も自信がなくてすいませんww(^^;;)

自分も気になって試してみたくなったので、もしかしたらそのうちテストしてみたいと思います。
その際はまたブログを覗きにきてみてくださいー

Comment





Comment



*