Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

CPAN shared by multiple users

by jpl (Monk)
on Jun 18, 2011 at 23:10 UTC ( #910367=perlquestion: print w/replies, xml ) Need Help??
jpl has asked for the wisdom of the Perl Monks concerning the following question:

I maintain several different releases of perl on assorted machines, some of which cross-mount my home directory. The releases are shared by other users, who would like to be able to install CPAN modules without root access or funneling requests through me, so the release is writable by a group to which all semi-privileged users belong. We'd like to share a CPAN configuration so, for example, we are locked out of CPAN updates while some other group member is doing an update.

My perceived problem is that, because my home directory is cross-mounted, I cannot have different CPAN configurations for different releases, nor is it easy to share a common configuration among a set of users.

I can use a different configuration via

cpan -j /shared/CPAN/config args

but if I omit the args, I'm not dropped into the CPAN shell with the shared config, I just get a usage message. A quick scan of the CPAN modules doesn't suggest a way to override my home directory as the preferred place to look for a configuration file. I believe I can create a hokey File::HomeDir module to "fool" CPAN, but that seems very heavy handed.

Any monkish advice on setting up release-specific CPAN configurations that can be shared by multiple users?

Replies are listed 'Best First'.
Re: CPAN shared by multiple users
by zwon (Monsignor) on Jun 19, 2011 at 11:37 UTC
    File::HomeDir takes into account value of $ENV{HOME}, so you can just run cpan like this:
    HOME=/home/shared cpan
    and it will use cpan config from /home/shared
      Great idea. I was a bit nervous that the shell might mark HOME as read-only, but it appears to work just fine:
      cpan -J | egrep keep_source_where 'keep_source_where' => '/home/jpl/.cpan/sources', HOME=/fs/perl cpan -J | egrep keep_source_where 'keep_source_where' => '/fs/perl/.cpan/sources',
      So, in the end, what I had to do was
      1. Install File::HomeDir from CPAN (it's not part of the core distribution), and
      2. Copy the from /home/jpl/.cpan/CPAN to /fs/perl/.cpan/CPAN (and make sure all the references to my home directory had been replaced with /fs/perl.)
      There's a bit of a chicken-and-egg problem with getting started. If you use the CPAN shell to install File::HomeDir, then you may already have modified the config file under your home directory. It is probably prudent to back it up before doing anything, although the initialization process made a copy in in my case, so I could restore the original after getting everything set up under /fs/perl.

        A short followup: I turned another user in the group loose to install something from CPAN, and (after I made sure all the directories under the installation base had both group write permission, and "make all files created hereunder belong to this group" permission), things went fairly well. One install issued some warnings about chmod 666 failing for lack of permissions (which would make sense if the operation were being attempted on a file owned by me, not by the other user), but the install succeeded nevertheless. I'll turn others loose on Monday, and we'll see if things continue smoothly, or other problems arise.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://910367]
Approved by davies
Front-paged by Corion
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (3)
As of 2016-09-26 23:44 GMT
Find Nodes?
    Voting Booth?
    Extraterrestrials haven't visited the Earth yet because:

    Results (493 votes). Check out past polls.