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とか仕込んでおけばいいのかな?
簡単な説明だけどこんな感じ。あとは使ってみたらわかると思う...たぶん。
ただ、このスクリプトずいぶん長い間メンテされていないっぽいので、他にお勧めのパッケージマネージャあれば誰か教えてほしい...
追記:2009.1.24
参考になった記事
Cygwin を入れてみた+cyg-apt - 日々ごちゃごちゃと考える