pacoでソースビルドをパッケージっぽく管理する

pacoは一言で言うと「野良ビルドしたソフトウェアをパッケージっぽく管理してくれるツール」です。
野良ビルドしたソフトウェアは大抵アンインストールする術がなく、必死こいてそれっぽいファイルを削除していくことになりますが、pacoを使うと簡単にアンインストールしたり、インストールされたファイルの確認ができるようになります。
またconfigure時に指定したオプションも覚えてくれるので、再度ビルドするときに便利です。

paco - a source code pacKAGE oRGANIZER for Unix/Linux
http://paco.sourceforge.net/

ちなみにGUIインターフェイスのgpacoというのもついていますが、自分はssh越しのサーバ上でしか作業しないのでgpacoは使ったことがありません。


インストール
------------

RHEL系の場合はEPEL、Ubuntuの場合は標準でパッケージに用意されているので、yumやapt-getでインストールができます。
Arch Linuxもパッケージがありますが問答無用でgpacoがセットになっているので、CUI環境で入れようとするとgtk2とgtkmmが芋づる式に入ってうわぁぁぁってなります。

ソースから入れる場合はこんな感じです。
gpacoが不要な場合は`--disable-gpaco`をつけます。

```bash
wget http://sourceforge.net/projects/paco/files/paco/2.0.9/paco-2.0.9.tar.gz/download
tar xf paco-2.0.9.tar.bz2
cd paco-2.0.9
./configure --prefix=/usr/local --disable-gpaco
make
sudo make install
```

```bash
sudo make logme
```

`make install`後、立て続けに`make logme`することで、今インストールしたpaco自身をpacoの管理に追加できます。


pacoを使ってソフトウェアをインストール
--------------------------------------

pacoを使って何かをインストールするにはmakeまでは普通に行い、最後の`make install`をpacoをかぶせるようにして実行します。

```bash
sudo paco -lD "make install"

sudo paco -lp vim-7.4 "make install"

# -l        ログを取る＝記録する
# -D        ディレクトリ名をパッケージ名として使う
# -p PKG    PKGをパッケージ名とする
```

`-D`を使うとディレクトリ名がパッケージ名として使用されます。
tarを落としてきて入れる場合、大抵はfoo-x.y.zのようなディレクトリになっているので、そのような場合は`-D`でいいでしょう。

逆にgit cloneしてきてディレクトリにバージョン番号が含まれていないだとか、makeするのはsrcディレクトリの中であるような場合は、`-p PKG`で自分で名前をつけてあげることになります。


pacoを使ってアンインストール
----------------------------

pacoを使ってソフトウェアをアンインストールするには`-r`を指定します。

```bash
sudo paco -r vim-7.4
```

```:Output
Remove package vim-7.4 (y/N) ?
```

削除するか確認してきて`y`で削除されます。


pacoが管理している情報を見る
----------------------------

### パッケージ一覧を表示

```bash
paco -a
```

```:Output
git-1.8.3.1  git-1.8.4  highlight-3.12  libevent2  paco-2.0.7  screen  the_silver_searcher  tmux-1.8  vim-7.3  vim-7.4
```

```bash
paco -1Fdsa

# -1        1パッケージ1行表示
# -F        パッケージのファイル数を表示
# -d        インストール日時を表示(ddにすると時刻も表示)
# -s        パッケージのサイズを表示
# -a        全てのパッケージ
```

```:Output
 79M   237  12-Jun-2013  git-1.8.3.1
 82M   237  27-Aug-2013  git-1.8.4
4.1M   307  18-Feb-2013  highlight-3.12
5.6M    59  04-Sep-2013  libevent2
1.8M    13  22-Jan-2013  paco-2.0.7
1.7M    20  04-Sep-2013  screen
156k     3  07-Mar-2013  the_silver_searcher
564k     2  04-Sep-2013  tmux-1.8
 30M  1587  03-Jul-2013  vim-7.3
 30M  1594  13-Sep-2013  vim-7.4
```

### パッケージの情報を表示

```bash
paco -i highlight
```

```:Output
----------------
 highlight-3.12
----------------

Name:     Highlight
Version:  3.12
Summary:  Converts source code to formatted text (HTML, RTF, TeX, LaTeX, SVG, BBCode, XML) with syntax highlighting
```

### パッケージ内のファイル一覧を表示

```bash
paco -f vim-7.4
```

```:Output
vim-7.4:
/home/pasela/src/vim/runtime/doc/tags
/usr/local/vim-7.4/bin/vim
/usr/local/vim-7.4/bin/vimtutor
/usr/local/vim-7.4/bin/xxd
/usr/local/vim-7.4/share/man/fr.ISO8859-1/man1/evim.1
/usr/local/vim-7.4/share/man/fr.ISO8859-1/man1/vim.1
                      :
                      :
```

### ファイルを提供するパッケージを探す

```bash
paco -q /usr/local/bin/ag
```

```:Output
/usr/local/bin/ag:      the_silver_searcher
```

### パッケージのconfigureオプションを表示

```bash
paco -o git-1.8.4
```

```:Output
--prefix=/usr/local/git-1.8.4 --with-libpcre
```

再度ビルドするときにこんな感じで使うと便利そうです。

```bash
./configure $(paco -o vim-7.4)
```

ただし、pacoが管理してくれるconfigureオプションは指定したものがまったく同じように保存されるわけではなくconfig.logから拾ってくるようなので、事前に確認したほうがよいと思います。
あと、バージョンを省略したり複数のパッケージが該当するような指定をすると複数出力されるので注意が必要です。

```bash
paco -o git
```

```:Output
git-1.8.4:
--prefix=/usr/local/git-1.8.4 --with-libpcre

git-1.8.3.1:
--prefix=/usr/local/git-1.8.3.1 --with-libpcre
```


make以外も管理する
------------------

pacoはLD_PRELOADを利用してファイルの変更を監視することで記録をするそうなので、実は`make install`以外にも使えたりします。
（逆にこの仕組で引っ掛けられない操作は管理できない）

```bash
sudo -lD "ruby setup.rb"

sudo -lD "python setup.py"
```

とか。


pacoの挙動の制御
----------------

pacoの管理するデータの保存場所（デフォルトでは/var/log/paco）や除外するファイルなどはオプションで指定できます。
詳しくは`man paco`をどうぞ。
（保存場所はconfigure時の`--with-paco-logdir=DIR`でも指定できます）

また${prefix}/etc/pacorcでも設定ができます。
詳しくは`man pacorc`をどうぞ。


便利スクリプト集
----------------

configure時に`--enable-scripts`を指定すると、pacoのパッケージ情報からバイナリパッケージを作ったり、rpmなどをpacoを使ってインストールしたりするスクリプトが一緒にインストールされます。
あとpaco_bash_completionもついてきます。