Linuxでapt-get、MacでHomebrew、
Cygwinでapt-cyg
などでパッケージ管理出来ますが、
ソースからコンパイルして入れる場合やroot権限を持ってない環境で
make install
して入れているパッケージが結構あります。
これら、適当なログはのこしてありますが、実際どのファイルが どのパッケージに対応しているのかまでは分からなかったりします。
そんな中でmake install
で入れるパッケージを管理するための
pacoと言うソフトを見つけたで入れてみました。
pacoのインストール
pacoのDownloads ページから最新版のバージョンを確認してダウンロードしてインストールします。
$ wget -O paco-2.0.9.tar.gz http://sourceforge.net/projects/paco/files/paco/2.0.9/paco-2.0.9.tar.gz/download
$ tar xzf paco-2.0.9.tar.gz
$ cd paco-2.0.9
$ ./configure --prefix=$HOME/usr/local --disable-gpaco --with-paco-logdir=$HOME/usr/local/var/log/paco
ここで、--disable-gpaco
はGUI版のpacoを無効にしています。
GUI版をインストールするためには
gtkmmが必要で、インストールされてない状態で--disbale-gpaco
オプションを
入れないと
...
No package 'gtkmm-2.4' found
...
等と怒られます。gtkmm
を入れても良いのですが、
GUI版を使う予定がないのでオプションで外しておきます。
--with-paco-logdir
はpacoでインストールされたパッケージ情報を管理するファイルの場所で、
初期値が/var/log/paco
になっていて、root権限が無いと書き込めないので、
変更しておきます。
この変更をしておかないと、root権限以外でmake install
した時に
mkdir: /var/log/paco: Permission denied
と怒られます。
configureできたら
$ make && make install
でインストール完了。
Macで使えない、と言った話もいくつか見かけましたが、Macでも問題なく使えます。
pacoのページを見ると
Note:
Paco does not work on systems in which the executables involved in the installation of the packages (mv, cp, install...) are statically linked against libc, like FreeBSD and OpenBSD.
とありますが、その上の表でNetBSD
では使える様になっています。
OS XのベースのDarwinはFreeBSDベース、となってますが、 NetBSDからも受け継いでる部分はあり 1 2 、 そもそもシステムとして別物の様な物みたいですが 取り敢えず手元のLionでは問題なく動いてます。
Macでmvを調べてみると
$ otool -L /bin/mv
/bin/mv:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
と言った感じでlibSystemという名の共有ライブラリ 3 だけにリンクしています。 (ので、上の注意にあるFreeBSDの様な状況には当たらない。)
Linuxだと(Debianなど)、
$ ldd /bin/mv
...
libc.so.6 => /lib/libc.so.6 (0xb7746000)
...
と言った感じでlibcの共有ライブラリにリンクしていて、 Cygwinなんかはまた別ですが、libcの静的ライブラリにはリンクしてません。
FreeBSDが手元にないのでわかりませんがMacとはmvの状況が少し違うみたいです。
pacoの使い方
ここで、まず自分自身をパッケージコントロールするため、 pacoのインストール用パッケージディレクトリ(makeした場所)で
$ make logme
を実行します。これでpaco自身が登録されます。
他のパッケージを登録するにはmake install
する代わりに
$ paco -lp vim-7.4b "make install"
など。 もし、Makefileがあるディレクトリがpacoの様にパッケージ名だったりする場合、
$ paco -lD "make install"
の様にD
オプションを使うと、ディレクトリ名がパッケージ名として登録されます。
version情報もここでの-
以降になるので、
ディレクトリにバージョン情報がない場合でバージョンを把握してる場合は
p
オプションで正しく指定して置いた方が良いかもしれません。
Vimなどはsrc
以下にMakefileがあるのでD
オプションでやってしまうと
src
と言うなのパッケージで登録されてしまうので注意です。
もし、間違って登録したら、
$HOME/usr/local/var/log/paco/src
と言うファイルが出来て居るはずなので、
このファイルをvim-7.4b
に名前を変えて、
中身のName
とVersion
項目を
#:Name: vim
#:Version: 7.4b
と変更しておきます。
登録されたパッケージ一覧を表示するには
$ paco -a
paco-2.0.9 vim-7.4b
各パッケージの情報を見るには
paco -i <package>
:
$ paco -i paco
------------
paco-2.0.9
------------
Name: paco
Version: 2.0.9
Summary: Source code package organizer
<package>
に関してはversion入(paco-2.0.9
)でもversion無し(paco
)でもOK。
ここで出てくる情報の
インストール時に使ったconfigureのオプションを表示するには
paco -o <package>
:
$ paco -o paco
--prefix=/home/user/usr/local --disable-gpaco --with-paco-logdir=/home/user/usr/local/var/log/paco
インストールされたファイル一覧とファイルサイズ等を見るには
$ paco -fst paco
paco-2.0.9:
8k /home/user/usr/local/share/paco/README
40k /home/user/usr/local/lib/libpaco-log.a
4k /home/user/usr/local/lib/libpaco-log.la
...
1.3M Total
とします。
$ paco -r paco
とすれば、上で表示されたファイル全部を消去するパッケージのアンインストールを行います。 (多分これが一番嬉しい機能。)
その他詳しくはpacoのmanページで。
すでにインストールされたパッケージについて
pacoはmake install
時の情報を元に管理情報を作成するので、
すでにインストールされているパッケージについては情報を作る簡単な
方法はありません。
ソースが残っていれば再度paco -lp <package> "make install"
するのが一番簡単です。
無理矢理情報を追加しようと思えば、
$HOME/usr/local/var/log/paco
にある他のパッケージのファイルを参考に、
各パッケージのファイルを作ってあげれば良いと思うのですが
すでに複数パッケージを同じディレクトリ下にインストールしてある場合は
結構面倒です。
各パッケージ情報のファイルの中身はconfigure情報などの後に、 ファイル一覧が
ファイル名|サイズ|-2|-2
の様になっていて、サイズは適当でも良いのでファイル名だけすべて
入れておけばアンインストールは簡単に出来ます。
もしあるディレクトリ下に1つのパッケージしかインストールされてない状態なら、
ファイル一覧が簡単に作れるので、サイズは適当でもいいから
登録しておくだけでもよいかもしれませんが、
すでに複数ある場合は名前だけから判断するのも難しいファイルもあるので、
次にインストールし直すときに登録しなおすか
同じものでもmake install
し直す方が結果的には楽で正しく出来るかな、と。
追記: 2013/08/11
stowでmake installしたパッケージを管理でstowを導入してみましたが、 新しいバージョンなどをテストしたりするのにstowだと簡単に元に戻したりできるので、 stowのが便利かな、と思いstowに全面的に移行。
追記ここまで