VMware の話のなかで Bochs というのが話題にでたのでチェックしてみた。 記事などを見ていると QEMU の上の方が高速に動くという評判である。
先日 Wine を試してみたものの、結局 Windows の DLL とかがたくさん必要でいろいろ面倒なわりにソフトウェアの動作確認環境としては不安定すぎて使えない感じだ。 ということで QEMU の上に Windows をインストールしてみることにした。
Debian のパッケージになっているのでそれをインストール:
apt-get install qemu
今回は Windows 2000 Professional をインストールしてみる。 手元にあるのがアップグレード版なので Windows 98 の CD-ROM も必要。 それぞれ dd でイメージを作っておく (w2kupdate.iso、w98.iso)。
とりあえず2GB。
qemu-img create w2k.img 2G
/var のパーティションに余裕があるので、/var/lib/qemu を作ってそこにおく。
HDD イメージ・CD-ROM イメージを指定し(-hda、-cdrom)、CD-ROM からブートするようにオプションを指定(-boot d)して QEMU を起動。QEMU のグラフィックモードでマウスクリックした後、なぜか Ctrl-Alt してもマウスを grab したまま離してくれないので、QEMUモニタは qemu を起動した端末側にしておく (-monitor stdio)。 メモリは1GB実メモリの半分、512MBにしておく(-m 512)。
qemu -hda /var/lib/qemu/w2k.img \ -cdrom /tmp/w2kupdate.iso \ -boot d \ -m 512 \ -monitor stdio \ -user-net
インストール開始。 途中で Windows 2000 より前の OS の CD-ROM を要求される。 QEMU モニタ上で CD-ROM を交換
change cdrom /tmp/w98.iso
しかし、インストーラは正しい Windows 98 インストールディスクとして認識してくれず。 Windows 2000 を直接インストールするのは諦め。
遊びでちょっと sarge のインストールをちょっと途中まで QEMU 上でやってみる。 以前のインストーラより設定項目が少なくなった?
で気をとりなおして、Windows のインストールの続き。 Windows 98 SE をインストールしてから、Windows 2000 へアップグレードすることにする。
Windows 98 の起動ディスクのイメージを dd で作成 (w98fd1.img)。
これでブート
qemu -hda /var/lib/qemu/w2k.img \ -cdrom /tmp/w98.iso \ -fda w98fd1.img \ -boot a \ -m 512 \ -monitor stdio \ -user-net
こちらは順調にインストールが進む。 1時間以上かかってインストール完了。
Windows 98 起動中はCPUパワーを100%使うので、ファンががんがん回ってうるさいうるさい。
あいかわらず ungrab できないのが困るな。 1度 QEMUのグラフィカルウィンドウ上をクリックして grab されてしまうと、他のウィンドウにフォーカスを与えることができなくなってしまう。 Windows 98 側でシャットダウンして QEMU を終了させるか、Ctrl-Alt-Backspace で X Window System もろとも落とすとかしか手段がない。 Windows 使用中、他のウィンドウが使えないというのでは利用価値半減。
要調査。
まず Windows XP BOX に、Skype4COM 1.0.28.2 を入れる。 Skype4COM-1.0.28.2.zip をとってきて展開し、アーカイブの中の DLL を登録する。
regsvr32 Skype4COM.dll
次に以下のスクリプトを書いて、例えば setskypeavatar.js というファイルに保存する。
skype = WScript.CreateObject("Skype4COM.Skype"); skype.Settings.LoadAvatarFromFile("C:\avatar.png");
で、Skype を実行してログインしている状態でコマンドプロンプトから
start setskypeavatar.js
で実行する(あるいはエクスプローラ上から実行する)。Skype 側が「他のプログラムが Skype にアクセスしようとしています」というダイアログを表示するので連携を許可してあげると、アバタが avatar.png の画像に変更される。
細かい点気にしなけば簡単。
なお今回のように単純に Windows Script Host から API 接続すると、WScript.exe に対しての許可を与えなければならないので、その点は注意が必要。
ちなみに Skype for Linux では API にある「SET AVATAR」コマンドがまだ使えないので、同様のことが実現できなかった。
半年ぐらい前に Skype for Linux で Twitter への書き込みを自動的に Skype ムードメッセージに設定するスクリプト(記事)を作って cron で 10分毎に更新するようにした。
Windows BOX 上 Skype を使っている時も同様にできるように、Skype4COM を使うバージョンも書いてみた。 D-Bus ではなく Skype4COM を使うようにすることと、Skype4COM にはシフト JIS の文字列を渡すようにすること以外はほとんど同じ。
Skype4COM の DLL を登録し、Skype が起動している状態で以下の Perl スクリプトを実行。
#!/usr/bin/perl use strict; use warnings; use Win32::OLE; use URI::Fetch; use XML::RSS; use Date::Parse; use Encode; my $id = '自分の Twitter ID'; my $time = time; my $fetch_response = URI::Fetch->fetch( "http://twitter.com/statuses/user_timeline/$id.rss?dummy=$time") or die URI::Fetch->errstr; my $rss = XML::RSS->new; $rss->parse($fetch_response->content); die 'no items' if @{$rss->{items}} == 0; my $item = $rss->{items}->[0]; my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(str2time($item->{pubDate})); my $title = $item->{title}; my $mood = sprintf("$title [%02d/%02d %02d:%02d]", $mon + 1, $mday, $hour, $min); $mood = Encode::encode('shiftjis', $mood); my $skype = Win32::OLE->new('Skype4COM.Skype'); $skype->Client->Start unless $skype->Client->IsRunning; my $profile = $skype->CurrentUserProfile; $profile->{MoodText} = $mood;
インストール済みだった ActivePerl 5.8.8.822 で動作を確認(ちなみに現時点での最新は ActivePerl 5.10.0.1003)。なお URI::Fetch、XML::RSS、Date::Parse(TimeDate) は標準では入っていないので PPM パッケージでインストール。
タスク スケジューラで10分毎に上記のスクリプトを wperl.exe で実行するように設定。 これで Windows 上でもさえずりをムードメッセージに設定できるようになった。
PDL を使っている Perl プログラムを、昨日構築した今ごろの環境で PAR を使って実行可能ファイル化したんだけれども、実行してみたら
Can't locate loadable object for module PDL::Core in @INC ...
というエラー。 実行時のキャッシュディレクトリを見ると core.dll が同梱されていない模様。 なんでだー。
いろいろやってみたところ、もしやと思ってインストール済みの core.dll を Core.dll という名前に変えたらエラーが出なくなった(正確には次のモジュールで同様のエラーが出た)。
ファイル名の大文字・小文字が問題だったらしい。 PAR の FAQ には「Win32::Perms の Perms.DLL でこのエラーが出たら、Perms.dll にしてね」と書かれている。 最初これ拡張子の問題だけだと思っていた。 ベース名でも同様のようだ。
以前は問題なかったから、比較的新しい PAR で発生するようになったと思われる。 これ絶対はまる。
出社したら Dell のデスクトップ PC の電源ランプが黄色で点滅していて、診断ランプの 1 と 3 が点灯していた。電源回りの故障っぽい。直らなさそうなので、別の PC に乗り換え。結果的にスペックが上がってメモリも 4GB から 8GB になり OS も 32 bit から 64 bit になってツイてる。
幸い HDD は壊れていなかったので、ファイルはサルベージ可能だった。しかし USB 接続して中を眺めてみても大して要るものなかった。そういえば複数 PC での利用のためだったり故障時の備えのためだったりで、リモートの Linux 環境や Google ドライブやファイルサーバにファイルをほとんど移しておいたんだっけ。
ということで新 Windows 7 PC では最低限の環境だけにしておこう、もう。
今まで TrueCrypt を使ってきたけれど、今後は VHD + BitLocker で。
旧データは TrueCrypt を portable で一時的に展開し、旧ボリュームをマウントして VHD で作ったドライブにコピー。
こうしてみると
はしておいた方が良さそげだな。
あとは普段の作業は PuTTY の先の Linux 環境で(Emacs でドキュメント書いたり、プログラム書いたり)。メールは Gmail。ドキュメントは Emacs 上の howm (Markdown 形式) か Wiki か Google ドライブで書いて可能な限り Windows PC ローカルでは書かない。
[ キーバインディング ]
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。