Windows だと nmake がやっぱり主流だろうか。 しかし GNU Make とは違う点が多く、使い分けるのも面倒。 かといって Ant というのも面倒。
ということで気軽に使える Windows 用の GNU Make を探す。 Cygwin 版は共同作業者に入れてもらうのが面倒なので却下(Makefile から呼ばれるコマンド群もLinuxと同様のものが入るのでこちらの方が便利といえば便利ではあるのだが)。
MinGW版が 3.80 をポーティングしているし単体でも動きそうなのでこれを試してみることにする。
mingw32-make-3.80.0-3.exe を取ってきて実行。make そのものだと思っていたがマニュアル等を含むインストーラだった。 一旦インストールして、mingw32-make.exe をコピーしてアンインストール。 mingw32-make.exe 単体で動作するので取り扱いが楽でよい(必要なら make.exe にでもリネーム)。
Windows 特有の問題があるかどうかは今後使ってみてチェックだな。
Windows でのファイルの同期には Unison を使ったりしているのだが双方向むけのものなので、目的によっては向かない事もある。
やっぱり rsync も使いたい。かといって Cygwin をインストールするのも面倒だし。
で探してみたところ cwRsync というのを発見。 これも Cygwin 上で動くものなのだが、rsync, ssh, ssh-keygen と cygwin1.dll 等必要最低限のDLL だけがパッケージされていて気軽にインストールできるようになっている。
exe 1個で済む Unison ほど扱いやすくはないが、Cygwin を1から入れるよりはずっと楽。
daemon-mode protocol: rsync -rv rsync://rsync.samba.org/ftp/unpacked/rsync/ . ローカル: rsync -rv /usr/local/aaa . ローカル(ドライブ指定): rsync -rv /cygdrive/c/usr/local/aaa . リモート: rsync -e ssh -v www.example.com:/home/naney/a.txt .
などの動作を確認。ファイル共有しているリモートファイルのUNCによる指定はうまくいかない(Cygwin ではどうやって指定する?)が、ネットワークドライブ割り当てをすればアクセスできる。
やはり Windows - Windows で Unison を使う事に未練がある。 リモートの Windows BOX で sshd をたてればなんとかなる?
Cygwin の中で必要なものだけを抜き出したパッケージ。 cwRsync と同じタイプ。
Windows XP Home Edition SP1 にインストーラでインストール後、説明どおり group と passwd を作成。 sshd をサービスとして開始する。 Internet Connection Firewall の設定を変更して22番ポートを開ける。
しかしなんか変なシェルで使いづらい。 またコマンドが実行に失敗してエラーモーダルダイアログが出る時は sshd が動いているPCの画面に表示される。SSHクライアント側からは知るよしもないし、ボタンを押すすべもない。
うーん。不便。
ActivePerl で Ming を使えるようにしておきたい。
Ming 0.3 beta1 のソースパッケージには Visual Studio 6.0 用のプロジェクトファイルが含まれている。 Cygwin の Bison と flex があればライブラリをビルドできるようだ。 横着して Linux 側で bison と flex で生成したファイルをコピーして(それから unistd.h をインクルードしている部分を消して)、ビルドしてみたところ一応 lib ファイルは作成成功。
しかし ActivePerl 用にPerl モジュールの make は失敗。
調べたところ ExtUtils::FakeConfig を使うと Visual Studio が無くても MinGW + nmake でモジュールをビルドできるらしい(全てではないと思うが)。
ということで Ming を MinGW でビルドした後、そのまま ActivePerl 用モジュールの作成まで持ち込むことにしてみる。
コンパイルに必要な環境を MinGW で、configure に必要な環境を MSYS で用意する。
Ming のビルドに必要な Bison は MinGW、MSYS のインストーラに含まれていない。 bison-1.875.0-2003.02.10-1.exe というのが別途あるがうまく動かない。
ソースパッケージ(bison-2.0.tar.gz、bison-1.875.tar.gz)からはビルドできず。 MinGW/MSYSのプロジェクトにある bison-1.875-2003.02.10-1-src.tar.gz はビルドできるものの make check が通らない。
とうことで GnuWin32 の bison-1.875-4.exe (インストーラ形式)をインストール。 c:/usr/local/GnuWin32 にインストールした後、MSYS の /etc/fstab で /GnuWin32 にマウントし、/GnuWin32/bin に PATH を通しておく。
flex-2.5.4a.tar.gz を展開して
./configure; make; make check; make install
インストール時ハードリンクが作れなくてエラーがでているようだが無視。
MSYS 上でビルドしてインストール。zlib-1.2.2.tar.gz を展開して
./configure; make; make check; make install
MSYS 上でビルドしてインストール。 libungif-4.1.0b1-src.zip を展開して
rm config.cache; config.h内の-DHAVE_VARARGS_Hをコメントアウト。 ./configure; make; make install
make check はエラーが出るが無視。
MSYS 上でビルドしてインストール。libpng-1.2.8-config.tar.gz を展開して
CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure make; make check; make install
MSYS 上でビルド。ming-0.3beta1.tar.gz を展開して
CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib make static
ExtUtils::FakeConfig と PPM::Make で Ming の SWF PPM パッケージを作成する。 (MSYSのシェルではなく)コマンド プロンプトを開いて、Mingソースパッケージの中の perl_ext に移動。 MSYS、MinGW、nmake にPATHを通しておく。
それから Makefile.PL の実行で -lz を発見できないので、libz.a を Makefile.PL と同じディレクトリにコピーしてしまう(-L/usr/local/lib を指定しても効かなかったので)。 libpng.a、libungif.a も同じくコピーしておく。
Makefile を作成。Makefile.PL では -lz しか指定していないが、libpng と libungif も必要なのでコマンドラインオプションで指定する。ExtUtils::FakeConfig の Config_m を使用して MinGW を使用するようにする。
perl -MConfig_m Makefile.PL LIBS="-lpng -lungif -lz"
ここで生成される Makefile の中で libperl58.a を指定している部分があるが、ActivePerl では perl58.lib になるので、エディタで書き換え。 後はいつも通り
nmake nmake test make_ppm
で PPM パッケージ作成完了。
Windows で Xサーバを使いたくなる衝動が時々やってくる。 今回は Linux 上の Firefox を Windows 側に表示させたいというのが希望。
Xサーバについては以前 Cygwin/X を試したりしたしてみたが、今は Cygwin 自体をアンインストールしてしまっている。今回は別のものを試してみることに。
MinGW を使っている。 設定は Cygwin/X とほぼ同じらしい。 Xサーバ以外は特に何もはいっていないし、これなら Cygwin/X を使った方が便利そう。
マルチウィンドウモード+ルートウィンドウ無しでXサーバを起動し、Linux BOX を許可するホストに追加。 Linux BOX 側から DISPLAY 環境変数か --display オプションを設定して Firefox を起動。 これで Windows 側に Firefox のウィンドウが表示される。
日本語は今のところ入力不可。表示はできる。
しかし1つのFirefoxから2つのDISPLAYに同時にウィンドウを出せないのか(別プロセスになってしまい、同じプロファイルを同時に使えない)。 これでは今回の目的は達成できず。
ちなみに X-Deep/32 はXクライアントのランチャもついているのだが、rsh か rexec による起動になる。ちょっと使えない。
直付け HDD なら pdumpfs にするところだが、ネットワーク上の別の HDD (TeraStation PRO) 上に保存したいので、DAR でバックアップすることにしてみた。
公式サイトから Windows 版バイナリをとってきて展開。 インストール無しにすぐ使える。
Cygwin ベースなのでパスの指定はちょっと変態的だが、問題なく動作。試した範囲では日本語のファイル名も OK だった。
バックアップ先を G: としてネットワークドライブ割り当てして、C: ドライブのホームディレクトリをバックアップ。
dar -c /cygdrive/g/var/DAR/mypc/mypc-home-2009-01-13 \ -P var/Dropbox \ -P var/TrueCrypt \ -y9 -s 1G \ -R /cygdrive/c/home/naney
dar -c /cygdrive/g/var/DAR/Dine/dine-home-2009-01-13.2009-01-14 \ -A /cygdrive/g/var/DAR/mypc/dine-home-2009-01-13 \ -P var/Dropbox \ -P var/TrueCrypt \ -y9 -s 1G \ -R /cygdrive/c/home/naney
VirtualBox 上の Debian GNU/Linux BOX から sshfs でリモートホストのディレクトリをマウントして QGit を使って Git リポジトリのグラフ見てたりしてたけど、メモリもパワーも食うし起動も面倒。何げに今はリモートホスト側にも QGit がインストールされているので、Windows 7 に X server を入れることにした。
X server は普通に Cygwin/X で。setup.exe をダウンロードしてきて実行。X 関連も選択してインストール。
普段 PuTTY でリモートログインしていたので PuTTY で X11 forwarding させる。以下の手順で。
あっさり。
ノート PC でサスペンドして移動してまた開いて使おうとすると SSH 接続が切れていてまた PuTTY で接続しなおしからとか、ちょっとコードを確認したり Emacs でノートを取りたい時に不便。
そんな場合は Mosh (mobile shell) を使うと良いらしい。
ただ Windows だと Cygwin かーと思ったら MobaXterm が Mosh をサポートしているとのことなので入れてみることにした。
ポータブルアプリケーション版があるのでアーカイブを展開してそのまま使える。 Pageant に対応しているので、PuTTY で Pageant で秘密鍵管理している端末ならそのままさくっと使えるのも良い。
実際に MobaXterm + Mosh と PuTTY + SSH の両方で接続した状態で、サスペンド後に再開してみたところ後者が切れている場合でも前者はきちんとつながったままだった。
いい感じ。ノート PC ではしばらくこれを使ってみることにする。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。