rcmdnk's blog
Last update

Paco (スペイン語) ハードカバー

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に名前を変えて、 中身のNameVersion項目を

#: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に全面的に移行。

追記ここまで

Sponsored Links
Sponsored Links

« Vimを使う上でのIME(日本語入力)の取り扱い with AutoHotKey Lua対応Vimをインストール »

}