こちらは旧サイトの保存版です
Googleのアカウントもってるじゃん。1つ?んなわけない。
FireFoxのプリズムとか、GoogleChromeのアプリケーションとしてショートカットとか便利なものは複数アカウントで使い分けたい。
特にChromeのアプリケーションショートカットはGmailをローカルのメーラっぽく使えていいので、別のアカウントで複数立ち上げたくなったのでやり方を調べてみた。
どうやら”–user-data-dir”という引数でプロファイルの場所を指定できるらしい、プロファイルが別ってことは、それぞれGoogleのログイン情報を別に持たせて動かせるってことだね。
chrome.exe" --app="https://mail.google.com/mail" --user-data-dir="..\..\User Data\hogehoge"
Chromeのショートカットを加工して、こんな感じで必要な分だけGmail用Chromeを起動すれば、あたかも複数メーラが立ち上がってるみたいになって便利。
hogehoge のところを適当にいじろう。
ZFSでzpoolを作成するとき、各デバイスまたはファイルに3種類の役割がある。
データ用、キャッシュ用、ログ用とあるが、zpool構成するときにそれぞれどのように使えるかまとめてみた。
検証に使ったのは取ったのはOpenSolarisのb131、zpoolバージョンは22だ。
デバイスの用途と構成・特徴一覧
ざっとこうなる。
| zpool形式 | data | cache | log |
|---|---|---|---|
| スパン | ○ | ○ | ○ |
| ミラー | ○ | × | ○ |
| RAIDZ | ○ | × | × |
| RAIDZ2 | ○ | × | × |
| RAIDZ3 | ○ | × | × |
| detach | 条件付○ | ○ | 条件付○※ |
| ファイルを指定 | ○ | × | ○ |
dataとlogは似ている
data用は取れる構成コンプリートなのは当たり前だが、detachには制限がある。
logも同様だが、完全なデータのコピーがないデバイスは取り外せない、すなわちミラー状態の片割れが唯一取り外しOKで他の構成ではそもそも取り外しができない。
もちろんreplaceは可能、順序的にはミラーしてdetachだから当然。
data、logともにmkfileで作成したファイルも指定OK。
raidzはdataのみ、dataもlogも後からattachでミラーリングデバイスを追加出来る。
追記※
Logは最新のコードでは取り外せるようになってると情報をいただきました。
http://twitter.com/hasegaw/status/15496202547
取り外せないことがひそかに疑問だったが、すっきりしました。
cacheは特殊
一方cacheは冗長構成が一切とれない、必要がないからだろう。
また、デバイスの追加削除に制限がない。中身はあくまでキャッシュにすぎなく、ヒットしない・読み込めない場合はさっさと諦めて削除すればよい。
もう少し触れておくと、cacheには十分に早いデバイスの割り当てが推奨されている。
ミラーをはじめ冗長な構成では読み取りストライピング効果も確かにあるが、書き込みのペナルティが大きいため不向きだ。
また、degradeな状態を想像するといいだろう。
cacheにそんな状態があっては本末転倒だ、リシルバさせる意味も全くない。
高速に動作し、そうできない状態は必要ないのがcacheだ。
ちなみにファイルは指定できない、「ディスクまたはディスクスライスを指定すべき」と断られる。
cacheへの割り当てデバイス、お勧めはやはりSSDだ。
という感じ。ではついでにZFS利用にあたって私からのTIPSを。
zpoolミラーは多面鏡
zpoolのミラーリングはRAID1ではない。いくつも複製対象が増やせるのだ。
2つでは何かと心配、というときは3つにすればいい。
ミラー台数を増やすたびにリード性能は向上し、ライトはが下がる。リード重視という環境は多かろうので覚えておくとよい。
3-Way Mirrorの図、attachで作る。もちろん4つ目5つ目を追加していく事もOK。
NAME STATE READ WRITE CKSUM
zfs ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c4t0d0p0 ONLINE 0 0 0
c4t0d0p1 ONLINE 0 0 0
c4t0d0p2 ONLINE 0 0 0
ZILは意外と役に立たない(そんな事は無いというお話を追記してます)
これは特に主観が大きいTIPSなので参考程度に。
(※追記:LOGを別にした場合はかなり勝手が変わります。)
ZIL、まあトランザクションログみたいなのだが、アトミック書き込み、CoWが身上のZFSではイマイチ存在が薄いように思う。
実際どういうケースで役に立つのか、あまり実感がわかないのにZIL有効だとパフォーマンスがものすごく落ちる。
結局のところ、HDDやストレージ側の障害にZILは無力である。
ライトキャッシュ有効のストレージ装置が気まぐれでキャッシュを捨てたとする、別デバイスに取ったZIL上では正常終了なのにデータはおかしい。
逆もそう、HDDが死んでZILごと失った場合もZFSのCoW特性から、ファイルシステム上特に不都合はない。
データの小さい破壊はZFS内でミラーやRAIDZ構成をとっておくことでチェックサムから復旧でき、そこでもやっぱりZILは関係ない。
さてZIL、有用かな?
さて、ZILに関して有識者の方からご助言をいただきました。Twitter:hasegaw さんより。
ってか、『Xen徹底入門』とか付箋バリバリなのでえらい驚きましたが(汗
ZILはRAID-Zの上NFSサーバにしたときには効果大。Logデバイスは最新のコードだと取り外し可能に
http://twitter.com/hasegaw/status/15496202547
NFSですか。実は具体的にどう効果がもたらされるのかイメージが・・・
多分非同期だからということが関係してくるんだろう、ちょっと考えておこう。
本文がZILを完全に批判しているようになっているので載せるところまでは早くしないと。
で、答えはこちら。
http://togetter.com/li/27626
親切丁寧に教えてもらっちゃいました、なるほどですねえ。
RAIDZはデータをストライプした全デバイスに書く
使用デバイスの台数から RAIDZ=RAID5、RAIDZ2=RAID6と思ってはいけない。
詳しくは書き込みホールの問題を調べたらわかるので割愛する。
で、余所ではあまり触れてないと思ったことについて。
データを全部に書くのでRAIDZにあまり一杯デバイスを並べると書き込みのペナルティが馬鹿にならなくなってくる。
よってRAIDZを構成するのは6-8デバイスにとどめておき、大容量を求めるならRAIDZ構成をたくさんストライピングするのが多分賢い。
単純なスパン構成でも、後から冗長化できる(1)
導入時にRAID0っぽい構成にして、後からマズイと思ったりしますか?
zfsだとattachしていくことで冗長構成にする事が可能だ。
たとえばこんなスパンボリューム。
NAME STATE READ WRITE CKSUM
zfs ONLINE 0 0 0
c4t0d0p0 ONLINE 0 0 0
c4t0d0p1 ONLINE 0 0 0
attachであれよと言う間にRAID1+0相当に。
NAME STATE READ WRITE CKSUM
zfs ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c4t0d0p0 ONLINE 0 0 0
c4t1d0p0 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
c4t0d0p1 ONLINE 0 0 0
c4t1d0p1 ONLINE 0 0 0
多少容量は犠牲になるが、RAID0相当の構成はすぐにRAID6以上の稼働率&ハイパフォーマンスを誇るRAID1+0に進化させることができる。
これも覚えておいて損はないだろう。
単純なスパン構成でも、後から冗長化できる(2:追記)
追加するデバイスなんかネエヨ!って方のためには、copies プロパティの変更をお勧めする。
何が起こるかって言うと、ZFSが書き込むブロックのコピー保持数を指定できるのだ。
なのでコピー=2とすれば複数のデバイス間で同一のブロックを2つ持ってくれるというわけ、hadoopにもこんな機能あるね。
このように設定しよう。
# zfs get copies tank
NAME PROPERTY VALUE SOURCE
tank copies 1 default
# zfs set copies=2 tank
# zfs get copies tank
NAME PROPERTY VALUE SOURCE
tank copies 2 local
これで一応冗長構成になった、容量は半分になるけどな。
ミラーと違うのは、ミラーがどれだけデバイスを追加しても容量が大きくならないのと違い、デバイスを追加したらその半分だけ容量が増えていくことかな。
思いったったら即、実質ミラーリングが可能だ、
デバイスたくさんのZpool
悩むところだが、Log,cacheを入れたら・・・
logをミラー、cacheを複数、dataはRAIDZ以上の複数スパン(または1+0構成)がいいかなあ。
こんな感じ?あくまで一例ね。
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
c4t0d0p0 ONLINE 0 0 0
c4t1d0p0 ONLINE 0 0 0
c4t2d0p0 ONLINE 0 0 0
c4t3d0p0 ONLINE 0 0 0
c4t4d0p0 ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
c4t0d0p1 ONLINE 0 0 0
c4t1d0p1 ONLINE 0 0 0
c4t2d0p1 ONLINE 0 0 0
c4t3d0p1 ONLINE 0 0 0
c4t4d0p1 ONLINE 0 0 0
raidz1-2 ONLINE 0 0 0
c4t0d0p2 ONLINE 0 0 0
c4t1d0p2 ONLINE 0 0 0
c4t2d0p2 ONLINE 0 0 0
c4t3d0p2 ONLINE 0 0 0
c4t4d0p2 ONLINE 0 0 0
raidz1-3 ONLINE 0 0 0
c4t0d0p3 ONLINE 0 0 0
c4t1d0p3 ONLINE 0 0 0
c4t2d0p3 ONLINE 0 0 0
c4t3d0p3 ONLINE 0 0 0
c4t4d0p3 ONLINE 0 0 0
logs
mirror-4 ONLINE 0 0 0
c4t0d0p4 ONLINE 0 0 0
c4t1d0p4 ONLINE 0 0 0
cache
c4t2d0p4 ONLINE 0 0 0
c4t3d0p4 ONLINE 0 0 0
c4t4d0p4 ONLINE 0 0 0
ちなみにこれ、コマンド一発で構築可能だ。
ZFS特集でした!
いくら仕事でIT関係をやっているといっても、いざ家庭に導入となると困る。
仕事でやってるからなおさらといおうか。ハンパにネット社会を見慣れていると、ネットの嫌なところが先に立ってなかなか上手くできると思わない。
しかし何時までもそんなことは言ってられず、”互いの”リテラシを向上しなければと思い、以前立ち読みして以来気になっていた書籍を買ってきた。
いやぁコレ、すごくいい本だと思うよ。紹介する俺がアルファブロガーでなくて申し訳ないくらいだ。
なんというか必死?守ること、教えることに必死な感じが書かれているのがいい。
こういうジャンルで他の物は少ししか見たことないので褒めすぎかもしれん、もう数年すれば世界もだいぶ変わってるかもしれんが、家庭内でITの事が分かるのが自分ひとりという状況のお父さんは読んでおいて損はないんじゃないか。
自分なんかはもうすぐ子世代の使う端末・リテラシについていけなりそうだが、それの巻き添えで子のIT活用を出遅れさせるのもつらいしね。
http://blogs.itmedia.co.jp/kenjiro/
この本の内容は著者のブログ↑でだいたい読めるっぽいんだが、やっぱり紙がいいんだよな。
以前ちょと入用でCDから起動するGrubのイメージをつくった。
また必要になって作ったので、もうここに置いておこう。
バージョンは0.97、lvmとかext4とか言わなければだいたい役に立つだろうと。
http://sawano.members.icraft.jp/wpa/wp-content/uploads/grub097.iso
G/Wにちょっと部屋を片付けたよ。
で、整理整頓と言えばラベルプリンター、一家に一台くらいあるだろう。キングジムのTEPRA(テプラ)とかCASIOのNameLand(ネームランド)とか。
経緯を省くが色々あって自宅のWindwosが 64ビット版Windows7しかなくなりました。
それでNameLandを使おうとしたら64ビット対応のドライバないんですって。
うちのNameLandはKL-E20、PCがなければラベルプリントできない!
しかし、困ったところの救いの手が、Windows XP Modeだ。
Windows XP Mode のダウンロード
http://www.microsoft.com/japan/windows/virtual-pc/download.aspx
母艦であるWindows7微妙に統合されたWindowsXP on VirtualPCがインストールされる。アプリケーションのみの使用も可能だ。
かくして無事にラベルのプリント環境は維持された。
他にも無線アダプタをルータにする系のデバイスとかもXPModeで動作確認取れてるみたい。
XPとの互換でWindows7への乗り換えを躊躇している人、XP Modeがあるから何とかなるぞ。
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充実しないかなー
性懲りもなく python なぞに手を出し始めていますが、初期モジュールにHTTPサーバがいくつか入ってます。
その中にWEBサーバがあるんですが、これに驚いた。
python -m SimpleHTTPServer
Windowsでもいいし、Linuxほかでもいい。この一行でカレントディレクトリをルートにしたWEBサーバがあがる。

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

ちゃんとカレントのディレクトリリスト※が出ている、(起動したユーザのアクセス権によるが)もちろんブラウザやWgetからダウンロード可能。
※ index.html があったら優先される。
設定やら色々追加することでCGIにもなったりしてかなり使いでがあるようだが、とりあえずこれだけすればwget,ブラウザですぐファイルを運べるので覚えとくと便利。
相手が iphone とかでもいいんだよね。
覚えておけ!いいからPythonいれとけ!
XenでVM起動するときに、組み込みのVNCを使うことができる。
Qemuのライブラリ使ってるとか何とか。
しかし、適当に順仮想で導入したCentOS5.4では、起動と同時にVNC接続できるのはいいんだがペンギンしか見えない。
DISPLAY情報とか起動シーケンスの文字が流れなくて実に寂しい思いをしたので出す方法を探ってみた。grub.confの書き換えでOK。
grub.conf をみたら デフォルト起動になっているセットのカーネルオプションに、
(略) console=xvc0
の記述が。
なるほどね、Xenの consoleコマンドで入る仮想端末にはちゃんと名前があって、それを指定していたのか。
ということでこれを丸ごと削除。
無事にVNCクライアント上で起動終了の様子が流れるようになった。
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 の違反が起きちゃうんだよね。
この制限解除はどこでやるんだ?できると助かる、サーバ側で指定できるといいんだがなあ。
追記
やっぱクライアント側か。。
以前のもので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のスクリプトが入る。
- fail2ban.conf:基本の設定
- 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秒間隔見てるね、まー十分だろう。
他にも各種サービス用の設定がプリセットされていた、使いやすいツールの一つとして覚えておこう。
