検索サイトで、ソフトのシリアルナンバーやロック解除の方法、市販DVDのダウンロードなどをキーワードにした検索結果のアクセスが、時々ある。もちろん、自サイトではそれらとは関係ないが、単語の組み合わせによっては、ヒットしてしまうらしい。
それは仕方ないのだが、さすがに明らかに官公庁や地方自治体から、そんなアクセスがあってはマズイだろう。昨日は、奈良県庁と思われるところから、あるソフトのシリアルナンバーをキーワードにアクセスがあった。
ところで、大学からだと、アクセスが学生のなのか、教職員なのかが判断できないので難しい。
先日書いたように、FreeBSDのportsからインストールしたmrtgの起動時に、エラーメッセージが出る。mrtg自身はきちんと起動しているらしい。また、終了時にもメッセージが出る。ただし、起動時・終了時と書いたが、システムの起動時やシステムの終了時だけで、/usr/local/etc/rc.d/mrtg_daemon.shを直接起動したり終了したりしても、何も起きない。
ところで、今日になって、今度はxdmのログにも同じエントリが見つかった。ただし、今度は先のメッセージのうちの"console"という文字列がない。これは一度きりしかおきなかった。また、なぜか/tmp/roottcshhistory*の所有者がこのときだけnobodyになっている(他はmrtg)。
いろいろ探し回った挙句、このメッセージを出していると思われる部分が見つかった。/.tcshrcである。このファイルはFreeBSDのインストール時のままで手を加えていないはず。この中で、
## Command history settingsとなっている部分があるが、この部分が非常に怪しい。
#
set histfile=~/.history-${tty}
set history=500
set savehist=500
set histdup=erase
# merge history files
#
if ( -d /usr/bin/ ) then
touch /tmp/roottcshhistory$$ ${histfile}
chmod 600 /tmp/roottcshhistory$$ ${histfile}
cat ~/.history* | paste - - | sort | uniq -f 1 | \
awk '{print $1 "\n" substr($0, 14, length($0) - 13)}' | \
tail -n ${history} \
> /tmp/roottcshhistory$$
mv /tmp/roottcshhistory$$ ${histfile}
endif
この部分で、"~"を"/"とし、それをroot以外で実行しようとすれば、このようなメッセージが出る。なお、これは本来は/root/.tcshrcと同一(ハードリンク)のはずだが、/root/.tcshrcのほうは読み込まないようにすでに名前を変えていた。つまり、/.tcshrcを読んで、かつ、HOMEが/だと思っている人(少なくとも終了時点では非root)が実行しているtcshの出しているメッセージだろうと思われる。
では、誰がそのようなtcshを実行しているのだろう?やはり、一番怪しいのは、mrtgを起動するスクリプトだろう。ただし、実際にはmrtgの引数として"--user mrtg --group mrtg"を指定しているせいで、実行時にはrootだが、mrtgの起動途中でseteuid()相当のことをしている。この部分に、何らかの問題がある可能性が高い。しかも、mrtg自身かも知れないが、もしかすると直前にアップデートしたperl-5.8.8かも知れない。
なお、起動時に自動実行される${PREFIX}/etc/rc.d/以下のスクリプトの実行時には、$HOMEは"/"らしい。また、$USERも空文字列らしい。
5-STABLEのシステムを、6-STABLEへアップデートした。新規にインストールするのは面倒なので、make worldすることに。通常はmake worldでメジャーバージョンアップするのは怖いのだが、5.xと6.0ではそれほど致命的な問題はおきないと聞いたことがあったので、強引に進めた。
cvsupでRELENG_6に更新したソースツリーを用意し、まず、/etc/make.confを、src/share/examles/etc/make.confと比べながら修正。特に、COMPAT??はportsに移行したので注意。次にsrc/IPDATINGにざっと目を通して、make clean; make world. その間に、カーネル設定ファイルも新旧を見比べて修正する。なお、これらの修正のためには、自分の設定ファイルにも、CVSのIdタグが残っていると(比較基準がはっきりして)便利なので、なるべく残しておいた(もちろん、将来更新すればタグも書き換えてゆく)。
終了したら、make buildkernel; make installkernel。さらにmake installworld。なお、本来はシングルユーザに落としてから行うべきだが、ユーザがほかにいないことと、何よりディスプレイが付いていないことから、リモートからマルチユーザのままでこれらを行った。その後、mergemasterで/etc以下などを修正し、おしまい。なお、mergemasterの前には、/etcを丸ごとバックアップしておいたほうがいいのだが、うっかり忘れてしまった...
再起動し、何も問題のないことを確認した。続いて、古いファイル群を削除した。まず、portsからmisc/compat4xとmisc/compat5xをインストールして、再起動。次に、/bin、/sbin、/lib、/usr/bin、/usr/sbin、/usr/lib、/usr/lib32、/usr/libexecの各ディレクトリ以下で、今日の日付よりも古いファイルを消す。ただ、不都合があると困るので、実際には消さずに、ディレクトリを作ってそこに退避させた。この際、いくつかのファイルが消せなかった。原因は、schgフラグがセットされているため。chflagsでこのフラグを消せば、ファイルを消すことができる。そして再起動。
Qemuは今ひとつ安定しない。一方で、VMware Playerは結構安定。ということで、Qemuで仮想ディスクを作成し、VMware Playerで動かすことに。ここを参考にさせてもらい、QemuのディスクをVMware用に変換してみる。変換に多少の時間はかかるが、変換後にきちんと.vmxファイルを作成し、VMware Playerで使用すると、きちんと仮想マシンを起動できた。
とりあえず、Qemu上でインストールしたFreeBSD 6.0と、Free OS ZooからダウンロードしてきたNetBSD 2.0.2のディスクイメージは、どちらも無事に起動できて、安定して動いた。
FreeBSD/amd64でTightVNCがコンパイルできないし(see 2005.12.17)。VNCは実行できるが、実際にはコマンドの実行時にエラーが出て、何もできない(see 2005.12.14)。
今でも様子は変わらないので、やむを得ず、i386版のtightvncのpackage(tightvnc-1.2.9_1.tbz)をインストールしてみた。依存性で新たに必要になるものはなく、無事にインストールできた。その後、vncserverを起動してみたが、問題なさそうである。クライアントからの接続もきちんと処理できた。
ただし、i386版なのか、amd64版なのか、package名だけでは判断できないので、注意しないといけない。
[追記]see 2006.3.8。
Xの動いているホストへ、xdmでログインしたい。Xはcygwinのものを使えばいいだろうと思い、
Xwin -query targethostnameのようにして実行してみた。
しかし、WindowsXPの画面には、ただのXのウィンドウが画面いっぱいに表示されるだけ。ログインウィンドウは出ない。しかし、xdmを起動しているホストでは、WindowsXPのホストへ、接続しようとしている。
ということで、うまくいかない原因は、Windowsファイルウォールらしい。6000/tcpをあけてやると、無事にログインウィンドウが開いた。
もちろん、xdmを起動しているホストでは、xdm/Xaccessに、クライアントホスト名だけを書いた行を用意しておかないといけない。
先日に引き続き、今度はVMware Workstation 2の頃の仮想マシンを起動しようとしてみるが、そのままでは起動できないことは過去に書いた。何とかして変換できないかと検討してみる。
一昨日に書いた、NHCでは、VMware2ファイルはうまく認識できないらしい。ファイルを指定しても、その後にファイルのパラメータの指定を要求され、そこでは仮想ディスクファイル自身のサイズまでしか指定できない。つまり、たとえば500MBの仮想ディスクを作成しても、最初はそれほど要領を必要としないので、その仮想ディスクファイルの大きさはかなり小さいが(手元の例では、225,789/2 KB)、NHCは単にこの大きさのベタなイメージだと思うらしい。当然、VMware Playerからはきちんと認識できない。
また、VMwareのウェブサイトで配布されている、Windowsから仮想ディスクを直にマウントするドライバは、VMware4または5のディスクしか使えないようである。
Qemuのマニュアルでは、Qemu-imgによる変換なども、VMware4か5だけらしい。
ということで、VMware2のディスクはそのままでは扱う手段がないということらしい。地道にVMwareにお金を払ってアップデートしてきた人は、問題ないだろうけど。あ、もしかして、VMware Serverなら、変換できるのだろうか?と思って確認してみたが、やはりできなかった。ただし、設定ファイル自体を読み込むと、その内容の解釈は行っている。でも、仮想ディスク自体が読めないのなら、同じこと。
一昨日の方法で仮想ディスクを作成し、WindowsXP上のVMware Playerで、CentOS 4.2 i386をインストールしてみる。仮想ディスクには、とりあえず4GBを割り当てて作成してみた。また、インストール時には、パーソナル・デスクトップを指定することにした。なお、この際にどのくらいのディスク容量が必要なのかは、どこを見ても書かれていなかった。500MBから5GBなどという意味のない表示しかない。
さて、インストールのためのCDイメージが配布されているが、4枚もある。一方、DVDのイメージは、BitTorrentでないと入手できないらしい。BitTorrentは使いたくないとなると、4枚のCD-Rに焼き付けるか、ISOイメージファイルのままでVMwareからマウントしてCDに見せかけるか。わざわざCD-Rに焼くのはもったいないので、前者は却下。ところが、後者にするには、実HDDのディスク容量が十分ではない。さて、困った。
USBのディスクを使えばよかったのだが、ちょっとすぐには使えない状態だったので、別のパソコンにISOイメージを置き、ファイル共有で何とかすることに。ここで困ったのが、まず、どうやってイメージファイルを指定するかである。方法は、.vmxファイルで、
ide1:0.present = "TRUE"のようにして、ISOイメージを指定すればいい。
ide1:0.deviceType = "cdrom-image"
ide1:0.fileName = "Z:\share\iso\CentOS-4.2-i386-bin1of4.iso"
ide1:0.startConnected = "TRUE"
ところが、この方法だと、イメージの差し替えができない。4枚のCDを変える方法がないことになる。通常のVMwareなら、途中でCDをアンマウントして別のイメージファイルを指定しなおしてからマウントする、ということができるが、VMware Playerではそんなことはできないらしい。仕方がないので、ディスクの入れ替えを要求されるごとに、ISOファイルのファイル名を1枚目のISOファイルの名前に変更しながらごまかす、ということを繰り返した。なお、もしかすると、VMwareでの仮想ファイルではなく、DAEMON ToolsやB's Recorderに付属のマウントツールなどを使ってもうまくいくのかもしれない。ただし、3つ目以降のCD-ROMデバイスはどうするのだろう...SCSIにすれば何とかなるのだろうか?
インストール後の仮想ディスクのサイズは、約3GBだった。
さて、目的のひとつである、自作プログラムの動作確認を行う。が、パーソナル・デスクトップだと、コンパイラすら入っていないのね...もはやソースを自分でコンパイルする時代ではないのか。で、仕方ないので、以下のようにしてインストール。
$ su
# yum list available
# yum install gcc.i386
# yum install zlib-devel.i386
これが正しい方法なのかどうかは、知らない。
一昨日に5-STABLEからmake worldで更新したシステムを、昨日一日かけて、すべてのportsを強制的に更新した。"portupgrade -af"で行ったが、途中でエラーで止まると、非常に面倒なことになる。とりあえず、アップデート直後にportsからmisc/compat4xをインストールしていたので、
% cd /var/db/pkgなどとして、更新されていないportsをリストアップして、portupgradeを行っていった。
% find . \! -newer compat4x-i386-5.3_8/+DESC -name "+DESC" -print | sed 's/^\.\/\(.*\)\/\+DESC/\1/'
なお、気をつけないといけない点として、ライブラリ類は先に更新しておくことである。実際に、いくつかのportsで、libpngの互換性がどうとかいう問題が生じた。そのportsを更新してから同じものを更新すれば、無事に終わったので、ライブラリの問題であることは間違いないだろう。
ところで、インストール後に気になった点を2つほど。まず、日本語manが表示されない。ファイルは存在しているし、環境変数なども問題ないはず...と思ったが、実はファイルは存在していなかった。packageでインストールした残骸が若干残っていたが、/usr/docでmake installしただけではインストールされないらしい。2005.6.30.13:48:40以降、"WITH_JPMAN=1"を指定していないと、日本語manがインストールされなくなったので、要注意...って、去年の12月に自分でも書いているのに忘れている。
また、tcshで、tabキーなどでコマンドを補完した場合、なぜか表示が乱れる。なんだか、単語の区切りのスペースが1つ余分に入っているように見える。
昨日、VMware Playerへ、Qemuで作ったディスクを使ってCentOSをインストールしたことを書いたが、仮想マシンと実マシンの制御を切り替えるのに、毎回Alt+Ctrlを押すのはめんどくさい。過去の例からすると、おそらくVMware Toolsをインストールすれば何とかなりそうだが、あいにくVMware Playerでは提供されていない。
どこかで手に入らないかと思ったが、VMware Workstationに含まれているものをtrial license下でダウンロードして使っている人もいるようである。無償で手に入るものはないかと思ったら、VMware Serverにも含まれているらしい。"C:\Program Files\VMware\VMware Server"以下に、linux.isoやfreebsd.isoというファイルがあるので、それらをマウントするなどしてから、中の適当なファイルを展開て、インストーラを起動すればよいようである。
ともかく、これで、マウスの移動が自然にできるようになった。便利。
昨日も書いたが、普通にインストールして使う分には、便利な気がする。GUIはきれいだし、操作も(ある程度は)わかりやすい。ただし、メモリを食いすぎる。
なお、慣れないと、どこをどういじれば設定を変えられるのか、まったくわからない。サーバとしてはいじる気がしない。
どうも、最近、Xorgでマウスのホイールが使えない。ktermやfirefoxで、まったく効かない。ホイールをまわすと、ビープ音が出る。
どうも、Xorg側の仕様変更らしい(6.9.0)。こちらにそのような話が載っていたので、mousedの"-z 4"というフラグを消してからXを起動すると、きちんとホイールが使えた。なお、この時点でのxorg.confには、
Section "InputDevice"となっている。
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "Auto"
Option "Device" "/dev/sysmouse"
Option "Buttons" "5"
Option "Resolution" "100"
EndSection
VMware PlayerでCentOS 4.2を動かすと、時計が合わない。
まず、起動時にかなり進む。さらに、起動後も、1割くらい早い気がする。
いろんなところで問題になっているようだが、どうすればいいのかわからない。VMware 2のときにも同じようなことになった気もするが、結局よくわからなかった。
そういえば、UNIX MAGAZINEかSoftware Design誌で、VMwareの時計の制御方法が5つほど載っていたことがあったように思うのだが、目次リストを探しても見つからない...
FreeBSD/amd64で、TightVNCを動かす方法のまとめ。一応、パッケージも用意したが、何をしているかをまとめておきます。パッケージのダウンロードは、最後のほうを見てください。
2006.3.2に書いたように、amd64ではTightVNCが使えない(コンパイルできなかったり、できてもうまく動かなかったり)ので、i386版を使うのがよい。自分でi386環境でコンパイルするか、FreeBSDの配布サイトからとってくるかして、通常のパッケージと同じように、pkg_addで追加する。
ただし、bin/Xvnc(およびそのwrapperであるbin/vncserver)は問題ないが、bin/vncpasswdやbin/vncconnectは、ライブラリが足りないので、たぶんうまく動かない。そこで、i386のライブラリを一部追加する。この場合は、lib/libX11.so.6とlib/libXext.so.6(ただし、メジャーバージョンは要確認)を必要とするので、以下の手順で追加する。
/usr/X11R6/lib32とだけ書く。
最後に、bin/vncviewerはこれでは無理。あまりに依存するライブラリが多いので困るが、一方で、コンパイルできるので、自力でコンパイルしてやればよい。ソースを展開し、
% xmkmfでおしまい。もしかするとライブラリをいくつか必要とするかもしれないので、それらは自分でインストールしておけばよい(もちろんamd64版なので、portsからで十分)。
% make World
めんどくさそうなので、パッケージをここに置いておきます(パッケージ名:tightvnc-i386-amd64-1.2.9_1)。たぶん、FreeBSD/amd64が動くホストでは、問題なく動くと思うが、vncviewerだけはFreeBSD 6.1-PRERELEASE上で作ったので、動かなければ自力でコンパイルしてください。また、5.x系/6.x系ともに2006.1.17に導入されたrcの機能を使っているので、それ以降の環境でないと(たぶん)動きません。
ところで、上記の環境で、ひとつだけ問題がある。なぜか、gnomeデスクトップがvncで使えない。gnome-sessionを起動するようにしているが、これが異常終了するらしい。i386環境下では問題ないし、fvwm2等では普通に使えることや、xdmでログインして使う分には問題ないことから、i386版のXvncをamd64で使うことによる問題だと思われるが、これ以上は追求する余裕もないので、見なかったことにする。
FreeBSD/amd64 6.1-PRERELEASEの/usr/bin/lddって、i386バイナリを扱えないらしい。ちょっと不便。
また、32ビット用にldconfigに渡すパスが足りない。/etc/rc.d/ldconfigで、ldconfig32_pathsという変数にパスが入っていることを仮定しているが、現状ではまだ指定されていないため、/usr/lib32のライブラリはライブラリサーチパスに入っていない。なんだかおかしい気がする。このまま、6.1-RELEASEや5.5-RELEASEがリリースされるようだが、いいのだろうか?とりあえず、send-pr。
[追記]send-prはしたが、現在コミットの承認待ちなので待ってくれといわれた。でも、明らかに不自然なので、何とかしてほしい。
以前にも書いた気がするが、firefoxとjdk14をインストールしても、javaプラグインが動かない。
MLできいてみると、Linux用のjdk+linuxpluginwrapperだと動くらしい。でも、ネイティブなjdkではだめだった。
また、プラグイン用のディレクトリも、正しくはどこなのだか、よくわからない。firefoxのFAQなどを見てみたが、明示されてはいなかった。
そーいえば、最近は、Adobe Readerのプラグインも、きちんと動かないらしい。検索したら、同じような症状の人がいた。__ctype_b_locがない、というメッセージなので、きっとlibcの問題なのだろうが、何とかならないだろうか?libcの新しい関数を、別途実装すれば済むことのような気もするが、よくわからない。
時々、あるところから、この日記以下をすべてダウンロードしようとするアクセスがある。cgiなので(クローラのようなもので)すべてをダウンロードされると、非常に負荷が高くなるし、そもそもあちこちにリンクが埋め込まれているので、それを何も考えずにすべてアクセスされると、膨大な負担がかかる。
だから、普段はクローラにさえ、cgi関係はアクセスさせないのだが、そのイヤガラセのようなアクセスの場合は、ほかのページには目もくれず、cgiでの日記だけを執拗にアクセスして回っている。しかも、User Agentは通常のIEのようなので、おそらくはWindowsで動く巡回ソフトのようなものなのだろう。
あまりに不愉快なので、そいつのアクセスを無視してやろうと思ったが、残念ながら固定IPではないらしい。アクセスのたびにホスト名が変わるので、なんとも制御しづらい。しかも、p****-*****marunouchi.tokyo.ocn.ne.jpのようなホスト名なので、ここに属するIPアドレスの数も膨大で(しかも不連続)、またApacheによるホスト名でのアクセス制御も利かない。もちろん、tokyo.ocn.ne.jp以下をすべて蹴ってもいいのだけど。
何とかできないのだろうか?
昨日書いた件であるが、jdk14でのJavaプラグインが動かない原因がわかった。ビルド時に、"WITH_IPV6=1"としているのが悪かったらしい。
firefoxを動かしているホストに、適当なアプレットを用意して、Webサーバを通してアクセスしてみると、きちんと動くことが確認できた。ということは、プラグイン自体の問題ではなさそう。たしか、Javaコンソールには、何かがロードできないとか、見つからないとかいうエラーが出ていたことがあったので、リモートからファイルを取得できないのが原因であると推測される。そこで、"WITH_IPV6=1"を消してビルドしなおしたら、うまくいった。
まさか、"WITH_IPV6=1"が原因だったとは思いもしなかった。
なお、詳しい原因は、FreeBSD-users-jp 89339で梅本氏の説明があったとおりである。
最近、Webサーバのログを見ていると、この日記のRastによる検索結果へ、RSS形式での出力を指定する";type=rss"をつけたアクセスが定期的に行われることがあるようだ。
誰がこんなことをしているのかと思ったら、自分自身でも行っていたことが判明。つまり、意識的にしているわけではなく、誰か(何か)が自動的に行っているらしい。
で、ユーザエージェントを見ると、どうもGoogle DesktopSearchが行っているらしい。一度ブラウザから検索すると、ブラウザのキャッシュに検索結果が残る。tDiary-Rast出の検索結果には、ヘッダに上述のRSS用の引数がつけられたURIが埋め込まれているようなので、これを元に、Google DesktopSearchが勝手に30分毎にアクセスを繰り返している。
ちょっとうっとうしいが、キャッシュを消すしか対処方法はないのだろうか?過去に検索した結果に対してアクセスを繰り返すので、非常に負荷がかかる。
FreeBSD/amd64の/usr/bin/lddでは、32bitバイナリを扱えないので、ちょっと強引だが、FreeBSD/i386の/usr/bin/lddをamd64上で使ってみた。
すると、なぜか、対象のファイルが依存する共有ライブラリが表示されるのではなく、対象のファイルが実行されてしまう。なぜなのだろうか?
また、FreeBSD/i386上でスタティックリンクされたlddを作ってみたが、これをFreeBSD/amd64上で動かすと、coreを吐いて死んでしまう。これは、lddだけではなく、スタティックリンクされたバイナリすべてで起こるらしい。
WindowsXP Proから、Windows98やSambaの共有フォルダを開こうとすると、10秒以上は待たされる。以前はもうちょっとましだったはずなのだが、WindowsXPを再インストールしてからは、非常に時間がかかる。
何をしているのかとパケットをダンプして調べてみると、共有先のコンピュータの"\MAILSLOT\NET\NETLOGON"などというものへのアクセスらしき形跡が見える。これが6行くらいの時間をあけて2度ほど繰り返され、どちらにも共有先のコンピュータは答えを返していない。その後、通常のアクセスが行われるらしい。
WindowsXP Proは、過去のしがらみから、ドメインではなくワークグループに属しており、所属のLANにはドメインを構成する機器はないはず。しかし、上の結果からは、まずドメインのようなアクセスを行っているように見える。そのせいで、そのタイムアウト分の12秒くらいは待たされる羽目になるのではないだろうか?
何とかならないものかと設定を調べてみたが、容易にわかるものはなかった。15分のタイムアウトを過ぎるたびに、共有フォルダへのアクセスで時間がかかることになる。何とかしたい。
調べてみた結果、ローカルセキュリティ設定で、ローカルポリシーのセキュリティオプションにある、「ドメイン メンバ : 常にセキュリティ チャネルのデータをデジタル的に暗号化または署名する」が「有効」になっていた。しかも、なんだか注意を促すメッセージが付いている。その説明はここで行われているが、通常は「無効」らしい。まず、これを無効に変えてみたが、変化なし。
次に、同じような設定であるが、「ドメイン メンバ : 可能な場合、セキュリティ チャネルのデータをデジタル的に暗号化または署名する」と「ドメイン メンバ : 可能な場合、セキュリティ チャネルのデータをデジタル的に署名する」も有効になっていた。「可能な場合」ということは、可能かどうかを調べるために試してみるということだから、タイムアウトまでの時間がかかる原因になりうるだろう。そこで、これらを無効にしてみたら、共有先へのアクセスで待たされることはなくなった。
ところで、なぜこれらの設定が有効になってしまったのかはわからない。上記の説明を読む限りは、無効であるのが正しいはず。
上記は(たぶん)嘘なので、撤回します。で、解決は2006.3.14で。
なんだか、Google DesktopSearchを起動している限り、定期的にgoogle.com以下のサイトにアクセスを繰り返しているらしい。個人情報は送っていないということになっているが、結構怪しい気がする。そのうち、これを狙ったウィルスなどが現れそうで怖い。
WindowsXPから、共有フォルダを開くのに、10秒以上かかってしまう件で、一応の解決を。
いろいろと確認した結果、2006.3.11に書いた件は誤りらしい。一度アクセスしか共有先に、タイムアウトする前にアクセスしてしまったために、遅延が解消されたと錯覚してしまったのだろう。
で、遅かった原因は、lmhostsの指定だった。諸般の事情でネットワークを引っ越した際、従来のホスト名がDNSに登録できなくなってしまった。その結果、IP addressとホスト名の関係が途切れてしまった。一方で、新しい環境では完全にDHCPに移行したので、IP addressが固定で割り振られる保証がない(事実上は固定のようだが)。仕方ないので、Windowsでの共有のために、旧来のホスト名はそのままNetBIOS名として残し、DNS名は適当に割り当てられるままにしている。しかも、古いIP addressの登録を抹消していないので、新環境でホスト名だけを指定して名前を解決しようとすると、(通常は)適当にドメイン名を補ってしまい(って、そんなドメイン名の補完をやめればいいのだが、そうすると一部のホストにアクセスするのがめんどくさい)、変なIP addressを返されることになってしまう。
そこで、lmhostsファイルでこれを解決しようとしたのが誤りだった。WindowsXPのTCP/IPのプロパティで、WINSタブにある「LMHOSTSの参照を有効にする」を指定して、C:\Windows\System32\drivers\etc\lmhostsに対応を書き込んで使っていた。しかし、これがあると、どうも時間がかかるらしい。もしかすると、これがあるということは、ブロードキャストドメイン外のホストがあることを意味し、そのためにWINSサーバを使うことを想定していることになってしまうのかもしれない。ところが、実際にはWINSはないし、必要もない。「\MAILSLOT\NET\NETLOGON」などというものへのアクセスは、そのためなのだろうか?
ともかく、lmhostsの使用をやめると、共有フォルダへのアクセスが早くなった。念のため、Sambaサーバでのlmhostsも消しておいた。
# なお、早くなったとはいえ、まだ3-5秒くらいかかってしまうのはなぜだろう...
インストールするとネットワークアダプタが追加されるが、VMnet1がHost Only Network, VMnet8がNATらしい。
ところで、設定を変更するにはどうすればいいのだろう?と思ったら、VMwareのインストール先にある、vmnetcfg.exeというツールを使えばいいらしい。
現在、実家の国保の扶養家族のままであるが、このままでいいのかとふと気になった。しかも、実家のある自治体では、いまだに保険証が1世帯に1枚しか交付されないので、不自由で仕方ない。
はっきりと学生だと断言できれば、遠隔地用の保険証を発行してもらえるのだが、現在の宙ぶらりんな身分では、ちょっと気が引ける。しかも、それなりに所得があるのでちょっと気まずい。
気になったので、こちらの区役所に聞いてみたら、学生の場合を除いて、必ず加入しないといけないといわれた。その際、学生の身分を失っているのなら、いつ失ったかの証明がなければ、こちらに住民票を移したときまでさかのぼって、保険料を請求されるらしい。学生であることを示せれば、その間は実家の保険の扶養者扱いでもいいようである。
つまり、現在の身分が学生でないと判断されると、過去4年分を請求されてしまう。もちろん、その分を実家のほうの保険者から返してもらえるかもしれないが、たいした額ではない。何せ、京都市内で国保に入ると、恐ろしい金額が請求されてしまうし、国保の仕組み上は世帯が分割されればそれだけで保険料が増えるので、確実に大きな負担になる。
こちらの区役所としては、(加入するのなら)元の加入先の資格をいつ喪失したかをはっきりと証明するものがほしいらしく、それがなければ扱いたくなさそうだった。それでもあえて希望すれば、住民票移転時からの加入となってしまうようである。
さて、どうしたものか。
今朝方、今月分の更新を行ったら、言語バーがおかしくなってしまった。左右に2つ分並んで表示され、しかも漢字キーによるIMEの切り替えが効かなくなってしまった(IMEをOFFにすると、何も入力できない)。マウスでの切り替えはできるらしいが、入力モードの表示箇所が2箇所あるので、訳がわからない。
そうこうしているうちに、IMEで入力していたIEが突然落ちてしまった(ということで、この日記は書き直したもの)。
WindowsXPを再起動した後は、問題ないらしい。
以前からファンの異音が気になっていたが、とうとう修理に出すことにした。当初は、ファンにオイルを注すことでしばらくは使えたのだが、今では1日と持たない。さらに最近、ファンからガリガリという音がしている状態で、液晶画面の明るさがちらついている時があることに気が付いたので、そろそろ限界かと思って修理を依頼した。
昨日、サポートに電話して修理を依頼。引渡しには日通の「パソコンポ」を使うらしい。購入時の箱はなかったが、しっかり梱包できればよいらしい。梱包を依頼すれば、別途\1,000かかるらしいが、面倒なので頼むことにした。で、今朝に引取りに来てもらった。
故障箇所ははっきりしている(と思う)のだが、修理箇所の見積もりは27日前後(明日到着するとして、10日間以上!)になるといわれた。その後、修理するとしても、月内に返ってくればいいところだろう。なお、見積もりの時点で、\16,800はかかるらしい。後は+部品代、ということらしい。
しばらくは自宅でPCのない生活になってしまう。かなり不便なので、何とかしなければならない。
ところで、修理に出す際、自分で手を加えた場所はすべて購入時の状態に戻しておかないとまずそうなので、元に戻した。具体的には、換装したHDDを戻し、光学ドライブも最初のものに入れ替え、増設メモリも外した。ところが、増設メモリがないと、もともと128MBしかないので、WindowsXPが使い物にならない事に気づいた。起動すると、HDDへのアクセスがいつまでたっても終わらない。おそらく、激しくスワップインとアウトを繰り返しているのだろう。これはSP2まで更新しているからだろうか?購入時にはきちんとWindowsXP Home Editionが動いていたはずなのに...仕方ないので、増設メモリだけはそのままにしておいた。
また、修理先でログインできるようにしないといけないらしい。パスワードを教えてほしいといわれたが、パスワードを消しておくことにした。また、ログインできれば個人のデータファイルなども見られかねないので、別のアカウントを急遽でっち上げて、そのアカウントで自動ログインするようにしておいた。単に動作確認だけなら、ゲストアカウントでもよかったのだが、何らかの調査をするのならまずそうなので、適当なアカウントを作ったほうがいいだろうと思ったためである。まあ、そんなことをしても、悪意があればいくらでもデータを覗き見ることができるので、意味はないのかもしれないが。
Windowsを起動し、AL-Mail32でメールを取り込んで読んでいると、頻繁にHDDへのアクセスランプが点灯する。そしてその間、AL-Mail32の動作が遅くて困る。キーボードからのメールの移動すら利かない。
おそらくはGoogle Desktopが原因だと思うのだが、あまりにもたつくので、ストレスが溜まってしようがない。しかも、読んだメールをフォルダに振り分けると、そのときにもまたディスクアクセスが激しく起こる。なんとかならんのか。一メール/一ファイルで、且つフォルダ構造をファイルシステムに対応させているMUAでは仕方ないことなのか。
LAN内のホストに、cygwinからxdmで接続しようとしたら、うまくいかない。
xdmを起動したホストに、"XWin -query xdmhostname"のようにして接続しようとした。今までは特に問題なかったのだが、VMware Playerをインストールしてからはうまくいかない。
原因は、なぜかXWinがインタフェースとしてVMnet1を使おうとしているせいらしい。xdmを起動したホストで、socketのbindの状況を見ると、xdmはWindowsホストの「ローカルエリア接続」のアドレスではなく、VMnet1のアドレスの6000/tcpにbindしていることがわかった。
なぜこのようなことが起こるのかはよくわからない。どう見ても、同じ「ローカルエリア接続」と同じサブネットにあるホストへの接続なのに、なぜ別のインターフェイスを使うことになるのか?誰が悪いんだ?
原因はわからないが、対策としては、「ローカルエリア接続」とはまったく違うIPアドレスをVMnet1やVMnet8などに割り振ればいいらしい。しかし、本来はサブネットが重ならなければ問題ないはずなので、何らかのバグだろう。
2006.3.4に書いたように、FreeBSD 6.1-PRERELEASEで、tcshのコマンド補完がずれる。コマンド間の区切りが多いように見える。
原因は、tcshを6.12から6.14に更新した際に入ったバグらしいことが分かった。パッチは次のとおり:
--- tw.parse.c.orig Fri Mar 4 01:40:53 2005
+++ tw.parse.c Wed Mar 15 22:54:08 2006
@@ -2088,6 +2088,7 @@
Char f = items[i][w - 1];
items[i][w - 1] = 0;
print_with_color(items[i], w - 1, f);
+ wx++;
}
else {
/* Print filename followed by '/' or '*' or ' ' */
send-prしてみるが、tcsh側のバグだし、FreeBSD 5.5-RELEASEや6.1-RELEASEへ向けてのcode freeze中なので、どうなるだろうか。
ところで、このバグに気づくのにずいぶんと時間がかかってしまった。ソースコードを特定するのにも手間取ったし、何より、シェルに手を加えながらデバッグするので、うっかりして変なところをいじってしまってえらい目に合ってしまった。
昨日のtcshのバグは、すでに報告済みだった。
FreeBSDではPR bin/88538と同じ内容であり、本家のtcsh側ではここで報告されていた。
なお、FreeBSDでのsend-prは却下された。We don't take software with active external maintainers off the vendor branch for cosmetic fixes.ということらしい。"cosmetic fix"というのに結構カチンときたが、仕方ないか。
2006.3.2に書いたようなエラーメッセージが、mrtgの起動時に表示される件であるが、原因がわかった。
起動時に、${PREFIX}/etc/rc.d/mrtg_daemon.shが実行される際に、rc.subrの機能により、
su -m mrtg -c 'sh -c "${mrtg_daemon_flags}"'が実行される(${mrtg_daemon_flags}は変数から文字列に展開されているはず)。
この際の"su -m mrtg"で、起動時のユーザやログインシェルのままで(つまり、rootが/をHOMEにしてtcshを起動し、ユーザmrtgとして振舞う)、「-c 'sh -c "${mrtg_daemon_flags}"'」というコマンドをそのtcshに渡す。その結果、rootの設定ファイルを基にしているtcshが、mrtgの権限でshを起動して"${mrtg_daemon_flags}"を実行することになる。つまり、この時点ではHOMEは/なので、実効ユーザがmrtgの状態で、/.tcshrcが読めればそれを読み込んで(t)cshを起動しようとしてしまう。そこで、/.tcshrcに書かれていた件のエラーが発生してしまうようである。
"sh -m"を使うことで、シェルを変えさせないで(つまり、対象のユーザのログインシェルが無効なものでもよい)、コマンドを実行できるので、実効ユーザを変えてコマンドを実行するには便利だろう。一方、シェルの設定ファイルの扱いには注意が必要になるので、実用的には、所有者以外の読み出し権をなくしておくなどするのが妥当だろう。そもそも、root以外が実行しても意味がない(し、実害もない)ものなので、気にする必要もないのかもしれない。
また一方で、mrtgの起動スクリプトは、mrtg自身でseteuid()するように意図されているようである。つまり、$mrtg_daemon_userという変数が、rc.subrでユーザの変更に利用された後、さらにmrtg引数として実効ユーザとグループとを指定するのにも使われている。実際、後者だけでも実効ユーザを指定できるようなので、冗長である。よって、変数名が不適切だった、ということも言えるだろう。
ところで、そもそも、/.tcshrcというファイルはいつ持ち込まれたのだろうか?ファイルの日付は一年以上前だが、現システムを新しいHDDにインストールしたのはちょうど一年前である。ということで、よくわからない。ファイルにはFreeBSDのCVSタグがなく、"Daichi GOTO"という作者名があったので、BSD Magazineなどからとってきたのだろうか?と思ったが、ソースツリーのetc/root/dot.tcshrcと同じものらしいことがわかった。
なお、デバッグには、起動スクリプトに"rc_debug=1"などと追加しておくと(ただしload_rc_configの後でないと無意味)、そのスクリプトだけ、/etc/rc.subrの関数を実行する際にある程度のメッセージが出力されるようになる。
昨日のmrtgの話に関連して、/.tcshrcなどのファイルはどこから来たのだろう?昨日は、「ソースツリーのetc/root/dot.tcshrcと同じもの」と書いたが、FreeBSDのソースツリーにはそんなものはないようだ。それに、/usr/share/skel/dot.*のファイルがかなりたくさんあり、それらうち、余分なファイルのタイムスタンプも、/.tcshrcのものと同じである。
いろいろと記憶をたどると、現システムのインストール時に、FreeBSD Expert 2005の付録のCD-ROMを使ったらしいことがわかった。そして、そこに収録されたものは、FreeBSD Projectで配布しているものから、いくつかのファイルを追加したものらしいことを確認。つまり、この過程で余分なファイルが混入したらしい。
portsからdns/bind9をインストールし、base systemのbindは使っていない。ただ、"PORT_REPLACES_BASE_BIND9"を定義してbindをビルドしているわけではないので、/usr/local以下などにbind9がインストールされている。
先日、rndcを使おうとしたら、うまくいかない。
rndc: connection to remote host closedなどといわれるので、設定を確認したが、何も問題はなさそう。
This may indicate that the remote server is using an older version of
the command protocol, this host is not authorized to connect,
or the key is invali
原因は、どのrndcを使っているかだった。通常は/usr/sbin/rndcのほうが先に見つかるので、こちらが実行されてしまい、その結果、必要なファイルが見つからないのでエラーになる。きちんと/usr/local/sbin/rndcを使ったら、うまく動いた。
販売終了らしい。一番まともな発泡酒だと思ってたのに。ほかのは変な甘みや酸味があって気持ち悪い。スターチやその他の糖類のせいだろうか?
手元のDNSサーバへのcache queryが相次いでいる。関係ないホストからなので、無視しているが、鬱陶しい。
どこのアホかと確認してみたら、大阪梅田にある某家電量販店が有名な会社のホストからだった。しかも、上位プロバイダの異なる2つのアドレスからだった。
ヨ○バシカメラよ、何の目的だ?
なお、今も30分毎くらいに続いている。
最近、存在しないドメインからのメールが多い。MXレコードが引けないのは却下しているが、上位のサーバは受け入れているらしい。
ここ数日は、yahco.co.jpやe-standard.bizなどのドメインが多い。あまりに鬱陶しいので、名前を引く前に却下しようと思う。/etc/mail/accessに
yahco.co.jp REJECTとして、make access.dbしてデータベース化して様子を見てみた。
e-standard.biz REJECT
その結果、確かに却下されているらしい。しかし、依然、名前を引くのに時間がかかっているようである。わざわざチェックしなくても、データベースに見つかった時点で却下してほしい。
分子モデルを作成する際、"z matrix"に言及しているソフトが多い。"z matrix"とは何だろう?全くなじみがない。
どうも、(x,y,z)のデカルト座標ではなく、(原子間距離,結合角,2面体角)で原子の座標を表すものらしい。しかし、どこが"matrix"なのか、よく分からない。
また、空間での絶対位置や、分子全体の方向に関する情報は指定できないらしい。モデルだから要らないといえばそうなのだが、それで十分なものだろうか?
なお、モデル構築には、WinMostarを使ってみたが、今ひとつ使い方がよくわからない。ドキュメントがほとんどないのが原因。未踏ソフトウェアで結構な金をもらっているはずなので、それくらいはきちんと整備してほしい。また、操作していると、z-matrixの値が結構ずれてくる。おそらく、浮動小数点演算での誤差が原因だと思うが、なんとなく気持ち悪い。
"WITHOUT_TCP_WRAPPERS"という変数が追加されたらしい。inetdから起動する場合、従来はsshdだけがlibwrapによるチェックを1回余分に実行されていたが、これで重複させずに実行できる。"2つ目のinetd"も起動させずにすむようになった(see here)。なお、その結果、libwrapでのチェックはすべてinetd経由で行うことになり、警告メールの送信者もすべてinetdを実行しているユーザからとなってしまった(sshdでは認証に成功すれば認証後のユーザになる)。
ついでに、"WITH_HPN=1"も指定してみた。変化は体感できない。
WindowsXPでFFFTPを使ってFTPサイトに接続した際、リモートのファイルリストが表示されないことがあった。特に、ftp.freebsd.orgは大丈夫だったのに、ftp3.jp.freebsd.orgやftp4.jp.freebsd.orgがダメだったので、NATなどの問題ではなく、リモートのホストによるらしい。
FFFTPのFAQをみると、それらしい項目があったが、その中の「ホストの設定の高度タブのLISTコマンドでファイル一覧を取得に チェックマークを付けます。 ホストに接続しなおし、表示メニューの最新の情報に更新を行なってください。」という件がポイントだった。つまり、FFFTPでは通常はLISTコマンドを使っているのではないらしい。FAQには"NLST -alL"コマンドを使っていると書かれていた。何でわざわざ一般性のないコマンドを使っているのだろう?
結構検索があるので、補足。
「セキュリティログがいっぱい」というメッセージが出た場合、実際に何らかの原因でログがいっぱいになっている可能性が高い(日付が狂っていた、という例外があったが)。ログのサイズなどは、「コントロールパネル」−「管理ツール」−「イベントビューア」を開き、右側のペインの各ログを右クリックして、必要な操作をすればいい。
プロパティを開いて、ログサイズを大きくするのが安直な方法。更に、「必要に応じてイベントを上書きする」としておけば適当に上書きされる。ただし、ログがすぐに消されてしまいかねないので、ログファイルのサイズを20MB位にして、「イベントを上書き」で半年後くらいにしておくのが適当なのではないかと思っている。
WinMostarでモデルを作成し、xyz形式で保存すると、ヘッダの2行が記録されない。このままでは、他のソフトで扱えないので、注意。たとえば、DS ViewerLiteでは開く際にエラーとなる。
ところが、このままでBabelでほかの形式に変換しようとすると、いつまでも終わらなくなるので、要注意。フォーマットのチェックをしていないらしい。
2006.3.20で書いた件で、アクセス元であるヨド○シカメラの担当者に聞いてみた。すると、「弊社では、お客様に快適にお買い物をしていただく為に、コンピュータの負荷分散を行っております。弊社のサイトに一度アクセスをしていただきますと、次回のアクセスの際には、弊社内で一番空いているコンピュータを利用していただく為に今回のパケットを送っております。」ということだった。なんだか意味がわからない。
まず、この会社のウェブサイトにアクセスすることと、手元のDNSサーバとの関係がわからない。ウェブサイトへのアクセスと、名前解決とはまったく独立して行われているはずである。また、こちらのサーバはキャッシュサーバでしかなく、公開されているドメインの管理サーバではない。ではなぜこちらのDNSサーバにアクセスしてくるのかと考えてみると、単にウェブアクセスを行ってきたホストでDNSサーバが動いていた、と考えるのが妥当だろう。つまり、この会社では、アクセスもとのホストすべてにDNS cache queryを行っているのではないか。そしてたまたまそこでDNSサーバが動いていると、以降は定期的に(相当頻繁に)DNS cache queryを行うらしい。
次に、なぜこれが負荷分散になるのか?まったくわからない...もしかして、'./NS/IN'に対するcacheのqueryということは、現在のキャッシュ全てを調べるということなのだろうか?そこにキャッシュされている自社のホスト名に対するIPアドレスを見て、次回もそこへ誘導しようとしているということだろうか?それなら、キャッシュの転送を拒否されるか、キャッシュに残っていないかの時点であきらめるべきだろう。いつまでもしつこく繰り返す意味がまったくわからない。
大体、自社のサイトにアクセスしてきた全てに対して、このようなことを繰り返しているのは、愚かとしか言いようがない。
勤務先のネットワークに外部から接続するため、SSL-VPNが導入された。どうやって接続するのだろう?と思っていると、勤務先のWebページのあるボタンをクリックすると、IEに対してプラグイン(アドオン)のインストールが行われ、それを通して接続するらしい。アドオンには、"F5 Networks"と書かれていた。ネットワーク接続には、ダイアルアップの接続先アイコンができていた。ただし、そこには通常のダイアル番号ではなく、別の数字の羅列が指定されていた。また、デバイスマネージャからは見えないが、仮想的なモデムのようなものがインストールされているらしく、ダイアルアップ時にはこちらを指定するようになっていた。
仕組みがいまひとつよくわからないが、SSL-VPNのアプライアンス製品では、そんなものなのだろうか?また、接続中は、httpsのセッションがいくつか張られていたので(それ以外は特にない)、すべてをHTTPの上で行うようなものなのかもしれない(SoftEther改めPacketiXみたいなもの?)。そもそも、正体のわからないアドオンがインストールされるのは、かなり気持ち悪かった。学生にも使用させるとすれば、かなりきちんと教えないと、かえってセキュリティへの警戒心を失わせる結果になる。
また、接続後は、内部のWebサーバへのアクセスと、共有フォルダなどにアクセスできるが、ユーザインタフェースはかなり使いにくい。
昨日あたりから、kyoto-inetのホスト名の逆引きがおかしいらしい。逆引きで表示される名前を正引きしても、見つからない。そのせいで、sshdが「攻撃かもしれん」と警告を発するようになった。
また、kyoto-inetのメールアドレスには、最近SPAMメールが届くようになった。アドレスを公開したことはないはずなのに...推測だけなのだろうか?しかも、同じkyoto-inet内のホストから出されているように見える。
生まれて初めて胃カメラを飲んだ。泣きそうになった。何も見つからなければいいんだけど。
tcshを使っていて、echoコマンドの引数の文字列に"!!"を含む文字列を入力しようとすると、"!!"が直前のコマンドに置換されてしまう。具体的には、"!!"を入力した後で、どこかのタイミングでスペースを入力すると、その時点で置換されるらしい。
これは、(当然ながら)Windowsなどから端末エミュレータを使って操作をしていても同じことである。特に、コピーアンドペーストで文字列を貼り付けた際に起こると、まったくわけがわからないままに変な文字列が入力されることになってしまい、混乱してしまった。
本日、修理から返ってきた。見積もりを受けて返事をする時点で1日、昨日不在だったのでもう1日、余分にかかっているので、本当はもう少し早く受け取れたはずだったが、いずれにしても予定よりもずいぶんと早くできた。
交換されたファンを確認したが、形状が変わっていた。
2006.1.20で書いたように、少なくとも当時のportupgradeとMOVEDファイルとでは、一度消えたoriginのportsは、再度作成されても(あるいは別の名前からrenameされても)、もう存在しないものとして扱われることになっていた。これでは困るので、文句を言ってみたが(PR ports/92037)、結局、MOVEDファイルの問題、ということで決着済みらしい。PR ports/66892をベースに、MOVEDファイルのrev.1.889で修正されていた。
研究室のFAXが壊れた。電話機兼用だったので、電話すら鳴らない。呼び出し側では呼び出し音が聞こえるので、たちが悪い。
買い換えるのもなんなので、とりあえずは自宅にあった電話機をつないでおいた。FAXは不可だが、そんなに困ることもないだろう、きっと。
年度末で工事が多い。しかも、なぜか居室周辺ばかりで、やかましくてしょうがない。先週末でやっと終わったと思ったら、今朝からまた別の工事が開始された。しかも、今年度に工事を終えたばかりのところである。窓のすぐ外で作業をしているのだが、当研究室には何の関係もない工事なので、なぜ作ったばかりのものをまた壊しているのか、まったくわからない。
それに、建物への出入りが不便になった。当分は、研究室に行くためには、一旦2階へ上がってから遠回りして1階へ降りる、という変則的な移動になる。しかも夜間入館時には、ICカードを使わないといけないらしいが、きっとカードの管理が甘くなることは容易に推測されるだろう。さらに番号錠も残す、というよくわからない運用である。
IPsecを強制しているホスト間で、一方からsshでログインし、"shutdown -p now"すると、ログインを開始したホストのsshが固まってしまう。実際には、しばらく待てばタイムアウトでプロンプトが戻ってくるが、その間はどうしようもない。
おそらく、sshdの終了とracoonの終了のタイミングだとは思うのだが、よくわからない。相手がFreeBSD 6.1-PRERELEASEなので、racoonの終了のタイミングをかなり遅くしたつもりなのだが、sshdの終了のタイミングがわかっていないので、なんともできない。sshdというよりも、shutdownがログイン中のユーザを追い出すタイミングのほうが効くのだろうか?
FreeBSD 6.1-PRERELEASEのホストから届くdaily security statusのメールの形式に、何か違和感を覚えていたが、どうもdiffの形式の違いによるものらしい。5-STABLEとは異なり、6-STABLEではsecurity statusのメールでのdiffの形式を指定できるが、これが標準でunified diffになっているためである。
realPlayerに脆弱性があるらしいので、アップデートした。インストーラの終了後、realPlayerが起動されるが、その際に、有償版のrealPlayer Plusではなく、無償版を選んだはずなのに、次の画面では有償版の登録が要求された。前の画面に戻って再度指定しなおせばいいらしいが、うっかり有償版を選択したことになったままで個人情報を入力すると、支払いを請求されることになりそう。
所詮請求なので無視できなくもないが、なんとなくそのやり口が不愉快。なお、上述の挙動の原因は、ウィンドウを描画後に、表示位置を再調整することでラジオボタンの選択がリセットされるためらしい。
また、Real.comのサイトから、realPlayerをダウンロードしようとすると、なんだかよくわからないアドオンが、IEに追加される。その状態のまま、別のサイトなどから.exeファイルをダウンロードしようとすると、「保存」が選べなくなってしまう。一旦このアドオンを無効にすれば大丈夫らしい。また、ブラウザを再起動すれば大丈夫なのかもしれないが、非常に怪しい。
WindowsXPのcmd.exeで、コマンド置換はできないのだろうか?たとえば、短いファイル名を得るようなフィルタがあったとして、そのファイル名を別のコマンドの引数に使いたい場合、これを実現する方法が思いつかない。一旦、中間的なバッチファイルを生成するしかないのだろうか?
また、環境変数になら保存できるのかと思ってやってみたが、プログラム中で保存した環境変数は、そのプログラム内でしか有効ではなかった。
ちなみに、フィルタをこんな風にCで書いてみたけど...間違った使い方をしているようだが、出力だけはできるらしい。
#include <stdio.h>
#include <windows.h>
#include <winbase.h>
int main(int argc, char* argv[])
{
char buf[1025];
if (argc != 2) exit(EXIT_FAILURE);
GetShortPathName(argv[1], buf, sizeof(buf));
fprintf(stdout, "%s\n", buf);
SetEnvironmentVariable("SHORTNAME", buf);
return 0;
}
上述のように、長いファイル名やスペースを含むパスなどに対応していない、化石のようなプログラム(もしくはスペースを考慮できていないプログラム)を実行するため、何か便利な方法がないかと画策する。コマンドプロンプトの範囲では難しいので、WScriptで行う。
一般的に行うのは、ちょっとめんどくさいが、対象のプログラムを固定すれば、以下のように実行できた。
Dim WSHShellこのスクリプトでは、「識別君」というソフト(もはや配布元不明)を対象に操作している。
Set WSHShell = WScript.CreateObject("WScript.SHell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set arg = WScript.Arguments
If ( arg.Count > 0 ) Then
If objFSO.FileExists(arg(0)) Then
Set fname = objFSO.GetFile(arg(0))
WSHShell.Run "C:\Utility\Shikibetsukun\SikibetuKun.exe " & fname.ShortPath
Else
WSHShell.Run "C:\Utility\Shikibetsukun\SikibetuKun.exe"
End If
Else
WSHShell.Run "C:\Utility\Shikibetsukun\SikibetuKun.exe"
End If
なお、引数をいくらでも扱い、すべての引数について短いファイル名があればそれを使うことにすれば、汎用性のあるスクリプトに変えられるかもしれないが、面倒なのでパス。