【问题标题】:How do I automate CPAN configuration?如何自动化 CPAN 配置?
【发布时间】:2011-03-28 14:01:44
【问题描述】:

第一次从命令行运行 cpan 时,系统会提示您回答各种问题。如何从一开始就以非交互方式自动化 cpan 和安装模块?

【问题讨论】:

    标签: perl cpan


    【解决方案1】:

    由于尚未提及,cpanminus 是一个零配置的 cpan 安装程序。如果您的版本控制不可用,您可以下载一个独立的可执行文件。

    cpanm 可执行文件很容易安装(如可执行文件本身所述):

    curl -L http://cpanmin.us | perl - --self-upgrade
    # or
    wget -O - http://cpanmin.us | perl - --self-upgrade
    

    【讨论】:

    • 我想我在 cpanminus 上卖了 :-)
    • cpanminimus 为我的 Dockerfile 节省了一天
    【解决方案2】:

    我也在为此寻找一个简单的解决方案,并发现这是可行的:

    (echo y;echo o conf prerequisites_policy follow;echo o conf commit)|cpan
    

    只是想我会把它贴在这里以防其他人出现。

    【讨论】:

    • 这很适合在 Docker 中配置 cpan。
    • 我的只是echo | cpan,因为第一个问题是"automate as much as possible [yes]?"
    【解决方案3】:

    制作您自己的 CPAN.pm 配置文件。最新版本的cpan 命令有一个-J 开关来转储当前配置和一个-j 开关来加载你喜欢的任何配置。

    【讨论】:

    • 谢谢。我不知道 -j 和 -J
    【解决方案4】:

    最新版本的 CPAN.pm 第一个问题是是否应该自动运行其余配置,因此建议先升级 CPAN.pm(手动):tarballsrepo

    【讨论】:

      【解决方案5】:

      一种方法是从一个系统中获取一次运行后创建的 CPAN/Config.pm(或 ~/.cpan/CPAN/MyConfig.pm),并将其安装为 ~/.cpan/CPAN/MyConfig.pm on您想要自动化的系统。另一种方法是运行以下命令为您创建 MyConfig.pm 文件(下面缺少的是 urllist 参数的实际值,您必须为 CPAN 镜像填写适当的值):

      #!/usr/bin/perl
      
      use strict;
      use Config;
      
      $ENV{PERL_MM_USE_DEFAULT}=1;
      $ENV{PERL_MM_NONINTERACTIVE}=1;
      $ENV{AUTOMATED_TESTING}=1;
      
      # get the path to the library
      my $libpath = $Config{privlib};
      
      # force CPAN::FirstTime to not default to manual
      # setup, since initial CPAN setup needs to be automated
      {
        local @ARGV = "$libpath/CPAN/FirstTime.pm";
        my @source = <>;
        $source[72] =~ s/\byes\b/no/ or die "Could not auto configure CPAN";
        eval join('', @source) or die "Error executing CPAN::FirstTime: $@";
      }
      
      CPAN::FirstTime::init("$libpath/CPAN/Config.pm");
      
      delete $CPAN::Config->{links};
      $CPAN::Config->{auto_commit} = '0';
      $CPAN::Config->{check_sigs} = '0';
      $CPAN::Config->{halt_on_failure} = '0';
      $CPAN::Config->{make_install_make_command} = '/usr/bin/make';
      $CPAN::Config->{mbuild_arg} = '';
      $CPAN::Config->{mbuildpl_arg} = '';
      $CPAN::Config->{mbuild_install_arg} = '';
      $CPAN::Config->{show_upload_date} = '';
      $CPAN::Config->{tar_verbosity} = '1';
      $CPAN::Config->{trust_test_report_history} = '0';
      $CPAN::Config->{use_sqlite} = '0';
      $CPAN::Config->{yaml_load_code} = '0';
      $CPAN::Config->{urllist}
        = [qw(http://... ftp://... etc...)];
      $CPAN::Config->{connect_to_internet_ok} = '1';
      $CPAN::Config->{perl5lib_verbosity}     = 'v';
      $CPAN::Config->{prefer_installer}       = 'MB';
      $CPAN::Config->{build_requires_install_policy} = 'no';
      $CPAN::Config->{term_ornaments}         = '1';
      $CPAN::Config->{mbuild_install_build_command} = './Build';
      
      mkdir ".cpan/CPAN" or die "Can't create .cpan/CPAN: $!";
      CPAN::Config->commit(".cpan/CPAN/MyConfig.pm");
      
      CPAN::install('Bundle::CPAN');
      CPAN::install('JSON');
      CPAN::install('JSON::XS');
      # etc.
      
      exit 0;
      

      【讨论】:

        猜你喜欢
        • 2011-03-29
        • 2018-02-22
        • 2020-06-04
        • 2017-07-27
        • 2018-01-09
        • 2012-08-19
        • 2010-11-26
        • 1970-01-01
        相关资源
        最近更新 更多