Cygwinパッケージマネージャの自作中(その2)

ひとまずインストール機能を実装中.apt-cygの実装では,以下のような処理でインストールしているようです.

  1. /etc/setup/install.dbのエントリから未インストール状態であることを確認
  2. バイナリファイルをダウンロード
  3. ダウンロードしたバイナリファイルのMD5をチェック
  4. tarballのファイルリスト(tar tfで表示されるやつ)を/etc/setupに保存
  5. バイナリファイルを展開
  6. /etc/setup/installed.dbにインストールしたパッケージの情報を追加
  7. /etc/postinstall配下のスクリプトを実行(実行後はprefixを.doneに変更)

一応,CygwinPerlを使った場合はそれなりに動いているようですが,Active Perlだと「5. バイナリを展開」でシンボリックリンクが生成できていないらしく,エラーになってしまいました.

Active PerlPPMを使って cyg-pmをパッケージングすれば,ゼロからの Cygwinインストールも楽かと思ったのですが,なかなか上手くは行きません.CPANを漁るか,Google先生に質問してなんとかならないものか…



> perl cyg-pm -root /c/cygwin install cygwin -require
* Create setup directory (c:/cygwin/etc/setup)
* Download setup.ini (ftp.jaist.ac.jp/pub/cygwin/setup.ini -> c:/cygwin/etc/setup/setup.ini)
* Analyze setup.ini (c:/cygwin/etc/setup/setup.ini)
* Select Target Package (Package: cygwin)
* Analyze installed.db (c:/cygwin/etc/setup/installed.db/)
-> c:/cygwin/etc/setup/installed.db not exist. skip.
* Create cache directory (c:/cygwin/var/cache/setup/ftp.jaist.ac.jp%2fpub%2fcygwin)

* Install Package

base-cygwin 2.1-1 install.
-> get file: c:/cygwin/var/cache/setup/ftp.jaist.ac.jp%2fpub%2fcygwin/release/base-cygwin/base-cygwin-2.1-1.tar.bz2
-> write list file: c:/cygwin/etc/setup/base-cygwin.lst.gz
-> extract file: c:/cygwin/var/cache/setup/ftp.jaist.ac.jp%2fpub%2fcygwin/release/base-cygwin/base-cygwin-2.1-1.tar.bz2

base-passwd 3.1-1 install.
-> get file: c:/cygwin/var/cache/setup/ftp.jaist.ac.jp%2fpub%2fcygwin/release/base-passwd/base-passwd-3.1-1.tar.bz2
-> write list file: c:/cygwin/etc/setup/base-passwd.lst.gz
-> extract file: c:/cygwin/var/cache/setup/ftp.jaist.ac.jp%2fpub%2fcygwin/release/base-passwd/base-passwd-3.1-1.tar.bz2

cygwin 1.7.7-1 install.
-> get file: c:/cygwin/var/cache/setup/ftp.jaist.ac.jp%2fpub%2fcygwin/release/cygwin/cygwin-1.7.7-1.tar.bz2
-> write list file: c:/cygwin/etc/setup/cygwin.lst.gz
-> extract file: c:/cygwin/var/cache/setup/ftp.jaist.ac.jp%2fpub%2fcygwin/release/cygwin/cygwin-1.7.7-1.tar.bz2
No such file in archive: 'libcygwin.a' at cyg-pm line 943
Could not find file 'libcygwin.a' in memory. at cyg-pm line 943
Making symbolic link 'C:\cygwin\lib\libg.a' to 'libcygwin.a' failed at cyg-pm line 943
Could not extract 'lib/libg.a' at cyg-pm line 943



ひとまずインストール機能が gnupack上で動作するレベルになったので,SourceForge.JP上にアップロードしました.cyg-pm-2010-11-06.tar.bz2.gnupackには次回リリースに追加しようと思います.

ちなみに,gnupack 4.09aに対し xinitをインストールしたときの処理時間は,cyg-pmと apt-cygで比較すると以下のような結果になりました.追加したパッケージ数はどちらも42です.

cyg-pm apt-cyg
1m27.555s 6m26.165s