ルートアクセス権のない共有サーバーに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