tarballからインストールしたソフトウェアを簡単に管理する

普通 tarball からインストールする時は

./configure
make
sudo make install

のようにインストールします。この場合は全てのファイルが /usr/local に入るわけですが、
これだと複数のソフトウェアをインストールした場合に、どのファイルがどのソフトウェアに所属するのか分からなくなって、アンインストールができなくなります。

なので僕はいつも tarball からソフトウェアをインストールする場合は、
例えば hoge というソフトウェアをインストールする場合、必ず /opt/hoge にインストールしています。

./configure --prefix=/opt/hoge
make
sudo make install

こうすると複数のソフトウェアをインストールしても、ソフトウェアごとにディレクトリが分かれるので、

sudo rm -rf /opt/hoge

とすれば一発でアンインストールできます。

環境変数 PATH の設定は、以前書いたエントリー環境変数 PATH を自動で設定する方法で自動で設定されるので、楽チンです。

さらに他の環境変数も次のように定義しています。

# MANPATH の設定
MANPATH=
add_env MANPATH "${HOME}/man" "${HOME}/opt/*/man/ja" "${HOME}/opt/*/man"
add_env MANPATH "/usr/local/man/ja" "/usr/local/man"
add_env MANPATH "/usr/local/*/man/ja" "/usr/local/*/man"
add_env MANPATH "/opt/local/man/ja" "/opt/local/man"
add_env MANPATH "/opt/local/*/man/ja" "/opt/local/*/man"
add_env MANPATH "/opt/*/man/ja" "/opt/*/man"
add_env MANPATH "/usr/share/jman"
add_env MANPATH "/usr/*/man/ja"
add_env MANPATH "/usr/*/man"
add_env MANPATH "/usr/man/ja" "/usr/man"
clean_env MANPATH
export MANPATH
# LD_LIBRARY_PATH の設定
LD_LIBRARY_PATH=
add_env LD_LIBRARY_PATH "${HOME}/lib" "${HOME}/opt/*/lib"
add_env LD_LIBRARY_PATH "/usr/local/lib" "/usr/local/*/lib"
add_env LD_LIBRARY_PATH "/opt/local/lib" "/opt/local/*/lib"
add_env LD_LIBRARY_PATH "/opt/*/lib"
add_env LD_LIBRARY_PATH "/lib"
add_env LD_LIBRARY_PATH "/usr/lib"
add_env LD_LIBRARY_PATH "/usr/*/lib"
clean_env  LD_LIBRARY_PATH
export LD_LIBRARY_PATH
# LIBRARY_PATH の設定
LIBRARY_PATH=
add_env LIBRARY_PATH "${HOME}/lib" "${HOME}/opt/*/lib"
add_env LIBRARY_PATH "/usr/local/lib" "/usr/local/*/lib"
add_env LIBRARY_PATH "/opt/local/lib" "/opt/local/*/lib"
add_env LIBRARY_PATH "/opt/*/lib"
add_env LIBRARY_PATH "/lib"
add_env LIBRARY_PATH "/usr/lib"
add_env LIBRARY_PATH "/usr/*/lib"
clean_env  LIBRARY_PATH
export LIBRARY_PATH
# C_INCLUDE_PATH の設定
C_INCLUDE_PATH=
add_env C_INCLUDE_PATH "${HOME}/include" "${HOME}/opt/*/include"
add_env C_INCLUDE_PATH "/usr/local/include" "/usr/local/*/include"
add_env C_INCLUDE_PATH "/opt/local/include" "/opt/local/*/include"
add_env C_INCLUDE_PATH "/opt/*/include"
add_env C_INCLUDE_PATH "/usr/include"
add_env C_INCLUDE_PATH "/usr/*/include"
clean_env  C_INCLUDE_PATH
export C_INCLUDE_PATH

こうしておくと、/opt にインストールしたソフトウェアの man もちゃんと読めますし、
コンパイルする時にヘッダファイルもちゃんとインクルードしてくれるし、
ライブラリもちゃんとロードしてくれます。

既にシステムにパッケージがインストールされているんだけど最新バージョンを試してみたいときなんかは、
とりあえず /opt にインストールしてテストすることができます。
/opt のパスは /usr よりも先に設定されるので /opt にインストールしたものが優先されます。
/etc/ld.so.conf を書き換えない限りは /opt にインストールした環境はシステムに影響を与えないので、
他のプログラムの動作に影響を与えることはありません。

上記の方法を使うと複数バージョンをインストールすることも簡単です。

複数バージョンをインストールする場合は /opt/pkgs/hoge-x.x.x にインストールします。

./configure --prefix=/opt/pkgs/hoge-1.0.0
make
sudo make install

このままではパスが通りませんので、シンボリックリンクをはってあげます。

sudo ln -s /opt/pkgs/hoge-1.0.0 /opt/hoge

違うバージョンを使いたい場合はシンボリックリンクをはりなおす。

sudo ln -s /opt/pkgs/hoge-2.0.0 /opt/hoge

複数バージョンのインストールなんかは RPM のようなパッケージ管理システムを使ってもできないので、かなり便利です。

トラックバック(1)

このブログ記事を参照しているブログ一覧: tarballからインストールしたソフトウェアを簡単に管理する

このブログ記事に対するトラックバックURL: http://blog.bz2.jp/bz2mt/mt-tb.cgi/115

ベイアリア情報局で複数バージョンのバイナリを同時に扱う場合な情報が掲載されてます.折角なので異議は自分とこで立てようかと. 続きを読む

コメント(2)

昔の記事へのコメントで恐縮です。こちらのPATH設定方法をぜひ活用させていただきたいと思っているのですが、clean_env関数の内容はどのように書けばよいのでしょうか?(前記事の記述ではadd_envしか定義されていないようなので) よろしくお願いいたします。

clean_env() は重複した内容をクリアすることを意図していますが、別になくても動作には問題ないです。
僕自身も面倒で実装してないです。

ウェブページ

Powered by Movable Type 4.21-ja

このブログ記事について

このページは、masatoが2006年2月19日 15:06に書いたブログ記事です。

ひとつ前のブログ記事は「コメント削除しそうになった」です。

次のブログ記事は「複数のバージョンのPHPを簡単に切り替える」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。