Merb, いれてみたよ

Railsより3倍早いとか。

% sudo gem install merb                                                     [~]
Building native extensions.  This could take a while...
Successfully installed extlib-0.9.8
Successfully installed abstract-1.0.0
Successfully installed erubis-2.6.2
Successfully installed json_pure-1.1.3
Successfully installed thor-0.9.8
Successfully installed merb-core-1.0.3
Successfully installed RubyInline-3.8.1
Successfully installed sexp_processor-3.0.0
Successfully installed ParseTree-3.0.2
Successfully installed ruby2ruby-1.2.1
Successfully installed merb-action-args-1.0.3
Successfully installed merb-assets-1.0.3
Successfully installed merb-slices-1.0.3
Successfully installed merb-auth-core-1.0.3
Successfully installed merb-auth-more-1.0.3
Successfully installed merb-auth-slice-password-1.0.3
Successfully installed merb-auth-1.0.3
Successfully installed merb-cache-1.0.3
Successfully installed merb-exceptions-1.0.3
Successfully installed templater-0.5.0
Successfully installed merb-gen-1.0.3
Successfully installed haml-2.0.4
Successfully installed merb-haml-1.0.3
Successfully installed merb-helpers-1.0.3
Successfully installed mailfactory-1.4.0
Successfully installed merb-mailer-1.0.3
Successfully installed merb-param-protection-1.0.3
Successfully installed addressable-2.0.0
Successfully installed data_objects-0.9.8
Successfully installed dm-core-0.9.7
Successfully installed dm-migrations-0.9.7
Successfully installed merb_datamapper-1.0.3
Successfully installed merb-more-1.0.3
Successfully installed do_sqlite3-0.9.8
Successfully installed dm-timestamps-0.9.7
Successfully installed uuidtools-1.0.4
Successfully installed dm-types-0.9.7
Successfully installed dm-aggregates-0.9.7
Successfully installed dm-validations-0.9.7
Successfully installed randexp-0.1.4
Successfully installed dm-sweatshop-0.9.7
Successfully installed merb-1.0.3
42 gems installed

多いよ!

でもシンプルなのはいいよね。

広告

rubygems, github

Rails2.2がリリースされたみたいですね。

それは置いておいて、githubからgemを生成できるようです。

GitHub RubyGems

$ sudo gem sources -a http://gems.github.com/
$ sudo gem install username-projectname

便利ですね〜

rubygems, twitter

$> sudo gem install twitter
$> twitter install
$> twitter add
Add New Account:
Username: 
Password (won't be displayed): 
Account added.
$> twitter post testaaa
$> twitter timeline

投稿できた。

けど、

timelineが文字化ける。。

ここだけrubyで書いてしまうのがいいのかね。

流行?のgitとか

編集がすげー手抜き。

http://git.or.cz/

[centos5.1]

cd /usr/local/src
wget http://kernel.org/pub/software/scm/git/git-1.6.0.tar.gz
tar zxvf git-1.6.0.tar.gz
cd git-1.6.0
./configure
make
make install
which git
/usr/local/bin/git
git --version
git version 1.6.0

[mac]

sudo port sync
sudo port search git
cogito                         devel/cogito   0.18.2       Git core and cogito tools to provide a fully-distributed SCM
git-core                       devel/git-core 1.6.0        A fast version control system
qgit                           devel/qgit     2.1          A graphical interface to git repositories
stgit                          devel/stgit    0.14.3       Push/pop utility on top of GIT
cgit                           www/cgit       0.7.1        A fast web interface for the git source code management system
sudo port variants git-core
	universal
	doc: Install HTML and plaintext documentation
	gitweb: Install gitweb.cgi
	svn: Bi-directional subversion repository support
	bash_completion: Bash completion support
 
sudo port install git-core +gitweb +svn
sudo port install gogito

CentOS5.1, mogileFS設定

mogileFS運用とか設定とか。

状態のチェック

root# mogadm --trackers=127.0.0.1:7001 check
Checking trackers...
  127.0.0.1:7001 ... OK

Checking hosts...
No devices found on tracker(s).

root# 

mogadmの設定は、/etc/mogilefs/mogilefs.confで指定できます。

使用するstorage nodeサーバーを登録します。

root# mogadm host add localhost --port=7500
root# mogadm check
Checking trackers...
  127.0.0.1:7001 ... OK

Checking hosts...
  [ 1] localhost ... skipping; status = down
No devices found on tracker(s).

root# 

trackerがlocalhostをhost(storage node)として認識しました

deviceを登録します

root# mogadm device add localhost 1
root# mogadm device add localhost 2
root# mogadm device add localhost 3

ディレクトリをつくります

root# cd /var/mogdata
root# mkdir dev1 dev2 dev3
root# mogadm device list
localhost [1]: down
                   used(G) free(G) total(G)
  dev1: down       0.000   0.000   0.000  
  dev2: down       0.000   0.000   0.000  
  dev3: down       0.000   0.000   0.000 
  
root#

storage nodeとして使用するhostとdeviceが準備できたので、使用可能状態にします。

root# mogadm host mark localhost alive
Checking trackers...
  127.0.0.1:7001 ... OK

Checking hosts...
  [ 1] localhost ... OK

Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  [ 1] dev1            17.951      6.829     11.122  38.04%  writeable   0.0
  [ 1] dev2            17.951      6.829     11.122  38.04%  writeable   0.0
  [ 1] dev3            17.951      6.829     11.122  38.04%  writeable   0.0
  ---- ------------ ---------- ---------- ---------- ------
             total:    53.852     20.487     33.365  38.04%


root#

host mark で設定可能な状態は以下の4種類です。

* alive
** 書き込み、読み込み可能。
* down
** 一時的に使用不可。
* dead
** 使用不可。ファイルは別の場所にコピーされている。
* readonly
** 読み込み専用。

domainとclassを設定します

root# mogadm domain add gensokyo
root# mogadm class add gensokyo normal --mindevcount=2
root# mogadm domain list
 domain               class                mindevcount
-------------------- -------------------- -------------
 gensokyo             default                   2
 gensokyo             normal                    2


root#

class は自動コピーする数を管理しています。ファイル作成時に class を指定することで、その class のmindevcount で指定されている数の node でコピーを保存します。default クラスは指定がなかったときに内部的に使われるものです。

この class の設定をいくつか用意することで、

* どうでもいいファイルはコピーなし(mindevcount=0 or1)
* なんらかの操作で再構築可能なファイルは 2 nodes で保存(mindevcount=2)
* 再構築できない重要なファイルは 3 nodes で保存(mindevcount=3)

CentOS5.1, mogileFSインストール

MogileFS

リポジトリ
http://code.sixapart.com/svn/mogilefs/

perl -MCPAN -e shell
cpan> install Net::Netmask
cpan> install Danga::Socket
cpan> install Linux::AIO
#centos5.1で失敗したので、
cpan> install IO::AIO
cpan> install Perlbal
cpan> install MogileFS::Client #※1
cpan> install DBI
cpan> install DBD::mysql

#DBD::mysqlがうまく入らない。

#ソースから日本語対応のtritonn入れていたので、

root# vi /etc/ld.so.conf
/usr/local/mysql/lib/mysql
root# ldconfig
root# cd /usr/local/src
root# svn co http://code.sixapart.com/svn/mogilefs/trunk mogilefs
root# cd mogilefs
root# svn info
リビジョン: 1184

* 配布物
** server
*** tracker, storage node サーバーで必要になるコマンドと Perl モジュールが含まれています。
** api
*** client サーバーで必要になる API が含まれているディレクトリです。現時点では Perl 向け API のみ配布物に含まれています。
** utilities
*** MogileFS の設定・管理に必要なユーティリティコマンド(mogadm)が含まれています。

root# cd server
root# perl Makefile.PL
root# make
root# make install

make testはデータベースへの接続テストがハードコーディングされているのでスキップします。

※1でインストールしてればいらない

root# ../api/perl/MogileFS-Client
root# perl Makefile.PL
root# make
root# make install
root# cd ../utils
root# perl Makefile.PL
root# make
root# make install

対話形式でやります。

root# mogdbsetup 

This will attempt to setup or upgrade your MogileFS database.
It won't destroy existing data.
Run with --help for more information.  Run with --yes to shut up these prompts.

Continue? [N/y]: y

Create database name 'mogilefs'? [Y/n]: Y

Grant all privileges to user 'mogile', connecting from anywhere, to the mogilefs database 'mogilefs'? [Y/n]: Y
root#

一括でやるなら

root# mogdbsetup --dbuser=mogile --dbpass=mogpass --yes

設定ファイル用ディレクトリ

root# mkdir /etc/mogilefs

実際にファイルがおかれるディレクトリ(strage nodeの実態)

root# mkdir /var/mogdata

設定ファイルを編集

* 参考
** http://search.cpan.org/src/BRADFITZ/mogilefs-server-2.17/lib/MogileFS/Config.pm

root# cd /etc/mogilefs
root# touch mogstored.conf
root# touch mogilefsd.conf
root# vi mogilefsd.conf
## tracker (mogilefsd) の設定
# daemonで実行
daemonize = 1

# database
db_dsn = DBI::mysql:mogilefs:host=127.0.0.1
db_user = mogile
db_pass = 

# mogilefsdがclientからの要求を受け付けるポート番号
conf_port = 7001

# clientからの要求を処理するプロセスの数
listener_jobs = 10

root# vi mogstored.conf
## storage node (mogstored) の設定
# httpリクエストを待ち受け付けるIPとポート
httplisten = 0.0.0.0:7500

# Perlbal間利用リクエストを受け付けるIPとポート
mgmtlisten = 0.0.0.0:7501

# docroot
docroot = /var/mogdata

mogilefsdはroot以外で実行する必要があるのでmogilefsdようのユーザーを作成する

root# useradd -s /bin/false mogile

mogstoredとmogilefsdをあげます

root# mogstored --config=/etc/mogilefs/mogstored.conf -d
ERROR: Directory not found for service mogstored
root# mkdir /var/mogdata
root# mogstored --config=/etc/mogilefs/mogstored.conf -d
root# sudo -u mogile mogilefsd

root# netstat -atn
root# ps aux | grep mog