【问题标题】:Installed CPAN Modules in Problematic Location在有问题的位置安装 CPAN 模块
【发布时间】:2016-02-11 16:46:26
【问题描述】:

我正在使用 CentOS 7 并设置新服务器。

虽然以 root 身份登录,但我已经通过 CPAN 安装了多个 perl 模块。不幸的是,它们似乎已经安装在 root 的主目录中。在安装所有模块之前我没有注意到这一点,但现在大多数模块都有这样的位置:

/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 

这意味着,对于 root 以外的用户,这些模块基本上不存在,因为权限将它们锁定在该目录之外。

我知道我可以通过授予所有用户对 /root 的读取权限来解决这个问题,但我不想这样做。

所以,我有几个具体问题要问:

  • 我做错了什么?我第一次跳过 CPAN 中的一个选项吗 跑了? (CPAN 配置粘贴在下面)
  • 最好的清理方法是什么?我想我需要卸载模块,更改我的配置,然后重新安装它们?经验丰富的建议表示赞赏。
  • CentOS 7 理想的通用安装目录是什么?我想把它们移到哪里?我认为 CPAN 会将它们置于理想的默认值中 位置。

感谢所有建议。

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__

【问题讨论】:

  • 我可以回答你的第二个和第三个问题:perlbrew.
  • 我安装了我可以使用 yum 的东西,但是由于 yum 缺乏可用性,许多旧模块需要使用 CPAN 安装。使用 CPAN 安装的模块安装在 /root 中。
  • @Blast 如果您要为多人管理一个系统,我不会使用 local::lib。 local::lib 更多地用于创建您自己的个人模块目录,例如当您没有管理员权限时;任何想要使用 local::lib 中的模块的人都必须在他们的每个脚本中添加一个use local::lib '/path/to/dir',或者设置一些环境变量。我认为最好只用 yum 安装模块,或者构建一个新的 Perl 并使用 CPAN。请参阅 Dave Cross 的 Perl in RPM-Land 以及 (续)
  • (续) CPAN RPMs in RHEL / CentOS : generation, conflict, and solutions。至于清理,我认为您可以放心地清除/root/perl5(不要忘记从root 的.bashrc 中删除与local::lib 相关的环境变量)。请注意,您的 cpan 配置中没有任何关于您的 local::lib;这都是由环境变量控制的。

标签: perl cpan centos7


【解决方案1】:

最简单的解决方案(以root身份登录)

vi ~/.bashrc

注释掉以下几行:

    #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";

注销,以 root 身份重新登录,现在 cpan 将安装到正确的系统目录。

我会删除 /root/perl5 目录并重新开始。

【讨论】:

    【解决方案2】:

    您以 root 身份安装了模块,那是您做错了 :) 模块安装涉及运行大量代码(包括模块测试),这些代码您永远不会检查并且来自您不认识和不应该信任的人。

    默认情况下,CPAN.pm 会查看 Perl 的设置来决定在哪里安装模块。它想将它们放在默认@INC 中的目录之一中。

    我不是 CentOS 用户,但我的建议是为用户安装不同的 perl。您不想弄乱您的系统需要进行内务处理的perl

    你也可以configure CPAN to install in a particular location

    【讨论】:

    • 我不为 cpan 使用 sudo。我要么有一个用户属于拥有 Perl 目录的组(在不同的 perl 中),要么通过发行版的包管理器更新系统 perl。
    • 用户想要在系统范围内安装软件包,无论是否使用 sudo 以及是否以 root 身份运行 cpan 都不会改变 local::lib 如何满足他的需求。
    猜你喜欢
    • 2014-12-06
    • 2011-09-29
    • 2015-10-02
    • 2017-04-12
    • 2011-05-17
    • 2018-03-28
    • 2018-06-19
    • 2013-11-04
    • 2013-09-24
    相关资源
    最近更新 更多