Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

あらまし

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などパッケージファイル作るのを自動化できるらしい
    • 試してはいないが、きちんと作れるのか不安
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした