フタなしカンヅメ

徒然なるままに @happytar0

tarボールソースからインストールしたソフトを管理する「Graft」を使ってみる

ソースインストールした物を管理するツール「Graft」をインストールして使ってみたので、記録として残しておきます。

インストールと言っても簡単で、配布元サイトのドキュメント通りに実行すれば問題ありません。
配布元サイト
graft.html - peters

$ wget -O graft-2.4.tar.gz "http://peters.gormand.com.au/Home/tools/graft/graft-2.4.tar.gz?attredirects=0"
$ tar zxvf graft-2.4.tar.gz
$ cd graft-2.4
## ここでエラーがでます。
$ make -f Makefile.dist
    ######################################################
    #                                                    #
    #       You'll now need to modify the Makefile       #
    #      variables to suit your local conditions.      #
    #                                                    #
    ######################################################
 
    make: *** [Makefile] Error 1
## エラーが出るので、Makefileを編集する必要があるようです。

Makefile

このPACKAGEDIRがパッケージ管理用のディレクトリになり、ここにソースからインストールします。
PACKAGEDIR	= /pkgs
TARGETDIRは、通常インストールしたい場所、つまり/usr/localなどを指定します。
# TARGETDIR	= /pkgs
TARGETDIR	= /usr/local

Perlコマンドの場所を指定します。/pkgs/bin/perl となっていますが、ほとんどの場合、/usr/bin/perl に設置されていると思いますので変更します。
# PERL		= /pkgs/bin/perl
PERL		= /usr/bin/perl

あらためてビルドします。

$ make clean
$ make
# sudo make install
## graftがインストール出来ていることを確認。
$ ls /pkgs
graft-2.4
## graft自身を/usr/local/bin配下にインストール
# /pkgs/graft-2.4/bin/graft -i graft-2.4
## シンボリックリンクされていることがわかる
$ ls -l /usr/local/bin
lrwxrwxrwx  1 root root 25 7月 30日 09:23 /usr/local/bin/graft -> /pkgs/graft-2.4/bin/graft

これでインストールは無事に完了しましたので、さっそく使ってみます。
今回は、試しにrubyをインストールしてみました。

$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p299.tar.gz
$ tar zxvf ruby-1.8.7-p299.tar.gz
$ cd ruby-1.8.7-p299
$ ./configure --prefix=/pkgs/ruby-1.8.7-p299 && make
# make install
## 無事にインストール出来たことを確認
$ ls /pkgs
graft-2.4  ruby-1.8.7-p299
## graftコマンドでインストール
# graft -i ruby-1.8.7-p299
$ ls -l /usr/local/bin
lrwxrwxrwx  1 root root 30 7月 30日 09:27 /usr/local/bin/ruby -> /pkgs/ruby-1.8.7-p299/bin/ruby

rubyをアンインストールしてみる。

# graft -d ruby-1.8.7-p299
EMPTY        /usr/local/lib/ruby/1.8/bigdecimal/ is now empty. Delete manually if necessary.
EMPTY        /usr/local/lib/ruby/1.8/cgi/session/ is now empty. Delete manually if necessary.
...

一部ディレクトリが残ってしまっていますが、-Dオプションで実行することで、空のディレクトリも削除してくれるようです。

アップデートを想定して、ruby1.9系を入れてみることにしました。
アンインストール後に、インストールしても問題ないかと思いますが、今回はPruneという機能を使ってみます。これは既存のファイル群との衝突を回避するために、末尾に.prunedを付けたファイル名にリネームしてくれるものです。

## まず1.8.7をインストール
# graft -i ruby-1.8.7-p299
$ /usr/local/bin/ruby -v
ruby 1.8.7 (2010-06-23 patchlevel 299) [i686-linux]

## 1.9.1をダウンロード、インストール
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p429.tar.gz
$ tar zxvf ruby-1.9.1-p429.tar.gz
$ cd ruby-1.9.1-p429
$ ./configure --prefix=/pkgs/ruby-1.9.1-p429 && make
# make install

## graftコマンドでrubyを1.8.7から1.9.1にアップデートします
## アンインストール前に新しいバージョンの物をインストールしようとすると、衝突としてエラーが表示されます
# graft -i ruby-1.9.1-p429
CONFLICT     /usr/local/bin/erb is linked to something other than /pkgs/ruby-1.9.1-p429/bin/erb (/usr/local/bin/erb -> /pkgs/ruby-1.8.7-p299/bin/erb)

# graftコマンドを-pオプションで実行してみると、ファイル名の後ろに.prunedとリネームされているのがわかる
# graft -p ruby-1.8.7-p299
$ ls -l /usr/local/bin
lrwxrwxrwx  1 root root 30 7月 30日 09:39 /usr/local/bin/ruby.pruned -> /pkgs/ruby-1.8.7-p299/bin/ruby
# あらためてインストール
$ graft -i ruby-1.9.1-p429
## 1.9.1がインストールできていることを確認
$ ls -l /usr/local/bin
lrwxrwxrwx  1 root root 30 7月 30日 10:02 /usr/local/bin/ruby -> /pkgs/ruby-1.9.1-p429/bin/ruby

いくつか気になった点がありました。

  • 衝突回避のためにリネームされた.prunedファイルを消せない。

 (-pオプションで実行させる度に、上書きされるようなので問題なし?)

  • 設定ファイルも一緒に上書きされそうなので、.graft-exclude

や.graft-includeなどを使って、必要なものだけインストールするように調整する必要があるかもしれません。(未検証)

非常にシンプルに出来ていて簡単に使うことが出来るので、ごちゃごちゃとした余計な機能はいらない、という人にとってはオススメです。
あとは、ソースからインストールしたものが/pkgsに溜まっていくので、前のバージョンにすぐに切り替えたりといった事もできます。