Gist一枚でわかる、Rackhub 2nd generation!

「巷で人気？のプログラミング言語」をひと通りインストールした
プログラマのためのホスティングサービスRackhubの環境の新バージョンをリリースしました。

前回からいくつかのアーキテクチャの変更を行い、より使いやすくて安定した環境をお手軽に使えるようになりました。大きな変更は、これまではコンテナ型仮想化を使っていましたが、KVMによるフルバーチャライズド環境になりました。KVM自体は、もうめずらしくもなんともない技術なので特筆することはとくにないと思うのですが、コンテナ型環境の抱える問題との決別をという意味では、良い変更になったのではないかと思います。

次に、ベースのOSをDebian Squeeze ベースからUbuntu12.04LTSへと変更しました。こちらもプログラミングをする上で大きな意味を持つわけではないのですが、いち早く12.04LTSを使ってプログラミングができる環境を用意したかったということです。

コンテナ型からKVMに変更するにあたって、ネットワークも変更しました。Openflowベースの仮想スイッチを使うことでRack間でのセキュリティ問題やトラフィック制御をより柔軟に行うことができるようになりました。

また、前回から導入していた、スタック型のファイルシステムであるAUFSを使った実装はそのままにしています。通常のファイルシステムではインストールされているプログラミング言語が増えるとユーザのDisk領域を消費することになるのですが、Rackhubではユーザ領域と構築済みの環境の領域は完全に分離されており、ユーザはユーザ領域と構築済み環境の領域を透過的に取り扱うことができ、豊富なプログラミング言語の環境をユーザの領域を消費することなく利用することができます。

構築済みの環境のプログラミング言語のバージョンアップや新しいプログラミング言語の追加はRackhubが定期的にメンテナンスを行なって追加していくのでいつでも新しいバージョンのプログラミング言語に出会えます。

みんなが大好きなプログラミングを思う存分楽しめて、
手軽に友達を呼んでコラボレーションもしちゃいましょう。

# 使い方
とりあえずログインしよう！

```
ssh sowawa2.rackbox.net -l rackhuber -A
```

いつもどおりSSHするだけですね。
次はみんなが大好きRailsを動かします。

```
rvm 1.9.2@rails-3.2
rails new hoge
cd hoge ; rails s
```
簡単ですね。
ここで、ユーザ環境にインストールされているいくつかのプログラミング言語についてお話しします。

- python
- perl
- nodejs
- ruby

これらの言語が /home/rackhuber 以下にインストールされてます。
この辺も最近はやりのバージョン管理システム(gitとかじゃないよ)とよばれる、複数のバージョンを切り替えてプログラミング環境を使い分けられるシステムが導入されています。

- pythobrew
- perlbrew
- nvm
- rvm

各バージョン管理システムの使い方とそこにインストール済みのプログラミング言語を見て行きましょう。

## ptyhonbrew
`list`と`switch`をまず覚えておきましょう！
あと、何がどこに入っているかわからないときは、とりあえず`which python`等と唱えてどこにあるのか確認してみましょう。

```
rackhuber@sowawa2:~$ pythonbrew list
# pythonbrew pythons
  Python-2.7.3 (*)
  Python-3.2.3
rackhuber@sowawa2:~$ which python
/home/rackhuber/.pythonbrew/pythons/Python-2.7.3/bin/python
rackhuber@sowawa2:~$ pythonbrew switch 3.2.3
Switched to Python-3.2.3
```

## perlbrew

```
rackhuber@sowawa2:~$ perlbrew list
* perl-5.12.4
  perl-5.14.2
rackhuber@sowawa2:~$ perlbrew switch perl-5.12.4
```
Pythonbrewと同じように`list`と`switch`を使うことで一覧と切り替えを行うことができます。

Perl環境では`cpanm`もインストールされています。インストール済みのものを列挙すると大変なので代表的な物をあげるとNet::SSLeayやNet::Twitterがインストールされています。
( Special thanks @kyoro353)

## rvm
みんな大好きrvmの説明は省略。ぐぐってください。

## nvm

```
rackhuber@sowawa2:~$ nvm ls
   v0.6.15	    v0.7.8
current: 	v0.6.15
default -> 0.6 (-> v0.6.15)
rackhuber@sowawa2:~$ nvm use v0.7.8
Now using node v0.7.8
```
`ls`で一覧表示を行い、 `use`でバージョンを選択します
nodejsは2012/4/26現在、0.6.xがstable、0.7.xがdev版です。
nodejsにはnpmと呼ばれるパッケージ管理システムがあるのでこれも使いましょう。

# 他の言語とデータストア
rackhubにはJava、Erlangがインストールされています。
これらは`/usr/local`以下にインストールされています。
インストール後のファイルのシンボリックリンクの管理にStowと呼ばれるパッケージ管理機構を用いています。
Stowは下記のようにStow管理下に置きたいフォルダを指定します。

```
Stow hogehoge-2.3.2
```

するとStowが/binや/sbinなどにhogehoge-2.3.2以下のbinやsbinディレクトリの中身のシンボリックリンクを配置します。


## Mysql

```
sudo /usr/local/mysql/mysql.server start
sudo /usr/local/mysql/mysql.server stop
sudo vim /usr/local/mysql/my.cnf
```

データベースを初期化するには、

```
sudo rm -rf /usr/local/mysql/data
sudo mkdir /usr/local/mysql/data
# set up mysql
sudo /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# chmod mysql
sudo chown -R mysql:mysql /usr/local/mysql
sudo /usr/local/mysql/mysql.server start
# set mysql password
sudo /usr/local/mysql/bin/mysqladmin -u root password 'loverackhub'
# restart mysql
sudo /usr/local/mysql/mysql.server restart
```

## memcached

```
sudo memcached -u nobody -d -m 16 -l 127.0.0.1
```
止めるときは`kill`しましょう

```
pgrep -f 'memcached' | sudo xargs kill
```

## apache

```
sudo apachectl start
sudo apachectl stop
```

- conf /usr/local/httpd/conf/httpd.conf
- conf.d /usr/local/httpd/conf/conf.d/*
- docroot /usr/local/httpd/htdocs

## nginx

```
sudo nginx
sudo nginx -s stop
```

- conf /usr/local/nginx/nginx.conf
- conf.d /usr/local/nginx/conf.d/*
- docroot /usr/local/nginx/html

## JAVA
JAVA_HOMEは以下に設定済みです。

```
rackhuber@sowawa2:~/hoge$ echo $JAVA_HOME
/usr/local/jdk
rackhuber@sowawa2:~$ java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)
```

## Erlang

```
rackhuber@sowawa2:~/hoge$ erl
1> init:stop().
```

## Dlang

D言語はStow配下ではなくDigital Marsから配布されているdeb packageによりインストールされています。

```
dmd
```

## パスワード変更する

```
sudo passwd rackhuber
Enter new password > 
```

> 本投稿は、次の Gist を fork して転載したものです。
> Gist - [Rackhub 2nd generation](https://gist.github.com/2491414)
> * 作者から許諾も頂きました。