Mail::SPFをroot権限がない状態で、cpanmでインストールしたい。

目的

Mail::SPFをインストールするためには、/usr/sbinへの書き込み権限が必要である。つまり大抵の場合、root権限が必要となる。

だが、plenvを使っている環境などではsudo cpanm Mail::SPFとした場合、正しくインストールできない。

そのため、root権限なしでインストールしたい。

対処

root権限がない場合のインストール方法は、Mail::SPFのドキュメントに記載されている。

You can, however, work around this limitation by using the "--install_path"
option during installation:

./Build install --install_path sbin=/desired/sbin/path
http://cpansearch.perl.org/src/JMEHNLE/Mail-SPF-v2.9.0/INSTALL

また、cpanmで./Buildにオプションを与えるには、cpanm --look ...とした上で手動で実行する。

$ cpanm --look Mail::SPF
$ perl Build.PL
$ ./Build install --install_path sbin=/desired/sbin/path

ただしこの場合、make installするわけではないため、依存モジュールなどはインストールされない。

perl Makefile.PLmake installで./Buildに--install_pathを渡す方法は不明。

成功

Build.PLを書き換えることで対処するしかない。

install_path => {
    'sbin' => '/usr/sbin'
},

のようになっている部分の、/usr/sbin部分を書き込み可能なパスに書き換えればよい。

別の方法

最近のcpanmでは、まだ実験的にだが、--configure-args--build-args--test-args--install-argsといったオプションが用意されているのでそちらを使うことでもっと簡単にインストール可能。

$ cpanm --look --configure-args="--install_path sbin=/desired/sbin/path" Mail::SPF

しかし./Buildに与えるオプションなのだから--build-argsを使うものかと思ってしばらくはまった。CPANモジュールのインストールの流れはいまいちよくわからない。