2010年4月21日水曜日

DeskNet'sからエクスポートしたスケジュールをPythonでGoogleカレンダー用に 整形する

DeskNet's(デスクネッツ)のスケジュールをGoogleカレンダーにインポートして何かいいことあるのかい?
iPhone / iPod Touch が勝手に同期してくれるじゃないか。
 
 

というわけで、PGほぼ素人ながらPython手習いの一環としてスクリプトを書いてみた。
DeskNet'sからエクスポートしたCSVのスケジュールを、Googleインポート用にヘッダ変更と並び変えをして保存するというつくり。
 

まあ、変換するだけなので簡単ですね、サンプルをつなぎ合わせたような。
 

import csv
 
csvfile_in='schedule.csv'
csvfile_out='schedule_out.csv'
 
reader = csv.reader(file(csvfile_in, 'r'))
writer = csv.writer(file(csvfile_out, 'w'), lineterminator='\n')
 
writer.writerow(['Subject','Start Date','Start Time','End Date','End Time','Description','Location'])
 
i = 0
for row in reader:
if i != 0:
# print unicode(row[6], 'cp932').encode('utf8')
rw = [row[8],row[3],row[4],row[5],row[6],row[9]]
print rw
writer.writerow(rw)
 
i = i + 1
 

 

応用でサイボウズもいけますね、ファイル名もなぜか同じだし。
 

これをGoogleのAPIに投げてインポートまで自動化出来たらいいんだけどなあ。
テストツールを使えばともかく、取得元のDeskNet'sやサイボウズとかから取ってくるのをスクリプトで自動化するのが大変。
 
これだけだと汎用性が微妙にエクセルマクロ以下なので、WEBにおいて、CSVアップしたら加工して戻してくれるようにしたいな。
 
 

サイボウズLiveとか、もっとAPI充実しないかなー
 

2010年4月14日水曜日

pythonのコマンド一行WEBサーバは便利、ファイル転送やWEBアプリの確認に

性懲りもなく python なぞに手を出し始めていますが、初期モジュールにHTTPサーバがいくつか入ってます。
その中にWEBサーバがあるんですが、これに驚いた。
 

python -m SimpleHTTPServer
 

Windowsでもいいし、Linuxほかでもいい。この一行でカレントディレクトリをルートにしたWEBサーバがあがる。
 

画像:PythonのSimpleHTTPServerモジュール
 
 

デフォルトだと TCPの8000番で待つのでアクセスしてみる。
 

画像:WEBブラウザでアクセス
 

ちゃんとカレントのディレクトリリスト※が出ている、(起動したユーザのアクセス権によるが)もちろんブラウザやWgetからダウンロード可能。
 

※ index.html があったら優先される。
 
 

設定やら色々追加することでCGIにもなったりしてかなり使いでがあるようだが、とりあえずこれだけすればwget,ブラウザですぐファイルを運べるので覚えとくと便利。
相手が iphone とかでもいいんだよね。
 

覚えておけ!いいからPythonいれとけ!
 

2010年3月27日土曜日

XenのおまけのVNC、起動終了時のコンソール出力をクライアント側に

XenでVM起動するときに、組み込みのVNCを使うことができる。
Qemuのライブラリ使ってるとか何とか。
 

しかし、適当に順仮想で導入したCentOS5.4では、起動と同時にVNC接続できるのはいいんだがペンギンしか見えない。
 

DISPLAY情報とか起動シーケンスの文字が流れなくて実に寂しい思いをしたので出す方法を探ってみた。grub.confの書き換えでOK。
 
 

grub.conf をみたら デフォルト起動になっているセットのカーネルオプションに、
(略) console=xvc0
の記述が。

なるほどね、Xenの consoleコマンドで入る仮想端末にはちゃんと名前があって、それを指定していたのか。
 
 

ということでこれを丸ごと削除。
無事にVNCクライアント上で起動終了の様子が流れるようになった。

2010年3月24日水曜日

WEBサイト組み込み用途に最適?TightVNCのVNCViewer(Java)

VNCを適当に入れたら、ポート5800でWEBサーバが立つじゃない。
RealVNCのJavaのアプレットがぽつんと置いてある奴。
 

あれが重たい&ちょっと別用途でWEBブラウザから使いたいと思ったので別のものを探してみた。
 
 


TightVNC
http://www.tightvnc.com/
 
これが良かった。
 
 

Viewer Only のアーカイブをダウンロードしたら、サンプルのindex.htmlをclassesの中に放り込み、適当にWEBサーバの公開領域におこう。
それだけでVNCのクライアントが使える。まあ普通のJavaアプレットの展開と同じなんだけど。
 

TightVNCの利点はこのビュワーの手軽さと、軽快な動き。
RealVNCの奴は重たくてなかなか使い物にならなかったけど、これは軽い。CLIならほとんどストレスなく動かせた。
 
 


ちなみにサンプルのHTMLはこんな感じ。
最初直接叩いてみたが、*.jarが同一ディレクトリに無いと怒られる。
 
<HTML>
<TITLE>
TightVNC desktop
</TITLE>
<APPLET CODE="VncViewer.class" ARCHIVE="VncViewer.jar"
WIDTH="800" HEIGHT="632">
<PARAM NAME="PORT" VALUE="5901">
</APPLET>
<BR>
<A href="http://www.tightvnc.com/">TightVNC site</A>
</HTML>

 
 

このファイルを編集して、パラメータを渡せば別サーバに接続とか行ける。
<param NAME="HOST" VALUE="hoge.example.com">
 
 

さてこれをどっかに組み込んでみたいなと思ってる。
なぜ今更こんなのかっていわれると、VNCで使い勝手が上がるものがあるじゃない、Qemuとか、Xenとか・・・
 
 


ただ、これを別サーバ接続用のクライアントとして使おうとしたら、ポリシーの関係で なんだっけ、SocketPermission の違反が起きちゃうんだよね。
この制限解除はどこでやるんだ?できると助かる、サーバ側で指定できるといいんだがなあ。
 



追記
やっぱクライアント側か。。

fail2banでブルートフォース対策

以前のものでiptablesのipt_recentをつかって、2行のコマンドでsshのアタックを防ごうという記事があるのだけど、とあるサーバで適用できなかったので別手段を。
 
 


(ほぼ)共同で借りているVPSレンサバがあるんだが、OpenVZかVirtuozzoかのコンテナらしくてiptablesのモジュールが自由にできないのがある。
そこではipt_recentをつかうとエラーになってしまい、前述の簡単ブルートフォース対策が使えないのだ。
 
 


仕方ないので fail2ban を使うことに。
pythonで動く、アクセス制限操作用のプログラムだ。
ちなみに導入先はCentOS5.4。
 
 

fail2banのインストール


開発元のサイトから最新のStableを落とそう、記事の時点では0.8.4だった。
http://www.fail2ban.org/wiki/index.php/Main_Page
 

RPM があるみたいだけど、ここはtarボールで。簡単だから。
 

展開したらPythonのスクリプトを流そう、Python2.3以上がいるらしいが、
まあ問題ないだろう。
# python ./setup.py install
 
なんとこれだけで終わりだ、便利になったもんだ。

 
 

"/etc/fail2ban/" に設定が一式、"/usr/share/fail2ban"にpythonのスクリプトが入る。


  1. fail2ban.conf:基本の設定

  2. jail.conf:サービス別設定


これだけ覚えてりゃなんとかなる、今回は jail.conf しかいじらない。
 
 


fail2banの動作パターン


ログを30秒ごとに監視する⇒パターンマッチしたらアクション(iptables設定追加など)
一定時間経過⇒適用済みのアクションを解除
 
という感じだ。
 
 

色々細かい設定やテストが出来るが基本はこのパターン。シンプルで他に影響が出ない。
導入の敷居としては低いんじゃないかな。
 

※当然iptablesを動かして無いと効果がない。
 
 

sshの制限(設定)


じゃあ導入のきっかけ、sshの制限をしよう
 
 

jail.confにもともと書いてある設定をちょっといじる。太字は大事なとこで、他も適当に書き換えよう。
 

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# sendmail-whois[name=SSH, dest=hogehoge@example.com, sender=fail2ban@mail.com]
logpath = /var/log/secure
maxretry = 5

 


有効にして、メール通知やログパスの設定を環境に合わせる。
通知はコメントアウトしているが、動作確認などでは便利なので安定動作を確認するまで使ったほうがいい。
 
 

sshの制限(デーモン稼働)


fail2banの軌道方法だけど、スクリプトが用意してある。
デーモンモードとなり、制御端末は切り離されるのでログアウトしても心配いらない。
# /usr/bin/fail2ban-client start
 

設定を変更した場合などは、
# /usr/bin/fail2ban-client reload
 
 

自動起動についてだけど、init.d/に置くスクリプトはとくに用意してないみたいだったので、inittabに書いちゃったな。
これについてはきっちり試してないのだが多分大丈夫だろう。
 
 


fail2banの様子


とりあえず同一のIPから600秒以内に5回ログインミスったらbanするように(さっきの設定)した。
デフォルトではbanして600秒たったら元に戻る。
 

"/var/log/fail2ban.log" にbanの様子が記録されるので見てみよう。

# tail /var/log/fail2ban.log
2010-03-23 18:20:55,628 fail2ban.actions: WARNING [ssh-iptables] Ban 211.142.19.251
2010-03-23 18:30:55,810 fail2ban.actions: WARNING [ssh-iptables] Unban 211.142.19.251
2010-03-23 21:35:14,533 fail2ban.actions: WARNING [ssh-iptables] Ban 211.142.19.251
2010-03-23 21:45:14,707 fail2ban.actions: WARNING [ssh-iptables] Unban 211.142.19.251
2010-03-23 22:33:37,424 fail2ban.actions: WARNING [ssh-iptables] Ban 211.157.108.132
2010-03-23 22:43:37,616 fail2ban.actions: WARNING [ssh-iptables] Unban 211.157.108.132
2010-03-24 00:00:34,088 fail2ban.actions: WARNING [ssh-iptables] Ban 64.3.96.221
2010-03-24 00:10:34,310 fail2ban.actions: WARNING [ssh-iptables] Unban 64.3.96.221
2010-03-24 00:53:33,939 fail2ban.actions: WARNING [ssh-iptables] Ban 211.142.19.251
2010-03-24 01:03:34,114 fail2ban.actions: WARNING [ssh-iptables] Unban 211.142.19.251


おお、引っかかってるね。Banして、10分後にUnban、10分もすりゃたいがい攻撃は終わってる。
こいつらほっといたら万単位で試行しやがる、まったく。
 
 


ついでにログを何秒間隔で掘っているのか気になったのでstraceして測ってみた。
# strace -p 26424
Process 26424 attached - interrupt to quit
poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP|POLLNVAL}], 1, 30000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP|POLLNVAL}], 1, 30000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP|POLLNVAL}], 1, 30000) = 0 (Timeout)
…


30秒間隔見てるね、まー十分だろう。
 
 


他にも各種サービス用の設定がプリセットされていた、使いやすいツールの一つとして覚えておこう。
 

2010年2月18日木曜日

Hyper-VにOpenSolaris、ZFSのdeduplicationを試そう

前略、Hyper-VにOpenSolarisをインストールしました。
しかしそれは本題ではなく、ZFS(Zpool)のバージョン21から有効になった、データのデデュプリケーションを試すのだ。
 
 

ちなみにHyper-VにOpenSolaris入れるにはメモリたっぷりいるよ、失敗する人は増やせばOK。
VirtualBoxでもいける、VirtualBoxの方が相性は良さそうな感じ。
 

画像:Hyper-V上のOpenSolaris

ZFSのバージョンは22、『やっぱりSunがスキ!』よりテキストインストーラのbuild131だ。
 
 
 


じゃあリアルタイムのデデュープを試してみよう!
 

さて、makefileでファイルをつくり、それをデバイスとして"ddzfs"というZFSストレージプールを作りました。
"zfs set dedup=on ddzfs" で準備完了。プールじゃなくてファイルシステムが対象ね。
サイズは1GBだ。
 
 

1GBの領域に/dev/zeroをダンプして5GBのファイルを作るとどうなる?
こうなる。
 


画像:ZFS Dedupの様子
※VirtualBoxに変わっているのは諸事情のため差し替えたので。
 


手抜きでごめんねぇ、キャプチャだ。
雰囲気は伝わるだろう、途中で言い逃れできないようなアハ体験が訪れていることがわかる?。
 
 

しかしリアルタイムで計算してデデュープしてる割にはよいスループット出てるやん。リハのHyper-Vでも60Mちょっとは出てたし。
完全仮想なことを考慮したらすごく早い気がする。
 
 

用途がファイルサーバならCPUなんていつだって遊んでいるから実用にも全然つかえるんじゃないか?
メールサーバでも効果が高そう、C.C.での同報メールなんかは文字通りカーボンコピーになるね。
※ブロック単位なので実際はちょっと違うが。
 
 
 


send&recvとか試してみたいことは山盛りだが、なんかもう理解の範疇を越えてきたな。
ZFSほか、新しいファイルシステムにはどんどん期待がもてるね。
 

2010年2月9日火曜日

Virtualboxでx86用Android (1.6)

Androidを試したいという要望があったので調べたら、x86で動かすプロジェクトがあるじゃない。これならPCで動くんだ。
http://www.androidx86.org/
 
 

リモートデスクトップで操作することを考慮して、VirtualBoxに入れてみた。
 


 

公式のISOファイルを落としてきてそれから起動して仮想HDDにインストール、導入は数分で完了してしまったな。
ダウンロードに掛かった時間の方が長かった。
 

画像:android1.6 on Virtualbox
 

これはカンタン面白いので是非。
Nexus Oneはandroid2.1なので、1.6はちょっと古いのかな?
 
 


アプリケーションを追加するなど、もう少しちゃんと触ってみたいという場合は、このへんの情報を参考に導入したらよいようです。
>> Android-x86で各種設定、アプリケーションインストール