2010年09月08日

※まだちゃんと動いてないので単なる作業メモ+日記です。過度な期待はしないでください。

ちょっとした遊びのネタとして
PlanetLab(MyPLC)をOpenNebula上で動かしてみようと思います。
元々PlanetLabの仕組みをOpenNebulaに置き換えて実現できるんじゃないかと
思うことがあって、試しに動かしてみようかなと。

OpenNebulaでハードウェアのセットアップを仮想的に行って
その上でPlanetLabを構築という形を考えています。

・PlanetLabに特化したセットアップを、OpenNebulaでどこまでできるか
・OpenNebulaで構築・運用する上でPlanetLabにどんな拡張が必要になるか

ひとまずMyPLCをセットアップすべくCentOSをOpenNebula上で構築しています。
パッケージの取得用と、実験用(DHCPを別途立てるとかやるので
プライベートネットワークでやりたい)でマルチホームに・・・
と思ったのですが、OpenNebulaでの構築に失敗しちゃいました。
そういえばどうやって記述するんだろう・・・?
もしかしてマルチホームを想定していないのかなぁ。

nanodayo at 17:41コメント(2)トラックバック(0) 
PlanetLab 

2010年09月05日

■前置き


サーバを10台とか100台とか管理している状況を想像してみてください。

その10台に全く同じファイルをコピーしたいとか
全く同じコマンドを実行させたいとか
同じ操作をしたくなる状況は多々あると思います。
普通にsshで1台1台にログインして操作すればいいのですが
数が多くなると面倒なので、なんとかスクリプトを組みたいと思うものです。
流石に100回も同じパスワードを打ちたくないですし。

■既存の手法


公開鍵を各サーバに登録してしまえば
自作スクリプトなり、psshなり、codeployなり、選択肢はあれこれありますが
ここでは鍵を登録していない状況で操作するための方法を考えます。

■expectを使った方法


サーバ側に特に準備をしない方法として
expectを使う手があります。
こんな感じのスクリプトを作ります。
ちなみに操作するPC側にはexpectをインストールする必要があります。

#!/usr/local/bin/bash

expect -c "
set timeout 5
spawn ssh $1
expect rsa:
send \r
expect password:
send $2\r
interact
"


# シングルクオートは単なる文字として見なされるようです

expectは対話的な操作を実行するプログラムです。
spawn hogeでhogeを実行し、
expect "hoge"で、hogeという出力を読み、send "hoge\r" でhogeを入力します。
expect 'password:'みたいにやれば、パスワードの入力を求められた時に、
次のsendでパスワードを入力することができるわけです。

通常は1行目は
#!/usr/local/bin/expect にするらしいですが、
bashを経由して expect -c "中身" のようにすることによって
$1を引数として渡せるらしいです。

このスクリプトをexsshなんて名前にして
# exssh user@server password

のようにそれぞれ指定して実行すれば、勝手にログインしてくれます。
$3で、実行させたいコマンドを指定できるように改造してもいいでしょう。

あるいは
# exssh "user@server reboot" password

のように、$1の一部としてコマンドを指定する手もあります。

nanodayo at 03:57コメント(3)トラックバック(0) 
UNIX