« 2009年2月 | メイン | 2009年9月 »

2009年3月15日

さくらのレンタルサーバにGeoIPを入れる

IPアドレスから所在地が分かるという「GeoIP」。下記の記事を参考に、さくらのサーバでもインストールできるか試してみた。例によってbashを想定。

121. IPアドレスから所在地探し

GeoIPライブラリ


$wget http://www.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
$tar zxvf GeoIP.tar.gz
$cd GeoIP.tar.gz
$./configure --prefix=$HOME/local
$make
$make install

GeoIPデータ
参考ページにあるURLがそのまま使えなかったので、適宜変更。

$wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$gunzip GeoIP.dat.gz
$cp GeoIP.dat.gz ~/local/share/GeoIP

$wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$gunzip GeoLiteCity.dat.gz
$cp GeoLiteCity.dat.gz ~/local/share/GeoIP/GeoIPCity.dat

Peclモジュール
一度ダウンロードしてコンパイル。余計なconfigureオプションがあるかも。

$export PHP_AUTOCONF=autoconf259
$export PHP_AUTOHEADER=autoheader259.

$pecl download geoip
$tar zxvf geoip-1.0.7
$cd geoip-1.0.7
$phpize
$./configure --prefix=$HOME/local --exec-prefix=$HOME/local --with-php-config=$HOME/local/bin/php-config --with-geoip=$HOME/local
$make
$make install

設定
php.iniにモジュールを設定。

extension_dir="/home/xxxxxx/local/lib/php/extensions/no-debug-non-zts-20060613/"
extension="geoip.so"

テスト

var_dump(geoip_record_by_name('whitehouse.gov')); 
array
  'continent_code' => string 'AS' (length=2)
  'country_code' => string 'SG' (length=2)
  'country_code3' => string 'SGP' (length=3)
  'country_name' => string 'Singapore' (length=9)
  'region' => string '' (length=0)
  'city' => string '' (length=0)
  'postal_code' => string '' (length=0)
  'latitude' => float 1.366700053215
  'longitude' => float 103.80000305176
  'dma_code' => int 0
  'area_code' => int 0

シンガポール? MaxMind社のOnline Demoと結果が違うが、エラーログは吐いてない...。

var_dump(geoip_record_by_name($_SERVER['REMOTE_ADDR'])); 
array
  'continent_code' => string 'AS' (length=2)
  'country_code' => string 'JP' (length=2)
  'country_code3' => string 'JPN' (length=3)
  'country_name' => string 'Japan' (length=5)
  'region' => string '40' (length=2)
  'city' => string 'Tokyo' (length=5)
  'postal_code' => string '' (length=0)
  'latitude' => float 35.685001373291
  'longitude' => float 139.75140380859
  'dma_code' => int 0
  'area_code' => int 0

とりあえず都道府県まで。緯度経度は皇居と出た...。



2009年3月14日

さくらのレンタルサーバにXdebugを入れる

前回のPHP5のインストールに引き続き、Xdebugをインストール。リモートデバッグは恐らく使えないだろうが、var_dumpが色つきでビジュアルライズされるだけでも、使う価値がある拡張モジュールと言える。

さくらのサーバにxdebugをインストールする。を参考に...。 bashを想定。

環境変数の設定


$export PHP_AUTOCONF=autoconf259
$export PHP_AUTOHEADER=autoheader259

コンパイル・インストール


$wget http://www.xdebug.org/files/xdebug-2.0.4.tgz
$tar zxvf xdebug-2.0.2.tgz
$cd xdebug-2.0.2

$which phpize
/home/u39lab/bin/phpize

$phpize
$./configure --prefix=$HOME/local --exec-prefix=$HOME/local --with-php-config=$HOME/local/bin/php-config --bindir=$HOME/local/bin --enable-xdebug
...

設定
本来ならば本番環境とテスト環境を分けるために、.htaccessのphp_valueでXdebugの利用有無を設定したいが、さくらではphp_valueに対応していない模様。というわけで、素直にphp.iniに記述。

zend_extension="/home/u39lab/local/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"

個人的によく間違えるのが、extensionのスペルミス。

あとは、phpinfo()やvar_dump()などでXdebugが正しく動作しているかチェック。




2009年3月10日

さくらのレンタルサーバにSubversionを入れる

さくらインターネットの共有サーバーにSubversionを入れてみる。シェルはbashで、$HOME/localにイロイロ入れることを想定。

Subversionをさくらインターネットにインストールを参考に...。もしかするとSubversionだけならさらにシンプルに出来るかもしれない。

パスの設定


$export PATH="$HOME/local/bin:$PATH"
$export LD_LIBRARY_PATH="$HOME/local/lib"

SWIG


$wget http://downloads.sourceforge.net/swig/swig-1.3.38.tar.gz?use_mirror=jaist
...
$./configure --prefix=$HOME/local --with-python=/usr/local/bin/python
...

APR


$wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-1.3.3.tar.gz
...
$./configure --prefix=$HOME/local --disable-static
...

APR-util


$wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.3.4.tar.gz
...
$./configure --prefix=$HOME/local --with-apr=$HOME/local --with-expat=/usr/local --with-iconv=/usr/local --disable-static
...

Subversion


$wget http://subversion.tigris.org/downloads/subversion-1.5.6.tar.gz
...
$./configure --prefix=$HOME/local --with-neon=$HOME/local --without-berkeley-db --enable-swig-bindings=perl --with-swig=$HOME/local/bin/swig --with-apr=$HOME/local/bin/apr-1-config --with-apr-util=$HOME/local/bin/apu-1-config --disable-static
...

レポジトリの作成
レポジトリは$HOME/var/snv/repoに設置することを想定。

さくらインターネットに設置した subversion で ssh ログイン時に発生するエラーを参考にしながら。

$ln -s $HOME/subversion_path/bin $HOME/bin
$mkdir -p $HOME/var/svn
$svnadmin create --fs-type=fsfs $HOME/var/svn/repo

Eclipseでプロジェクトを作成し、右クリック「チーム」→「プロジェクトの共用」。Subclipseにて、下記のURLを指定。

svn+ssh://xxxxx.sakura.ne.jp/home/xxxxx/var/svn/repo




2009年3月 9日

さくらのレンタルサーバーにPHP5を入れる(PDO対応・今さら編)

さくらインターネットの共有サーバーでは、長らくPHP5のサポートが行われていなかったため、一部のユーザが、独自にPHP5をホームディレクトリ内にインストールを試み、ノウハウが共有されてきた。

・さくらのレンタルサーバでPHP5
などを参照。

昨年ようやく、さくらインターネットの共有サーバーでもPHP5のサポートが開始されたが、何か物足りない...。

・好き勝手PHP.iniをいじりたい
・好き勝手モジュールを入れてコンパイルしたい
・任意のバージョンを入れたい

ということで敢えて今更やってみる。準備としていくつかディレクトリを作成。

$mkdir ~/local
$mkdir ~/src
$mkdir ~/etc

PHPをダウンロードして展開する。

$cd ~/src
$wget http://...
$tar zxvf php-5.2.9.tar.gz

展開したディレクトリに、以下のようなシェルスクリプトを用意する。

conf.sh


#!/bin/sh

./configure \
--prefix=$HOME/local \
--with-config-file-path=$HOME/etc \
--with-pear=$HOME/local/share/pear5 \
--enable-mbstring=all \
--enable-mbregex \
--enable-force-cgi-redirect \
--with-openssl=/usr \
--with-mysql \
--with-curl \
--enable-ftp \
--enable-pdo \
--with-pdo-mysql=/usr/local/bin/mysql

PDOやFTPなどをオプションでとりあえず指定。GDは必要なし。無駄にハマってしまったのがphp.iniのパス指定で、ここではファイル名ではなくディレクトリ名を指定する。

スクリプトに実行権を与えて、実行(=configure)する。その後makeしてインストール。

$cd php-5.2.9
$chmod u+x conf.sh
$./conf.sh
...
$make
...
$make test
...
$make install
...

続いてCGIモードでオリジナルのPHPを動かすための作業。

$mkdir ~/www/cgi-bin
$ln ~/local/bin/php-cgi ~/www/cgi-bin/php5.cgi

ドキュメントルート(~/www)に下記のような.htaccessを設置。

error_log = /home/xxxxx/var/log/php.log 


最後に、ドキュメントルートに置いたphpファイルにphpinfo()を記述し、インストールしたPHPが動いているかチェックして完了。

ただし、CLIでPHPを動かす場合はインストール先のPHPを指定する。