tags:

views:

189

answers:

2

I want to install perl modules on a shared server on which I do not have root access. How can I do this? They also seem to have an older version of CPAN (it complains about that when running the command), is it possible to update the CPAN command being used from my account without requiring root access?

+6  A: 

http://perl.jonallen.info/writing/articles/install-perl-modules-without-root

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

The main step in both sets of instructions involves local::lib module

AFAIK, CPAN logic is contained in Perl module (CPAN.pm) which means you can also easily install the newer one in your local directory as you would with any other Perl module.


Also, once you install your modules in non-standard location, check out these two questions on loading libraries from non-standard locations (some of the info is already available in the link above):

How does a Perl program know where to find the file containing Perl module it uses?

How is Perl’s @INC constructed? (aka What are all the ways of affecting where Perl modules are searched for?)

DVK
Disclosure - I authored both of SO questions linked in this answer.
DVK
There are at least four different ways to install modules from CPAN: by hand, the CPAN module (and its commandline equivalent `cpan`), the `CPANPLUS` module (and its commandline equivalent `cpanp`), and the newish App::cpanminus distribution that installs `cpanm`. Of these, I find `cpanm` to be the easiest to install and use. `cpan` and `cpanp` are installed by default, but require significant setup to work correctly.
Chas. Owens
+9  A: 

The easiest method I have found so far is to say

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

This assumes your profile is named .profile, you may need to change that to be .bash_profile, .bashrc, etc. After that you can install modules by saying

cpanm Module::Name

and simply use them the same way you would if the were installed in the root directories.


What follows is a brief explanation of what the commands above do.

wget -O- http://cpanmin.us fetches the latest version of cpanm and prints it to STDOUT which is then piped to perl - -l ~/perl5 App::cpanminus local::lib. The first - tells perl to expect the program to come in on STDIN, this makes perl run the version of cpanm we just downloaded. perl passes the rest of the arguments to cpanm. The -l ~/perl5 argument tells cpanm where to install Perl modules, and the other two arguments are two modules to install. [App::cpanmins]1 is the package that installs cpanm. local::lib is a helper module that manages the environment variables needed to run modules in local directory.

After those modules are installed we run

eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`

to set the environment variables needed to use the local modules and then

echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile

to ensure we will be able to use them the next time we log in.

Chas. Owens
+1 for cpanminus... never used it so can't feel like I should recommend it, but I like it from what I saw on SO so far
DVK
This has been working excellent for me. Just a small note to remove first any existing PERL5LIB environment variables already in your ~/.profile (or whatever). Otherwise local::lib will fail to install when running the first command.
Juan Antonio
@juannavar Good point, I tend to install it on newly installed machines, so I don't run into that case.
Chas. Owens