[技術]PHPをソースからインストールした環境に後からモジュールを追加する方法

PHPロゴ

Linux系サーバ上でWebのシステムをPHPを使って構築する場合
Webサーバ(Apacheなど) + PHP + DB(MySQLなど)という
環境で作るのが一般的だと思います。

そのうちPHPモジュールをインストールするには
yumrpmapt-getのようなパッケージインストール
コマンドを使って行う方法とソースファイルから自前で
コンパイルしてインストールを行うという2つの方法があります。

どちらでインストールしても差異はないのですが
共にメリット/デメリットがあります。

方法 メリット デメリット
コマンド使用 インストールが容易
環境に依存する
カスタマイズが大変
手動 カスタマイズが容易
環境に依存しない
インストールが難しい

このうち、カスタマイズ性ですが、コマンドで行った場合は
PHPパッケージ内の拡張モジュールも含め、全てのものが
対象となり、不要なものまでインストールされてしまいます。

手動で行った場合はPHPモジュールのコンパイル時に
必要なオプションを指定することができるため
必要最低限のものだけインストールすることができます。
 参考:指定可能なオプション(一部)

しかし 必要最低限のものだけ であるために
後から機能を追加/変更するとなった場合には
その機能をPHPに新たに組み込む必要がでてきます。
 ※ DBをMySQL→PostgresSQLに変えたい
   SSH(https://~)対応したいなどなど

新たに追加するには、再コンパイルを行い
拡張モジュールを追加したPHPモジュールを
作り直さなければなりません。

PHPを作り直すことになるため、機能追加により
モジュールがうまく生成できない又は壊れてしまう
というリスクが発生します。

そういった再コンパイルをせずにPHPに機能追加を
行うのに便利なのが phpize というコマンド。

これはPHPを再コンパイルすることなく
拡張モジュールだけを作成できるコマンドです。

なので
 1.phpizeで拡張モジュールだけを作成
 2.PHPの設定ファイル変更
 3.Webサーバ再起動で設定反映
をするだけで機能追加を行うことができます。

やり方

PHP に curl.so という拡張モジュール追加を
例としてやり方を説明します。
注)パスはそれぞれの環境に読み替えてください

1.PHPソースファイルにある extension フォルダの
 配下にある curl フォルダに移動

cd /usr/local/src/php/extension/curl

2.phpize コマンドを実行し、configure ファイルを作成

phpize

3.configure を実行し、Makeファイルを作成
 [–with-curl] オプションは curl を作成する際に
 必要となるため追加します
 ※ 他の機能の場合は、各モジュールそれぞれ固有の
   オプションをつける必要があります

./configure --with-curl

4.Makeを実行し、モジュール作成

make

5.作成したモジュールをインストール

make install

これで curl.so が作成完了です。
作成後のファイルの場所は php-config コマンドの
extension_dir の設定箇所に依存します。

/usr/local/php/lib/extensions/no-debug-non-zts-20100525

php-config の内容を変更していなければ
上記のようなパスに配置されます。
※ extensions 以下のフォルダ名は環境により変わります

6.作成したモジュールを読み込むため、php.iniを編集
php.ini ファイル内の Dynamic Extenshions のあたりに

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions :
;;;;;;;;;;;;;;;;;;;;;;
 ・
 ・
;extension=php_xsl.dll

extension=curl.so ★
 ・
 ・

★の行を追加します。

7.Webサーバ(Apache)を再起動

service httpd restart

又は

apachectrl restart

 ※ 環境により、apache2ctrlの場合もあります
又は

/etc/rc.d/init.d/httpd restart

 ※ Apache を自前でインストールした場合は
   このような方法になるかと思います。
   ただし、OS/Apacheのバージョンによっては
   上記コマンドが使えない場合があります。

まとめ

 手動でPHPをインストールした後、機能追加を行う際
 phpize コマンドを使用することで再作成のリスクを
 負うことなく、PHPの拡張を行うことができます。

 PHPでWebシステムを作る人は知っておくと
 便利なコマンドの1つかもしれません。
 (私自身もつい最近まで知りませんでした。。。)

[技術]resolv.confが勝手に書き換わる問題

さくらインターネットからレンタルしているサーバ(VPS)で
ワードプレスを構築し、このブログを書いています。

突然外部のサーバにアクセスできなかったり、プラグインの
検索や更新ができなくなったりして若干はまったので
その対応の備忘録。

同様の現象が起きた方、参考にしていただければと。
※現象が発生したOSは CentOS 6 でした。

結論は /etc/resolv.conf の内容が勝手に書き換わって
いたため、DNS(Domain Name Server)へアクセスできず
名前解決できなくなっていたからでした。
どのDNSへアクセスするかを制御しているのが resolv.conf となります。

名前解決とは、ドメイン(goole.comやyahoo.co.jpなど)から
IPアドレス(192.168.XXX.XXX 的な数字)を割り出すことをいいます。
ネットワークの世界ではこの数字を元に、URLのアクセスを行います。
(ざっくりいうと)


発生したエラー内容は以下。(正確な文言はメモしてませんでした)

「プラグインの検索ができませんでした。サーバ上の設定に問題が
あると思われるので、ホスティング会社に問い合わせしてみてください」

早速、さくらインターネットに問い合わせ。
回答は、VPSなので詳細調査はできないが
・resolv.conf を書き換えることはしない。
・NetworkManagerデーモンが起動していれば勝手に
 書き換わる可能性があるので確認してみてください

とのこと。結局自分で調べることに(泣)
Name or service not known というメッセージもでていたので
NetworkManagerデーモン含め、DNS周りからの調査。

まずはNetworkManagerデーモン起動チェック

chkconfig --list NetworkManager
NetworkManager  0:off   1:off   2:off   3:on    4:on    5:off   6:off

3:on 4:on の設定・・・起動している。。。
なので、停止を実行

chkconfig NetworkManager off
NetworkManager  0:off   1:off   2:off   3:off   4:off    5:off   6:off

次にresolv.confの確認

vi /etc/resolv.conf
# Generated by NetworkManager
search com

# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com

DNS1、DNS2、DOMAINの設定がない!!

resov.conf の設定はファイルを更新してもネットワークを
再起動すればもとに戻ってしまうので、このファイルを
生成するスクリプトファイルを修正

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"                                                           
IPADDR="XXX.XXX.XXX.XXX"
NETMASK="XXX.XXX.XXX.XXX"
GATEWAY="XXX.XXX.XXX.XXX"
ONBOOT="yes"
TYPE="Ethernet"
IPV6INIT="yes"
IPV6_ROUTER="no"
IPV6ADDR="XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/64"
DOMAIN="XXXXXXXX"
DNS1="XXX.XXX.XXX.XXX"
DNS2="XXX.XXX.XXX.XXX"

DOMAINに借りているサーバに設定しているドメイン
DNS1、DNS2は使用するDNSサーバのIPアドレス
をそれぞれ入力。
私の場合、さくらインターネットのDNSのIPアドレスを入力。

設定反映のため、ネットワーク(eth0)を再起動
※環境によって、ネットワークは異なります(eth1、eth2など)

service network restart

resolv.conf の再確認

vi /etc/resolv.conf
# Generated by NetworkManager                                           
search hlis-toproad.com com
nameserver XXX.XXX.XXX.XXX
nameserver XXX.XXX.XXX.XXX

searchには検索するドメイン
nameserverには上で設定したDNS1/DNS2のIPアドレスが
表示されていれば設定完了。

無事、プラグインの検索/更新と
外部サーバへのアクセスができました。

○参考記事
http://easyramble.com/ping-test-and-delete-networkmanager.html
http://demosite.jpaccess.net/wiki/index.php?Vine5%2Fresolv.conf%A4%C8ifcfg-eth0

[技術]OpenSSL の脆弱性に関して

先日発覚して一大ニュースとなったOpenSSL問題に関して
一技術者の目線で考えてみようと思います。
※各方面で既出の内容になるかもですが、ご容赦ください

OpenSSL問題 → 「OpenSSL脆弱性「Heartbleed」」

■OpenSSL とは?
まずOpenSSLとはどのようなものなのか。
ネット上で調べたりすると「暗号通信技術」とか「SSL/TLS」とか
いろいろと小難しいことが書かれていますが
簡単に言えば

「ネット上で入力した内容(個人情報)を守るための技術」

と思って頂ければいいかと思います(ざっくりしすぎですが…)
主に「https://~」となっているWebサイトで使われています。
例)GMail、Facebook、ショッピングサイト、会員サイトなど

イメージとしては、送る情報が入った鍵のかかった金庫を
郵便屋さん(OpenSSL)に送ってもらう感じでしょうか。
金庫を開けるための鍵は送り先がもっている

■なにが問題なのか?
「金庫を開けるための鍵は送り先がもっている」と書きました。
しかし、この問題ではその金庫に鍵をかけない状態で
郵便屋さんに送ってもらうことになることになります。
#金庫が盗まれてしまえば中身は見られ放題。

なので、ショッピングした際に使用したクレジットカード番号や
銀行口座番号、パスワードなどが盗まれてしまうことが
起こる可能性が高まってしまいます。

これっておそろしいですよね・・・

■なぜ起こったのか?
こんな記事があります。


OpenSSLに脆弱性、バグは2年前から存在
(引用元:CNN.co.jp)

バグは2年前から存在

この技術は全世界のWebサイトで導入されているものなので
対応が大変なのはわかります。
防ぐためには提供側、使う側の両方が対策が必要ですし。

しかし、2年間もの長い間公表しなかったのはどうかと感じます。
知らずに発覚したのと、知ってて発覚したのでは大きく違いますし。
脆弱性の内容が内容なだけに。。。

私の考える起きた理由は
スマホ/タブレットが普及し、容易にインターネットに
つなぐことができることになったことに加え、SNSの普及と
https接続が日常的になってきたこともあり、事が起こって
からではまずいからなのではないかと考えます。

一般的なシステム開発 / サービス開発 という観点で
考えれば(内容にもよりますが)2年間も知らない振りを
していたというのは大問題になっていたことでしょう。
※実際騒ぎにはなりましたが・・・

私自身も過去、サービスイン後に問題が見つかったりして大変な
思いをした経験があるので背筋が凍る思いです…
 
 
安心と言われていたOpenSSLがこんなことになるとは・・・
多くの方に使われているものだからといっても技術は人が作りしもの。
慢心してはいけないということですね。

発覚するまでの間に情報が盗まれたりしていなかったか心配です。。

[雑記]LPICに挑戦

LPIC(Linux Professional Institute Certification)
Linux技術者の技術者認定資格です。
・公式ページ:こちら

Linux・・・ 交換機のサーバだったりAndroidのOSの
ベースでもあるオペレーティング
システム
のこと
Cent OS、Red Hat Linux、Debian などが
有名です

情報系の資格といえば有名なのは国家資格である
IPAの情報処理技術者試験ですが、LPICはそれとは
異なり民間資格に該当するものとなります。

実はこの資格、前々職のころから取得を試みていました。

しかし、当時忙しかったのとそれほど必要としていなかった
(業種も今と違っていたので) ということもあり本格的に取得に
向けて動き出していませんでした。

今現在はWebの仕事をしていることもあるのとLinux上で
アプリケーションサーバ(主にApache)の構築をしたり、今回自分でも
構築しましたが、今流行(?)のWordpressを設置する機会が増えたりと
Linux環境に触れることが多くなったのでこれを機に取得に挑戦。
※前々職の頃、仕事で使用していましたが、ほぼ独学だったので
 ちょうどよい機会かなぁとも思ったりと…

LPICはLevel1~Level3まであるので
まずは基本であるLevel1の取得を目指そうと思います。
— 今年(2014年)でLevel2までいけたらなおよしかな。

—————————————————
※ブログ引っ越しました。
過去ブログはこちら又はメニュー(過去ブログ)からアクセスできます。
ご興味のある方はよろしければご参照ください。