cyg-aptというCygwin用のapt-getライクなパッケージマネージャを導入した

いや、apt-get使ったことは無いんだけど...Mac OS X における macports(Darwin ports)あるいはFedora Core における yum みたいなものだという認識。
で、cygwinでパッケージのアップデートがSetup.exeからしかできないのが腹立たしかったので、怒りにまかせて導入してみた。機能不足ではあるけど、まあまあ満足。Setup.exe使うよりははるかにましになった。
以下導入のメモおよび簡単な紹介。

cyg-aptのインストール

以下のような感じでインストール。なお、wgetコマンドはインストール済みという前提。無ければ、ブラウザなどから直接URLたたいて名前をつけて保存などでもOKのはず...

$ cd /usr/local/bin
$ wget http://www.xs4all.nl/~jantien/software/cyg-apt

wgetで上記URLからスクリプトを/usr/local/binの下にダウンロード

$ cd /etc
$ mkdir setup
$ cp /cygdrive/C/cygwin/packages/(ほにゃらら)/setup.ini /etc/setup/setup.ini

cyg-apt用のsetup.iniを/etc/setupディレクトリの下に用意(もしかしたらいらないかも...)「ほにゃらら」の箇所はたぶんSetup.exeでパッケージを取得しているFTPサイトの名前。
で、さっそくcyg-aptを実行ってやってみたけど、そのままだとなんか動かなかったのでスクリプトを修正。もしかしたらオプション指定したらいいのかも知れんけど、よくわからなかった... 

--- /home/413878/work/cygapt/cyg-apt.origin     2004-06-30 23:09:01.000000000 +0900
+++ cyg-apt     2009-01-19 17:31:10.890625000 +0900
@@ -22,7 +22,7 @@
 if 'ABI' in os.environ.keys ():
        ABI = os.environ['ABI']

-root = '/cygwin'
+root = '/cygdrive/C/cygwin'
 NETREL = '/netrel'
 EXTRA = NETREL + '/extra'
 # PATCH = NETREL + '/patch'
@@ -31,8 +31,8 @@

 os.environ['PATH'] = NETREL + '/bin:' + os.environ['PATH']

-mirror = 'ftp://mirrors.rcn.net/mirrors/sources.redhat.com/cygwin'
-mirror = 'http://mirrors.rcn.net/pub/sourceware/cygwin'
+mirror = 'ftp://ftp.jaist.ac.jp/pub/cygwin'
+mirror = 'http://ftp.jaist.ac.jp/pub/cygwin'


 downloads = root + '/var/cache/setup/' + urllib.quote (mirror, '').lower ()

上記の修正内容としては以下のとおり

  • cygwinのインストール先のパスの修正
  • パッケージのダウンロード先のミラーサーバーを日本のサーバに

スクリプトの修正が完了したら

$ cyg-apt setup
$ cyg-apt update

setupコマンド、updateコマンドを実行。
すると、/etc/setup/setup.ini に格納されているパッケージの情報が最新状態に更新されインストールが完了。

簡単な使い方

以下、簡単な使い方の紹介。

$ cyg-apt
cyg-apt [OPTION]... COMMAND [PACKAGE]...

Commands:
    ball - print tarball name
    build - build package from source in CWD
    download - download package
    find - package containing file
    help - help COMMAND
    install - download and install packages with dependencies
    list - installed packages
    md5 - check md5 sum
    missing - print missing dependencies
    new - list new packages in distribution
    remove - uninstall packages
    requires - print requires: for package
    search - search package list
    setup - cygwin environment
    source - download, build and install
    update - setup.ini
    upgrade - all installed packages
    url - print tarball url
    version - print installed version

Options:
    -d,--download          download only
    -i,--ini=FILE          use setup.ini [%(setup_ini)s]
    -m,--mirror=URL        use mirror [%(mirror)s]
    -r,--root=DIR          set cygwin root [%(root)s]
    -t,--t=NAME            set dist name (*curr*, test, prev)
    -x,--no-deps           ignore dependencies

オプションを何も指定しないとコマンドとオプションの説明が出てくる

$ cyg-apt search ruby
ruby - Interpreted object-oriented scripting language
subversion-ruby - A version control system (ruby bindings)

searchコマンドでrubyという名前が付くパッケージ
を検索する。

$ cyg-apt list
Numeric             24.2-1
X-startup-scripts   1.1.0-2
XmHTML              1.1.7-2        (1.1.7-3)
_update-info-dir    781-1          (795-1)
 :

listコマンドでインストール済みパッケージの一覧表示...ですが、私の環境ではリストの途中でエラーになってしまい全て表示することができなかった。パッケージ名からバージョン番号を抜き出す正規表現に問題があるみたいだけど、よくわからなかったので後で調べるつもり。

$ cyg-apt search git
cogito - Human-suitable Interface for Git
git - Fast Version Control System - core files
git-completion - Fast Version Control System - git bash completion
git-gui - Fast Version Control System - git-gui viewer
git-oodiff - Git diff filter for OpenDocument files
gitk - Fast Version Control System - gitk viewer
stgit - Quilt functionality on top of git

searchコマンドでパッケージの検索。

$ cyg-apt install cogito
--17:44:07--  http://ftp.jaist.ac.jp/pub/cygwin/release/git/cogito/cogito-0.18.2-2.tar.bz2
           => `cogito-0.18.2-2.tar.bz2'
Resolving proxy.hogehoge.com... 10.20.30.40, 10.20.30.40, 10.20.30.40
Connecting to proxy.hogehoge.com|10.10.10.10|:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: 152,683 (149K) [application/x-bzip2]

    0K .......... .......... .......... .......... .......... 33%  251.85 KB/s
   50K .......... .......... .......... .......... .......... 67%  280.43 KB/s
  100K .......... .......... .......... .......... ......... 100%  275.10 KB/s

installコマンドでは指定したパッケージをftpで取得してインストールまでやってくれる。らくちん。

$ cyg-apt update

updateコマンドででパッケージ情報(setup.ini)を更新、searchの検索対象はこのsetup.iniの情報を対象としているようなので定期的にアップデートしてあげる必要がある。cronとか仕込んでおけばいいのかな?

簡単な説明だけどこんな感じ。あとは使ってみたらわかると思う...たぶん。
ただ、このスクリプトずいぶん長い間メンテされていないっぽいので、他にお勧めのパッケージマネージャあれば誰か教えてほしい...