仮想コンソール「mingetty」の数を減らす

環境: CentOS5.5

現在の仮想コンソールを確認してみる。

$ ps auxwww | grep mingetty | grep -v grep
root      2279  0.0  0.0   3804   440 tty1     Ss+  Jul13   0:00 /sbin/mingetty tty1
root      2280  0.0  0.0   3804   440 tty2     Ss+  Jul13   0:00 /sbin/mingetty tty2
root      2281  0.0  0.0   3804   440 tty3     Ss+  Jul13   0:00 /sbin/mingetty tty3
root      2282  0.0  0.0   3804   440 tty4     Ss+  Jul13   0:00 /sbin/mingetty tty4
root      2283  0.0  0.0   3804   440 tty5     Ss+  Jul13   0:00 /sbin/mingetty tty5
root      2284  0.0  0.0   3804   440 tty6     Ss+  Jul13   0:00 /sbin/mingetty tty6

6つ立ち上がっているので余計な仮想コンソールは停止させる。

/etc/inittab を編集する。
1だけ残して2~6をコメントアウト

# vi /etc/inittab 
...
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
#2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
...

OS再起動

# reboot

確認

$ ps auxwww | grep mingetty | grep -v grep
root     20506  0.0  0.0   3804   528 tty1     Ss+  15:06   0:00 /sbin/mingetty tty1

1つのみとなった。

CentOS に EPEL リポジトリを追加する

EPEL(Extra Packages for Enterprise Linux)リポジトリを追加
(CentOS 5.x, x86_64の場合)

# rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

/etc/yum.repos.d に epel.repo が追加される。

レポジトリが増えたか確認

# yum repolist

デフォルトでは EPEL リポジトリを使わないように [epel] の enabled を 1 -> 0 に変更

# vi /etc/yum.repos.d/epel.repo
[epel]
...
enabled=0
...

EPEL リポジトリからインストール場合

# yum -y install python26 --enablerepo=epel

CentOS5.5 に node.js をインストールする

先に nvm をインストールし、nvm 経由で node.js と npm をインストールする。


nvm (Node Version Manager)
https://github.com/creationix/nvm

Ruby の rvm みたいなもの。
nvm を経由で node.js をインストールすることで複数バージョンの切り替えができる。


npm (Node Package Manager)
http://npmjs.org/
RubyRubyGems みたいなもの。
パッケージ管理を行う。


nvm のインストールには git が必要なのでインストールする。参照

また、ビルドにOpenSSLの開発用パッケージが必須なので、入ってなければインストールする。

# yum -y install openssl-devel

nvm のインストール

nvm のインストールには githubリポジトリをクローンする。

$ git clone git://github.com/creationix/nvm.git ~/.nvm

シェル実行

$ . ~/.nvm/nvm.sh

node.js と npm のインストール

続いて、nvm で node.js をインストールする。
インストールは、~/.nvm/ 以下に各バージョン毎のディレクトリに配置される。

$ nvm install v0.6.9

別のバージョンも入れてみる。

$ nvm install v0.6.8

使用するバージョンを指定する。

$ nvm use v0.6.9

インストールされたバージョンを見る。

$ nvm ls
v0.6.8  v0.6.9
current: v0.6.9

node.js を確認。

$ node -v
v0.6.9

npm も一緒にインストールされている。

$ npm -v
1.1.0-3

次回シェル起動時にも自動設定されるように .bashrc に以下を追記しておく。

. ~/.nvm/nvm.sh
nvm use v0.6.9

反映

$ source ~/.bashrc

アンインストールする場合

$ nvm uninstall v0.6.8

node.js を使ってみる

node.js の対話式シェルを確認してみる。

$ node
> console.log("hoge")
hoge


次に公式サイトを参考にHello Worldをやってみる。


Webサーバを実装する。
example.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');

起動

$ node example.js
Server running at http://127.0.0.1:1337/

確認
http://127.0.0.1:1337/

mysqlコマンドの入力を楽に行う方法

readlineマクロを使うことでコマンド入力を楽に行う方法を知ったのでやってみた。
事前によく使うmysqlコマンドを .inputrc を作成して以下のように記述する。


~/.inputrc

$if mysql
	"\C-xd": "show databases;"
	"\C-xt": "show tables;"
	"\C-xs": "select * from "
$endif


Ctrl+x 押したあとにそれぞれのキーを押すことで登録しておいたコマンドをペーストできる。
.inputrc の記述で : の前にスペース入れていたら動かずちょっとハマった^^;



参考:
mysqlでいちいちshow databasesとか打つのがめんどい→readlineのマクロで解決 - (ひ)メモ
http://d.hatena.ne.jp/hirose31/20090531/1243777478

CentOS 5.5 に MongoDB を yum からインストールする

参考:
CentOS and Fedora Packages - MongoDB
http://www.mongodb.org/display/DOCS/CentOS+and+Fedora+Packages


mongoDB用のレポジトリファイルを追加

$ sudo vi /etc/yum.repos.d/10gen.repo

64bit用を設定を追加

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0


mongo関連のパッケージを探す

$ yum search mongo
Loaded plugins: fastestmirror
10gen                                                                                              |  951 B     00:00
addons                                                                                             |  951 B     00:00
base                                                                                               | 1.1 kB     00:00
extras                                                                                             | 2.1 kB     00:00
updates                                                                                            | 1.9 kB     00:00
===================================================== Matched: mongo ===================================================
mongo-10gen.x86_64 : mongo client shell and tools
mongo-10gen-server.x86_64 : mongo server, sharding server, and support scripts
mongo18-10gen.x86_64 : mongo client shell and tools
mongo18-10gen-server.x86_64 : mongo server, sharding server, and support scripts
$ yum list | grep mongo
mongo-10gen.x86_64                         2.0.2-mongodb_1             10gen
mongo-10gen-server.x86_64                  2.0.2-mongodb_1             10gen
mongo18-10gen.x86_64                       1.8.4-mongodb_1             10gen
mongo18-10gen-server.x86_64                1.8.4-mongodb_1             10gen


インストール

sudo yum install mongo-10gen-server.x86_64

serverをインストールすればクライアント(mongo-10gen.x86_64)も一緒にインストールされる。


インストールされたRPMパッケージに含まれるファイルやコマンドの一覧を表示する

$ rpm -ql mongo-10gen-server.x86_64
/etc/mongod.conf
/etc/rc.d/init.d/mongod
/etc/sysconfig/mongod
/usr/bin/mongod
/usr/bin/mongos
/usr/share/man/man1/mongod.1
/usr/share/man/man1/mongos.1
/var/lib/mongo
/var/log/mongo
/var/log/mongo/mongod.log

$ rpm -ql mongo-10gen.x86_64
/usr/bin/bsondump
/usr/bin/mongo
/usr/bin/mongodump
/usr/bin/mongoexport
/usr/bin/mongofiles
/usr/bin/mongoimport
/usr/bin/mongorestore
/usr/bin/mongostat
/usr/bin/mongotop
/usr/share/man/man1/bsondump.1
/usr/share/man/man1/mongo.1
/usr/share/man/man1/mongodump.1
/usr/share/man/man1/mongoexport.1
/usr/share/man/man1/mongofiles.1
/usr/share/man/man1/mongoimport.1
/usr/share/man/man1/mongorestore.1
/usr/share/man/man1/mongostat.1


/etc/mongod.conf のデフォルト設定

# ログファイル
logpath=/var/log/mongo/mongod.log
logappend=true
# データディレクトリ
dbpath=/var/lib/mongo
...


mongod起動

$ sudo /etc/init.d/mongod start

mongoシェル起動

$ /usr/bin/mongo

mongod停止

$ sudo /etc/init.d/mongod stop

mongodの自動起動の設定を確認

$ /sbin/chkconfig --list mongod
mongod          0:off   1:off   2:off   3:on    4:off   5:on    6:off

CentOS 5.5 に MongoDB をバイナリからインストールする

参考:
Quickstart Unix - MongoDB
http://www.mongodb.org/display/DOCS/Quickstart+Unix
Starting and Stopping Mongo - MongoDB
http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo


以下、一般ユーザでホームディレクトリに入れて動かす場合の手順。


64-bit Linux binaries (v2.0.2)をダウンロードして解凍する。

$ curl http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.2.tgz > mongo.tgz
$ tar xzf mongo.tgz


ショートカットを作成

ln -s ./mongodb-linux-x86_64-2.0.2 ./mongodb


.bash_profileにパス追加

PATH=$PATH:~/mongodb/bin
source .bash_profile


バージョン確認

$ mongod --version
db version v2.0.2, pdfile version 4.5


デフォルトでは、/data/db にデータを格納するとのこと。
自動的にディレクトリを作成しないので自分で作る必要がある。
今回は別の場所にディレクトリを作成し、そちらを使うようにする。

$ mkdir -p ~/mongodata/db/


mongodを起動。

$ mongod --dbpath ~/mongodata/db/


mongod をバックグラウンドで動かすには、--fork をつけて起動。
その際には、--logpath の指定も必要になる。さらに --logappend もつけて追記にする。

先にログ用のディレクトリを作る。

$ mkdir -p ~/mongodata/log/


mongodを起動。

$ mongod --fork --dbpath ~/mongodata/db/ --logpath ~/mongodata/log/mongodb.log --logappend
all output going to: /home/hoge/mongodata/log/mongodb.log
forked process: 31052


起動しているかシェルから確認。

$ mongo
MongoDB shell version: 2.0.2
connecting to: test
>

test データベースにつながれば、起動は成功している。


データベースの一覧を表示。

> show dbs
local   (empty)
>


mongo シェルを終了。

> exit


プロセスを確認する。

$ ps auxww | grep mongo | grep -v grep
hoge     31052  0.0  2.7 118740 13832 ?        Sl   17:48   0:00 mongod --fork --dbpath /home/hoge/mongodata/db/ --logpath /home/hoge/mongodata/log/mongodb.log --logappend


使用しているポートを確認する。

$ netstat -antp

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:27017               0.0.0.0:*                   LISTEN      31052/mongod
tcp        0      0 0.0.0.0:28017               0.0.0.0:*                   LISTEN      31052/mongod
...

ん、2つあるぞ。
ポート27017で接続を待って、ポート28017は管理者用のHTTPコンソールページだそう。


参考:

デフォルトのTCPポートについて
Production Notes - MongoDB
http://www.mongodb.org/display/DOCS/Production+Notes#ProductionNotes-TCPPortNumbers

  • Standalone mongod : 27017
  • mongos : 27017
  • shard server (mongod --shardsvr) : 27018
  • config server (mongod --configsvr) : 27019
  • web stats page for mongod : add 1000 to port number (28017, by default)


HTTPインターフェース - Docs-Japanese - 10gen Confluence
http://www.mongodb.org/pages/viewpage.action?pageId=7831865



mongod を終了させる。
mongo シェルから終了させる場合。

$ mongo
> use admin
> db.shutdownServer()

Spring 3.0 RestTemplate API を試す

RestTemplate API を使って Twitter の TimeLine を表示する簡単なサンプルを作ってみる。


まずは、以下のMaven検索サイトで最新のものを調べた。
http://mvnrepository.com/artifact/org.springframework


pom.xml に「spring-web」を追加する。

<dependencies>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-web</artifactId>
	<version>3.0.6.RELEASE</version>
</dependency>
</dependencies>


次にソースコード


Spring3RestClientTest.java

package learn;

import org.springframework.web.client.RestTemplate;

public class Spring3RestClientTest {
	public static void main(String[] args) {
		RestTemplate restTemplate = new RestTemplate();
		String response = restTemplate.getForObject("http://twitter.com/statuses/user_timeline/{user}.json?count={count}", String.class, "masason", "10");
		System.out.println("Response: " + response);
	}
}

これでツイートを取得して表示することができる。


getForObjectメソッドは

getForObject(URI url, Class<T> responseType)
getForObject(String url, Class<T> responseType, Object... urlVariables)
getForObject(String url, Class<T> responseType, Map<String, ?> urlVariables)

が用意されている。
URLパラメータの部分は以下のようにMapで渡してもよい。

Map<String, String> vars = new HashMap<String, String>();
vars.put("user", "masason");
vars.put("count", "10");
String response = restTemplate.getForObject("http://twitter.com/statuses/user_timeline/{user}.json?count={count}", String.class, vars);


HTTPクライアントが簡単に書けて便利ですね。


参考:
http://blog.springsource.org/2009/03/27/rest-in-spring-3-resttemplate/
http://www.ibm.com/developerworks/jp/web/library/wa-restful/