your programing

루트가 아닌 사용자로 CPAN을 어떻게 사용할 수 있습니까?

lovepro 2020. 10. 16. 07:52
반응형

루트가 아닌 사용자로 CPAN을 어떻게 사용할 수 있습니까?


루트 액세스 권한이없는 공유 서버에 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펄 모듈을 설치하고 다른 두 개의 인수를 설치하는 두 개의 모듈이 위치를. [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

사람이 로컬 모듈에 대한 매뉴얼 페이지를 찾도록 할 것입니다.


http://web.archive.org/web/20120427144232/http://perl.jonallen.info/writing/articles/install-perl-modules-without-root

http://novosial.org/perl/life-with-cpan/non-root/

두 명령어 세트의 주요 단계에는 local :: lib 모듈이 포함됩니다.

AFAIK, CPAN 로직은 Perl 모듈 (CPAN.pm)에 포함되어 있으므로 다른 Perl 모듈과 마찬가지로 로컬 디렉토리에 최신 로직을 쉽게 설치할 수 있습니다.


또한 비표준 위치에 모듈을 설치 한 후에는 비표준 위치에서 라이브러리를로드하는 방법에 대한 다음 두 가지 질문을 확인하십시오 (일부 정보는 위 링크에서 이미 사용 가능).

Perl 프로그램이 사용하는 Perl 모듈이 포함 된 파일을 찾을 위치를 어떻게 알 수 있습니까?

Perl의 @INC는 어떻게 구성됩니까? (일명 Perl 모듈이 검색되는 위치에 영향을 미치는 모든 방법은 무엇입니까?)


완전성을 위해 이것은 cpanmOSX 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

cpanminus가 설치된 모듈에 대한 매뉴얼 페이지도 읽을 수 있도록하려면 선택한 라이브러리 경로의 올바른 하위 디렉토리가 MANPATH에 있는지 확인해야합니다. 따라서 cpanm의 설치 프로세스를 보여주는 위의 솔루션에는 다음과 같은 추가 명령이 필요합니다.

 export MANPATH=$HOME/Library/perl5/man:$MANPATH' >> ~/.bash_profile

실제로 위의 답변을 복사하여 붙여 넣은 것이지만 재사용 가능한 단일 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

참고 URL : https://stackoverflow.com/questions/2980297/how-can-i-use-cpan-as-a-non-root-user

반응형