perl 如何自动配置CPAN?

wtlkbnrh  于 2022-12-19  发布在  Perl
关注(0)|答案(5)|浏览(248)

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

nfg76nw0

nfg76nw01#

由于还没有提到,cpanminus是一个零配置的cpan安装程序,如果版本控制中没有它,你可以下载一个独立的可执行文件。
cpanm可执行文件很容易安装(如可执行文件本身中所述):

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

nxowjjhe2#

我正在寻找一个简单的解决方案,以及发现这工程:

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

我只是想把它贴在这里以防有人沿着。

wd2eg0qa

wd2eg0qa3#

创建您自己的CPAN.pm配置文件。最新版本的cpan命令有一个-J开关用于转储当前配置,还有一个-j开关用于加载您喜欢的任何配置。
我添加这些开关是因为我们在CD上分发CPAN,回到MiniCPAN可以容纳700Mb以下的时代。您可以正常运行cpan,但添加了一个选项:

% cpan -j /CD/Volume/path/cpan_config.pm ....

在那个例子中,config会将URL列表设置为CD路径。我很久以前就丢失了源文件,但我记得有一种方法可以动态地找到它的位置,或者可能有一个程序可以这样做并将配置保存在某个地方。

fhity93d

fhity93d4#

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

jk9hmnmh

jk9hmnmh5#

一种方法是从一个系统运行一次后创建CPAN/Config.pm(或~/.cpan/CPAN/MyConfig.pm),并将其作为~/.cpan/CPAN/MyConfig.pm安装在要自动化的系统上。另一种方法是运行以下命令为您创建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;

相关问题