Difference between revisions of "Managing Perl Libraries"

From WormBaseWiki
Jump to navigationJump to search
Line 31: Line 31:
 
   sudo perl -MCPAN -e install 'local::lib'
 
   sudo perl -MCPAN -e install 'local::lib'
  
= Perl Module Locations =
+
= Private library locations =
  
3rd party Perl modules are maintained in an "extlib" directory within each project directory:
+
By convention, 3rd party Perl modules are maintained in an "extlib" directory within each project directory:
  
 
   website-classic/extlib - ''The "Classic" WormBase website
 
   website-classic/extlib - ''The "Classic" WormBase website

Revision as of 13:41, 2 August 2009

Overview

Maintaining Perl modules across our server farm can be a time consuming and tedious task because of the heterogeneity of our setup. Further, we often need to maintain unique sets of libraries for different applications with collisions.

To solve these problems, I maintain local copies of libraries for each application. Typically, these are found at

 /path/to/application/extlib

Installing modules in a local path is made significantly easier through the use of local::lib and Apache2/mod_perl2 "PerlSwitches" directive.

local::lib dispenses with the need to maintain multiple CPAN configurations or manual tweaks to your environment variables in order to recognize already installed modules.

Installation Script

The steps described in this document are almost entirely scripted:

 wormbase-admin:maintenance/install_perl_modules.sh
 Usage:
 $ ./install_perl_modules.sh /path/to/private/libraries/extlib
 Usage (for installing Catalyst and its dependencies):
 $ ./install_perl_modules.sh /path/to/private/libraries/extlib CATALYST

Read on for additional (important) details that include appropriate settings for interactive steps in the script.

local::lib Installation and Configuration

local::lib is installed into the system Perl path:

 sudo perl -MCPAN -e install 'local::lib'

Private library locations

By convention, 3rd party Perl modules are maintained in an "extlib" directory within each project directory:

 website-classic/extlib - The "Classic" WormBase website
 website/extlib - 'The rearchitecture
 website-2.01/extlib - Version 2.01 of the rearchitecture

And so on...

Setting your shell to install to the local environments

To set your current shell to use one of the local library do the following:

$ cd /usr/local/wormbase/extlib/2.0
$ perl -Mlocal::lib=./
$ eval $(perl -Mlocal::lib=--self-contained,./)
$ printenv     // Notice that the local path is now in your PERL5LIB

And install some modules:

$ perl -MCPAN -Mlocal::lib=--self-contained -e 'CPAN::install(MODULE)'

Required Perl modules

WormBase "Classic"

Install the following Perl modules via CPAN. Note that you DO NOT AND SHOULD NOT be sudo.

cd /usr/local/wormbase/extlib/classic
perl -Mlocal::lib=./
eval $(perl -Mlocal::lib=--self-contained,./)
perl -MCPAN -e 'CPAN::install(MODULE)'
// Some basics...
YAML
LWP
ExtUtils::MakeMaker
Bundle::CPAN

// The rest...
Bio::Graphics
BioPerl   
   // When prompted, choose to download all optional modules. This will also install Ace:
Ace
   // During configuration, choose option (3), then set the remaining variables as follows:
   Site-specific configuration files:  /usr/local/wormbase/website-classic/conf
   CGI path:  /usr/local/wormbase/website-classic/cgi-bin
   HTML path:  /usr/local/wormbase/website-classic/html
   // For Catalyst-based apps:
   Site-specific configuration files:  /usr/local/wormbase/website/conf
   CGI path:  /usr/local/wormbase/website/root/cgi
   HTML path:  /usr/local/wormbase/website/root/static
Cache::Cache
Cache::FileCache
CGI
CGI::Session  
CGI::Cache
CGI::Toggle
Class::Base
Data::Stag
Date::Calc
Date::Manip
DB_File
DBI
DBD::mysql   (mysql devel package must be installed first)
    // To build by hand:
    perl Makefile.PL INSTALL_BASE=/usr/local/wormbase/extlib/classic --testuser=USER --testpassword=PASS
    make ; make test ; make install
Digest::MD5
Flickr::API
Flickr::API::Simple
    // This is a private library
    cd /usr/local/wormbase/build
    perl ./Build.PL --install_base /usr/local/wormbase/extlib/classic
   ./Build install
GD 
GD::SVG
GD::Graph
GD::Graph::pie
HTML::TokeParser
IO::Scalar
IO::String
Image::GD::Thumbnail
Log::Log4perl
MIME::Lite
mod_perl2   // Requires that apache2 already be installed; apxs is at /usr/local/apache2/bin/apxs
Net::FTP
Proc::Simple
Search::Indexer
SOAP::Lite
Statistics::OLS
Storable
SVG
SVG::Graph
Term::ReadKey
Test::Pod
Text::Shellwords
Time::Format
WeakRef
XML::SAX
XML::Parser
XML::DOM
XML::Writer
XML::Twig
XML::Simple

WormBase > 2.0

WormBase2.0 and above uses the Catalyst web framework. In addition to the modules described above we also need to install Catalyst.

These first two bundles will install the majority of the Catalyst web framework:

Task::Catalyst
Catalyst::Devel
 We also need:
Catalyst::Model::DBI
Catalyst::Model::Adaptor
Catalyst::Plugin::ConfigLoader
Catalyst::Plugin::Session
Catalyst::Plugin::Session::State
Catalyst::Plugin::Session::State::Cookie
Catalyst::Plugin::Session::Store::FastMMap
Catalyst::Action::RenderView
Catalyst::Action::Rest
Catalyst::Log::Log4perl
Test::YAML::Valid

Displaying Environment variables

To quickly show a list of handy environment variables, do:

$ cd /usr/local/wormbase/extlib/classic 
$ perl -Mlocal::lib=./
export MODULEBUILDRC="/usr/local/wormbase/extlib/classic/.modulebuildrc"
export PERL_MM_OPT="INSTALL_BASE=/usr/local/wormbase/extlib/classic"
export PERL5LIB="/usr/local/wormbase/extlib/classic/lib/perl5:/usr/local/wormbase/extlib/classic/lib/perl5/x86_64-linux-gnu-thread-multi:$PERL5LIB"
export PATH="/usr/local/wormbase/extlib/classic/bin:$PATH"

We will use some of these variables for, say, setting up apache.

Updating Modules

To show all modules that are out-of-date with those on CPAN:

$ cd /path/to/extlib
$ perl -Mlocal::lib=./
$ eval $(perl -Mlocal::lib=--self-contained,./)
$ perl -MCPAN -e 'CPAN::Shell->r'

To update all of these modules at once:

$ perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'



Tips and Tricks

Some modules may require a little TLC. After running the script you can find source at ~/.cpan/build/module-*

BioPerl

Instead of building BioPerl from CPAN, it might be necessary to build from SVN:

 $ cd /usr/local/wormbase/build
 $ svn co svn+ssh://USERNAME@dev.open-bio.org/home/svn-repositories/bioperl/bioperl-live/trunk bioperl-live
 $ mv bioperl-live bioperl-live-tharris
 $ cd bioperl-live-tharris
 $ perl ./Build.PL install_base /usr/local/wormbase/extlib
 $ ./Build test
 $ ./Build install

DBD::mysql

You will need to specify a test user and test password for tests to pass.

ModPerl2

You will need to be sudo in order to install the dso.

Installing modules without using local::lib

You may on occasion need to install something without using local::lib. For EUMM modules, use

 perl -I/usr/local/wormbase/extlib/[PROJECT] Makefile.PL INSTALL_BASE=/usr/local/wormbase/extlib/[PROJECT]

And for Module::Build

 perl -I/usr/local/wormbase/extlib/[PROJECT] Makefile.PL --install_base /usr/local/wormbase/extlib/[PROJECT] 

Alternatively, you can manually edit ~/.cpan/CPAN/MyConfig.pm

Creating a Perl Bundle