aptやyumと違って,makeしたプログラムはアンインストールなど管理が面倒。そこで,ちょっと前に paco でソースからコンパイルしたプログラムを管理するのが流行っていたように思う。しかし, paco は開発終了しているので今から使うには難があるし,なによりもcygwinに対応していない。
参考: pacoでmake installしたパッケージを管理
そこで,今回は stow を使ってみることにした。stowはperlで動くかなーりシンプルなプログラムなので管理も楽だ。
stow自体のインストールはパッケージマネージャから。
$ aptitude install stow # debian
$ apt-cyg install stow # cygwin
まずは初期設定を済ませる。 ~/.local/stow 以下にmakeしたプログラムをおいておきたい場合は次のようにする。いうまでもないことだが,新規シェルでも有効になるように .bashrc とかにも PATH を追加しておくこと。
$ mkdir -p ~/.local/stow # stowの管理フォルダを作成
$ export PAHT=~/.local/bin:$PATH # stowがシンボリックリンクを貼るディレクトリにPATHを通しておく
次に,stowを使って hoge-0.01 みたいなプログラムをインストールする流れは,次のようになる。こうするとstowは ~/.local/bin や ~/.local/share などにシンボリックリンクを貼ってくれて,普通にプログラムが使えるようになる。
$ ./configure --prefix=~/.local/stow/hoge-0.01 # stow管理フォルダ以下にmakeする
$ make && make install
$ cd ~/.local/stow
$ stow hoge-0.01 # stowでシンボリックリンクを作る
その他の機能(アンインストールなど)はhelpを見てください。
$ stow --help
stow (GNU Stow) version 2.2.0
SYNOPSIS:
stow [OPTION ...] [-D|-S|-R] PACKAGE ... [-D|-S|-R] PACKAGE ...
OPTIONS:
-d DIR, --dir=DIR Set stow dir to DIR (default is current dir)
-t DIR, --target=DIR Set target to DIR (default is parent of stow dir)
-S, --stow Stow the package names that follow this option
-D, --delete Unstow the package names that follow this option
-R, --restow Restow (like stow -D followed by stow -S)
--ignore=REGEX Ignore files ending in this Perl regex
--defer=REGEX Don't stow files beginning with this Perl regex
if the file is already stowed to another package
--override=REGEX Force stowing files beginning with this Perl regex
if the file is already stowed to another package
--adopt (Use with care!) Import existing files into stow package
from target. Please read docs before using.
-p, --compat Use legacy algorithm for unstowing
-n, --no, --simulate Do not actually make any filesystem changes
-v, --verbose[=N] Increase verbosity (levels are 0,1,2,3;
-v or --verbose adds 1; --verbose=N sets level)
-V, --version Show stow version number
-h, --help Show this help
Report bugs to: bug-stow@gnu.org
Stow home page: <http://www.gnu.org/software/stow/>
General help using GNU software: <http://www.gnu.org/gethelp/>
で,毎回このインストール作業をするのは面倒なので, astow というシェルスクリプトを書いてみた [1] 。
#!/bin/bash
# 自動的にstowするスクリプト
# 1番目の引数はパッケージ名
# 2番目以降はconfigureの引数になる
if test $# -ge 1 ; then
PACKAGENAME=$1
shift
else
PACKAGENAME=$(basename `pwd`)
echo '$PACKAGENAME' = $PACKAGENAME [y/n] n:
read ans
test "$ans" != "y" && exit
fi
if [ ! -d $HOME/.local/stow/ ] ; then
mkdir -p $HOME/.local/stow/
fi
echo ==== ./configure --prefix=$HOME/.local/stow/$PACKAGENAME "$@" =====================
./configure --prefix=$HOME/.local/stow/$PACKAGENAME "$@"
if test $? = 0; then
echo ==== make =======================================================
make
MAKEERROR=$?
else
echo "Error : ./conifigure --prefix=$HOME/.local/stow/$PACKAGENAME $@"
exit
fi
if test $MAKEERROR = 0; then
echo ==== make install prefix=$HOME/.local/stow/"$PACKAGENAME" =====================
make install prefix=$HOME/.local/stow/"$PACKAGENAME"
MAKEERROR=$?
else
echo "ERROR : make"
exit
fi
if test $MAKEERROR = 0; then
echo ==== stow $PACKAGENAME ==========================================
cd $HOME/.local/stow
stow $PACKAGENAME
else
echo "ERROR : make install prefix=$HOME/.local/stow/$PACKAGENAME"
exit
fi
astow は第一引数としてパッケージ名( stow ディレクトリ以下に作るフォルダ名),第二引数として configure のオプションを要求する。つまり, astow を使うとインストール作業は次のように簡略化できるのだ。
$ cd hoge-0.01 # ソースコードのあるディレクトリへ移動
$ astow hoge-0.01 --prefix=~.local/stow
ちなみに,引数なしで実行するとカレントディレクトリ名を元にパッケージ名を決定する。良かったら使ってみてください。
[1] | automated stow の略のつもり |
Comments !