代码之家  ›  专栏  ›  技术社区  ›  runrig

如何自动化CPAN配置?

  •  38
  • runrig  · 技术社区  · 14 年前

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

    5 回复  |  直到 12 年前
        1
  •  31
  •   runrig    14 年前

    既然还没有提到, cpanminus 是零配置CPAN安装程序。如果版本控制不可用,您可以下载一个自包含的可执行文件。

    CPANM可执行文件很容易安装(如可执行文件本身所述),包括:

    curl -L http://cpanmin.us | perl - --self-upgrade
    # or
    wget -O - http://cpanmin.us | perl - --self-upgrade
    
        2
  •  26
  •   Clayton Dukes    12 年前

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

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

    我想我会把它贴在这里,以防有人来。

        3
  •  6
  •   brian d foy    14 年前

    创建自己的cpan.pm配置文件。最新版本的 cpan 命令有 -J 切换到转储当前配置和 -j 切换到加载您喜欢的任何配置。

        4
  •  5
  •   runrig    14 年前

    一种方法是从一个系统运行一次后创建的cpan/config.pm(或~/.cpan/cpan/myconfig.pm),并在要自动执行的系统上安装为~/.cpan/cpan/myconfig.pm。另一种方法是运行以下命令为您创建myconfig.pm文件(下面缺少的一件事是urlist参数的实际值,您必须为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;
    
        5
  •  5
  •   daxim Fayland Lam    14 年前

    cpan.pm的最新版本首先询问配置的其余部分是否应自动运行,因此建议首先升级cpan.pm(手动): tarballs , repo .