Cygwinパッケージマネージャの自作中(その1)
オフィシャルで配布されているCygwinのインストーラ(以降,setup.exe
と表記)がとても使いにくいと思っています.個人的に使いづらいと感じているのは「CUIで操作できないこと」です.
世の中には同じようなことを思っている方がいるようで,すでに CUIベースのパッケージマネージャがいくつか存在します.私の知っている限りでは以下の2つがあります.
- CygApt
Pythonで実装されている.一部のパッケージインストールが失敗するため改修しようとしたが,Pythonの勉強不足で断念. - apt-cyg
シェルスクリプトで実装されている.インストール機能に問題なし.ただし,シェルスクリプト内で外部コマンドが実行されまくるため重い.また,実行時の画面表示もコマンド実行結果をそのまま表示していて,あまり見た目がよくない.
きっとこれ以外にもいくつかあると思いますが,apt-cygなどの実装を見る限り あまり難しいロジックではないので自己満足のため,自作することにしました.
というのが,前回までのあらすじです.現状まだ実装できていない機能,これから実装しようとしている機能は以下のとおり残っていますが,ひとまずお試しで公開しています(cyg-pm-2010-10-31.tar.bz2)
- 最新のパッケージをインストールする機能
- インストール済みのパッケージを削除する機能
- プロキシ経由での本ツールを使えるようにする
- setup.iniの取得や,パッケージのインストール状態取得の回数を減らす
いくつかの例で使い方を以下に記載します.
ヘルプを表示する
ヘルプはcyg-pm
を引数なしで実行すると表示されます.
インストール状態を確認する
cyg-pm check
でインストール済みのパッケージの状態を確認できます.
パッケージの状態はcygcheck -c
の結果をラッパしているだけなので,少し時間がかかります.また,オプション -newer
を指定することで,インストール済みパッケージのうちバージョンアップ可能なパッケージを絞り込んで表示することもできます.
最新のパッケージについて検索する
cyg-pm search
で最新パッケージについて調べることができます.
オプション -require
を指定することで特定のパッケージをインストールするときに,一緒にインストールする必要があるパッケージも含めて表示することができます.これを使うと「新しく rubyをインストールしたいけど,他に何を入れればいいか分からない」ときに役立ちます.
逆に「rubyを削除したいけど,その場合どのパッケージに影響があるのか分からない」ときにはオプション -depend
を使うと,特定のパッケージを必要とするパッケージを表示することができます.
その他にも,パッケージの指定に正規表現を使うオプション -regexp
,検索結果の表示フォーマットを指定するオプション -format
なども利用できます.
最新のパッケージを取得する
cyg-pm download
で最新パッケージを取得することができます.なお,取得したパッケージに対して,破損していないかMD5をチェックしています.
取得対象のパッケージの特定には cyg-pm search
と同じ方法が使えます.
取得したパッケージは,デフォルトで Cygwinのルートディレクトリ配下の /var/cache/setup
に保存されますが,オプション -outpu
を指定することで別のディレクトリに保存させることもできます.
他にもオプション -with-src
や -with-setup
を指定することでソースファイルや setup.exe
も合わせて取得することができます.
最新のパッケージをインストールする
まだ未実装です…
最新のパッケージを削除する
同じく未実装です…