仮想コンソール「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/
Ruby の RubyGems みたいなもの。
パッケージ管理を行う。
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/
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/