如何将PERLBREW_ROOT移动到另一个目录?

jot*_*ttr 9 perl perlbrew

perlbrew用来管理我的Perl环境.当我perlbrew按照文档第一次安装时,它安装了所有内容~/perl5/perlbrew,我现在觉得不合适.

文件说明:

目录〜/ perl5/perlbrew将包含所有安装perl可执行文件,库,文档,lib,site_libs.在文档中,该目录称为"perlbrew root".如果您需要将其设置为其他位置,因为您的HOME具有有限的配额,您可以通过在运行安装程序之前设置PERLBREW_ROOT环境变量来实现:

export PERLBREW_ROOT=/opt/perl5/perlbrew
curl -kL http://install.perlbrew.pl | bash
Run Code Online (Sandbox Code Playgroud)

问题:如何移动PERLBREW_ROOT目录/opt/perl5/perlbrew而不是~/perl5/perlbrew

ike*_*ami 7

不幸的是,你不能简单地移动已安装的Perl.对于初学者来说,添加的路径@INC是硬编码的.我向您介绍四种解决方案,其中我推荐第三种解决方案.

但首先,我建议使用/opt/perlbrew而不是/opt/perl5/perlbrew因为不需要额外的水平.下面的代码段假设您遵循此建议.

  1. 从头开始,重新安装perl你的任何版本.

    Con:对于每个构建,您还必须重新安装构建已安装的所有模块.这意味着您需要重新测试所有应用程序.这是耗时的,并非没有风险.

  2. 移动perlbrew目录,但尝试修复安装.

    如果~并且/opt位于同一文件系统上,请按如下方式移动安装:

    mv ~/perl5/perlbrew /opt/
    # Adjust file ownership and permissions as desired.
    
    Run Code Online (Sandbox Code Playgroud)

    如果~并且/opt位于不同的文件系统上,请按如下方式移动安装:

    ( cd ~/perl5 ; tar c perlbrew ) | ( cd /opt ; tar x )
    # Adjust file ownership and permissions as desired.
    
    Run Code Online (Sandbox Code Playgroud)

    然后,编辑由以下内容打印的每个文件中的路径:

    for q in /opt/perlbrew/perls/* ; do
       "$q/bin/perl" -le'
          use Config;
          require "Config_heavy.pl";
          print $INC{"Config.pm"};
          print $INC{"Config_heavy.pl"};
       '
    done
    
    Run Code Online (Sandbox Code Playgroud)

    您还需要编辑#!许多脚本的shebang()行.

    骗局:很多工作(尽管不像第一个选项那么多),脆弱,不能保证工作.

  3. 创建未来的构建/opt/perlbrew,但将现有构建保留在原来的位置.

    安装完成后perlbrew/opt/perlbrew,运行以下命令:

    cd /opt/perlbrew/perls
    for q in ~/perl5/perlbrew/perls/* ; do
       ln -s "$q"
    done
    
    Run Code Online (Sandbox Code Playgroud)

    亲:超级简单快捷.随着时间的推移,您可以逐步淘汰~/perl5/perlbrew(通过删除不需要的构建,按照选项1替换它们,或根据选项2移动它们).

    骗:每个应该有权访问的人/opt/perlbrew也需要访问你的~/perl5/perlbrew.

  4. 不要改变PERLBREW_ROOT.只需制作/opt/perlbrew一个符号链接.

    ln -s ~/perl5/perlbrew /opt/perlbrew
    
    Run Code Online (Sandbox Code Playgroud)

    亲:超级简单快捷.

    骗:每个应该有权访问的人/opt/perlbrew也需要访问你的~/perl5/perlbrew.

  • 这就是为什么我用 -D userelocateableinc 编译所有 Perls 的原因。 (2认同)