web-dev-qa-db-ja.com

CPAN構成を自動化するにはどうすればよいですか?

コマンドラインから初めてcpanを実行すると、さまざまな質問に対する回答を求められます。 cpanを自動化し、モジュールを最初から非対話的にインストールする方法を教えてください。

42
runrig

まだ言及されていないため、 cpanminus はzero-conf cpanインストーラーです。また、バージョンコントロールで使用できない場合は、自己完結型の実行可能ファイルをダウンロードできます。

Cpanm実行可能ファイルは、次のようにして簡単にインストールできます(実行可能ファイル自体に記載されています)。

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

私もこれの簡単な解決策を探していて、これがうまくいくことがわかりました:

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

誰かが来た場合に備えて、ここに投稿すると思いました。

29
Clayton Dukes

独自のCPAN.pm構成ファイルを作成します。 cpanコマンドの最近のバージョンには、現在の構成をダンプする-Jスイッチと、好きな構成をロードする-jスイッチがあります。

7
brian d foy

1つの方法は、1つのシステムから1回実行した後に作成されたCPAN/Config.pm(または〜/ .cpan/CPAN/MyConfig.pm)を取得し、それを〜/ .cpan/CPAN/MyConfig.pmとしてシステムにインストールすることです。自動化したい。もう1つの方法は、次のコマンドを実行して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: $@";
}

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
runrig

CPAN.pmの最近のバージョンでは、残りの構成を自動的に実行する必要があるかどうかを最初の質問として尋ねるので、CPAN.pmを(手動で)最初にアップグレードすることをお勧めします。 tarballsrepo

5
daxim