web-dev-qa-db-ja.com

root権限なしでPerlモジュールをインストールするにはどうすればよいですか?

Root権限のないLinuxマシンを使用しています。いくつかのパッケージをCPAN経由でホームディレクトリにインストールして、Perlを実行したときに表示されるようにしたいと考えています。

私はcpanを実行し、いくつかの構成オプションを要求しました。これは、~/Perlを「root以外のユーザーに」提案するディレクトリを要求しました。それでも、パッケージをインストールしようとすると、make installへの書き込みアクセス権がないため、/usr/lib/Perl5/whateverステップで失敗します。

ホームディレクトリにパッケージをインストールできるようにCPANを構成するにはどうすればよいですか?

38
petersohn

local :: lib を参照してください。

インストールしたら、次のことができます。

Perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'

28
Sinan Ünür

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のドキュメントを参照してください。

25
brian d foy

CPANウェイ

  1. cpanコマンドを実行します。 CPANを構成していない場合は、最初に構成してください!それ以外の場合は、cpanプロンプトが表示されます。この場合、「_look local::lib_」と入力すると、新しいシェルプロンプトが表示されます。この新しいシェルで、bootstrapコマンドを実行して、モジュールの構成とコンパイルを同時に実行します。

    _user@Host:~/.cpan/build/local-lib-1.004003-UyX2wf$ Perl Makefile.PL --bootstrap && make test && make install_

  2. 次に、いくつかの変数をエクスポートします。

    Local :: libがインストールする場所のパス

    echo 'eval $(Perl -I$index.t/Perl5/lib/Perl5 -Mlocal::lib)' >> ~/.bashrc

    ユーザー入力を回避するためのPerl変数

    _echo 'export Perl_MM_USE_DEFAULT=1' >> ~/.bashrc_

  3. bashrcを実行してロードします

    _source ~/.bashrc_

  4. 実行中の_cpan <SOME_VALID_MODULE_NAMESPACE>_をインストールしてみます

それでおしまい!これで、root権限なしでcpanを使用してモジュールをインストールできます。ただし、これはルートユーザーを含むCURRENT USERに対してのみ機能することを忘れないでください。

cpanminus way

これがインストールされている場合、システム管理者はビールに値します!

ただ走れ

$ 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>_

フィム!

1
Andre Carneiro