持ち運んで使うWWWサーバ 2005  2005/04a 
  
  
[Table of Contents]はじめに
前のページで述べたような
環境でしばらく満足していたのですが、
やっぱり人間というのは欲深いものなのですね。
2004(平成16)年の秋くらいから、この環境にだんだん不満を感じる
ようになってきました。その理由として
ということがあげられます(わざわざ箇条書きにした意味がないんだけど>俺)。
ちょっとした必要にせまられて、
『なんちゃって画像転送同調装置』 なるものを作ってみたんですけど、
このCGIプログラムが、フラッシュメモリを挿しただけのWindows機で
動いてくれたら! ‥‥とどうしても考えてしまうわけです。
[Table of Contents]そんなこんなで結局 Apache に
やっぱ Apache しかないのかよ と思って、
やってみたところ‥ CGI うまく動く!! 
(^o^)
やったことを簡単に書いておくと‥
  -  フラッシュメモリを挿す。ここではこれを仮に F: ドライブとする
  
-  F:\WWW フォルダを作る
  
-  Apache を持ってくる。今回試したのは Apache 1.3.33 です。
  
-  Apache のインストール。私が注意した点は‥
      
	-  インストール先は F:\WWW\Apache に。
	
-  途中で、何だっけな‥たしか
       「サービスとして起動」か「手作業で起動」のどっち? とか
	    聞かれたときに「手作業で起動」をチェック
      
 
-  F:\WWW\Apache\httpd.conf を開く。すると、あちこちのパス指定の
      箇所に F:\WWW\Apache\... のようにドライブ名が決め打ちされてる
      箇所があるので、そこから F: の部分を消して、
      \WWW\Apache\... のようにする。
  
-  DocumentRoot は F:\WWW\Apache\htdocs になってるけど、これを
      \WWW\htdocs に変える。(個人的な趣味?)
  
-  上記以外の場所についても、チョコチョコいじる (^_^;AllowOverride None を AllowOverride All にしたり、
      ServerName を 127.0.0.1 にしたりとか。まあ、
      使うのはグローバルIPを名乗らないPCばかりだし、
      セキュリティのことは考えずともよい環境だしね。
-  この状態で、一度 Apache.exe をダブルクリックして Apache を
      起動させてみる。 ... おおお、うまく起動してるじゃん!
  
-  さらに Perl のインストール。とりあえず Perl4 のバイナリが
      動けば十分だろ? ということで、JPERL4 のパッケージ
     (njperl45.lzh というパッケージを見つけました)を入手して展開して
      F:\WWW\Jperl\JPERL.exe という場所(これもフラッシュメモリの中ね)
      に jperl 本体が置かれるようにしてみる。
  
-  \WWW\Apache\cgi-bin に printenv.pl というファイルがあるけど、
       このファイルの最初に以下の行を追加:
        
       そのうえで http://localhost/cgi-bin/printenv.pl にアクセス。
       おお、CGI 動いてるよ!! (^o^)
-  ここで一度 Apache を終わらせてフラッシュメモリを抜いて、
      他のPCに挿して、フラッシュメモリ上にある Apache.exe を
      ダブルクリックして Apache を起動させて CGI のテスト ... うまくいく!
  
-  ちなみに、この段階での F:\WWW のファイル容量は
      「サイズ: 5.57MB / ディスク上のサイズ: 12.3MB」といった感じ。
      両方の数値にはずいぶん開きがあるけど、でもまあ、32MB の
      フラッシュメモリを使うんであれば、容量にはかなり余裕が
      ある感じ。
  
-  なお jcode.pl はこの JPERL4 のセットでは動きません。
	というか、私には動かせませんでした‥
なお、こうして構築した \WWW 以下のカタマリ(?)につきましては、
そのカタマリをそのまま別の Windows PC の C:\WWW にコピー
(ドラッグ・アンド・ドロップ)して、フラッシュメモリを抜いて、
C:\WWW 以下にある Apache.exe をダブルクリックしたらちゃんと
CGI まで動きましたので、かなり可搬性の高いセットになったの
ではないかと自負しております :D
(「ショートカット」は使わないのがコツみたいです。というか、
ドライブ名なしのショートカットがどうしても作れない‥)
[Table of Contents]Apache 起動とレジストリ
ここで気になるのは、Apache 起動によってレジストリにどのような
影響が生じるのか、といったあたりだと思われます。
‥とかいいつつ、実は私は「レジストリ」についてはよく知らないので、
とにかく「レジストリに大きな変更がなきゃいいなあ」といった程度の
心配しかないんですけどね。
んで、とりあえず Apache の起動の前後でレジストリにどのような
変化があったかを見てみるため、
  regedit 起動、レジストリ書き出し(1)、
  Apache 起動、 Apache 終了、regedit 起動、レジストリ書き出し(2)、
という一連の操作を行ってみて、
1回目に書き出したレジストリの中身と、
2回目に書き出したレジストリの中身との差分を RegDiff を使って
取り出してみました。取り出された差分情報は4項目だけで、
それらのキー部分(?)だけを取り出すと、こんな感じです。
| [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG] [HKEY_USERS\S-1-5-21-789336058-854245398-839522115-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\*]
 [HKEY_USERS\S-1-5-21-789336058-854245398-839522115-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\reg]
 [HKEY_USERS\S-1-5-21-789336058-854245398-839522115-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{75048700-EF1F-11D0-9888-006097DEACF9}\Count]
 | 
‥‥何だかよくわかんないんですけど
^^;、
ちょっと見た感じでは Microsoft の暗号系のキー値と、
Explorer のコモンダイアログの値が変更されてる
(この変化はたぶん regedit でレジストリの中身を書き出したことに
よって生じたものと推測)くらいで、
とくに Apache と関係してそうな項目が勝手にレジストリに追加された、
なんてことはなさそうです。
つまり、たぶんフラッシュメモリに入った Apache を
起動させたというだけでは Windows 環境に何かの重大な影響を与える
わけではなさそうだということが言えそうです。
[Table of Contents]ふろく
-  日本語のファイル名を用いたファイルの扱いに問題があります。
  ファイルにアクセスできないことがあります。
  アクセスできない文字が決まっているようですので、
  それを避ければよいんだろうな、ということはわかりました。どういう文字がダメかというと、
  私が得た感触では、文字列の中にアルファベットの大文字に当たる文字列、たぶん 0x40 から
  0x5c のあたり、これが入っているとダメになるような感じです。たとえばSJISの「脱」、これ
  アルファベットと関係しなさそうに一見見えるんですけど、文字の2バイト目が 0x45 でこれが
  たぶんApacheからはアルファベットの"E"に見えるんでしょうね。んでたぶん
  Apacheが内部的に"E"を"e"に書き換えてからファイルにアクセス
  しに行って、でもそうすると「脱」だったのが「段」に変わってしまうので、
  日本語をちゃんと扱うことのできるWindowsからすると「(脱ならあるけど)段なんて
  ファイルないし」と言われる、そんな感じになってるように思われます。
  ‥んー。いまだ良い対処法なし。別のhttpdを探すしかない?
  AN HTTPD は設定内容を全部レジストリに置くのでPortableには使えないんだよな‥
  (レジストリを汚すとかどうとかより、マシン換えるごとにメニューから いちいち手作業で
  設定作業をおこなう必要があり、Portableとしては実用的じゃない。まあ *.reg ファイルを
  同じディレクトリに置いておけばいいのかもしれないけど、それはちょっとパスしたい)
  ==>==> [ムリムリと何とかしてみた]