2010-08-11 58 views
36

第一次從命令行運行cpan時,系統會提示您輸入各種問題的答案。如何從一開始就非交互式地自動化cpan並安裝模塊?如何自動化CPAN配置?

回答

30

由於尚未提及,因此cpanminus是零配置cpan安裝程序。如果它不適用於您的版本控制,則可以下載自包含的可執行文件。

的cpanm可執行文件很容易安裝(如可執行文件本身記錄)與:

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

我想我是賣在cpanminus :-) – runrig 2010-08-12 15:43:28

+0

cpanminimus爲我的Dockerfiles保存了一天 – BitByteDog 2016-02-19 20:35:27

5

一種方法是從一個系統中執行一次運行後創建的CPAN/Config.pm(或〜/ .cpan/CPAN/MyConfig.pm),並將其安裝爲〜/ .cpan/CPAN/MyConfig.pm在你想自動化的系統上。另一種方法是運行以下命令來創建MyConfig.pm文件你(有一兩件事失蹤以下是您將有適當的值,以填補在CPAN鏡子urllist參數的實際值):

#!/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: [email protected]"; 
} 

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; 
6

使自己的CPAN.pm的配置文件。最近版本的cpan命令有一個-J開關來轉儲當前的配置和一個-j開關來加載你喜歡的任何配置。

+0

謝謝。我不知道-j和-J – runrig 2010-08-12 19:21:05

5

CPAN.pm的最新版本詢問是否應自動運行其餘配置的第一個問題,因此建議首先升級CPAN.pm(手動):tarballsrepo

25

我一直在尋找這個還有一個簡單的解決方案,發現這工作:

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

只是想我要在這裏發佈的情況下,任何人走來。

+3

這很好地在Docker中配置cpan。 – Sobrique 2015-07-23 13:11:46

+3

我只是'回聲| cpan「,因爲第一個問題是」儘可能自動化「(是的)?」 – activedecay 2017-08-16 19:58:09