ルートアクセス権のない共有サーバーにperlモジュールをインストールしたい。これどうやってするの?彼らはまた古いバージョンのCPANを持っているようです(コマンドを実行するとそれについて不平を言います)、ルートアクセスを必要とせずに私のアカウントから使用されているCPANコマンドを更新することは可能ですか?
回答:
私がこれまでに見つけた最も簡単な方法は言うことです
wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
これは、あなたのプロフィールの名前が想定して.profile、あなたがすることを変更する必要があり.bash_profile、.bashrcあなたが言ってモジュールをインストールすることができた後など、
cpanm Module::Name
ルートディレクトリにインストールされている場合と同じように使用します。
以下は、上記のコマンドの機能の簡単な説明です。
wget -O- http://cpanmin.usの最新バージョンをフェッチしてcpanm印刷しSTDOUT、にパイプで送信しperl - -l ~/perl5 App::cpanminus local::libます。最初-はperl、プログラムSTDINがperl実行されることを期待するように指示しcpanmます。これにより、ダウンロードしたバージョンを実行できます。 perl残りの引数をに渡しますcpanm。-l ~/perl5引数が伝えるcpanmところPerlモジュールをインストールすると、他の2つの引数は、インストールするには、2つのモジュールです。 [App::cpanmins] 1はをインストールするパッケージですcpanm。 local::libローカルディレクトリでモジュールを実行するために必要な環境変数を管理するヘルパーモジュールです。
これらのモジュールをインストールした後、実行します
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
ローカルモジュールを使用するために必要な環境変数を設定してから
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
次回ログインしたときにそれらを使用できるようにするためです。
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
うまくいけば、manがローカルモジュールのmanページを見つけられるようになります。
perl -I ~/perl5/lib/perl5 -Mlocal::libまたはのようなコマンド ssh-agentは、親プロセスで実行する必要のあるコマンドを出力してから、evalそれらを出力します。evalただし、実際には必要ありません。と言うこともできますperl -I ~/perl5/lib/perl5 -Mlocal::lib > /tmp/commands; source /tmp/commandsが、evalメソッドの方がクリーンです(クリーンアップするファイルや誤って上書きするファイルはありません)。
http://novosial.org/perl/life-with-cpan/non-root/
両方の命令セットの主なステップには、local :: libモジュールが含まれます
AFAIK、CPANロジックはPerlモジュール(CPAN.pm)に含まれています。つまり、他のPerlモジュールと同じように、ローカルディレクトリに新しいロジックを簡単にインストールすることもできます。
また、モジュールを非標準の場所にインストールしたら、非標準の場所からライブラリをロードする際の次の2つの質問を確認してください(情報の一部は上記のリンクですでに利用可能です)。
Perlプログラムは、使用するPerlモジュールを含むファイルの場所をどのようにして知るのですか?
Perlの@INCはどのように構築されますか?(別名、Perlモジュールが検索される場所に影響を与えるすべての方法は何ですか?)
cpan)、CPANPLUSモジュール(およびそれに相当するコマンドラインcpanp)、およびをインストールする新しいApp :: cpanminusディストリビューションですcpanm。これらの中で、私はcpanmインストールして使用するのが最も簡単だと思います。 cpanそしてcpanpデフォルトでインストールされていますが、正しく動作するために重要なセットアップを必要としています。
完全を期すため、これは、のインストールプロセスであるcpanmあなたは維持したい場合はOSX上のperl5下を~/Library。
curl -L http://cpanmin.us | perl - -l ~/Library/perl5 App::cpanminus local::lib
eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`
echo 'eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`' >> ~/.bash_profile
過去6か月間、20を超えるデプロイで次の関数を使用してき ました。awsへの自動デプロイが成功しました...メインプロビジョニングから次のように呼び出されます。これは基本的に上記の回答のコピーペーストですが、1回の再使用可能なbashスクリプト:
#! /usr/bin/env bash │··
│··
# a bash wrapper for check-installing required perl modules as non-root
main(){ │··
doSetVars │··
doCheckInstallPreReqs │··
perl $PRODUCT_INSTANCE_DIR/src/perl/my-perl-script.t │··
} │··
│··
doSetVars(){ │··
#set -x │··
umask 022 ; │··
set -u -o pipefail │··
run_unit_bash_dir=$(perl -e 'use File::Basename; use Cwd "abs_path"; print dirname(abs_path(@ARGV[0]));' -- "$0") │··
export PRODUCT_INSTANCE_DIR=$run_unit_bash_dir/../.. │··
} │··
│··
doCheckInstallPreReqs(){ │··
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` │··
perl -e ' │··
use JSON ; │··
use Data::Printer; │··
use Test::Most ; │··
use Test::Mojo; │··
use Data::Printer ; │··
use FindBin; │··
use JSON::Parse ; │··
use IPC::System::Simple ; │··
use Mojolicious ; │··
' || { │··
curl -L http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib │··
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` │··
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.bashrc │··
cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) │··
export PERL_MM_USE_DEFAULT=1 │··
cpanm JSON Data::Printer Test::Most Test::Mojo Data::Printer FindBin JSON::Parse \ │··
IPC::System::Simple │··
sudo curl -L cpanmin.us | perl - Mojolicious │··
} │··
│··
} │··
│··
main