GetIt(というかAppSnap)をいじってみた

先日moongiftさんで紹介されていたGetItをいじってみた日記。GetItとはyumやaptのようにソフトウェアのインストールやアップグレードを管理するWindows用のソフトウェア。GUIもあるけど、コマンドラインから"getit install firefox"的なこともできるらしい。

以下、僕は全然英語が読めないので嘘があるかもしれません。

また、GetItは内部でAppSnapを呼び出している。というかこの辺がよくわかってないんだけど、GetItを使うのとAppSnapを単体で使うのを比べた時にどんな違いがあるんだろう。どちらもPythonで書かれている(が、別途Pythonをインストールする必要はありません)。

というわけでAppSnapについて調べ中。仕組みはわりと単純。おおざっぱにいえば、あるwebページからバージョン番号を拾ってくる正規表現を設定ファイルに書いておいてあげれば、バージョンの更新を検知してくれる。

AppSnapが公式にサポートしていないアプリを管理下に追加したい場合は、\Program Files\AppSnap\userdb.iniファイルにエントリを追加する。試しにGPG4Winの定義を書いてみた。

[GPG4Win]
category        = Security:File Security
describe	= Email and File Encription
website		= http://www.gpg4win.org/
scrape		= http://www.gpg4win.org/download.html
version		= >Gpg4win ([0-9]\.[0-9]\.[0-9]+)<
download	= http://ftp.gpg4win.org/
filename        = gpg4win-#VERSION#.exe
upgrades        = false
uninstall	= GPG4Win
instversion	= REGISTRY_SEARCH:DisplayVersion=([0-9]\.[0-9]\.[0-9]+)

scrapeに指定したURLのページを拾ってきて、versionで指定した正規表現にマッチしたものを最新バージョンとする。現在GPG4Winは1.1.4と1.9.15-BETAがあるんだけど、BETAがマッチしないようにしてみた。

ここでマッチしたバージョン文字列を、ダウンロードするファイル名の指定filenameの中で#VERSION#として使うことができる(他にも#DOTLESS_VERSION#とか色んなマクロが使える)。

uninstallはアンインストールコマンドが書かれているレジストリのキーを指定する。通常Windowsの「プログラムの追加と削除」で削除可能なものであれば何かしらレジストリに書かれているらしい。上の例では、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\GPG4Win\UninstallStringあたりがアンインストールコマンドとなる。このキーの指定でもマクロ展開(さっきの#VERSION#とか)を使うことができる。

instversionは現在インストールされているバージョンをレジストリから取得する方法。上の例では、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\GPG4Win\ DisplayVersionあたりから取得している。

他にもインストーラにコマンドライン引数を渡したりとか出来るみたいだ。

上記の内容をuserdb.iniに追加すると、AppSnapでインストール、アンインストール、アップグレードが可能になる。以下はバージョン情報を表示している例。

C:\Program Files\AppSnap>appsnap.exe -n GPG4Win
AppSnap 1.3.3


Application : GPG4Win
Description : Email and File Encription
Website : http://www.gpg4win.org/
Latest Version : 1.1.4
Installed Version : 1.1.4

これでAppSnap的にはOKだけど、GetItから使うにはもうちょい作業が必要な様子。あとで書くかも。

注意点としては、AppSnapはスクレイピングしたバージョンを%ALLUSERSPROFILE%\Application Data\AppSnap\cache\latest.iniにキャッシュしている。userdb.iniを色々編集して試している時はこのキャッシュに注意。

あと、複数のPCで同じアプリをインストールしたい時などオレオレGoogleパック的な使い方がGetItのおいしい使い方なんじゃないかと思ってるんだけどまだそこまでやってない。