@blog.justoneplanet.info

日々勉強

CentOSにAntをインストールする

以下のコマンドでインストールする。

wget http://ftp.riken.jp/net/apache/ant/binaries/apache-ant-1.8.1-bin.tar.gz
tar zxvf apache-ant-1.8.1-bin.tar.gz
ln -s /usr/lib/apache-ant-1.7.0/bin/ant /etc/alternatives/ant
ln -s /usr/lib/apache-ant-1.7.0/ /etc/alternatives/anthome
ln -s /etc/alternatives/ant /usr/bin/ant

パスを通す。

vi /etc/profile

以下のように最終行に追記する。

export ANT_HOME=/etc/alternatives/anthome

編集が終わったら以下のコマンドを実行して反映させる。

source /etc/profile

CentOSにnginxをインストールする

nginxをインストールする。

■インストール

以下のコマンドでインストールをおこなう。

yum --enablerepo=epel install nginx

epelについて

Fedoraと同等環境を実現するRHEL用レポジトリであるが、初期状態では使えないため以下のコマンドでリポジトリを追加する。

wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5*.rpm

■設定

以下のコマンドで設定ファイルを編集する。

vi /etc/nginx/nginx.conf

80番ポートをドキュメントルートを「/var/www/vhosts/domain/httpdocs」とする場合、以下のように記述する。

listen       80;
root   /var/www/vhosts/domain/httpdocs;

HTTP PUTメソッドを許可する

location / {
    root         /var/www/vhosts/domain/httpdocs;
    index        index.html index.htm;
    dav_methods  PUT;
    create_full_put_path   on;
    dav_access   group:rw  all:r;
}

IPアドレスで制限する

location / {
    allow        192.168.1.0/32;
    deny         all;
}

以下のコマンドで起動する。

/etc/init.d/nginx start

常に起動しておく場合、以下のコマンドを実行する。

chkconfig nginx on
chkconfig nginx --list

設定ファイルを変更した場合は以下のコマンドでreloadする。

/etc/init.d/nginx reload

memcachedをインストールする

あまり興味がないが仕事で使うので試してみた。♪(´ε` )

■インストール

以下のコマンドを実行してmemcachedをインストールする。

yum install memcached
/etc/init.d/memcached start
chkconfig memcached on

設定ファイルは以下のコマンドで編集できる。編集が必要な場合は書き換えると良い。

vi /etc/sysconfig/memcached

PHPから使いたいので以下のようにpeclコマンドでインストールする。

pecl clear-cache
pecl install memcache
cp /etc/php.d/curl.ini /etc/php.d/memcache.ini
vi /etc/php.d/memcache.ini

以下のようにファイルを記述する。

; Enable memcache extension module
extension=memcache.so

ファイルを上書き保存したらhttpをreloadする。

/etc/init.d/httpd reload

■ベンチマーク

以下のコードを使用し簡単にベンチマークしてみた。

$memcache = new Memcache();
$memcache->connect('localhost', 11211);
$start = microtime(true);
for($i = 0; $i < 1000; $i++){
    $memcache->set("k{$i}", "abcdefghijklmnopqrstuvwxyz");
}
$end = microtime(true);
print($end - $start);// 0.07976508140564

さすがメモリにしかデータがないだけあって爆速だ。

GDとImageMagickの速度を比較してみた

■GD

以下のようなコードを用いてGDで合成画像を1000枚生成した時の時間を調べた。

$layers = array(
    0 => 'dress_back.png',
    1 => 'dress_back.png',
    2 => 'body.png',
    3 => 'dress.png',
    4 => 'bag.png',
    5 => 'bag.png',
    6 => 'face.png',
    7 => 'hear.png',
    8 => 'teara.png',
);
$start = microtime(true);
for($i = 0; $i < 10; $i++){
    $image = imagecreatefrompng("background.png");
    foreach($layers as $key => $value){
        $layer = imagecreatefrompng($value);
        imagecopy($image, $layer, 0, 0, 0, 0, 410, 454);
    }
    imagegif($image, "image{$i}.gif");
}
$end = microtime(true);
print($end - $start);

/*
 * windows
 * 10 => 0.27269101142883
 * 100 => 2.1620790958405
 * 1000 => 24.812913894653
 *
 * linux
 * 10 => 0.21701502799988
 * 100 => 2.1362149715424
 * 1000 => 21.695859193802
 */

■ImageMagic

以下のようなコードを用いてImageMagickで合成画像を1000枚生成した時の時間を調べた。

$layers = array(
    0 => 'dress_back.png',
    1 => 'dress_back.png',
    2 => 'body.png',
    3 => 'dress.png',
    4 => 'bag.png',
    5 => 'bag.png',
    6 => 'face.png',
    7 => 'hear.png',
    8 => 'teara.png',
);
set_time_limit(0);
//$path = 'C:\xampp\htdocs\local.sample.org\public_html\\';
$path = '/home/local.sample.org/trunk/public_html/imagick/';
$start = microtime(true);
for($i = 0; $i < 1000; $i++){
    $image = new Imagick("{$path}background.png");
    foreach($layers as $key => $value){
        $layer = new Imagick($path . $value);
        $image->compositeImage($layer, $layer->getImageCompose(), 0, 0);
    }
    $image->writeImage("{$path}image{$i}.gif");
}
$end = microtime(true);
print($end - $start);

/*
 * windows
 * 10 => 2.2297260761261
 * 100 => 24.065160989761
 * 1000 => 247.36853098869
 *
 * linux
 * 10 => 0.33637809753418
 * 100 => 3.3278291225433
 * 1000 => 33.274304866791
 */

■結果

Linuxの場合は1.5倍ImageMagickが遅かった。Windowsの場合は10倍ImageMagickが遅かった。

CentOSにImageMagickをインストールしてPHPから使う

以下のコマンドでインストールする。

yum install ImageMagick
yum install ImageMagick-devel
pecl install imagick
cp /etc/php.d/curl.ini /etc/php.d/imagick.ini
vi /etc/php.d/imagick.ini

コピーしたファイルを以下のように記述する。

; Enable imagick extension module
extension=imagick.so

apacheをreloadする。

/etc/init.d/httpd reload

CentOSにJDKをインストールする

■jdk

以下のコマンドでJDKをインストールする。

ダウンロードしたらアップロード

chmod 0777 jdk-6u12-linux-i586-rpm.bin
./jdk-6u12-linux-i586-rpm.bin

■JAVA_HOME

以下のようにしてJAVA_HOMEを設定する。

vi /etc/profile

以下の行を最終行に付加する。

export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

編集が終わったら以下のコマンドを実行する。

source /etc/profile

【参考】

http://centossrv.com/tomcat6.shtml

Tokyo Tyrantを使ってみる

仕事で使うかもしれないので一応やってみる。

■インストール

wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.46.tar.gz
wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
tar xvzf tokyocabinet-1.4.46.tar.gz
tar xvzf tokyotyrant-1.1.41.tar.gz
cd tokyocabinet-1.4.46
./configure
make
make install
cd ../tokyotyrant-1.1.41
./configure

エラー1

tokyo cabinetが先にインストールされていないと以下のエラーがでる。

checking for tcutil.h... no
configure: error: tcutil.h is required
make
make install

ちょっと動かしてみる。

ttserver

■PHPから使う

pecl install tokyo_tyrant-beta
cp /etc/php.d/curl.ini /etc/php.d/tt.ini

元の記述を削除して、以下の記述に書き換える。

extension=tokyo_tyrant.so

■ベンチマーク

以下のコードを使用して簡単にベンチマークしてみた。

$start = microtime(true);
$tt    = new TokyoTyrant("localhost");
for($i = 0; $i < 10000; $i++){
    $tt->put("k{$i}", "abcdefghijglmnopqrstuvwxyz");
}
$end = microtime(true);
print($end - $start);//0.65114498138428

ベンチマークをしておいて言うのもオカシイが、データストアにおいて全く同じ条件というものは再現できないので単純に比較してはならない。用途に応じた選択が必要である。

Gitでバージョン管理をする

■サーバ側

グループの作成とユーザの追加

/usr/sbin/groupadd sample.project.justoneplanet.info
gpasswd -a ishimoto sample.project.justoneplanet.info

プロジェクトディレクトリの作成

mkdir sample.project.justoneplanet.info
cd sample.project.justoneplanet.info

リポジトリの作成

git --bare init
vi description

リポジトリの概要でも書いておく。書かなかった場合は以下のエラーが出る。

*** Project description file hasn't been set
error: hooks/update exited with error code 1
error: hook declined to update refs/heads/master

権限設定

SSHでpushしたりするために以下の操作を行う。

chmod -R 0775 /usr/local/development/repos/sample.project.justoneplanet.info
chmod -R g+s /usr/local/development/repos/sample.project.justoneplanet.info
chgrp -R sample.project.justoneplanet.info /usr/local/development/repos/sample.project.justoneplanet.info

正しく設定できていない場合、push時に以下のエラーが出る。

error: failed to push some refs to 'ssh://ishimoto@123.123.123.123:1234/usr/local/development/repos/sample.project.justoneplanet.info'

■クライアント側

リポジトリの準備

mkdir sample.project.justoneplanet.info
cd sample.project.justoneplanet.info
git init

ファイルの追加とコミット

git add .
git commit -a -m "first commit"

リモートリポジトリの追加とpush

git remote add origin ssh://ishimoto@123.123.123.123:1234/usr/local/development/repos/sample.project.justoneplanet.info
git push origin master
リモートリポジトリの設定を間違えた場合
git remote set-url origin ssh://ishimoto@123.123.123.123:1234/usr/local/development/repos/sample.project.justoneplanet.info