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から外部に出ていけると思うんだが。。。
試せる環境が手持ちの資源で作れるようなら実践編へ続く
 
 

VirtualBoxでiSCSI起動(iSCSIデバイスをローカルディスク扱い)

SunのVirtualBoxを使うと、HDDのイメージにiSCSIブロックデバイスを指定できる。
 

…と何処かで見たのでメニューを見るもそれらしき設定がない。。
ヘルプによるとコマンドラインでのみ対応のようだ、そのコマンドがこれ。
"VBoxManage" の "addiscsidisk" オプション
 

VBoxManage addiscsidisk --server <name>|<ip>
--target <target>
[--port <port>]
[--lun <lun>]
[--encodedlun </lun><lun>]
[--username <username>]
[--password <password>]
[--type normal|writethrough|immutable]
[--comment <comment>]
[--intnet]</comment></password></username></lun></port></target></ip></name>

 
使ったのはWindows版のVirtualBox3.x
 
 

さっそく叩いてみた、192.168.0.1上のiSCSIターゲットを指定する。
 

C:\Program Files\Sun\VirtualBox>VBoxManage addiscsidisk --server 192.168.0.1 --target iqn.1986-03.com.sun:02:**********************************
VirtualBox Command Line Management Interface Version 3.0.8
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
 
iSCSI disk created. UUID: *******************************


出来た。
 
 


さて、ターゲット側で情報をみるとこんな感じ。
 

Target: zfs1/iscsidev/vboxtest
iSCSI Name: iqn.1986-03.com.sun:02:**********************************
Alias: iscsidev/vboxtest
Connections: 1
Initiator:
iSCSI Name: iqn.2008-04.com.sun.virtualbox.initiator
Alias: unknown

 

……イニシエータの名前変更できるようにしてくれないか?SUNよ。
簡易フィルタかけたいんだが。
 
 

それはさておき、これでVirtualBoxのメディアマネージャをみるとiSCSIのディスクがリストされているので、晴れてIDEなりSATAなりで接続する設定すればそれで完了だ。ゲストOSからは完全にローカルディスクとなる。
 

2009年10月28日水曜日

IIS7でKeepAliveを無効にする、短くする

IIS7はKeepAliveがデフォルト有効、タイムアウト120秒だ。
 

120は長いだろう。。と思いつつもWindows認証を使う場合KeepAliveが必須なのでどうしてもデフォルトが長いんだろうな。
Apacheなんかは最近5秒くらいじゃなかったか?俺もよく1秒とか3秒にしちゃう。
 
 

では使わない場合、短くしたい場合にどこをいじればいいのか見ておこう。
 

[caption id="attachment_1520" align="alignnone" width="640" caption="画像:KeepAliveのON/OFF1"]画像:KeepAliveのON/OFF1[/caption]
 
サイトの所を叩くと出てくるHTTP応答ヘッダーのメニューに入ろう。
右のほうに共通ヘッダーの設定というのがある、KeepAliveのON/OFFはそこで切り替える。
 

[caption id="attachment_1521" align="alignnone" width="401" caption="画像:KeepAliveのON/OFF2"]画像:KeepAliveのON/OFF2[/caption]
 
 

では次に長さ。
 

[caption id="attachment_1522" align="alignnone" width="640" caption="画像:KeepAliveの長さ設定1"]画像:KeepAliveの長さ設定1[/caption]
 
今度はさっきより一個上の階層。
また右のほう、WEBサイトの規定値の設定を開こう。
 

[caption id="attachment_1523" align="alignnone" width="450" caption="画像:Keepaliveの長さ設定2"]画像:Keepaliveの長さ設定2[/caption]
 

どうもまとめ方がイマイチしっくりこないが、ここに違いない。
KeepAliveとしっかり書いてあるわけじゃないが、元々コネクションレスのHTTPでコネクションについて書いてあるからきっとそうだ。
 

微妙に自信がなさげなのは、ココをかえても「Keep-Alive: timeout **」のレスポンスヘッダを返してくれるようになるわけじゃないからなんだよなあ。
 
一応指定した時間でコネクションは切っちゃう。けどサーバからの切断なのでエラーログにtimeoutがずらずら記述されていくというIISの仕様、IIS6からそうだよね。
ヘッダ返せばブラウザが切ってくれるのに・・・カスタムで突っ込むしかないのか。
 
 

まあ以上でIIS7のKeepAlive関連の設定はおしまい。
Windows認証を使わないんだったら、切るか1-5秒くらいにしゃちゃいなさいね。
 
 

ついでだがコマンドラインでのやり方はこっちを参照。

 

2009年10月27日火曜日

MBRと"/boot"をバックアップして障害に備える、CentOSでiSCSI活用(後編)

前編からの続き
"/boot"だけバックアップした場合の戻し方。
 
 


"boot"だけ残せばよい理由と残す理由


前回記事の起動シーケンスから分かる通り、grubはstage2まで起動してしまえばファイルシステムをバッチリ理解できる。
逆に言うと、stage1.5まではHDDのセクタがそろってない環境にはそのまま戻せない、ということにもなる。
 

grubのstage2は"/boot"にあるので、そこになんとか繋ぐように配置すれば起動までこぎ着けそうな気もするが、そんな心配もいらないので諦めよう。
 

そう、MBRからstage2まで辿るのが難しくなった場合、素直にCDブートのgrubを使えばいい、
>> grub公式のgrub bootableCD作成方法
これはファイルシステムを大概理解できるナイスツール、必携だ。
 

grubさえ立ち上げれば、ext3の領域を読んでくれる = initrdやカーネルを指定してOSを起動することができ、ゆっくりgrub-install実施で元通りとできる。
 
 



ローカルをまっさらなHDDと交換してみる


前回作成したiSCSIを"/"領域にした環境で、ローカルディスクが爆破されたと仮定して"/boot"だけある環境から復旧してみよう。
 

まず適当なLiveCDを用意する。
CentOS5の奴なんかいいんじゃないだろうか、nfsマウント出来るしyumで少々のツールなら追加できる。
実は初期状態では重要なdump&restoreがないが、『yum install dump』で追加OKだ。
 

ではCD起動してからやること。。

  1. fdiskでhddを編集開始、まあ大体 "/dev/sda" だろう
    わからなかったら"fdisk -l"

  2.  
  3. nコマンドで"/boot"用に100Mくらい、SWAPように適当に2048MBくらい確保

  4.  
  5. tコマンドでSWAPスペースのタイプを82に変更

  6.  
  7. aコマンドで"/boot"予定スペースの起動フラグON

  8.  
  9. wコマンドでパーティションテーブル書き込み、fdiskおわり

  10.  
  11. "/boot"のところにファイルシステム作成
    # mkfs.ext3 -L /boot /dev/sda1

  12.  
  13. ついでにSWAPも
    # mkswap -L SWAP-sda2 /dev/sdb2


 


と、ここまでやったら"/mnt" あたりに "/dev/sda1"をマウントして、tarでもrestoreでも好きな方法で旧環境の"/boot"を戻そう。
もってくる方法は特に問わない、なんでもいい。
 
 

以上で ローカルディスクの"/boot"は復活した。
ちなみにfdiskはこんな感じに仕上がった。
Device Boot Start End Blocks Id System
/dev/sda1 * 1 32 257008+ 83 Linux
/dev/sda2 33 282 2008125 82 Linux swap / Solaris

 
 


CDからgrubで起動しよう


"/boot"が使えるようになったので、CD起動にしたgrubを使ってみよう。
 

起動したらとりあえずこれだ、
grub>
 

どうしろと言うのか迷うかも知れないが、とりあえずファイルシステムのルートになるパーティションを指定しよう。
途中まで入れたらTABで補完OK。
grub> root (
Possible disks are: fd0 hd0 cd


使えそうなデバイスを見せてくれる、もちろんhd0を選びさらにTAB

grub> root (hd0,
Possible partitions are:
Partition num: 0, Filesystem type is ext2fs, partition type 0x83
Partition num: 1, Filesystem type is unknown, partition type 0x82


パーティションを教えてくれる、さっき自分で作ったのだからどちらかなんて自明。


grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83


選択した領域に"/boot"があったらマウントしてくれる。
 

さああとはinitrd とカーネルを指定するだけだ...って
これがハードル高いと思う日もあるかもしれない。
 

でもそんなことはないんだ、"/boot"はマウントされてるんだよね?
 
 

コンフィグ見りゃいいじゃん。
 

grub> cat /grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda3
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-128.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/
initrd /initrd-2.6.18-128.el5.img

 

grubはcat出来る、これは死ぬほど助かる。
 
さあさっさと下記を入力して、bootコマンドを叩くのだ。
"kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/"
"initrd /initrd-2.6.18-128.el5.img"
 
 

さすれば起動する、破壊前の環境そのままだ。
あとは起動後に"grub-install" をしてあげるだけ。
# grub-install --root-directory=/ /dev/sdb
色々理由があって上記になる。
 
 


おまけ、initrdのinit抜いてみた


と、言うことで今回環境のバックアップはおしまい。
結局、/bootのdumpとddと両方採ってるけどね。
 

今度はHDDの代わりにUSBメモリを使ってみようっと。
 
 

さて、"/"からiSCSIってinitrdは何しとるんだと思うじゃない、
なので展開してみた、なるほどねー。
 
長いのでトップでは切っちゃうが。

続・高度情報処理技術者試験の過去問をやってみる

前回に続いて、電車の中で過去問やってみた。予習ナシ。
 

平成21年春期の午前2は科目ごとに分かれていたのでmデータベーススペシャリスト試験(DB)。
 












































































問1 問11 問21 ×
問2 × 問12 × 問22
問3 問13 問23
問4 問14 × 問24
問5 × 問15 問25 ×
問6 問16  
問7 問17 ×
問8 × 問18
問9 × 問19
問10 問20
正答数 16/25

 

64てん(w)
さすがに駄目だこりゃ。
 

春に向けて底上げしとこうかなぁ。
 

2009年10月26日月曜日

MBRと"/boot"をバックアップして障害に備える、CentOSでiSCSI活用(前編)

CentOS5のインストーラは、iSCSIのデバイスを認識できるのでので、このような環境を作ってみた。
"/boot"をローカルに置き、ほかは全部iSCSI。
 






















用途 場所 dev?
/boot ローカルディスク /sdb1
SWAP ローカルディスク /sdb2
/ iSCSI /sda1

 

図でみるとこんな感じだ。
 

[caption id="attachment_1516" align="alignnone" width="348" caption="画像:Linux+iSCSI"]画像:Linux+iSCSI[/caption]
 


NICがiSCSI起動に対応していれば、しょっぱなからiSCSIいけたものを。。。
だがこれはこれで面白い環境なので気にいっている。
 


しかしこの環境、"/"はiSCSI経由、ZFSの上にいてるので大分堅牢になっている、データの消失は皆無といってよく、パフォーマンスも申し分ない。
ただ、ローカルディスクが1台なのだ。これがぶっ壊れたらさあどうすんのよと思ったので色々試してみた。
 
 


結論から言うと「/boot をdumpでダンプしておく」または「ddでMBRから/bootの領域までを全部書き出しておく。」というやり方で復旧が可能となる。
あ、あとはgrubのCDboot環境かな。
 

せっかくなのでそこに至る過程を述べておこう、まあ今回は結局のところgrubが何やってるかを調べたと同義かなあ。
 
 

通常起動で"/"をiSCSIでマウントするまでの過程


とりあえずこの環境がどのようなプロセスをたどって起動されるか、これがよくわからんようでは安心して眠れない。
ということで簡潔にブートプロセスを追ってみよう。
 


  1. PCが起動される
     

  2. ローカルHDDが認識され、MBR(第1セクタ)にあるgrubのステージ1が読み込まれる、MBRにはパーティションテーブルもある
     

  3. grubのstage1はstage1.5を読むためにある。次のセクタを読むようにstage1は終了し、第2セクタより始まるstage1.5を読む
     

  4. stage1.5が読み込まれる、これは"/boot"のファイルシステム(ext3)に合わせたものが入っている
     

  5. ext3を理解するstage1.5は、"/boot/grub"にあるgrubのstage2をちゃんとファイルシステム上のファイルとして認識、読み込み
     

  6. stage2に制御が移ったら、hdd上のinitrdを実行することが出来る
     

  7. initrdはiSCSIのドライバを利用できる、ここでiSCSIデバイスをマウントする
     

  8. マウントされたiSCSIデバイスからラベルが"/"のパーティションを見つける
     

  9. "switchroot"!、iSCSIのデバイスは見事"/"としてマウントされ、Linuxの起動シーケンスは続く
     


 

簡潔...どうにか簡潔か。
最初に見つけるのをまよったのはstage1.5の場所、MBRと/bootの間であるHDDの第2セクタから第63セクタは使われているんだなあ。
 

さて、この環境が起動するプロセスはよくわかっただろうか。
iSCSIの辺りは"initrd"を展開すると、initスクリプトに全部書いてあるので、見てみるといいだろう。
 
 



hddの基本構造が同じなら、ddだけでいい


さて、grubがしてくれることは判った。
 

ということで、最初に出した環境をローカルディスクの破壊から救うということは、grubのstage1から1.5 と、stage2,initrdとカーネルイメージが入った"/boot"をちゃんと復旧できるようにするということにほかならない。
 

それならそこまでそのままダンプしちゃえばいいんだ、HDDの構造が一緒のもの※に換装する場合に限るが。
※現行なら、1セクタが512バイトで、かつシリンダあたりのセクタ数が63のものになるだろう。大体そうだよね、vhdですらそうしている。


ちなみにmbrのバックアップについて、ddで512バイト書き出して、446バイト(stage1)を戻せ!と書いてある記事などあるが、ありゃあ不十分な嘘っぱちだ。
マジックナンバーがあるからな、512バイト中ケツの2バイトも戻してやらんことには話にならん。

 
 

それじゃあローカルのhddの情報を見てみる、復旧の検証用に作ったほうなので容量が変だけど。
 

# hdparm -g /dev/sdb1
 
/dev/sdb1:
geometry = 60801/255/63, sectors = 530082, start = 63
# hdparm -g /dev/sdb2
 
/dev/sdb2:
geometry = 60801/255/63, sectors = 8385930, start = 530145

 

このケースでは"/boot"にええと、512MBとったんだっけ?SWAPには256MBくらいとった。本番はもうちょっとSWAP多目。
 

この場合、/sdb の1から63セクタが1シリンダ目(=/bootより前の領域)なので、/bootは63から始まっていて、SWAPの/sdb2は530145セクタ目から始まっているというのが判る。
ってことで、530145セクタ までddで出しちゃえばいい、これで狙った範囲は丸ごと取得できる。SWAPはどうでもいい。
 

こんな感じ。
dd if=/dev/sdb of=./mbr_boot count=530145
bs=512はデフォルトなので省略。
あとは書き出した"mbr_boot"をどこかに保管しておけばいい。
ローカルのhddがぶっ壊れてしまった場合、とっておいたイメージを書き戻すだけでいい。
dd if=./mbr_boot of=/dev/sda
かな、復旧中はiSCSI多分関係ないからsdaだ、復旧には適当なCDブートのLinuxでも使おう。
 
 

これでこの環境は起動するようになる、簡単だ。
 
 

mbrと/bootだけ戻したら起動するんだが、SWAPがおかしくなったりする。インストール時に設定したのみだと特に。
こんな感じ
# swapon -a
swapon: cannot find ther device dor LABEL=SWAP-sda2

 

mkswapするだけで元通りだ、SWAPスペースにはddする価値はないのであえて放っておいた。
 

#mkswap -L SWAP-sda2 /dev/sdb2
Settiong up swapspace version 1, size = 271426 kb
LABEL=SWAP-sda2, no uuid
 
#swapon -a

これで元どおりの環境が復活する。
 
 



さて、冒頭で述べた"/boot"だけ バックアップしておくという手段は結構復旧に手間がかかるが、hddの構造に依存しないのでとっておくべき。
次の記事で/bootだけdumpしてる際の復活方法を書いておきたいが、まあ大体わかるよね?
 
 

後編に続く
 
 

おまけ:復旧につかうツール


CentOSのLiveCDとか結構いいと思う、初期状態でNFSが使えるのでファイルを持ってくるのに便利だし、dump&restoreとかもyumですぐ導入できる。
もちろんddは使える。
 

あとはgrubの起動CDは作っておいたほうがいいだろう
ブータブルなGrubは重宝すると思う、作り方は公式に。
>> grub公式のgrub bootableCD作成方法
 

2009年10月23日金曜日

高度情報処理技術者試験の過去問をやってみる

先日の情報処理試験の問題がIPAで配布されている。
 

ここ2回ほど飛ばしたので、また春にでも高度情報処理を受けてみようかとIPAから過去問を落としてやってみた。
 
とりあえず予習ナシでいいので、平成21年春期の午前1を帰りの電車でやってみた。30問50分、丁度終わった。
 
 

さて結果は。





















































































問1 ○  問11 ○  問21 ○ 
問2 問12 問22
問3 × 問13 問23 ×
問4 問14 問24 ×
問5 × 問15 問25 ×
問6 問16 × 問26 ×
問7 問17 問27 ×
問8 × 問18 問28
問9 問19 問29
問10 問20 問30
正答数 21/30

 

70てん。。こりゃあ足きりくらうレベルじゃねえか?
なまってんなぁ。
 
 

2009年10月19日月曜日

VBScript,wsh で Uptime

Windows に uptime コマンドが無い。※一応MSが配布してるのもあるんだけどね。
 

だのでWSH(VBScript) で秒数だけ取ってみた。
スクリプト内でuptimeを判断するために作成したのでこれで十分。
 
 


Hey, Scripting Guy! サーバーの稼働時間を計算する
を参考に、"Win32_OperatingSystem" のプロパティ、LastBootUpTimeLocalDateTime を取得して差を見ればサーバの uptime になるだろうと。
あちらはもうPowerShellなので、普通はそっちの方がいいかもねぇ。
 
 

で、とりあえず書いた。標準出力と戻り値に秒を出す仕様だ。
手動キャストが泣ける・・・
 

[sourcecode language='vb']
'// ローカルコンピュータを指定
strComputer = "."

'// CIMV2名前空間のWin32_OperatingSystemクラスを取り込む
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( "SELECT * FROM Win32_OperatingSystem",,48)

'// オブジェクト回しの定型
For Each objItem in colItems

'// 最新の起動時間と、現在時刻をセット
tmpLBT=objItem.LastBootUpTime
tmpLDT=objItem.LocalDateTime

'// yyyymmddhhMMss を VBScriptの時刻形式に組み立てる、細かいところは切捨て
strLastBootUpTime = Left(tmpLBT,4) & "/" & _
Mid(tmpLBT,5,2) & "/" & _
Mid(tmpLBT,7,2) & " " & _
Mid(tmpLBT,9,2) & ":" & _
Mid(tmpLBT,11,2) & ":" & _
Mid(tmpLBT,13,2)

'// 上と同様
strLocalDateTime = Left(tmpLDT,4) & "/" & _
Mid(tmpLDT,5,2) & "/" & _
Mid(tmpLDT,7,2) & " " & _
Mid(tmpLDT,9,2) & ":" & _
Mid(tmpLDT,11,2) & ":" & _
Mid(tmpLDT,13,2)

'// 差を秒単位で取得
sec_uptime = DateDiff("s", strLastBootUpTime, strLocalDateTime)
Wscript.Echo sec_uptime
Next

'// 秒をExitコードに突っ込んで終了
Wscript.Quit(sec_uptime)
[/sourcecode]
 

"uptime.vbs"として保存、実行してみよう。

> cscript uptime.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
 
422718
 
>echo %errorlevel%
422718

 

多分OKやね。
日時分秒で表示するには適当なサブルーチンを作るしかないのかなあ。
 
 

ちなみに LastBootUpTime は生だとこういうデータ。
LastBootUpTime: 20091014151549.069803+540
このままだと時刻型だと解釈してくれないんだよね。
時間の都合で試して無いけど、0時-9時に実行して桁が落ちないかちょっと心配。。
 

2009年10月13日火曜日

アンチスパムアプライアンスに潜む脆弱性

監視サーバに潜む脆弱性 に続いて、○○に潜む脆弱性シリーズ2つ目。
シリーズ化=続かないフラグ でもあるがまあよかろう。
 
 

さて、アンチスパムのアプライアンスなどがあるじゃないですか、中でもスパムメールを隔離する奴に限った話になりますが...
 

例によってアンチスパムの恩恵を受けるユーザーさんが隔離されたメールを確認するのはWEBブラウザを利用して、ということになります。
 

で、確認に行くと下表のように表示されるかと。













送信日時 送信者アドレス 件名 本体ダウンロード
2009/10/12 20:00 spamer-desuyo@example.com おクスリいらんかえ メール本文を見るならこちら↓

 
 

皆まで言わなくとも判りそうですが一応、このアプライアンスは、スパムメールから「送信日時」,「送信者アドレス」,「件名」を分解してDBに登録します。
 
 

当然、件名がこんなだったら↓
Subject: おクスリ<script>alert(\"XSS\")\;</script>
 

隔離メールを確認に行くとこうなりますね。
 














送信日時 送信者アドレス 件名 本体ダウンロード
2009/10/12 20:00 spamer-desuyo@example.com おクスリ<script>alert(\"XSS\")\;</script> メール本文を見るならこちら↓

 

無事に表示されるだけで済むでしょうか。
これなんか特に、SQLが通ってはいけないところですね。
 
 

まあ普通に製品として世に出ているもので、こんな脆弱性は残していないでしょうが、ちょっと自分で似たような仕組みを作る際(メールアーカイブとかWEBメーラとかもそうですね)には気をつけておかないといけませんね。
 

意外とこういうのは性善説というか、「クライアント嘘付かない」みたいな錯覚に陥るところだと思います。
 

2009年10月12日月曜日

電子マネーに対応したICカードリーダ・ライタを比較する

私用で Edy を利用する機会が増えたので、管理に便利そうなリーダ・ライタの検討をしてみた。
 

検討対象は2つ?


さて、検索で見つかっためぼしい物は2つ、比較してみる。
 










































名称 パソリ ぴタッチ
商品

型番 RC-S330 USB2-NFC
メーカ SONY I/O Data
電子マネー Edy(電子決済・チャージ・ギフト)
eLIO(D-URL)
Edy(電子決済・チャージ・ギフト)
WAON(履歴、残高)
交通機関 履歴、残高表示
・Kitaca
・Suica
・TOICA
・ICOCA
・SUGOCA
・PASMO
・PiTaPa
・nimoca
・および、これらと相互利用しているカード
履歴、残高表示
・Suica
・モバイルSuica
・TOICA
・ICOCA
・PASMO
・PiTaPa(利用履歴情報のみ)
・及び、上記と相互利用のカード
e-TAX 対応 非対応
その他 「FeliCa™」対応
Type A、Type B 対応
「FeliCa™」「MIFARE®」対応
※「MIFARE®」は対応アプリ付属無し

 
 

安さの『ぴタッチ』、多機能『パソリ』


今回狙い目のギフト、電子決済がどちらもできるのでどちらでもいいのだが、次回の確定申告をしないといかん気がするので、e-TAX対応のパソリが有利か……?
edy で楽が出来ればいいやという割りきりで、ぴタッチで安く抑えるべきか。。
 
それならそもそも買わないという選択も十分ある、交通機関で主につかうpitapaにはpitapa倶楽部もあるしなぁ。
 
 


e-TAX のみなら別機種も候補に


今回ついでだがe-TAXなどの公的手続だけ使える機種もあったので並べておこう。
 

NTT-ME SCR3310-NTTCom
日立 公的個人認証用 HX-520UJ.K
ジェムアルト 電子申告(e-Tax)対応 住基カード用 PC Twin (USB)
 

この辺はe-TAXなどの公的個人認証専用(他向けのソフトが用意されていない?)っぽい。











 
 

まあ目的別にって所でしょうか。
 

2009年10月8日木曜日

監視サーバに潜む脆弱性

システムの運用維持に欠かせない監視サーバ、使ってるかな。
ダウンを検知して運用を良くするするためのツールだけど、実はそこに脆弱性があることも・・・
というお話。
 
 

世の中監視ソフトも出回ってるだけで色々あります。
それに単純な死活監視ものなら自社で開発しちゃったり、というのも珍しくないでしょう。
 

ではその監視ソフトは管理するコンソールを持っているとして、そうこんな感じに。
 













ホスト サービス ステータス 詳細
ServerA HTTP 稼働中 HTTP/1.x 200 OK

 
良くあるWEBブラウザで見るタイプ、状態が一目でわかっていいよね。
丁寧にサーバレスポンスも記録してくれて親切!
 

だけども。
このようにレスポンスを 「取得 ⇒ DB格納 ⇒ WEB表示」とやるようにしているのって気になりますよね。
 
 

例えばこちら、 thttpd というHTTPサーバソフトがあります、シンプル&軽さがウリです。
ソースにちょっと手を加えてみましょうか。
 

今回実験に使用したのは "thttpd-2.25b"。ソースを展開して、"libhttpd.c" の503行目、ちょうどHTTPのレスポンスを記述している部分を。

static char* ok200title = "OK";
↓↓
static char* ok200title = "OK <script>alert(\"XSS\")\;</script>";


このように。
まあ何がしたいかは判るよね。
 

それではこの書き換えた thttpd をサーバ:testserver 上でコンパイルして起動します。
>thttpd -p 20000
 

では、 http://testserver:20000/ にWEBブラウザでアクセスしてみましょう。
 

ぱっと見変哲はないけど、レスポンスヘッダを取得すると、
HTTP/1.x 200 OK <script>alert("XSS");</script>
Server: thttpd/2.25b 29dec2003
Content-Type: text/html; charset=iso-8859-1
--snip--


こんな感じ、イカレたヘッダが混ざっているね。
 
これを監視サーバが食っちゃうと、、、
 














ホスト サービス ステータス 詳細
ServerA HTTP 稼働中 HTTP/1.x 200 OK <script>alert("XSS");</script>

 


さて、無事に表示されるだけで済むかしら。
XSSならまだしも、SQLが通るようだと事によっては目も当てられない状況になるかもしれない。
 

さて、WEBアプリっていう側面で見れば当たり前の対策も、監視サーバの状態表示機能と位置付けたら結構対策を見落とすような気がする。
確かにこのケースはどういった経緯で発生するかなどは全く考慮してないけども、サーバ(通信相手)がいつも行儀のよいレスポンスを返してくれるとは限らないということは伝わっただろうか。
 
 

ちなみに監視サーバの代表例として、Nagiosの3は大丈夫だ。2.9頃にXSSの対策が入ってたが、もしかしたらこういうケースへの対策だったのかもしれないな。
このネタを思いついたのはそのNagiosのアナウンスを見てからだし。
 

2009年10月7日水曜日

Solaris10、iscsitgtd が突然起動しない

zfsで作った領域をiSCSIのターゲットにでもしようかと、しばらく止めてたiscsitgtを起動してみた。
 

$svcs iscsitgt
maintenance 20:47:28 svc:/system/iscsitgt:default


え。
 
一応治ったのでエントリ。
 
 


起動しない原因を突き止めるべく、"/var/svc/log/system-iscsitgt:default.log"のログを見てみる。
 
/lib/svc/method/svc-iscsitgt: smf_zonename: 見つかりません。
/lib/svc/method/svc-iscsitgt: smf_is_nonglobalzone: 見つかりません。
Failed to start iSCSI daemon

 
え。
 
not found?
しばらく前は問題無かったのになあ。
それ以降にローカルゾーンを作ったり消したりはしたので、ゾーン関係かと思いもしたが、zonename 関連のログは正常起動の時も同じものだった。単にゾーンの有無で直接関係はないだろう。
 
 


仕方がないので SMF(Service Management Facility)から起動するスクリプトを追ってみると、結局"/usr/sbin/iscsitgtd" を直接叩いていることが分かった。
 

実行してみると。

$/usr/sbin/iscsitgtd
$echo $?
96
 

む、何だよ終了コード96て。
起動スクリプト的にはこれが0でないと「Failed to start iSCSI daemon」とログに出力。
まあ実際そうなんだから仕方ないか。
 
 

原因を突き止めるべく、とりあえずトレース。
WEBも調べたが有力な手掛かりはすぐには引っかからなかった、珍しいのかな。
 

$truss /usr/sbin/iscsitgtd
--snip--
open("/etc/iscsi//config.xml", O_RDONLY) Err#2 ENOENT
--snip--

 

おっとこれかな。
 

??こないだまで設定ファイルは
"/etc/iscsi/target_config.xml" こうじゃなかったか。
中身を見ても変哲もないほぼ空っぽのXML。
 
 


少し考えた末、config.xmlの名前にファイルコピーして再チャレンジ。
 

$svcadm enable iscsitgt
$svcs iscsitgt
STATE STIME FMRI
online 21:10:35 svc:/system/iscsitgt:default

 


起動したね。(svcadmの-vはいつも忘れるなあ)
 

そのあとがまた謎で、"/etc/iscsi/" を見たら "target_config.xml" も "config.xml" も無くなっており、backupというディレクトリに突っ込まれていた。
 
 

どういうことだ一体・・・仕様変更なのかな。
するのはいいが止まっちゃうのは勘弁してよね。
 

2009年10月6日火曜日

Windows7"に"、VMWareServer2をインストールしてみる

VMWareServer2 にWindows7 をインストールするって普通にできるみたいじゃない、結構みかける。
だからSawanoBlogではWindows7にVMWareServer2を入れてみますよ。
 
 

VMWareServer2.0.1 と VMWareServer2.0 をダウンロード


VMWare、最新の2.0.1と2.0をダウンロードします、なぜかは後述。
[caption id="attachment_1489" align="alignnone" width="233" caption="画像:VMWareServerダウンロード×2"]画像:VMWareServerダウンロード×2[/caption]
 

VMWareServer2.0.1のインストール中にとまった?互換性チェックへ


ダウンロードが完了したVMWareServer2.0.1をインストールします。
とりあえずウチの環境ではこうなった、というだけで、このとおりにすれば必ずうまくいくという保障はありませんのでご注意を。
 
[caption id="attachment_1490" align="alignnone" width="300" caption="画像:VMWareインストール"]画像:VMWareインストール[/caption]
 
[caption id="attachment_1492" align="alignnone" width="300" caption="画像:VMWareインストール2"]画像:VMWareインストール2[/caption]
 

と、ここまできて全然進まなくなってしまった。待ってれば先に進んだのかもしれないが。。。
15分ほど放置しても変わらないのでインストーラをKILL。
 

とりあえずインストーラを右クリックしたら「互換性チェック」というのがあったので、、少々迷った末実行。
これまた待つ。。
 

[caption id="attachment_1493" align="alignnone" width="585" caption="画像:互換性チェック"]画像:互換性チェック[/caption]
 



プログラムの互換性設定をテストします
適用設定:
Windows互換モード: Windows XP (Service Pack 2)
ディスプレイ設定: 標準
ユーザアカウント制御: 標準

 
ほう、断定とは大きく出たなあ。
まあ別に『駄目なら後でごめんなさい』でいいよ、この件はね。
 
 

インストール完了しちゃったのでVMWare VI Client を導入する


さて、先ほどの設定でインストーラを実行したらすんなり終わっちゃった、疑ってごめんなさい。Tomcatとかもばっちり動いてる(止めたいけど。。)。
 

それじゃあ、
[caption id="attachment_1494" align="alignnone" width="300" caption="画像:VMWare VI Client インストーラ"]画像:VMWare VI Client インストーラ[/caption]
VMWare VI Client 2.5 を導入しよう。実はVMWare使うの初めてだが、WEBのUIはなんかイヤン。
 
VI Client は2.0.1 には同梱されていないが、ナイスな情報があった。2.0のインストーラはここで使うのだ。
VMware Server 2.0.1 へ VIClient を追加する手順 < < junsanの日記(出張所)
感謝!!
 

ちなみに VI Client はすんなりインストールできた。
 
 

インストールは完了、仮想PCを起動してみる


ではとりあえず、ウィザードから適当な設定で仮想PCをつくり、起動してみよう。
 

[caption id="attachment_1495" align="alignnone" width="300" caption="画像:起動したゲストPC"]画像:起動したゲストPC[/caption]
 
起動、してるよね。OKOK。
 
 

結論、Windows7 でVMWareServer2は動作するようです。
 

Windowsにはwgetが無くてもtinyget.exeがある

Windowsってwgetつけてないよね。なので標準っぽいツールで代用してみようというお話。
ファイル単体のダウンロードくらいでいいなら、Microsoftの標準的なツールで実行可能だ。
 

一応多少ネタっぽいので、ちゃんとwgetを使いたい人は GNU Wgetから落としてくれば普通に使えるはずなのでそちらへ。
 
 


ということで今回は II6.0のリソースキットについてくる TINYGET を使ってみる。
ファイルを追加してる時点でwgetとどう違うのよという意見は置いていくぞ。
 

使っていなければ下記URLからダウンロードしてIIS6リソースキットを入れよう、ツールを個別にインストールも可能だ。
Internet Information Services (IIS) 6.0 Resource Kit Tools
 

一応この TINYGET 、本来はHTTPのテストに使う。レスポンスを見たり多少の負荷をかけたりできる。apacheについてくる ab のほうが近いといえばそうかも。
 
 

ではwgetの置き換え例をだしてみよう!


 

たとえばYahoo!のロゴを落としてくるとき。
Yahoo! JAPAN
 
wgetなら
wget http:// k.yimg.jp /images/top/sp/logo.gif
さすが、シンプルですね。
 
↓ さあtinyget なら
>tinyget.exe -srv:k.yimg.jp -uri:/images/op/sp/logo.gif -d > logo.gif

このように……非常に簡単に置き換えが可能てすね(;¬_¬)
URLをサーバ名とパスに分解して、データをリダイレクトするだけです。。
 
 

落としたファイルを見てみよう。
>dir /B
logo.gif
tinyget.exe
>start mspaint logo.gif

 

[caption id="attachment_1487" align="alignnone" width="300" caption="画像:Yahoo!のロゴ"]画像:Yahoo!のロゴ[/caption]
 

バイナリだってへっちゃらだということが分かってもらえただろう。
素直にwget使うもよし、一発芸としてtinygetを使ってみるもよし。ああ、wgetのように再帰的にファイルをかっぱらってくるのは多分無理ですから。
 
 

おまけ、tinyget のヘルプ。
丁寧なのでこれだけでも何が出来るかわかりましょう、結構色々できる子のようです。
さすがに長いので続きにします。

2009年10月2日金曜日

Wordpressに投稿して、Wassrのステータスをついでに更新する(プラグインの)プ ラグイン

自分のところのブログは、Yahoo!のブログ検索とかに出てこないなあと思っていたら、ヨソでこういう記事を見つけた。
 

WordPress から Yahoo! ブログ検索に Ping を送信するプラグインの改造方法:トイレのうず/ぼやき
 

WordPress は工夫しないとYahoo!に弾かれるらしいということや、更新のたびにPing送信という迷惑じみた仕様ということは全く知らなかったなあ。なるほど。
 
 

さて、引用。
手動で Ping を送るのは面倒。ということで、既存のプラグインをちょこっと改造することで、自動化することに成功しました。

 

おぉこれは・・・
ブログ更新のついでに適当なAPIをひっぱたいてこれるということか。
ちょっと探したが、WordPress更新で twitter のタイムライン更新はあるが、Wassr のはみつからなかったのでYahoo!対策のついでに実装してみた。
 
 

自分用「Smart Update Pinger Wassr」の出来上がり、一応配布なんぞを


php に触れたことはほぼ無い(そもそもプログラムしない)が、元ネタさんが丁寧な改変をされていたのでとても作りやすかった。
ログの吐き方とかアヤシイが、まあそんなに困らないだろうが見栄えが変なのでそのうち直そう。。
適当に確認用の行消したらきれいになったっぽい。>ログ出力

 
 

せっかくなので置いておこう、使うような物好きがいるかもだが、できればマトモなphp書きにクオリティ・セキュリティ面を突っ込んでほしい所。
 

(1) まず、元ネタ トイレのうず さんWordPress から Yahoo! ブログ検索に Ping を送信するプラグインの改造方法を実施しましょう。
Yahoo!関連が不要ならそれはスキップでOKだが、Ultimate Plugins Smart Update Pinger はどうしても必要。
 

(2) Wassr用追加モジュールを落として、ultimate-plugins-smart-update-pinger.php たちと同じディレクトリに設置します。
Smart Update Pinger Wassr
 

(3) 大元のプラグイン、ultimate-plugins-smart-update-pinger.php を編集して、処理を呼んでもらいます。
また引用ですが、
・107行目と117行目の2ヶ所の
$SUP_output_log=SUP_ping_services($forcedpings,get_permalink($id)).$SUP_output_log;
の後ろに下記を追加。

こちらを実施されたなら、そのさらに後ろに2行づつ追加します。しなかったら同じところで。
[sourcecode language='php']
require_once('smart-update-pinger_wsr.php');
$SUP_output_log = send_ping_wsr("http://api.wassr.jp/statuses/update.json", $row["post_title"], get_permalink($id)).$SUP_output_log;
[/sourcecode]
 

(4) smart-update-pinger_wsr.php にWassr用のユーザ名とパスワードを記述します。
19行目と20行目かな
[sourcecode language='php']
$URL['user'] = "username";
$URL['pass'] = "password";
[/sourcecode]
 

(5) 後は丸ごとアップロードして、管理画面でUltimate Plugins Smart Update Pinger を有効にすればOK。
WordPressに記事投稿をするたび『ブログ更新Ping:記事タイトル(URL)』 という感じでWassrのステータス更新が入るはず。
 
 
 

ということで公開と同時に最後のテスト、こけませんように(-人-)
(実は3度目)
 
 



追記:ログがめっさ汚いなぁ。。また今度直そう。
追記:治ったっぽい

2009年10月1日木曜日

WordPressに投稿したらWassrに自動でPOSTするテスト(4)

一個前のリトライ。
二個前のリトライ。
三個前のリトライ。
 


POSTには成功、でも記事タイトルとURLが出なかったのでもう一回
結果如何にせよ今日はこの辺で・・・

 

>> 一応の完成版はこちら ⇒ Wordpressに投稿して、Wassrのステータスをついでに更新する(プラグインの)プラグイン

WordPressに投稿したらWassrに自動でPOSTするテスト(3)

一個前のリトライ。
二個前のリトライ。
 

ログに『{"error":"argument status required"}』何故だ?
と思ったら
連想配列 $psot を定義して$post をクエリで組み立てりゃあそうなるよね。
 

こんどはどないだ。

>> 一応の完成版はこちら ⇒ Wordpressに投稿して、Wassrのステータスをついでに更新する(プラグインの)プラグイン

WordPressに投稿したらWassrに自動でPOSTするテスト(2)

一個前のリトライ。
 

呼ぶ関数間違えちゃったよ。。。
もう一回。
 

 
>> 一応の完成版はこちら ⇒ Wordpressに投稿して、Wassrのステータスをついでに更新する(プラグインの)プラグイン

WordPressに投稿したらWassrに自動でPOSTするテスト(1)

タイトル通りのことをテスト。
 

まあ内容はこちらの記事のパクリなんですが。。
WordPress から Yahoo! ブログ検索に Ping を送信するプラグインの改造方法:トイレのうず/ぼやき
 

上手くいくとイイナ。

 
>> 一応の完成版はこちら ⇒ Wordpressに投稿して、Wassrのステータスをついでに更新する(プラグインの)プラグイン