Posted at

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

More than 5 years have passed since last update.

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をつけます。

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

sudo make logme

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


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

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

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を指定します。

sudo paco -r vim-7.4


Output

Remove package vim-7.4 (y/N) ?


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


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


パッケージ一覧を表示

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


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


パッケージの情報を表示

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



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

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
:
:


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

paco -q /usr/local/bin/ag


Output

/usr/local/bin/ag:      the_silver_searcher



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

paco -o git-1.8.4


Output

--prefix=/usr/local/git-1.8.4 --with-libpcre


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

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

ただし、pacoが管理してくれるconfigureオプションは指定したものがまったく同じように保存されるわけではなくconfig.logから拾ってくるようなので、事前に確認したほうがよいと思います。

あと、バージョンを省略したり複数のパッケージが該当するような指定をすると複数出力されるので注意が必要です。

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以外にも使えたりします。

(逆にこの仕組で引っ掛けられない操作は管理できない)

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もついてきます。