Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Installed CPAN Modules in Problematic Location

Tags:

perl

centos7

cpan

I am using CentOS 7 and seting up a new server.

Whilst logged in as root, I have installed multiple perl modules through CPAN. Unfortunately, they seem to have installed inside root's home directory. I didn't notice this until all the modules were installed, but most of them have locations like this now:

/root/perl5/lib/perl5/5.16.3/x86_64-linux-thread-multi 
/root/perl5/lib/perl5/5.16.3 
/root/perl5/lib/perl5/x86_64-linux-thread-multi 
/root/perl5/lib/perl5 /usr/local/lib64/perl5 

This means that, for users other than root, these modules essentially do not exist, as the permissions lock them out of that directory.

I know I could solve this by giving all users read access to /root, but I'd rather not.

So, I have a few specific questions to ask:

  • What did I do wrong? Did I skip an option in CPAN the first time it ran? (CPAN config is pasted below)
  • What is the best way to clean this up? I presume I need to uninstall the modules, change my config, and then reinstall them? Experienced advice is appreciated.
  • What is the ideal general installation directory for CentOS 7? Where do I want to move them to? I assumed CPAN would put them in an ideal default location.

All advice gratefully received.

cat MyConfig.pm

$CPAN::Config = {
  'applypatch' => q[],
  'auto_commit' => q[1],
  'build_cache' => q[100],
  'build_dir' => q[/root/.cpan/build],
  'build_dir_reuse' => q[0],
  'build_requires_install_policy' => q[yes],
  'bzip2' => q[],
  'cache_metadata' => q[1],
  'check_sigs' => q[0],
  'colorize_output' => q[0],
  'commandnumber_in_prompt' => q[1],
  'connect_to_internet_ok' => q[1],
  'cpan_home' => q[/root/.cpan],
  'ftp_passive' => q[1],
  'ftp_proxy' => q[],
  'getcwd' => q[cwd],
  'gpg' => q[/bin/gpg],
  'gzip' => q[/bin/gzip],
  'halt_on_failure' => q[0],
  'histfile' => q[/root/.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[/root/.cpan/sources],
  'load_module_verbosity' => q[none],
  'make' => q[/bin/make],
  'make_arg' => q[],
  'make_install_arg' => q[],
  'make_install_make_command' => q[/bin/make],
  'makepl_arg' => q[],
  'mbuild_arg' => q[],
  'mbuild_install_arg' => q[],
  'mbuild_install_build_command' => q[./Build],
  'mbuildpl_arg' => q[],
  'no_proxy' => q[],
  'pager' => q[/bin/less],
  'patch' => q[/bin/patch],
  'perl5lib_verbosity' => q[none],
  'prefer_external_tar' => q[1],
  'prefer_installer' => q[MB],
  'prefs_dir' => q[/root/.cpan/prefs],
  'prerequisites_policy' => q[follow],
  'scan_cache' => q[atstart],
  'shell' => q[/bin/bash],
  'show_unparsable_versions' => q[0],
  'show_upload_date' => q[0],
  'show_zero_versions' => q[0],
  'tar' => q[/bin/tar],
  'tar_verbosity' => q[none],
  'term_is_latin' => q[1],
  'term_ornaments' => q[1],
  'test_report' => q[0],
  'trust_test_report_history' => q[0],
  'unzip' => q[],
  'urllist' => [q[http://mirror.sov.uk.goscomb.net/CPAN/], q[http://ww
+w.mirrorservice.org/sites/cpan.perl.org/CPAN/], q[http://cpan.mirrors
+.ovh.net/ftp.cpan.org/]],
  'use_sqlite' => q[0],
  'version_timeout' => q[15],
  'wget' => q[/bin/wget],
  'yaml_load_code' => q[0],
  'yaml_module' => q[YAML],
};
1;
__END__
like image 425
Richard of Essex Avatar asked Nov 10 '15 17:11

Richard of Essex


People also ask

Where does CPAN install to?

CPAN doesn't actually install files. It runs the install script embedded in each distribution, which then performs the actual install. For distributions using ExtUtils::MakeMaker, the defaults are documented here: https://metacpan.org/pod/ExtUtils::MakeMaker#make-install (and the default value of INSTALLDIRS is site ).

How do I clean my CPAN?

Just delete it. All of the files in that directory are temporary files generated while installing or upgrading modules from CPAN. They are not required after the install is complete.

How do I find out where a Perl module is installed?

instmodsh command provides an interactive shell type interface to query details of locally installed Perl modules. It is a little interface to ExtUtils::Installed to examine locally* installed modules, validate your packlists and even create a tarball from an installed module.


1 Answers

Simplest solution (logged in as root)

vi ~/.bashrc

comment out the following lines:

    #export PERL_LOCAL_LIB_ROOT="$PERL_LOCAL_LIB_ROOT:/root/perl5";
    #export PERL_MB_OPT="--install_base /root/perl5";
    #export PERL_MM_OPT="INSTALL_BASE=/root/perl5";
    #export PERL5LIB="/root/perl5/lib/perl5:$PERL5LIB";
    #export PATH="/root/perl5/bin:$PATH";

Log out, log back in as root, and now cpan will install to the correct system directories.

I would just delete the /root/perl5 directory and start afresh.

like image 81
CompuLingus Avatar answered Sep 20 '22 15:09

CompuLingus