How can I install Perl modules without root privileges?

Viewed 38307

I am on a Linux machine where I have no root privileges. I want to install some packages through CPAN into my home directory so that when I run Perl, it will be able to see it.

I ran cpan, which asked for some coniguration options. It asked for some directory, which it suggested ~/perl "for non-root users". Still, when I try to install a package, it fails at the make install step, because I don't have write access to /usr/lib/perl5/whatever.

How can I configure CPAN so that I can install packages into my home directory?

3 Answers

CPAN way

  1. run cpan command. If you don't have CPAN configurated, do it first! Otherwise, you will see the cpan prompt. In this case, type look local::lib and you will have a new shell prompt. In this new shell, run the bootstrap command configuring and compiling the module at same time as at bellow.

    user@host:~/.cpan/build/local-lib-1.004003-UyX2wf$ perl Makefile.PL --bootstrap && make test && make install

  2. Now, export some variables:

    Path where local::lib will install things

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

    And Perl variable to avoid user input

    echo 'export PERL_MM_USE_DEFAULT=1' >> ~/.bashrc

  3. Now load your bashrc running

    source ~/.bashrc

  4. Try to install running cpan <SOME_VALID_MODULE_NAMESPACE>

That's it! Now you can install modules using cpan without root privileges. But, remember that this will work just for the CURRENT USER including the root user !

cpanminus way

If you have this installed your sys admin deserves a beer!

Just run

$ cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)

Open another terminal and run

$ env |grep PERL

You should see something like this:

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

But if you're not, export variables like this:

$ 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

Finally, load your bashrc file and try to install with commands

source ~/.bashrc

and

cpanm <SOME_VALID_MODULE_NAMESPACE>

Fim!

Related