Root権限のないLinuxマシンを使用しています。いくつかのパッケージをCPAN経由でホームディレクトリにインストールして、Perlを実行したときに表示されるようにしたいと考えています。
私はcpan
を実行し、いくつかの構成オプションを要求しました。これは、~/Perl
を「root以外のユーザーに」提案するディレクトリを要求しました。それでも、パッケージをインストールしようとすると、make install
への書き込みアクセス権がないため、/usr/lib/Perl5/whatever
ステップで失敗します。
ホームディレクトリにパッケージをインストールできるようにCPANを構成するにはどうすればよいですか?
perlfaq8 に記載されている方法があります。これは local :: lib が行っていることです。
また、StackOverflowに関するよくある質問です。
好奇心が強いのですが、元の質問のタイトルを使用した場合、これらはいずれも推奨されません(これは、適切なタイトルが回答を見つける上で非常に重要な理由の1つです)。
自分のモジュール/ライブラリディレクトリを保持するにはどうすればよいですか?
モジュールをビルドするときに、モジュールをインストールする場所をPerlに指示します。
自分で使用するためにモジュールをインストールする場合は、CPANからダウンロードできるlocal :: libが最も簡単な方法です。さまざまなインストール設定を設定し、プログラム内で同じ設定を使用します。
柔軟性を高めたい場合は、特定の状況に合わせてCPANクライアントを構成する必要があります。
Makefile.PLベースのディストリビューションの場合、Makefileを生成するときにINSTALL_BASEオプションを使用します。
Perl Makefile.PL INSTALL_BASE=/mydir/Perl
これをCPAN.pm構成で設定して、CPAN.pmシェルを使用するときにモジュールがプライベートライブラリディレクトリに自動的にインストールされるようにすることができます。
% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/Perl
cpan> o conf commit
Build.PLベースのディストリビューションの場合、-install_baseオプションを使用します。
Perl Build.PL --install_base /mydir/Perl
このオプションを自動的に使用するようにCPAN.pmを構成することもできます。
% cpan
cpan> o conf mbuild_arg "--install_base /mydir/Perl"
cpan> o conf commit
INSTALL_BASEは、これらのツールにモジュールを/ mydir/Perl/lib/Perl5に配置するよう指示します。実行時にインクルードパス(@INC)にディレクトリを追加するにはどうすればよいですか?を参照してください。新しくインストールされたモジュールを実行する方法の詳細については。
ただし、INSTALL_BASEには注意が必要です。これは、ExtUtils :: MakeMakerの古いバージョンが推奨していたPREFIXおよびLIBの設定とは異なる動作をするためです。 INSTALL_BASEは、Perlの複数のバージョンまたは異なるアーキテクチャのモジュールを同じディレクトリにインストールすることをサポートしていません。本当にそれが必要かどうかを検討し、必要な場合は古いPREFIXおよびLIB設定を使用してください。詳細については、ExtUtils :: Makemakerのドキュメントを参照してください。
cpan
コマンドを実行します。 CPANを構成していない場合は、最初に構成してください!それ以外の場合は、cpanプロンプトが表示されます。この場合、「_look local::lib
_」と入力すると、新しいシェルプロンプトが表示されます。この新しいシェルで、bootstrapコマンドを実行して、モジュールの構成とコンパイルを同時に実行します。
_user@Host:~/.cpan/build/local-lib-1.004003-UyX2wf$ Perl Makefile.PL --bootstrap && make test && make install
_
次に、いくつかの変数をエクスポートします。
Local :: libがインストールする場所のパス
echo 'eval $(Perl -I$index.t/Perl5/lib/Perl5 -Mlocal::lib)' >> ~/.bashrc
ユーザー入力を回避するためのPerl変数
_echo 'export Perl_MM_USE_DEFAULT=1' >> ~/.bashrc
_
bashrcを実行してロードします
_source ~/.bashrc
_
実行中の_cpan <SOME_VALID_MODULE_NAMESPACE>
_をインストールしてみます
それでおしまい!これで、root権限なしでcpanを使用してモジュールをインストールできます。ただし、これはルートユーザーを含むCURRENT USERに対してのみ機能することを忘れないでください。
これがインストールされている場合、システム管理者はビールに値します!
ただ走れ
$ cpanm --local-lib=~/Perl5 local::lib && eval $(Perl -I ~/Perl5/lib/Perl5/ -Mlocal::lib)
別のターミナルを開いて実行します
_$ env |grep Perl
_
次のようなものが表示されます。
Perl5LIB = $ HOME/Perl5/lib/Perl5 Perl_MB_OPT =-install_base "$ HOME/Perl5"
Perl_LOCAL_LIB_ROOT = $ HOME/Perl5
Perl_MM_OPT = INSTALL_BASE = $ HOME/Perl5
ただし、そうでない場合は、次のように変数をエクスポートします。
_$ echo "export Perl5LIB=\"$HOME/Perl5/lib/Perl5\"">>~/.bashrc && \ echo "export Perl_MB_OPT=\"--install_base '$HOME/Perl5'\">>~/.bashrc && \ echo "export Perl_LOCAL_LIB_ROOT=$HOME/Perl5">>~/.bashrc
_
最後に、bashrcファイルをロードし、コマンドを使用してインストールを試みます
_source ~/.bashrc
_
そして
_cpanm <SOME_VALID_MODULE_NAMESPACE>
_
フィム!