Cygwinのsetup.exeまで含めたアップデート方法。

Cygwinが、たとえばpacmanやrpmのようなパッケージマネージャを使わずにsetup.exeを使わせるのは、Windowsの仕組みとして「開いているファイルは上書きができない」というのが根底にあって、そのためにpacman自身やそれを実行しているshellなどのアップデートがうまくいかないから、らしいです。

なのでsetup.exeを使うわけですが、setup.exeを実行すると「新しいバージョンがあるのでそっちを使って」とかメッセージが出てきて、けっこう煩わしい。setup.exe自身も同様の理由で自分をアップデートできない、ということなんですが…。

じゃあpipはどうなのよ、という話もありますが、Windows環境でpipをアップデートするときには "python -m pip install pip --upgrade" という形で実行するので、pythonがpipを読み込んだあとでcloseしてしまえばできるんだよ、ということですね。きっと。

で、setup.exeのほうは煩わしいので以下のようなバッチファイルを書いてみました。

cygupdate.bat:
wget -N https://cygwin.com/setup-x86_64.exe.sig
wget -N https://cygwin.com/setup-x86_64.exe

gpg2 --verify setup-x86_64.exe.sig setup-x86_64.exe

pause

if not %ERRORLEVEL% == 0 (
  echo BAD Signature!!
  pause
) else (
  setup-x86_64.exe
)

こうしておくと、setup.exeが更新されていた場合にはwgetがリトリーブしてきて、署名も確認してくれて、よければそのまま実行されます。
わりと楽ちん。

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...