LoginSignup
36
35

More than 5 years have passed since last update.

GNU Stow で 環境を汚さずに tarballのmake installでインストール・アンインストールする

Last updated at Posted at 2014-03-01

あらまし

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のインストール

ここは横着して、ディストリビューションのパッケージを使う。

Ubuntu13.04
$ 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を使っているようです。本文読んでいないのですが、そういう流儀もあるということなのでしょう。

後継者

  • XStow
    • 利点については @lamsh のコメント参考 (Thx!)
    • GNU Stowは最終更新2012/2/18, XStow は2014/01/04 といった感じ

類似品

  • CheckInstall
    • RPMやDEBなどパッケージファイル作るのを自動化できるらしい
    • 試してはいないが、きちんと作れるのか不安
36
35
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
35