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

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月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で各種設定、アプリケーションインストール
 

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

Nagiosのプラグイン、check_multiを試す

Nagiosに一風変わったプラグイン、check_multiというのがある。主に通常のプラグインのラッパーとして利用する。
 

公式これかな?
http://my-plugin.de/wiki/projects/check_multi/start
 
 

基本的にはプラグインをまとめて叩くという使い方をする、他にも幾つかあるようだが。
 

まとめて叩くと何がいいかというと、Naigosの表示画面でまとめられたり、NRPE経由で呼ぶときに監視用のセッションが1つでよくなるなど挙げられる。
詳しいコンセプトは公式サイトに図入りで説明があるので、興味があれば参照されたし。
 
 



で、リクエストのやり方とレスポンスはこんな感じ。リモート相手の時はちゃんとホストを指定しよう。
 

コマンドラインから。
./check_multi -x “command [ procs ] = check_procs”-x “command [ load ] = check_load”

 

設定ファイルから
command [ httpd ] = check_procs -C httpd
command [ crond ] = check_procs -C crond


./check_multi -f configfile

 

レスポンスの例。
OK - 12 plugins checked, 12 ok
[1] httpd PROCS OK: 9 processes with command name 'httpd'
[2] crond PROCS OK: 1 process with command name 'crond'
[3] mysqld PROCS OK: 1 process with command name 'mysqld'
[4] ntpd PROCS OK: 1 process with command name 'ntpd'
[5] sendmail PROCS OK: 2 processes with command name 'sendmail'
[6] load OK - load average: 0.22, 0.13, 0.09
[7] dev_hda DISK OK - free space: / 57922 MB (83% inode=99%);


 

テストしてみたが、NRPE経由でもちゃんと動いた。
通知内容にもどのプラグインがどういう状態か載ってくるので心配ない。
 

ちなみにActionURLなど使って、NagiosのUIに統合出来るようになっているがそこまでやる事はないので、プラグインをコンパイルしたらそれだけ拾って使ってみてます。
 

結構いい感じだ。
 

2010年1月8日金曜日

VMware ESXi4 内にさらに仮想環境を構築するならスイッチはプロミスキャスモ ードで

仮想化を色々試しているなか、VMware ESXi4をベースにして、それ上に構築したVMにもハイパーバイザを入れるという環境を作ったときのメモ。
 

まあ載っけたのはXenなんですが、ちょっとマシンがたらなかったので無茶をしてるね。
狭い区画の中で、よりコマ切れにされたリソースを使って活動。。なんとも日本的な環境になったと思うわけで。
 
 

それはさておき、当然ネットワークは VMware ESXi4の仮想スイッチを通ってさらに中のXenへーとつながるわけだが、そのまま繋いだのでは孫に当たるVMが外部と通信できないみたい、。
対策として仮想スイッチのプロミスキャスモード(日本語版管理ツールでは無差別モード)を有効にすることで通信出来た。
 


理由について多分こうかなというのを図にしてみた。
 
[caption id="attachment_1655" align="alignnone" width="407" caption="画像:親子孫VM"]画像:親子孫VM[/caption]
 
 

いじるのは1の所にある仮想スイッチ、ここがプロミスキャスでないと既知のアダプタ2まではブリッジしてくれるが、知らない相手の3のアダプタ宛はブリッジしないってことだろうか。
スイッチと言いつつも多少通常のL2とは動作が違う、まあ設定としては妥当かも。
 

こうなるとMACアドレステーブルとか気になる所だな、まさか全部フラッディングするわけでもあるまいて。
学習・・・するのかな?
 
 


しかしプロミスキャスモードの日本語訳って「無差別モード」なのな。
スイッチのプロパティ開いたときに正直困惑したね、動作からしてプロミスキャスモードだとは分かったけど、なんか物騒じゃないか(^^;)
 
…と思ったが一応Googleで検索したら無差別の方が多いのな。。
いやあ、プロミスキャス(promiscuous)でいいと思うよ。いざ何かで英語版という時に困るし。
 

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型は定義がややこしいな。
 

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月22日火曜日

VMWare ESXi はメモリが足りないと動かない

タイトルまま。
 
 

メモリを1GBしか積んでいないPCでVMWあれESXi4(メモリ要件2GB以上)を動かそうとしたら動かなかった。
 

インストーラが駄目だったので、「まあインストール時のチェックのみだろう、何とか回避してやろう」ト思い、DDで起動イメージをUSBメモリに突っ込んでみたが同じことだった。
結局『not enough memory』 って言われて止まっちゃう。
 
 

ホラ物理的な性能要件なんて、Windowsのインストーラみたいにさあ、テキトーにオプション渡せばスキップ出来ると思うじゃん、それが甘かったみたいで。
起動時のデバッグログをみると物理メモリのアドレスを直接何かしようとしてるみたいで、そりゃあしかたないかなと思ったもんだ。
 

しかしこの辺の融通の利かなさに、VMWare ESXi にはかえってハイパーバイザとしての職人魂を感じたね。
 

「うちは明石のタコ以外使わねえよ!」みたいな、安売りしないというか。
ちょっと違うかもしれないが...
 

はいはい、メモリ買ってやるから働いてね。
 
 

2009年12月7日月曜日

rlwrap、リードラインラッパーでtelnetやsqlplusに編集・ヒストリを

普段からbashとか、普通に便利なシェルに慣れていると、BackSpace利かないとか、カーソルでヒストリ出てこないとかでちょっと困る。
 
 

例えばtelnetでメールしたいとき。
(※telnetのオプション次第でラインモードいけたような気もするが、覚えてないや。)
 


# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 sawalin01.sawano.local ESMTP Sendmail 8.13.8/8.13.8; Mon, 7 Dec 2009 00:20:05 +0900
ehk^H^H^H ←★バックスペースで消そうとする。
500 5.5.1 Command unrecognized: ""hk
^[[A^[[A ←★カーソル上でヒストリ出そうとする。

 
 

ほかにもsqlplusでOracleの管理したいとき。
 


SQL> show alll
SP2-0158: unknown SHOW option "alll"
SQL> ^[[A ←★カーソル上でヒストリ出そうとする。

(ノ^皿^)ノ彡┻━┻
 
 

こういう時にリードラインラッパーのrlwrapを使うとちょっと楽になる。
 

rlwrap経由でtelnetとかsqlplusを起動すれば、普段はキャラクタ単位でガンガン通信しようとするのを、行単位で送ってくれるようにしてくれる。
ついでにコマンド履歴をホームディレクトリにテキストで保存してくれるので、コマンドログも取れるしヒストリも使えるということのようだ。
 

こんな感じで起動すると、それだけでOK。
rlwrap sqlplus /nolog
一行入力するまで送信を待ってくれるので、BackSpaceで修正できるし、カーソル上で直前の入力内容を呼び出せる。
 
 

配布もとはこちらさん。
http://utopia.knoware.nl/~hlub/uck/rlwrap/
 

使っていこう、telnetにはどうするか考え中だけど、sqlplusにはエイリアスしちゃう。
ちなみにcentosでインストールするには、readline-devel が必要だったよ。
 
 

追記:virsh で使うのもいいな。

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月12日木曜日

Nagiosの状態をステータスバーに表示、FireFoxアドオン『Nagios Checker』

Nagios本体ののアドオン(pnp とか Nagvis とか)で面白いのないかなーと探していたら、別の良いもの発見。
 

FireFoxのアドオン、Nagios Checker
 

NagiosのWEB画面からホスト・サービスのステータスを取得してFireFoxのステータスバーにて通知してくれるアドオンだ。
 

[caption id="attachment_1574" align="alignnone" width="300" caption="画像:Nagios Checker(無風)"]画像:Nagios Checker(無風)[/caption]
 

右下にあるでしょ?Nagiosのステータスが。
異常を発見するとあそこが赤くなり、マウスオーバーで情報がポップアップするというつくり。
管理しているNagiosが一杯あったらとても便利だわこれ、視覚的にすぐ判る分、メールを待つよりいい。
 
 

これでブラウザさえ立ち上げとけばいつもNagiosが一緒だ!監視ライフを満喫しよう。
……しかしどうにも気が重い感じなのは、これを入れるとNagios中心の生活に拍車が掛かるからなのか。
 
 

ついでに設定の仕方メモ
 

  • 定義の名前は何でもいい

  • NagiosのURLはそのまま入力Basic認証はStandalone

  • なぜかスクリプトURLを自動でとらないのでNagiosのURL+"cgi-bin/status.cgi"を手動で入れる。


 

あとは監視間隔や表示領域だの、フィルタ設定だの調整すればOK。
フィルタなんて特に結構かゆいところまで手が届くように出来ている、作者は自分でNagiosを相当使っていそうだ。。
 

あとは設定がエクスポートできれば助かったりしますね、一応ApplicationSettingsの下に設定ファイル本体がxmlでいるので使いまわしたい時はそのファイルを持っていきましょう。

2009年11月7日土曜日

続・ZFS上のiSCSIターゲットをサイズ変更、今度はLVM

前回ext3前々回NTFSとZFS+iSCSIで色々やり、結果がなんだか中途半端だった上『LVMならきっと大丈夫さ!』なんて締めではイカンと思ったのでLVMではどうなったか簡単に書いておく。
 
終始オンラインとはいかなさそうだが、多少はスマートに出来たと思う。
 
 


LVMでもパーティションはさすがに壁


まずちょっと勘違いがあった、LVMのボリューム操作について。
 

物理ボリューム(PV)
ボリュームグループ(VG) にまとめてそこから
論理ボリューム(LV) を切りだしたらその上にファイルシステムを作れる。
 

という所のPVが結構簡単にでかくできると思っていたんだよね、pvresize っていうコマンドあるし。
 

しかし実際は、
こんなパーティション構成でOSをインストールして、
 



















sda1 sda4(ex)sd5 sda3 sda2
ext3 SWAP ext3 LVM(LV00)
/boot SWAP / /data (ext3)

 



ZFS側でケツを拡張してみたら、、、
 






















sda1 sda4(ex)sd5 sda3 sda2 空き
ext3 SWAP ext3 LVM(LV00) ←パーティションの壁
/boot SWAP / /data ←パーティションの壁

 

となり、これでpvresizeを実行してもダメ。
なぜならパーティションに縛られているから、ってことは。
 
 




じゃあパーティションデーブルなんかイラネェや


とある考えのもと、もう一個環境を作った。
 



























sda1 sda4(ex)sd5 sda3
ext3 SWAP ext3
/boot SWAP /
sdb
LVM(LV00)
/data (ext3)

 

HDDは2つ、両方でもいいがiSCSIはsdbだ。
 

で、見たらわかるようにsdbを丸ごとPVにした。
通常見られる createpv では "/dev/sdb1" などパーティション上に作るが、fdiskもしてない状態で"/dev/sdb" にcreatepvしたらこうなる。
これならパーティションの壁を気にしなくていい、だってそんな物(=パーティションテーブル)無いんだから
 
 

この状態でZFSからiSCSIボリュームを拡張する、さすがにLinux側は再起動しないといけなかったが・・・
 












sdb
LVM(LV00) 空き(FreePV)
/data (ext3) -

 

上がってきたLinux上では、きっちりとPVが未使用領域を確認していた、これでpvresize出来る。
 
なぜか自動で一発MAXまで割り当ててくれなかったので一度手動でちょっと大きく(※)したあともう一回pvresizeしたら自動でPVのサイズが最大まで拡張した。
※ここらへんちょっとアヤシイ動きといえるのではあるが。。。
 
 

VG内のPVがでっかくなったので、あとはLVを大きくして、中のファイルシステムを拡張すればOKと。
 
 
追記:某所でつっこまれたので……
もちろん単純にPVを追加してLVを拡張するのみでもOK、というかそれが普通。
iSCSIディスクも拡張するより、もう一個作って接続するほうが真っ当なやり方でしょう。

 
 

ちょっと感想


安易な思い付きってのはなかなか上手くいかないもんです・・・
もっと安全にしたいのであれば、ディスクを追加しPVをVGに入れたあとでリプレースするような感じ、LVMならリデュースかな?をするのがいいかと思います。すっごく普通ですが安全確実でしょう。
 

まあiSCSIディスクはZFS上だったおかげでスナップショットから生み出された幾重ものクローンと、send&recvにより量産されたボリュームを潰し放題と、こういう実験しやすいですね。
 
ついでにVirtualBoxならiSCSIを直接管理できるし、ってこれもSunだなぁ。
 
 

もう本家にならってすっかりSunがスキ!(/sukkri/)」とでも改名したらどうかと思ったりもするが、Windowsだって大好きなので変えない。
 

2009年11月6日金曜日

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

前編、Windows NTFS編からの続きー

 
 

iSCSIターゲットのサイズを拡張して環境変えずに使ってしまおうという目論見のLinux編。
ZFS+iSCSIについては前編に解説
 

使ったのはCentOS5、事前に断っておきたい事ですが記事内では普通のパーティションテーブルに作ったext3を対象に拡張しちゃってますが、普通は初期構築の時点でLVMでやるべきだと思います。
 
追記:LVMやりました。
 


今回拡張に使ったlinuxの環境


すでに結構特殊と言えなくもないが、テストに使った環境について。
 

VIrtualBoxでiSCSIデバイスを管理下のディスクにして、そこに直接CentOS5をインストール。
パーティションはこんな感じ、"/"が一番後ろにあるのがズルいっちゃあズルい環境。











sda1 sda2 sda3
/boot SWAP /

 

最初は8GBのHDDにこれをインストールしました。
 
 

ZFSボリューム拡張してから起動してみる


稼働中に突然拡張、そういえばしなかったなぁ、やってみればよかった。
 
ということで 8GB ⇒ 16GB に増やしたディスクでLinux起動!

容量は……
 
[caption id="attachment_1561" align="alignnone" width="728" caption="画像:増やしたHDDでまず起動"]画像:増やしたHDDでまず起動[/caption]
 
 


増えた増えた(w
もう驚かないぞ。
 

と言ってもいきなり拡張とかできない、パーティションテーブルが変わってないからだ。
さてどうしたもんか。
 
 



パーティションのサイズを変える


変えちゃうかー、パーティションの大きさ。
 

では適当なLiveCDで起動する、今回は手元にあったCentOS5.3のLiveCD。


見た目区別つかんなぁ...LiveCDから起動してますよー
 
[caption id="attachment_1562" align="alignnone" width="728" caption="画像:LiveCDからパーティション操作"]画像:LiveCDからパーティション操作[/caption]
 
 

では操作するディスクに狙いを定め、とにかく "fdisk" と"e2label"コマンドで以下の通り!

  1. "/"を削除 = "/dev/sda3" のパーティション消滅

  2.  
  3. "/dev/sda3" を再作成、残り最大限割り当て
    ※開始シリンダは消去前と死んでも合わせろ!

  4.  
  5. タイプ指定 82 してテーブル書き込み

  6.  
  7. パーティションラベルに"/"指定

  8.  

 

冒険のように見えますか? そうですねこりゃあ大冒険です
 
幸いlinuxのfdiskはパーティションのブートセクタを弄らないのか再作成するのか、このやり方でも後から中身を認識できちゃう。
 
Windows(DOS)のFDISKでやったら即死ですからね、一応HDD解析の鬼みたいな猛者にかかれば復旧の方法は有るみたいですが。
 
 
ではしれっと次に行きましょう。
 
 

ext3ファイルシステムを拡張する


パーティションの準備がすんだら、いよいよファイルシステムを拡張します。
 

シングルユーザで起動とか、甘っちょろいことなしに可能、そのためのコマンドをぶっ叩くまで。


"resize2fs" によって、パーティションの残り容量がちゃんと"/dev/sda3"に割り当てられます。
 
[caption id="attachment_1563" align="alignnone" width="728" caption="画像:ext3ファイルシステム拡張"]画像:ext3ファイルシステム拡張[/caption]
拡張完了めでたしめでたし。
ああ、結構時間かかるので気長に待ってね、たった8Gで10分くらい終わらなかったな。
 
 


あ、inodeとか?そういえば見てなかったな…(汗
いちいちリビルドみたいな事やってるから変わってるのかな。
 
 


LVMだとどうなるんだろう?


この記事の内容は、上手くいっているとはいえ色々なディスクの使用の掟などから完全に目をそむけている気がして正直お勧めはしません。
真っ当にやりたければボリュームマネージャにLVMを使用しておくべきかと思います。。。いやLVM使ってお願い。
 

さて、LVMといえど既存のディスクがいきなり拡張したらどうなるの?という質問をとある方より貰いましたが、実際問題ないと思っています。
後からできた領域は、実際最初からあって使用していなかった領域と同じ扱いになりそうです、16GBのディスクを買ってきて、8GBしかパーティション切らなかったイメージですかね。
 

最初に切ったパーティションの残り容量が0であろうが100GBであろうが、使い始めたらきっと関係ないでしょう。それがいざ拡張しようとしたときに突然現れた残り容量でも然り。
 
 

……と思うんですけどねぇ、実用のためには試してみないといけないなあ。
だれかやってみて!
 
追記:LVMやりました。
 
 
 


追記:なぜ後から拡張したいのか


だって後から容量を柔軟に追加できたら、シン・プロビジョニングが出来るじゃないですかー
今後TCO増加の重荷になりそうなストレージ関係は、裏を返せばコストを減らす事によってグリーンIT推進の原動力になる可能性も十分に秘めている、そこになんとか繋げたいんですよねー。
あとはZFSがデデュープを出来るようになれば・・・!
 

さあいつか役に立てばいいですが。
 

2009年11月4日水曜日

テスト用のLANに、とりあえずPPTPでVPNする

検証用に社内にさらにローカルネットワークを組み、こんな環境を作った。
 

[caption id="attachment_1551" align="alignnone" width="474" caption="画像:どこにでもあるテスト環境の概要"]画像:どこにでもあるテスト環境の概要[/caption]
 


作業用のPCからテスト用サーバにアクセスするのに、いちいちルータ兼サーバにログインしたりポートフォワードの設定するのも面倒になってきたのでpptpのデーモン、PoPToPを入れてVPNを張っちゃうことにした。
 

ルータ兼用サーバはCentOS5で作ってたので、インストールは公式のRPMでOK。
 

で、コンフィグした。自分用なので認証無しにしたらとてもシンプル、これだけだった。
 

# cat /etc/pptpd.conf
lock
name pptpd
nodefaultroute
proxyarp
 
localip 10.48.1.254
remoteip 10.48.1.11-15

 

簡単に説明。
まずテスト用LANが 10.48.1.0/24 なのね。
で、PPTPのクライアント用に10.48.1.11-15を払い出そうね、という設定。
 

クライアントはWindows、注意点は「暗号化を必ず要求する」のチェックをはずさないと切断されちゃうことと、IPv4で「リモートゲートウェイを使う」の設定をはずしておくことくらい。
 
ちなみに認証無しの場合はユーザ名/パスワードはなんでもOK・両方空でもOK。不安なので認証したいという人はどうぞ調べて。