CPAN

CPAN is the Comprehensive Perl Archive Network and allows you to use the HUGE library of premade modules available at http://search.cpan.org

You need root access normally, but this article will show you how to setup CPAN as a non root user.

Setting up CPAN
To install modules in your home directory you first need to setup a target directory for them:

$ mkdir ~/perlmods

Perl needs to know where the new modules are going to be installed. Add the following lines to the bottom of your ~/.profile file:

PERL5LIB=~/perlmods/lib/perl/5.x:~/perlmods/lib/perl/5.x.x PERL5LIB=$PERL5LIB:~/perlmods/share/perl/5.x:~/perlmods/share/perl/5.x.x PERL5LIB=$PERL5LIB:~/perlmods/local/share/perl/5.x.x:~/perlmods/local/lib/perl/5.x.x export PERL5LIB

where 5.x and 5.x.x refer to the current version of Perl installed on the Dreamhost servers. (You an find the version with `perl -v`.)

Now log out from DreamHost and then log in again.

Setup CPAN to install the modules in the new path. Run cpan. If this is the first time you run it it will go directly into configuration mode.

$ cpan

Note that you must use the  command, rather than   - the latter command is not recognized as an installer, and will be subject to more stringent memory limits.

If the CPAN setup doesn't come up, at the cpan> prompt type "o conf init"

Are you ready for manual configuration? yes Policy on building prerequisites (follow, ask or ignore)? follow Parameters for the 'perl Makefile.PL' command? Typical frequently used settings: PREFIX=~/perl non-root users (please see manual for more hints) Your choice: PREFIX=~/perlmods Select your continent (or several nearby continents) [] 5 Select your country (or several nearby countries) [] 6 put them on one line, separated by blanks, e.g. '1 4 5' [] 14 7 1 2 3 (whatever you like)

The important options are that you want to do a manual configuration, and the PREFIX= line. The prerequisite line is optional but easier overall. After that you are done! You will be dumped into a cpan> command prompt:

cpan> install XRAY::Vision

Just type "install Some::Module", where Some::Module is the name of the module you are trying to install. See the example above. This will install if for you in the perlmods directory.

After you are finished you type:

cpan> bye

to exit the CPAN shell. How do you know if a Module is installed? You can tell if you need to add it or not by typing this at a shell login:

$ perl -MXRAY::Vision -e 1

If the module is installed in the root perl install, you won't get any errors, it will just return silently. If the module is not already installed in the root perl install, you will get something like this:

$ perl -MXRAY::Vision -e 1 Can't locate XRAY/Vision.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.4 .... etc

Making your FastCGI / CGI scripts work
Any CGI or Fast CGI scripts will need to have the following at their top if you want them to use the locally installed modules.

use lib qw( /home/username/perlmods/lib/perl/5.x /home/username/perlmods/lib/perl/5.x.x             /home/username/perlmods/share/perl/5.x /home/username/perlmods/share/perl/5.x.x             /home/username/perlmods/local/share/perl/5.x.x              /home/username/perlmods/local/lib/perl/5.x.x );

where username is your shell name, perlmods is what you chose above as the local CPAN install directory, and 5.x and 5.x.x refer to the currently installed Perl version determined by perl -v.

What if you get an error
If the above cpan command generates an error like the following: Your configuration suggests that CPAN.pm should use a working directory of   /root/.cpan Unfortunately we could not create the lock file /root/.cpan/.lock due to permission problems.

Please make sure that the configuration variable $CPAN::Config->{cpan_home} points to a directory where you can write a .lock file. You can set this variable in either /etc/perl/CPAN/Config.pm or   /home/username/.cpan/CPAN/MyConfig.pm

Could not open >/root/.cpan/.lock: Permission denied then you'll have to manually create your ~/.cpan/CPAN/MyConfig.pm file before going on (this is because root already configured cpan in your host.

You can do this by typing the following: mkdir -pv ${HOME}/.cpan/CPAN cat > ${HOME}/.cpan/CPAN/MyConfig.pm < q[0], 'build_cache' => q[10], 'build_dir' => q[\$ENV{HOME}/.cpan/build], 'cache_metadata' => q[1], 'commandnumber_in_prompt' => q[1], 'cpan_home' => q[\$ENV{HOME}/.cpan], 'dontload_hash' => { }, 'ftp' => q[/usr/bin/ftp], 'ftp_passive' => q[1], 'ftp_proxy' => q[], 'getcwd' => q[cwd], 'gpg' => q[/usr/bin/gpg], 'gzip' => q[/bin/gzip], 'histfile' => q[\$ENV{HOME}/.cpan/histfile], 'histsize' => q[100], 'http_proxy' => q[], 'inactivity_timeout' => q[0], 'index_expire' => q[1], 'inhibit_startup_message' => q[0], 'keep_source_where' => q[\$ENV{HOME}/.cpan/sources], 'lynx' => q[/usr/bin/lynx], 'make' => q[/usr/bin/make], 'make_arg' => q[], 'make_install_arg' => q[], 'make_install_make_command' => q[/usr/bin/make], 'makepl_arg' => q[PREFIX=\$ENV{HOME}/perlmods], 'mbuild_arg' => q[], 'mbuild_install_arg' => q[], 'mbuild_install_build_command' => q[./Build], 'mbuildpl_arg' => q[], 'ncftpget' => q[/usr/bin/ncftpget], 'no_proxy' => q[], 'pager' => q[less], 'prerequisites_policy' => q[follow], 'scan_cache' => q[atstart], 'shell' => q[/bin/bash], 'tar' => q[/bin/tar], 'term_is_latin' => q[0], 'term_ornaments' => q[1], 'unzip' => q[/usr/bin/unzip], 'urllist' => [q, q, q, q], 'use_sqlite' => q[0], 'wget' => q[/usr/bin/wget], }; 1; __END__ eof

Installing Module::Build and many other modules
If you're installing Module::Build or others which use Module::Build in their installation, it might help to add the above PERL5LIB lines follwing to your .profile (or .bash_profile) otherwise, anything you build won't know how to get to the Module::Build Build script.

Other modules
Please note that some modules will not install correctly from CPAN as non-root and to a non-standard path. They will have to be built and installed manually (that is, using the build scripts provided with the modules). Two specifically are:

DateTime
DateTime (as of 0.68) requires the install step to be executed like so using the "--install_base" option: $ ./Build install --install_base ~/perlmods

IO:Compress
IO::Compress (as of 2.034) requires tweaking the Makefile because one of the target paths ignores the PREFIX environment variable. After generating the Makefile using

$ perl Makefile.PL PREFIX=~/perlmods

Open up the Makefile and look for this line

INSTALLARCHLIB = /usr/lib/perl/5.10

Change it to say

INSTALLARCHLIB = $(SITEPREFIX)/lib/perl/5.10

Then proceed with your make/make test/make install.

Configuring CPAN
If you need to manually configure settings, you may access your configuration in the file: ~/.cpan/CPAN/MyConfig.pm If specifying PREFIX as above use the full path to your perlmods directory: PREFIX=/home/username/perlmods

Use perldoc to get a listing of CPAN settings that you may edit: perldoc CPAN

Using CPAN Minus and local::lib
Tatsuhiko Miyagawa's CPAN Minus (github cpan) makes it even easier to add support for your own Perl modules. Use

$ cpanm -L ~/perlmod module ...

to install modules into ~/perlmod. In your script, do

use local::lib '~/perlmod';

to use these modules.

Killed
There is a procwatch daemon running that may kill your perl installs - see Killed