あらまし
tarballをインストールするN個の方法
いつものやつ
よくあるインストール方法で、こんなのがある。
$ ./configure; make; sudo make install
間違っちゃいないが、たいていはファイルが/usr/local/
以下のbin, lib, share
に散らばってインストールされる。
make uninstall
が用意されているものもたまに見る。
しかしそれ以外の場合は、アンインストールはめんどい。
ちょっと賢い?
じゃあ、これはどうだ。
$ ./configure --prefix=/opt/foo; make; sudo make install
rm -rf /opt/foo
でガラガラポンできる。しかし/opt/foo/bin
にパスを通したりしなきゃいけない。
この方法もなくはない。なくはないが、う〜ん。
パッケージを使うのが一番だけども
正道は RPM, DEB, Portageなど、ディストリビューションのパッケージシステムを利用して作ることだが、
必要な知識と手間とプラットフォームやディストリビューションへの依存という問題が発生するので、お手軽ではない。
そこで GNU Stow が颯爽と登場
そんな問題を解決するのが GNU Stow だ。
やってくれるのは単純。
/usr/local
直下以外の適当なフォルダにmake install
したあと、
stow
コマンドを叩くと、/usr/local/
以下にシンボリックリンクを貼ってくれる。
stow -D
コマンドで、貼ったシンボリックリンクを消してくれる。
そんだけ。
GNU Stowの使い方
Linux, WebKit, Android NDK 開発者の強い味方、 ccache を例に、Stowでtarball からのインストールをしていく。
GNU Stowのインストール
ここは横着して、ディストリビューションのパッケージを使う。
$ sudo apt-get install stow
# インストールされているかチェック
$ which stow
/usr/bin/stow
$ test -d /usr/local/stow && echo true
true
ccache を インストール
まずはダウンロード、展開。
$ wget http://samba.org/ftp/ccache/ccache-3.1.9.tar.xz
$ tar xvJf ccache-3.1.9.tar.xz -C ~/src/
$ cd ~/src/ccache-3.1.9/
./configure --prefix
には、 /usr/local/stow/YOUR-PACKAGE-NAME
を指定しなければいけないことに注意 。
$ ./configure --prefix=/usr/local/stow/ccache-3.1.9
$ make
$ sudo make install
# Check
$ test -e /usr/local/stow/ccache-3.1.9/bin/ccache && echo true
これで、/usr/local/stow/ccache-3.1.9
にすべてがインストールされた。
このままではパスが通っていないので、/usr/local/stow/ccache-3.1.9/bin/ccache
とタイプしないとインストールしたccache
が使えない。
GNU Stowの出番です
では、stow
で、「使えない」ccache
を使えるようにしよう。
$ cd /usr/local/stow
$ stow -vv ccache-3.1.9/
stow dir is /usr/local/stow
stow dir path relative to target /usr/local is stow
Planning stow of package ccache-3.1.9...
--- Skipping bin/ccache as it already points to ../stow/ccache-3.1.9/bin/ccache
--- Skipping share/man/man1 as it already points to ../../stow/ccache-3.1.9/share/man/man1
Planning stow of package ccache-3.1.9... done
Processing tasks...
# Check
$ which ccache
/usr/local/bin/ccache
$ ls -l $(which ccahce)
lrwxrwxrwx 1 root root 31 3月 2 03:59 /usr/local/bin/ccache -> ../stow/ccache-3.1.9/bin/ccache
はい、出来あがり。
シンボリックリンクによって、ccache
は/usr/local/bin/ccache
となり、./configure; make; sudo make install
とほぼ同じ状態で使えるようになりました!!
もちろん、元に戻せる
今度は、使えない状態に戻そう。
$ cd /usr/local/stow
$ stow -D -vv ccache-3.1.9/
stow dir is /usr/local/stow
stow dir path relative to target /usr/local is stow
Planning unstow of package ccache-3.1.9...
UNLINK: bin/ccache
UNLINK: share/man/man1
Planning unstow of package ccache-3.1.9... done
Processing tasks...
Processing tasks... done
# Check
$ which ccache || echo false
false
$ test -d /usr/local/stow/ccache-3.1.9 && echo true
true
Okay, stow -D
で、前回貼ったシンボリックリンクは削除され、PATHからも消えました。
しかも、ccache-3.1.9
は残ったままなので、またstow
でインストールできる。
完全削除
もしが不要になったら、stow -D
をしてからsudo rm -f /usr/local/stow/ccache-3.1.9
を実行することで後腐れなく削除することができる。
参考文献
ググるといっぱい出てくるけど、以下のページだけでやりたいことは全部足りてしまいました。
-
http://linuxgazette.net/75/peda.html
- このページの人はGNU Stow のtarballを
/opt
以下にインストールして、/usr/local/stow
ではなく/opt/stow
を使っているようです。本文読んでいないのですが、そういう流儀もあるということなのでしょう。
- このページの人はGNU Stow のtarballを
後継者
- [XStow](http://xstow.sourceforge.net/ XStow)
- 利点については @lamsh のコメント参考 (Thx!)
- GNU Stowは最終更新2012/2/18, XStow は2014/01/04 といった感じ
類似品
- [CheckInstall](http://asic-linux.com.mx/~izto/checkinstall/ CheckInstall)
- RPMやDEBなどパッケージファイル作るのを自動化できるらしい
- 試してはいないが、きちんと作れるのか不安