ひとまずインストール機能を実装中.apt-cygの実装では,以下のような処理でインストールしているようです.
/etc/setup/install.db
のエントリから未インストール状態であることを確認
- バイナリファイルをダウンロード
- ダウンロードしたバイナリファイルのMD5をチェック
- tarballのファイルリスト(
tar tf
で表示されるやつ)を/etc/setup
に保存
- バイナリファイルを展開
/etc/setup/installed.db
にインストールしたパッケージの情報を追加
/etc/postinstall
配下のスクリプトを実行(実行後はprefixを.done
に変更)
一応,Cygwinの Perlを使った場合はそれなりに動いているようですが,Active Perlだと「5. バイナリを展開」でシンボリックリンクが生成できていないらしく,エラーになってしまいました.
Active Perlで PPMを使って 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 |