2012年6月7日木曜日

mroongaをインストール

どうも、俺@残業中です。
今日はMySQLの全文検索エンジンmroonga(v2.03)をインストールする方法をメモメモ。
超簡単です。
公式サイトはこちら

MySQL(v5.5.25)はインストール済みとします。(今度こっちのインストール方法もメモメモしとかな)

まずはgroongaインストール。(yumインストール)
# rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-0.noarch.rpm
# yum install groonga-devel

ちなみにgroongaをソースからインストールする場合は
# yum install mecab-devel
しておいて

# wget http://packages.groonga.org/source/groonga/groonga-2.0.3.tar.gz
# tar zxvf groonga-2.0.3.tar.gz
# cd groonga-2.0.3
# ./configure
# make -j$(grep '^processor' /proc/cpuinfo | wc -l)
# mak install
とします。
※未検証です。ここを参考にしてみてください。



次に辞書をインストール。(MeCabの辞書)ソースインストールした場合はmecab-develの中に入ってるかも?

# yum install mecab-ipadic

ここまででとりあえずgroongaはインストールされました。
/usr/lib以下にgroongaというディレクトリが出来てると思います。




いよいよmroongaインストール。

# wget 'https://github.com/downloads/mroonga/mroonga/mroonga-2.03.ta.gz'
# tar zxvf mroonga-2.03.ta.gz
# cd mroonga-2.03



configureしてmakeしてmake installします。

# ./configure --with-mysql-source=/path/to/mysql --with-mysql-config=/path/to/mysql/bin/mysql_config --with-default-parser=TokenMecab
# make
# make install
これでMySQLのプラグインディレクトリ以下にha_mroonga.soが生成されます。
例)/usr/local/mysql-5.5.25/lib/plugin/ha_groonga.so



mysqldを起動または再起動してmysqlにログインします。

# /path/to/mysql/bin/mysql
mysql> INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so';
mysql> SHOW ENGINES;

+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                      | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                         | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                      | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables  | NO           | NO   | NO         |
| mroonga            | YES     | CJK-ready fulltext search, column store                    | NO           | NO   | NO         |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
7 rows in set (0.02 sec)
Yes!インストールでけた!


あとはCREATE TABLEする時に

 ENGINE=mroonga;
をつけてね!






以上でぇぇぇえぇす。

2012年6月3日日曜日

log4jsを使う

どうも、俺@自主勉中です。

今日はjavasscript(今回はNode.js利用)でシステム構築するときにとても便利なlog4jsの紹介です。

インストールはnpmで

$ npm -g install log4js

使い方は
var log4js = require(‘log4js’);
// 設定
log4js.configure({
  appenders: [
    { type: ‘console’, category: ‘console’ },
    { type: ‘file’, filename: ‘logs/access_log’, category: ‘access_log’, backups: 30, maxLogSize: 1024 * 1024 }
  ]
});

var consoleLog = log4js.getLogger(‘console’)
  ,accessLog = log4js.getLogger(‘access_log’);
consoleLog.info(’Server Start.');
accessLog.info(‘This is test(access_log)’);
こんな感じです。
configure()で指定した
backupsはファイルの世代数、maxLogSizeはファイルをローテートする時の最大ファイルサイズ(単位:byte)です。

ログの出力は
  1. trace()
  2. debug()
  3. info()
  4. warn()
  5. error()
  6. fatal()
とあります。
ログレベルは

var logger = log4js.getLogger(‘access_log’).setLevel(‘ERROR’);
のように指定することも可能です。

ちなみにNode.jsが標準出力するログは、上記の

{ type: ‘console’, category: ‘console’ }
で指定してあり、Node起動時に

$ node app.js >> logs/node.log
とかすれば良いです。
、、こうしないとNode.jsが吐き出すログをファイルに書き出せないです。

誰かその原因知っている人いたら教えて欲しいです。



以上でぇぇぇぇぇす。

2012年5月26日土曜日

特定のプロセスが使用しているメモリ量を監視する

どうも、俺@土曜の昼下がりです。 部屋に無理やり書斎(みたいなもの)を作ったのでとても快適です^^ さて、Linuxサーバにおいて特定のプロセスが使ってるメモリ量を調べる方法メモです。
#!/bin/sh

mem=0 #メモリ量
bef=0 #beforeの略のつもり
res=0 #結果
# 仮にapache(httpd)のメモリ量を取得する場合
while [ 1 ]
do  
    for n in `/bin/ps aux | awk '/httpd/ { print $6 }'`
    do
        mem=`expr $mem + $n`
    done
    res=`expr ${mem} - ${bef}`

    # メモリ量($mem)と前回との差分($res)を表示
    echo `date "+%F %T (${mem}) -> ${res}"`
    
    bef=$mem
    mem=0

    # 1秒ごとに処理
    sleep 1;
done
これを、apache_memorycheck.shとか名前をつけて
$ chmod +x apache_memorycheck.sh
して実行すれば 1秒ごとにapacheが使っているメモリ量と、1秒前との差分を表示できます!


$ ps axu
した結果の「RSS」の部分がプロセスが確保している物理メモリ量なので、それをawkを使って加算して計算しています。
ちなみに「VSZ」は仮想メモリ量です。(プロセス起動時にとりあえず確保される)

 以上でぇぇえぇえす。

2012年5月25日金曜日

nginxでリバースプロキシ(sslあり)

どうも、俺@華金です。

今日はnginxでリバースプロキシしちゃうぞ!(SSL付き)のメモです。
※nginx v1.2.0です。

# vim /path/to/nginx.conf
--------------------------------------
user nobody;
worker_processes 1;
events {
  worker_connections 256;
}

http {
  # この辺は環境にあわせて
  include /path/to/nginx/conf/mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 10;

  server {
    # 1080ポートで待ち受け
    listen 1080;
    server_name koexuka.blogspot.jp;

    # ここからリバースプロキシ設定
    location / {
      # 192.168.0.10の80番ポートへリバースプロキシする
      proxy_pass http://192.160.0.10:80/

      # ヘッダ情報付与
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto http;
    }
  }

  # SSLのリバースプロキシ設定

  server {
    # 1081ポートで待ち受け
    listen 1081;
    server_name koexuka.blogspot.jp;
    # SSL設定
    ssl on;
    ssl_certificate /path/to/server.crt; # SSL証明書パス
    ssl_certificate_key /path/to/server.key; # SSL鍵パス
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1; # 環境にあわせる
    ssl_ciphers HIGH:!aNULL:!MD5; # 環境にあわせる
    ssl_prefer_server_ciphers on;
    # ここからリバースプロキシ設定     location / {       # 192.168.0.10の443番ポートへリバースプロキシする       proxy_pass https://192.160.0.10:443/       # ヘッダ情報付与       proxy_set_header X-Real-IP $remote_addr;       proxy_set_header X-Forwarded-Host $host;       proxy_set_header X-Forwarded-Server $host;       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       proxy_set_header X-Forwarded-Proto https;     }   } }

以上!簡単!

これでサーバの1080番ポートへのhttpパケットは192.168.0.10の80番ポートへ、
1081番ポートへのhttpsパケットは192.168.0.10の443番ポートへ送られます。



以上でぇぇえぇぇぇす。

2012年5月17日木曜日

そうだ、macvimを使おう

どうも、俺@昼休みです。
今日は、Macのテキストエディタの一つであるmacvimを使ってみたら他のどのエディタより使いやすかった、という話です。

本家はこちら
香り屋パッチがあてられて日本語化を頑張ってくれているプロジェクトはこちら



これまでmacで使うフリーのエディタに
・CotEditor(http://sourceforge.jp/projects/coteditor/
・Fraise(http://www.macupdate.com/app/mac/33751/fraise
・mi(http://www.mimikaki.net/
・テキストエディット(プリインストール)
を使ってきましたが、どれも高機能すぎたり何かの機能が足りなかったりして
「WindowsのEmEditor最強!」と思ってました。

今回どこかの記事でmacvimについて紹介されているのを読み、導入してみました。
vimは開発でよく使うエディタでとても大好きなエディタなのですが、いつもターミナル上でvimを起動して、、という使い方しかしなかったので「MacのGUIエディタで使ってみてどうかな?」と思ってましたが、、
超使いやすい!さすがvimやでぇ!
これまで使ってきたエディタなんか比にならねぇぜ。

何が使いやすいって、
・当然ながらviのキーバインド
・当然ながらファイルエンコーディングの設定とかコマンド一発
・というか、自由に~/.gvimrcに設定に書いて自分好みの環境が作れる。書き方はvimrcとほぼ同じ

:lcd <パス>
 でカレントディレクトリを移動出来る
・というか、vimで使えるコマンドは大抵使える

:!<cmd>
でmacvim上からコマンド打てる。
:!uuencode ./% hoge.txt | mail you@example.com
で編集中のファイルを添付して誰かにメール送信とか出来ちゃう。
・vimscriptが使える
・もちろん背景色やシンタックスの設定、透明度の設定もできちゃう
・タブ機能も完備
・プリンタへ送って印刷もできる
・マウスでコピペもできる
・つまり最強
という事になります。
viやvimに慣れてる人で、「macで使えるオススメのフリーエディタないかなぁ」という人には間違いなくmacvimをオススメします。

.gvimrcの例
set number
set autoindent
set sw=4
set ts=4
set ignorecase
set incsearch
set hlsearch
set statusline=%<%f\ (%05l/%05L)\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P

set laststatus=2
syntax on

set encoding=utf8
set fencs=utf8,ujis,sjis
set fileformat=unix

set transparency=5 "透明度
set lines=40 columns=180 "横幅と縦幅
colorscheme default "カラースキーム 他にもいっぱいある


以上でぇぇぇぇえす。