ラベル WindowsServer の投稿を表示しています。 すべての投稿を表示
ラベル WindowsServer の投稿を表示しています。 すべての投稿を表示

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月8日月曜日

Hyper-V上のCentOSをyumで最新のカーネルを入れてみる

普通に入れたら起動しないし、前回記事みたいにオプションを変更しても無理だった。
 

http://08thse.blog87.fc2.com/blog-entry-185.html
を見て、Genericの下の、RCU Subsystem あたりで調整。
CONFIG_SYSFS_DEPRECATED_V2=y
になるように。
 
 

画像:最新カーネル on Hyper-V
 

一応起動したが、Hyper-V用の追加機能が入れられなかった。
これじゃあちょっと使いもんにならない気がするので、yumで入れたバージョンに戻した。
カーネルとドライバ、どっちのせいで入らないのかなあ。
 

Hyper-V上のCentOSをyumでカーネルアップデート

したら次回起動で止まる。
 

性格にはvmbusを有効にすべく、追加機能をインストールしている場合に止まる。自動で追加されるオプションの影響みたい。
 


追加機能導入後の状態でyumからカーネルをアップデートしてしまうと、 起動時に switchroot の所で新しいルートをマウントできずに止まっちゃう。
 


いったん grub.confでカーネル指定のオプションから
hda=noprobe hdb=noprobe
を消したらOKだった。


マトモに起動したら、追加機能を改めてインストールすればよろし。

2010年1月7日木曜日

Windows上でcactiのpollerにspineを使うときのspine.conf

メモエントリ
 
 

WindowsでIIS+php+MySQLでCactiをセットアップして、pollerにspineを使おうとしてもデフォルトでは駄目。
 

spine.conf を見ると接続先 MySQLサーバ(host)の指定がlocalhostとなっており、そのままだとspineの仕様でunixソケットがないよといわれてこけるのだ。
 
 

127.0.0.1に変えるとよい。
 

2010年1月6日水曜日

Cactiでグラフが出ない -やたら長いOIDだとグラフ作成に失敗する-

CentOS5.4にyumでCactiを入れまして、Windowsサーバのネットワークトラフィック状況をグラフにしようとしたんだ。
 

しかし特に何も考えずにそのまま使おうとすると、SNMPクエリでOIDの一部をインデックス扱いするもののうち、その一部が255文字を超えるものはグラフ化出来ないので少々調べてみた。
 

ちなみにどういう場合に該当するかというと詳しい内容は省くが結構ある。
WindowsServer2003だと、NICのQoSを有効にしたらフレンドリ名が「(NICの名前)+パケットスケジューラ ミニポート」となる、この日本語がやたら曲者。
 
WindowsServer2008ではQoSを有効にしても英字で文字列が追加されたりと良くなっているが、もNIC周りをちょっといじればすぐフレンドリ名が長くなる。
突然「ローカル エリア接続 - 仮想ネットワーク」とかいうフレンドリ名が出来たりと余計になかなか。。。
 
 

結果、それがOctetStringでIOD一部として使われるとあっという間に長いOIDが完成。
 

SNMP Informantを使ったときにはそれがそのままインターフェイスの識別符号になるため困ってくるのだ。
せめて物理アドレスなりをインデックスにさせてくれればよいものを、SNMP Informantは最小限しかMIBを定義していない。
 

まあこんな感じになっちゃうのよね。
SNMP Informantでは networkInterfaceTable 以下のNetInstance(.1.3.6.1.4.1.9600.1.1.3.1.1) に続くOctetStringを各インターフェイスのインデックスとして使う。
 

「Microsoft Loopback Adapter」 ならこう。
 
netInstance.26.77.105.99.114.111.115.111.102.116.32.76.111.111.112.98.97.99.107.32.65.100.97.112.116.101.114
最初の26で文字数、後はASCIIなり。cacti用にインデックスとして扱える部分は77以降、94桁だね。
 

これ以降のOID、netBytesTotalPerSec とかでは末尾の文字列を参照しつつ、「Microsoft Loopback Adapter」 のものだと識別するわけだが。
 
 

これが「ローカル エリア接続* 2」(だと思う) ならこう。
netInstance.31.4294967267.4294967171.4294967213.4294967267.4294967171.4294967228.4294967267.4294967170.4294967211.4294967267.4294967171.4294967211.32.4294967267.4294967170.4294967208.4294967267.4294967171.4294967210.4294967267.4294967170.4294967202.4294967270.4294967182.4294967205.4294967271.4294967222.4294967194.42.32.50
 
インデックス用には300桁もいるじゃねーかよ!!
 
 


さてここらでCactiのグラフについて。
 

冒頭で説明した環境ではインデックス部になぜか 255桁しか入りません。つまり「New graph」作成の段階で桁が落ちちゃう。
これではそれ以降のSNMPクエリが出来ない(指定したOID+桁落ちしたインデックス用の数字でクエリ=UNKNOWN)ので、まったく値がrrdに突っ込めない。
 
 

これをインデックス扱いして使うにはMySQLでCactiテーブルの改造が必要だったのでその個所をメモっておく。
 
 

まずは[poller_item] のarg1,arg2,arg3。
ここのarg1にインデックスを入れるようになってるんだけど、これがTEXT型なのに255文字で切れている、切れたOIDが入っていたので多分ここだ。
細かい理由は調べてない、UTF8だからとかバッファ容量の関係とかそういう理由かな。。
MySQLのTEXT型の説明を少し見たけどややこしいのでよくわからん。
 

とりあえず全部varchar(512) に変えてみたら、グラフの設定はきっちりできた。
 
 

これ以降はどこをやればいいかはっきり調べてないが一応触った個所を。[poller_item]を最後に気付いたので、それまで結構いじってしまった。
もしかしたら後はまったくいじらなくてもいいかもしれないが、[data_local] ,[poller_reindex]あたりは怪しいかな。
 


  • [data_local] の [snmp_index] が varchar(255) だったので512にした。


  • [graph_local] の [snmp_index] が varchar(255) だったので512にした。


  • [host_snmp_cache] の[snmp_index] が varchar(255) だったので512にした..かったけどキーだったのでUTF8のままでは1024バイトの制限を超えちゃう。
    しかたないのでUTF8を諦めラテンにした。


  • [poller_reindex] の[arg1] が varchar(255) だったのでラテンで512。




 

とりあえずこれだけやればOKだった。
どれが必要かはちょっと精査してないが、もしも同じ悩みを持った人がいたら参考にしてちょ。
 
 

それにしてもMySQLのTEXT型は定義がややこしいな。
 

2010年1月4日月曜日

「Microsoft Web Platform Installer」を使ってWindowsにWordpressをインスト ール

検証用の WindowsServer2008 に Wordpressを入れてみようと思ったのです。テンプレート制作用ね。
 

FastCGIにphpを入れてー Mysqlを入れてー と手順を考えていたのだが、「Microsoft Web Platform Installer」 を見たらWordpressがラインナップされていた。
 
[caption id="attachment_1638" align="alignnone" width="758" caption="画像:WPI2.0アプリ選択画面"]画像:WPI2.0アプリ選択画面[/caption]
 
 

ちょっと興味があったので使用してみることに、どうなるんだろうか。
 


依存関係でインストールするソフトの一覧が表示される。
 
[caption id="attachment_1639" align="alignnone" width="700" caption="画像:Wordpress依存関係1"]画像:Wordpress依存関係1[/caption]
[caption id="attachment_1640" align="alignnone" width="700" caption="画像:Wordpress依存関係2"]画像:Wordpress依存関係2[/caption]
 

おお、MySQLがある。Rewriteとかもいるなあ。
ちなみにWindowsの状態は、CGIを有効にしたIIS7を入れただけでかなり素だ。
 
 


その後必要パッケージのダウンロートとインストールがはじまる。
 
mysqlがインストールされるのでroot@localhostのパスワードを聞いてくれる、なかなか気が利いているね。
 
[caption id="attachment_1641" align="alignnone" width="700" caption="画像:Mysqlインストールの設定"]画像:Mysqlインストールの設定[/caption]
 
 
そしてしばらく待つと。。。
 
[caption id="attachment_1642" align="alignnone" width="700" caption="画像:インストール中・・・"]画像:インストール中・・・[/caption]
 
 

Wordpressのインストール設定が始まった!
 
[caption id="attachment_1643" align="alignnone" width="700" caption="画像:Wordpress固有設定1"]画像:Wordpress固有設定1[/caption]
[caption id="attachment_1644" align="alignnone" width="700" caption="画像:Wordpress固有設定2"]画像:Wordpress固有設定2[/caption]
 
 

意外とスゴい、初期設定に必要なことは一通り聞いてきて、丁寧に作られているなあと思う。ここではさすがに色々入力する必要があるのでちゃんとやろう。
SQLServer2008も入れてるんだが、さすがにDB選択のリストにはないな(^^
 
 

で、完了と。
 
[caption id="attachment_1645" align="alignnone" width="700" caption="画像:WPI2.0完了画面"]画像:WPI2.0完了画面[/caption]
 
 


IEでwordpressにアクセスすると初期画面。
 
[caption id="attachment_1646" align="alignnone" width="763" caption="画像:Wordpress初回アクセス"]画像:Wordpress初回アクセス[/caption]
 
 

ブログを表示したらちゃんとされる。
 
[caption id="attachment_1647" align="alignnone" width="779" caption="画像:ブログ表示"]画像:ブログ表示[/caption]
 
 

実に楽ちんだ、、phpもmysqlも特に何も考えることなく導入されてしまった。
これは世話焼きすぎだろうに。。。と思う反面、WEBアプリなんてこうあるべきだよねーという気もする。
 

ほかにもjoomla!やXOOPSCubeLegacy(なんとホダ塾ディストリビューション)などをはじめ、wikiなんかも自動でインストール可能な様子。
アップグレードとかはどうすんだろとか気になる点もあるが、「Microsoft Web Platform Installer」は凄いな。
 
 
 

ついでにrewriteモジュールの存在をチェック。
 
[caption id="attachment_1648" align="alignnone" width="609" caption="画像:Rewriteモジュール確認"]画像:Rewriteモジュール確認[/caption]
 
 

ちゃんといるね、web.configに設定をすることでWordpress側で指定するパーマリンクの変更も出来ることを確認した。
 

つうかwordpress側もIISで動いていることを判断するんだなあ、パーマリンクの変更画面でちゃんとweb.configを指定して、なおかつXMLを表示してくれる。
 
[caption id="attachment_1649" align="alignnone" width="820" caption="画像:パーマリンク変更画面、rewrite指定"]画像:パーマリンク変更画面、rewrite指定[/caption]
 
 

ちょっと目を離すと進歩している、油断できんなあ。
 
と思いつつ、素のwindowsだったので「web.config」ファイルを作成したつもりが「web.config.txt(※拡張子表示なし)」というテキストファイルが作成されて『あれ、Rewrite動かん。。??』とか思ってしまった。
Serverの拡張子(=ファイル名の一部を) デフォルトで隠してどーすんのよと。そっちは感心できない。
 
 

2009年12月25日金曜日

CactiからWindowsの情報を、ありものだけでグラフ化してみる

cacti のグラフが美しいので、普段やらないWindowsのSNMPから情報をグラフ化してみた。
 
 


なんかcactiはネットワーク機器とLinuxを見るような印象だったが、有りものだけでWindowsの情報を結構取れる。
実際どのくらいとれるのか紹介しとこう。
 



Windows側で仕込み


Cactiたっぷり情報取るには、標準のSNMPに加えてサードパーティ製のSNMPプロバイダを入れるといい。


 

有料版・無料版とあって、無料版ではCPU,メモリと論理HDDなどのパフォーマンスカウンタの情報を取ってくれる。
 

mibで見るとこんな感じ、これは頼もしそうな項目。。
 
[caption id="attachment_1625" align="alignnone" width="515" caption="画像:mibブラウザより"]画像:mibブラウザより[/caption]
 

有料のはほとんどのパフォーマンスカウンタオブジェクトに対応している、開発しんどいし買ってもいいくらい。
 
インストール要件は簡単、Windows標準のSNMPさえ入れておけばOK。
サーバ側の準備はこれでOK。
 
 



CactiにWindows用のテンプレートを追加


まあ色々あるけど、とりあえず良い感じなのを2つ。
 

さっきの「SNMP Informant」で追加されたMIBをゴリゴリ取ってくるテンプレート。

※最後の方の発言からZIPをダウンロードしよう。
 

特定プロセスのCPU・メモリ使用量をグラフ化する、まあおまけで。

 


これらを添付の手順に沿ってサーバにUP&インストール。
データクエリはサーバの "(cactiパス)/resource/snmp_queries" に、テンプレートはCactiの管理画面から入れよう。
Cactiの準備もこれでOK。
 
 


じゃあWindowsの状態をグラフにする


ここまでの準備を元にホストテンプレート、デバイス追加してデータクエリを軸に「Create New graph」するという作業になるけど割愛。
ではありものをぺたぺた貼って、このくらいグラフ化出来るよというSSをどうぞ。
 

でっかいので注意してくださいねー
 
[caption id="attachment_1626" align="alignnone" width="150" caption="画像:大きさ注意グラフ(627 × 9067)"]画像:大きさ注意グラフ(627 × 9067)[/caption]
 

結構とれてるでしょ?今回SSの相手は『WindowsServer2008R2 x64』だったが、2003(確認済)や2000(らしい)もOKだ。
 
 


Cactiでカスタマイズは結構ややこしいのだが、手軽にこれだけの情報がとれるといいね。
 

2009年12月14日月曜日

WindowsServerのサービスをSNMPで監視する

Windowsには標準でSNMPサービスが付いている、それを利用して特定のサービスが起動しているかどうかをチェックしよう。
 
 


タスクスケジューラは外部監視しかない


まず何故にいきなりSNMPで監視なのか、に触れておく。
 

私はよく定期的なサービスの監視を仕込んだりする、前に書いたASP.NETアプリケーションプールの監視もそうだった。
 

だがつい最近、タスクスケジューラが止まってるという馬鹿げた自体が発生した、これが止まると内部監視がほとんど止まるじゃないか!
原因とかはとりあえず後だ、こいつを見張るにはどうしたらいい?
 
 

内部監視であれば一定時間...1時間毎とかに生存をメールで通知するか?馬鹿な。止まった時にならない鈴に意味は無い。「そういえばしばらく通知が来ていない?」なんてトリガは存在してはならない。
常駐プロセスか?まずそれが止まるかもしれんだろうが。
選択は自ずと外部監視に限られる。
 
 


外部というとWMIで見る...135番ポートほかを開けるか?悪くはないんだが130番台にいい思い出をもつ管理者はいないのではないか、出来れば空けたくないだろう。
 

そこでSNMPを調べてみた、WMI関連のポートを開放するよりマシだろう。
結論を言って置けば、サービスの監視は可能だ、ただちょっと嫌な仕様だ
 
 


WindowsServerのSNMPの紹介


WindowsServerでSNMPを使うのは簡単だ、コンポーネントの追加とか機能の追加と呼ばれているやり方でセットアップしてやるといい。
 

[caption id="attachment_1616" align="alignnone" width="476" caption="画像:SNMPのRead許可"]画像:SNMPのRead許可[/caption]
 


トラップが送りたければ 『evntwin.exe』 などを立ち上げて通知したいイベントを設定しよう。
 
[caption id="attachment_1617" align="alignnone" width="618" caption="画像:evntwin.exeの設定例"]画像:evntwin.exeの設定例[/caption]
 

詳しくはやってないが、eventcreate.exe で動作確認をしてみた。ちゃんとトラップきてるでしょ?
 
[caption id="attachment_1618" align="alignnone" width="655" caption="画像:トラップテスト"]画像:トラップテスト[/caption]
 


SNMPの標準的なトラフィック取得、ホストステータス取得は出来るから、Cactiでパフォーマンスをグラフ化するなり、トラップでNagiosのパッシブチェックからアラートするなりしたらいい。
 
 

SNMPで取れるWindowsサービスの内容


ではSNMPクライアントから確認できるWindowsサービスについて。
 

WindowsのSNMPをセットアップすると、%SYSTEMROOT%System32\ の下あたりにMIBがいっぱいできる、その中のLanManager用のMIBにWindowsサービスの情報がある。
ファイル名は『lmmib2.mib』だ。
 

その中から svSvcName を取ってみよう、
 

svSvcName.6.83.101.114.118.101.114 Server OctetString
svSvcName.8.72.84.84.80.32.83.83.76 HTTP SSL OctetString
svSvcName.9.69.118.101.110.116.32.76.111.103 Event Log OctetString
--snip--
svSvcName.14.73.80.83.69.67.32.83.101.114.118.105.99.101.115 IPSEC Services OctetString
svSvcName.14.84.97.115.107.32.83.99.104.101.100.117.108.101.114 Task Scheduler OctetString
svSvcName.15.82.101.109.111.116.101.32.82.101.103.105.115.116.114.121 Remote Registry OctetString
svSvcName.15.83.101.99.111.110.100.97.114.121.32.76.111.103.111.110 Secondary Logon OctetString
svSvcName.16.67.111.109.112.117.116.101.114.32.66.114.111.119.115.101.114 Computer Browser OctetString
svSvcName.16.72.101.108.112.32.97.110.100.32.83.117.112.112.111.114.116 Help and Support OctetString
--snip--
svSvcName.37.65.112.112.108.105.99.97.116.105.111.110.32.69.120.112.101.114.105.101.110.99.101.32.76.111.111.107.117.112.32.83.101.114.118.105.99.101 Application Experience Lookup Service OctetString
svSvcName.40.87.105.110.72.84.84.80.32.87.101.98.32.80.114.111.120.121.32.65.117.116.111.45.68.105.115.99.111.118.101.114.121.32.83.101.114.118.105.99.101 WinHTTP Web Proxy Auto-Discovery Service OctetString

 

Windowsで使われているサービスがずらずらと出てきたろう、その中で Task Scheduler のステータスを取るとしたら『svSvcOperatingState』を参照する。
 

svSvcOperatingState.14.84.97.115.107.32.83.99.104.101.100.117.108.101.114 active Integer
 

ほれ、アクティブだ。起動しているってことだ。
 
 


『svSvcName.14.84.97.115.107.32.83.99.104.101.100.117.108.101.114』 がなんでイコール『Task Scheduler』やねんと思うかもしれないが、それはOctetStringだからだ。
 

数字の最初の14は文字列長を表し、このあと14バイトの文字ですよーというのを表している。
そこから続く『84.97.115.107.32.83.99.104.101.100.117.108.101.114』はASCIIコードで変換してくれ...
 

ほら『Task Scheduler』になった、なったろ?
 
 



じゃあサービスの監視をしましょう


さて、サービス状態と思われる、『svSvcOperatingState』の取りうる値はこうだ。
 

svSvcOperatingState OBJECT-TYPE
SYNTAX
INTEGER {
active(1),
continue-pending(2),
pause-pending(3),
paused(4)
}

 


これの変化を取ればいいと思うじゃん、普通にscコマンドとかだとこのまま1-4のステータス取れるし。
1なら正常、2-4は異常として管理したい、したいんだけど。。。
 
 


それがさあ、サービス止めると消えちゃうんだよねこのオブジェクト。
このOID叩いても、何も帰ってこないというかそんなOID見つからないって言われるんだ、冗談きついぜ。
 

当然『svSvcName』のほうも空っぽさ、仕方ないからステータスがUNKNOWNならサービスが止まっているという情けない監視になっちゃう。
 

この仕様はいただけない、いただけないよMicrosoft。改善提案はどこに出したらいいんだい?
それともLanMagnagerではそうするって決まってたのかしら、それはちょっと。。。
 
 



まあ当初の目的は達成されました、この仕組みで立派にWindowsサービスの監視はできますと。
多少不本意ですがUNKNOWN拾ってアラート上げましょう。
追記:サービスの状態が変更されてからSNMPで取れる値が変化するまで2-3分かかる、監視対象によっては少しネックか。
 

まあどうしても外部から見たいのって、タスクスケジューラとファイアーウォールくらいかな。
 
 




追記:
「.1.3.6.1.4.1.119.2.2.4.4.16.2.2.1.2.1.2」なら全サービスが登録されている事を発見、こっちがいいのかも知れない。
だがOIDがサービス名に依存してないので、構成変わるとOIDも変わりそうでこまる。
むむ。。
 
 

2009年12月8日火曜日

PowershellでWassrの発言を取得(RSS)してはてなダイアリーに投稿する

というスクリプトを書いた、wassr結構早くログ消えちゃうみたいだしね。
ちょっと乱暴かつ適当な切り貼りをしたんだけど、元がどこだったか。。MSのサイトは結構みたな。
 

仕組み的には自分の発言のRSSを取ってきて、メールにしてはてなダイアリーに投稿する、というもの。
RSSでは20件しか取れないのでヘビー発言ラー向けではないが。
 

とりあえず成功してるもよう⇒http://d.hatena.ne.jp/sawano_hat/
 
 

これをWindowsのタスクに登録して、12時の鐘と同時に起動すればOKさ。
 

[sourcecode language='sh']
# wassr timeline sender
# 2009/12/07

[String]$wassrapi = "http://api.wassr.jp/statuses/user_timeline.rss"
[String]$wassrid = "自分のID"

[String]$smtp = "送信に使うsmtpサーバ"
[String]$port = "smtpポート"
[String]$to = "はてなのメール投稿用アドレス"
[String]$from = "wassr2hatena@example.com"
[String]$user = "SMTP認証ユーザー"
[String]$pass = "SMTP認証パスワード"


# HTTPリクエスト
$webReq = [Net.HttpWebRequest]::Create($wassrapi + "?id=" + $wassrid)
$webRes = $webReq.GetResponse()
$sr = New-Object IO.StreamReader($webRes.GetResponseStream(), $webRes.ContentEncoding)

# レスポンスのRSSをXML型の変数に
[xml]$content = $sr.ReadToEnd()


# 読み込みクローズ
$sr.Close()
$webRes.Close()

# 昨日の日付作成
[DateTime]$yesterday = (get-date).adddays(-1)
$body = "http://wassr.jp/" + $wassrid + "`n`n"

# RSSから発言単位でFroeach
foreach ($item in $content.rss.channel.item){

# 発言の日時を取得
$itemdate = [DateTime]$item.pubDate

# 発言の日時と昨日の日付を比較して、等しければメールボディに
if ($itemdate.Date -eq $yesterday.Date) {
$body = $body + ":[" + $item.link + ":title=" + $itemdate.DateTime + "]:"
$body = $body + $item.title + "`n"
$body = $body + "`n"
}
}

#サブジェクト作成
[String]$subject = "Wassr " + [String]$yesterday.Year + "/" + [String]$yesterday.Month + "/" + [String]$yesterday.Day + " の発言"

#メール準備
$mail = New-Object Net.Mail.MailMessage($from, $to)
$mail.Subject = $subject
$mail.Body = $body
$mail.SubjectEncoding = [Text.Encoding]::GetEncoding("ISO-2022-JP")
$mail.BodyEncoding = [Text.Encoding]::GetEncoding("ISO-2022-JP")

#メール投稿
$sc = New-Object Net.Mail.SmtpClient($smtp)
$sc.port = $port
$sc.Credentials = New-Object Net.NetworkCredential($user, $pass)
$sc.Send($mail)
$mail.Dispose()
[/sourcecode]
 
 

はてなほったらかしだったんで、とりあえず役目ができてよかったよかった。
 



追記:折角だから日付のところをリンクにしよう。
修正した。

2009年11月30日月曜日

Hyper-V上のCentOSで再構築したカーネルがパニックで止まる

Hyper-V上のLinux(CentOS5.4)をいじり始めているのだが、時計がいちいち早いのが多少なりとも気に食わない。
ということで、有効そうな手段の一つである、カーネルのタイマー割りこみタイミングを1000HZ⇒100HZにしたいと思って再構築をすることにした。
前回の clock=pit だけではまだちょっと早いからね。
 
 


適当に見つくろったこちらの情報を参考に、カーネルを再構築。
>> CentOSのカーネル再構築 - adsaria mood
 

menuconfigのところで割り込みを100HZに変更して新しいカーネルとinitrdで起動してみた。
 

しかし・・・
 
[caption id="attachment_1598" align="alignnone" width="648" caption="画像:カーネルパニック"]画像:カーネルパニック[/caption]
 

カネパ(カーネルパニック)だと?
つーかHDD見えてないやん...これはinitrdの中身がまずいんだよなあ。
手順たらないとかかな?
 
 

原因探しはもうちょっと先でやろう、時刻ずれの応急処置としてはやっぱりntpdateだよな。
 
 
 

仕方なくホストOSのWindowsServer2008をNTPサーバに仕立て上げて5分おきにntpdateする。
これやりたくないんだけどなあ、5分おきのntpdate。。
 

WindowsServer2008 のNTPサーバ化は簡単、レジストリを少々いじる。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config\AnnounceFlags
5 に
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer\Enabled
1 に


こんだけ、レジストリを書き換えた後、w32timeを再起動すればOK。
 

少し注意なのは、Hyper-Vではゲストを立ち上げるとそこから見たローカルタイムはWindowsの時間になる。
⇒Windowsが日本時間(UTC+9)で動いてたら、ゲストの基準はそこになる。
ゲストは『UTC+9=UTC』と見てしまう。
という解釈なのかな?とにかくゲストのタイムゾーンを+9にしようもんなら、システムのタイムゾーンは外から見てUTC+18という時間になっちゃう。
 
 


それはいいんだけど、今度はntpdateで問い合わせたら、Windowsは普通にUTCを返す
 

ゲストの時間をUTCにしておく⇒ntpdateで問い合わせたら9時間ずれる。
ゲストの時間をUTC+9にしておく⇒ntpdateで問い合わせる前の時間が9時間ずれている。
 

というなかなか悲しい事態になる、なんじゃいこれは。。
どこに改善要望だしたらいいのか。。『ゲストのhwclockをUTCにしてください?』
ここに書いても拾えないだろうから何処かで受けてほしいなあ。。
 
 

で、結局後者で動かし中。
ntpdateは5分おきなので、起動の瞬間から5分程度だけUTC+18で動いてしまう。
 

ぐぬぬぬぬ。。。
 
 

そのうちカーネルのタイミングを100HZにして、ntpdを動かしたいなあ。
 



カーネルパニックの回避方が判った。
http://sawano.members.icraft.jp/wp/2010/02/07/1666.html
grub.confを編集してね。

2009年11月28日土曜日

Hyper-V上のLinux(CentOS)の時間が早く進むのを何とかしたい

Hyper-VにCentOS5.4を導入してみたが、どうにもせっかちさん。時刻がえらく進む。
 
 

ということでMicrosoftの仮想PC用お勧め設定を実施してみた。
 

The system time runs too fast on a Linux-based virtual machine that is hosted in Virtual Server 2005 R2
http://support.microsoft.com/kb/918461/en-us


 

起動時のカーネルオプションに "clock=pit" を指定しなさいということで、設定の意味もリンク先に書いてある。
 
ちょっち引用。
# Programmable Interval Timer (PIT)
This clock has the following characteristics:

* This clock is set by using the clock=pit kernel parameter.
* This clock uses only the PIT counter for time interpolation.
* This clock uses the simplest of the available algorithms.
* This clock does not gain time because it does not use lost tick correction code.

 

...シンプルだ、ということなのかな。。
 
 

手順通りにgrub.confを修正する。
 
[caption id="attachment_1593" align="alignnone" width="648" caption="画像:grub.conf編集"]画像:grub.conf編集[/caption]
 

で、起動してからntpdateでホストOSと時刻を同期後、少し待って比較する。
 
[caption id="attachment_1595" align="alignnone" width="334" caption="画像:同期してから5分後くらい"]画像:同期してから5分後くらい[/caption]
 

もう結構ずれてる...これでも大分マシになっているのだけど。
これじゃあちょっと物足りないなあ。
 
 

ついでに、サーバ起動直後(ntpdなし)が不思議なんだよね。
 
[caption id="attachment_1594" align="alignnone" width="486" caption="画像:起動時のサーバ時刻"]画像:起動時のサーバ時刻[/caption]
 

なんでホストからさらに+9時間なんでしょうか。
+9時間っつったらインストール時にロケールで日本を選択してるんだけど、調整しておかないほうがイイのかな?
追記:仕様ののようなのでUTCを使うべしという助言をいただきました。
/usr/share/zoneinfo/UTC を /etc/localtime にもってきて変更。

 
 

さらに別の方法を試すので、上手くいったら後編に続く。
 
 



追記:
WindowsServerをNTPソースにするのはこちらを参照しました。
http://d.hatena.ne.jp/hidepon_mory/20071106/1207896724
 

2009年11月25日水曜日

CentOS5.4 に 『Linux Integration Components for Microsoft Hyper-V R2』を 導入

前回の続き、折角『Linux Integration Components for Microsoft Hyper-V R2』を探し当てたのでインストールしてみる。
 

やり方は簡単、インストーラはISOイメージの中にあるので、
CDをマウントして、
"./setup.pl driver" と唱えてみる。
 
[caption id="attachment_1585" align="alignnone" width="648" caption="画像:Integration Components その1"]画像:Integration Components その1[/caption]
 

kernel-devel か kernel-sourceがいると、さようか。
 


kernel-devel を yum から入れました。あと当然のようにgccもいる。
 

で、そのあとはCDROMの中身をローカルに移して作業する。
 
mkdir /opt/linux_ic_rtm
cp /mnt/* /opt/linux_ic_rtm -R
/opt/linux_ic_rtm/setup.pl drivers

 


という感じで実行する、書き込み権限があるところに移さないと失敗するのでCDROMからとりあえず場所をうつそう。
添付のPDF読んだらいいんだけどね。
 
 
[caption id="attachment_1586" align="alignnone" width="648" caption="画像:Integration Components その2"]画像:Integration Components その2[/caption]
 


えーと、本能の赴くままインストールしてしまったが、これでどうなるんだっけ...?
 

添付のReadmeを後から読んでみると、どうやら統合サービスが結構有効になる模様。
 
 

これでレガシでないネットワークアダプタが使えたり、ホストとの時刻同期、ハートビートがわかったりするのだな。
インストール後のメッセージにも、vmbusがつかえるだのE-IDE、SCSIとNetworkと書いてある、なるほどvmbus対応はイイネ。
 

あとVSCにも対応できるそうな、透過的に親パーティションの機能が使える?どういう効果があるのかしら、RAWディスクが直接使えたりするのか。
 
 


では普通のネットワークアダプタに接続し直して起動してみよう。
 
[caption id="attachment_1587" align="alignnone" width="648" caption="画像:Integration Components その3"]画像:Integration Components その3[/caption]
 


seth0ってなんじゃい、synthetic nic(ethernet) ってことか。
なんか、本腰入れて作ってる感があって驚いた、能天気にeth0とかで普通に上がってくるもんだと思った。
そうだよね、VMbusだもんな。ともあれ認識&使用もOK。よしよし。
 
 

さあインストールもとりあえず終わった、しばらくテストで動かしてみよー。
まだ時計は激しくずれっぱなしだけどね、ハートビートも見ちゃくれないし。 Integration Components だけじゃ駄目なのかな。
 

Microsoft Hyper-V R2にCentOS5.4をインストール

してみた。
 

特になんの苦労もなしにサクッと入った。
ネットワークは仕組み上、レガシーインターフェイスを選ばないと駄目だね。
 
[caption id="attachment_1582" align="alignnone" width="648" caption="画像:CentOS5.4 on Hyper-V"]画像:CentOS5.4 on Hyper-V[/caption]

 
 

さて、まあどうせ何もしなけりゃ時計がずれるんだよね、仮想の宿命というか。
ということでリリースされたり消されたりしていた『Linux Integration Components for Microsoft Hyper-V』を探しているんですが、誰か行方を知らんかねー
 
追記:
Connectからニュースグループを見たらリンクを教えてくれる人がいた、感謝。
Hyper-V R2 用の Linux Integration Componentsはココだ!
Linux Integration Components for Windows Server 2008 Hyper-V R2 - 日本語
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=c299d675-bb9f-41cf-b5eb-74d0595ccc5c


Microsoft Connect で探しても、肝心のISOイメージが見つからん。
 
 


しかし自宅で触る用のLinuxって何年ぶりだ??軽く10年はそんなことしなかった気がするなあ。
前のはカーネル1.2系だったか...
 
しかしよく見たらsshのクライアントも手元にない (^^;
環境なしなしだ。
 

2009年11月6日金曜日

ZFS上のiSCSIターゲットをサイズ変更、ディスクを拡張して使う(Windows NTFS編)

次のLinux ext3編とで前後編。
 

iSCSI経由でマウントしたドライブのサイズを変更して使うというお話。
 


ZFSでiSCSIターゲット


ZFS上にZFSボリュームと呼ばれる容量制限付きのボリュームを作成し、"shareiscsiプロパティ"をonにするとiSCSIターゲットとして利用できる。
 

お手軽高パフォーマンスで重宝するのだが、折角容量可変のZFSを固定容量で使っている気がして、少々もったいないと思っていた。
しかしそれが認識間違いだったのに気づいた、いくらでもサイズ変更出来てしまう
 
 


iSCSIターゲット中のZFSボリュームをサイズ変更


ZFSボリュームは一応普通のZFSファイルシステムとは扱いが違い、独自のプロパティを色々もっているうえOSにマウントされないためzfsコマンド以外では通常見えない。
 

"zfs list"で見るとちゃんと予約したサイズを確保しているので固定だと思い込んでいたが、"clone" とか "send&recv" とかすると利用中サイズが変わる。でもiSCSIでくっつけると見える上限は同じー
 

おかしいと思ってzfsボリュームのプロパティ一覧をみると、 "volsize" とかいうのがある。
どれどれ・・・
 
# zfs get volsize ziscsi/sawa01
NAME PROPERTY VALUE SOURCE
ziscsidev/sawa01 volsize 8G


なるほどZFSボリュームのサイズは単なるプロパティの一つであり、ハードクォータみたいな物なのか。
すっかりファイルをブロックデバイス代わりに使うような感覚でいたよ。
 
 

じゃあ早速、"set" で変更を試みる。

# zfs set volsize=16G ziscsi/sawa01
(特に出力なし・・何か言ってよ!)
# zfs get volsize ziscsi/sawa01
NAME PROPERTY VALUE SOURCE
ziscsi/sawa01 volsize 16G -


おお、変わっちまった、、、
乗せていたNTFSどうなんのよ!?
 
 

ちなみにテストはSolaris10、Zpoolのバージョン15で。
 
 


サイズ変更の瞬間、Windowsでは


サンプルはXP、Vistaみたいにパーティションをゴリゴリいじれないのでどうなるんだろう。。
 
 

まず8Gの時のマウント状況、Microsoft iSCSIイニシエータでZドライブにくっつけ&NTFSフォーマット。
 
[caption id="attachment_1553" align="alignnone" width="553" caption="画像:8GBのiSCSIディスク"]画像:8GBのiSCSIディスク[/caption]
[caption id="attachment_1554" align="alignnone" width="469" caption="画像:8GBのiSCSIディスク(2)"]画像:8GBのiSCSIディスク(2)[/caption]
※実際はSS取るために「8G⇒16G⇒8G」とやったZFSボリュームを使用(^^
 
 



これをZFS側で16Gに拡張するといったんLogoffされる、まあ安全な感じですね。
 
[caption id="attachment_1556" align="alignnone" width="553" caption="画像:iSCSI自動切断"]画像:iSCSI自動切断[/caption]
 
 

では、ログインしなおそう・・・
 
[caption id="attachment_1555" align="alignnone" width="408" caption="画像:MSのWIndows用iSCSIイニシエータ"]画像:MSのWIndows用iSCSIイニシエータ[/caption]
 
 

ディスクの管理を見てみる。
 
[caption id="attachment_1558" align="alignnone" width="553" caption="画像:16GBのiSCSIディスク"]画像:16GBのiSCSIディスク[/caption]
 


増えとるよー!うわー、あたりまえだけど生理的になんだか気持ち悪い。。。
 
 

後はまあ気を取り直して、適当にパーティション操作ソフトでいじるなり、Vista以降なら拡張するなりお好きなようにってところですね。
 

とりあえず手持ちで手っ取り早い方法としてダイナミックディスクにしてみる。
 
[caption id="attachment_1559" align="alignnone" width="553" caption="画像:ダイナミックのシンプルボリューム"]画像:ダイナミックのシンプルボリューム[/caption]
 

変換して追加、ちゃんと8GB ⇒ 16GB のボリュームになりましたね。
ダイナミックディスクって使ったことないけど、相手はZFS上の信頼できるデバイスなのでなんでもイイんです。
 
 

では後編のLinux(ext3ムリヤリ拡張)編に続くー
 
 

2009年10月31日土曜日

Hyper-V上のWindowsServer2003にVirtualServer2005を突っ込んでみた

タイトルの件を試してみた。
インストールまでは出来たが、仮想PC起動したらゲストの再起動が掛かりました。
 

試した環境。
ホスト:WindowsServer2008R2 Ent.
ゲスト:WindowsServer2003R2 Ent. x64 + VirtualServer2008R2SP1
 
 

うーん意外といけそうな感じがしたんだけど残念。

2009年10月30日金曜日

VirtualServer2005でNAT(NAPT)でゲストを接続、理論を(Hyper-Vで)実践編

前回の理論編で展開したVirtualServer2005でのゲストNAT(NAPT)接続について、どうせ全く同じことなのでWindowsServer2008R2+Hyper-Vの環境でやってみた。
まあ、WindowsServer2003+VirtualServer2005での環境がちょっとすぐに用意できなかったからともいう。
 
ちなみに用語がめんどくさいので、以降親パーティション=ホスト、仮想はゲストで。
 
 

要点をさっとおさらい


実践編はほぼ作業手順になっちゃうので要点だけおさらい。

  1. ホストにLoopBackAdapterを追加、ゲストとはそれで接続しローカルネットワークを形成

  2.  
  3. ホストにRRASをインストール、ルータとしてセットアップ

  4.  
  5. 物理NICを外部用、LoopBackを内部用にルーティング+NAPTで完成

  6.  

 

ではやってしまおう。
 
 

ホストの準備


RRASをインストールする、役割追加の「ネットワークポリシーとアクセスサービス」から。
 
[caption id="attachment_1531" align="alignnone" width="540" caption="画像:RRASの役割追加"]画像:RRASの役割追加[/caption]
 
 

LoopBackAdapterをインストールする、2003ならハードウェア追加と削除、2008はデバイスマネージャの「操作」からレガシハードウェアの追加(※PCを選んでないと出てこない)をする。
 
[caption id="attachment_1532" align="alignnone" width="540" caption="画像:LoopBackAdapter追加"]画像:LoopBackAdapter追加[/caption]
 

追加できたらIPアドレスを振っておく、あくまでプライベートネットワーク用なので、外用とサブネットが被らないように。
 
[caption id="attachment_1533" align="alignnone" width="400" caption="画像:内部ネットワークのゲートウェイ"]画像:内部ネットワークのゲートウェイ[/caption]
 
 



ゲストが使うネットワークの設定


Hyper-V管理から、LoopBackAdapterを外部ネットワークとして構成する。
※これはVirtualServer2005でも出来るように合わせているだけで、Hyper-Vなら多分LoopBackの代わりは最初からついておりそちらを使ってもOK。
 
[caption id="attachment_1534" align="alignnone" width="300" caption="画像:仮想ネットワーク追加"]画像:仮想ネットワーク追加[/caption]
 


じゃあゲストにさっきのLoopBackをあてがおう。
 
[caption id="attachment_1535" align="alignnone" width="300" caption="画像:ゲストが使うNIC選択"]画像:ゲストが使うNIC選択[/caption]
 

ゲストの準備はこれでいいので、起動しておこう。
 
 


ゲスト⇔ホスト間の疎通を確認する


ゲストを起動し、ホストでLoopBackに当てたサブネットで適当なIPアドレスを振り、通信できるか試してみる。
 

PINGを打ったらFireWall切リ忘れで応答無かったので、telnet80 で疎通確認、OK。
 
[caption id="attachment_1536" align="alignnone" width="300" caption="画像:内部疎通確認"]画像:内部疎通確認[/caption]
 


では外部にPingが飛ばないことを確認しておく、現段階ではwww.google.comにpingを送ることが出来ない。
 
[caption id="attachment_1537" align="alignnone" width="300" caption="画像:届かないPING"]画像:届かないPING[/caption]
 


あとはマスカレードするだけだ。
 
 

RRASにNAPT付きルータのセットアップ


ホストに戻ってルーティング。
ウィザードで超簡単、2003だとどうだったかな?ウィザード無くても簡単には違いないが。
 


まずNATをえらんで、
 
[caption id="attachment_1538" align="alignnone" width="588" caption="画像:RRASその1"]画像:RRASその1[/caption]
 



最初にインターネットにつながっている側のインターフェイスを選択する。
LoopBackじゃないほうね。
 
[caption id="attachment_1539" align="alignnone" width="588" caption="画像:RRASその2"]画像:RRASその2[/caption]
 


次に内部のネットワークに接続されたインターフェイス、ここではもちろんLoopbackを選択と。
 
[caption id="attachment_1540" align="alignnone" width="588" caption="画像:RRASその3"]画像:RRASその3[/caption]
 


そのあと内部的にDHCPを有効にするか聞かれる。正直どっちでもいいがDHCPのほうがちょっと楽かな。。
 
[caption id="attachment_1541" align="alignnone" width="588" caption="画像:RRASその4"]画像:RRASその4[/caption]
 


以上でRRASがルータになった、ちょっと見てみよう。
 
[caption id="attachment_1542" align="alignnone" width="300" caption="画像:RRASセットアップ完了"]画像:RRASセットアップ完了[/caption]
 
まあ状況が判るくらいだけど。
 
 


ゲストよNATで出て行こう


さあ、仮設DHCPを有効にしたので、早速ゲストからrenew、DHCP discover だ。
 
[caption id="attachment_1543" align="alignnone" width="300" caption="写真:ゲストにIPアドレス自動付与"]写真:ゲストにIPアドレス自動付与[/caption]
 
IPもらえたー、これはまさにVirtulaPCでやるときのNATモード
 
 

ではGoogleにPING、
 
[caption id="attachment_1544" align="alignnone" width="300" caption="画像:届くPING"]画像:届くPING[/caption]
 
OK.
 

ちなみにデフォだと名前解決できなかったな、FireWallかなあ。
面倒なのでDNSだけ手動で入力。
 

で、WEBへ。
 
[caption id="attachment_1545" align="alignnone" width="480" caption="画像:幾重ものWindowに囲まれ、WEB表示"]画像:幾重ものWindowに囲まれ、WEB表示[/caption]
 
 

はいお粗末さまでしたー
 
 



おわりに


RRASはServer向けのWindowsにしかついてないかと思いきや、ちゃんとクライアントのXPやらにも付いている。
ただGUIがなくて、netshで頑張って設定しなきゃならないみたいだが。。
 
 


さてこれでIPが一個ありゃゲストの面倒はなんとかなるというのが確認できた。
ポートフォワードも出来るのでサーバとしての役割もバッチリ。
 

で、それだけでなく、グローバルIPの付与はホストに全部やって必要ポートだけゲストに渡す、という考え方もあるんだよね。
IPフィルタの一元管理、トラフィックのモニタリングと結構使いでがあったり。
 
 


この記事ではHyper-Vでやっちゃったけど、構成を理解すればVirtualServer2005でも同じことが出来るはずなので是非やってみよう。
 

2009年10月29日木曜日

VirtualServer2005でNAT(NAPT)でゲストを接続、理論編

VirtualServer2005の仮想NIC接続にはNATモードがない。
ここでいうNATモードは、とりあえずホストのIPでNAPT(Overload)し、外部接続を果たすという仕組みだ。
 

これが使えないということは、ゲストにIPアドレスを自由に振れない環境ではちと困る、そんな所でVS2005入れていいのかというのは置いといて。
で、そのNATモードをWindowsServerのRRASとLoopbackAdapterで疑似的にやってみようという試み。
構成を思いついて、ちょっと情報探してみて特に無かったので記事に。実は常識なのかもだが。。。
(追記:後で考えたら Hyper-Vでも同じ事ができそうだ)
 
 

VirtuaPC 2004/2007 でのNATモード


VirtualBoxとか、他の仮想化ソフトにもあるねNATモード。
外部との接続は下図のような感じになっている、大分はしょってはいるが概ねこんな感じだ。

[caption id="attachment_1527" align="alignnone" width="505" caption="画像:VirtualPC 2004/2007でのNAT接続のイメージ"]画像:VirtualPC 2004/2007でのNAT接続のイメージ[/caption]
 
この場合仮想に割り当てるIPはとりあえず気にしなくていい、内部の(これまた仮想)DHCPから適当に振られるから。
※ホストがゲストにIP経由でアクセスしたければ、LoopbackAdapterを追加するのがいい
 
 

VirtualServer2005でのよくある仮想NIC接続


VirtualServer2005になるとNATモードが無く、VirtualPCでも出来る下図のような接続形態になる。
[caption id="attachment_1528" align="alignnone" width="505" caption="画像:VirtualServer2005通常NIC接続のイメージ"]画像:VirtualServer2005通常NIC接続のイメージ[/caption]
 

これだと外部環境に接続するにはそのLANで有効なIPアドレスが必要だ。
DHCPサーバもない、IP勝手に振れない、またはグローバル環境だったりすると困るかな?困る。
 
「内部ネットワーク」っていう接続モードもあるが、外に出れない仮想スイッチにつながり、仮想PC同士が通信出来るだけで外部とつながるという目的は果たせない。
 
 




VirtualServer2005のための疑似NATモード


さて、本題の構成。
『疑似』としてるけど、至極真っ当にNAPTをやるので多分上手くいくと思うんだがなー
 

まずWindowsにもあるLoopBackAdapterをインストールする、やり方はMSサイトで。

 

そして標準で使えるルータ・ファイアウォール他のサービスRRAS(ルーティングとリモート アクセス サービス)をセットアップ。
 
 
したら下記のような環境が作れるはずなんだよね。
仮想PCが使うNICはホストでいうLoopBackAdapterになる、物理NICのほうは仮想にバインドしないので注意。
 

[caption id="attachment_1529" align="alignnone" width="505" caption="画像:RRASとLoopBackAdapterを使用した自前NAT"]画像:RRASとLoopBackAdapterを使用した自前NAT[/caption]
 

さて、これでIPやゲートウェイの設定を手動で入れてやれば、IPを複数貰うことなく仮想PCから外部に出ていけると思うんだが。。。
試せる環境が手持ちの資源で作れるようなら実践編へ続く