Comment automatiser la configuration CPAN?

La première fois que vous exécutez cpan à partir de la ligne de commande, vous êtes invité à répondre à diverses questions. Comment automatisez-vous cpan et installez-vous des modules de manière non interactive depuis le début?

37
demandé sur runrig 2010-08-11 23:27:17

5 réponses

Comme il n'a pas encore été mentionné, cpanminus est un programme d'installation CPAN à zéro conf. Et vous pouvez télécharger un exécutable autonome s'il n'est pas disponible pour votre contrôle de version.

L'exécutable cpanm est facilement installé (comme documenté dans l'exécutable lui-même) avec:

curl -L http://cpanmin.us | perl - --self-upgrade
# or
wget -O - http://cpanmin.us | perl - --self-upgrade
31
répondu phaylon 2010-08-12 18:15:19

Je cherchais une solution facile pour cela aussi et j'ai trouvé que cela fonctionne:

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

Je pensais juste le poster ici au cas où quelqu'un d'autre viendrait.

25
répondu Clayton Dukes 2012-10-26 16:00:03

Faites votre propre CPAN.pm fichier de configuration. Les versions récentes de la commande cpan ont un commutateur -J pour vider la configuration actuelle et un commutateur -j pour charger la configuration que vous aimez.

6
répondu brian d foy 2010-08-11 21:10:33

Une façon est de prendre le CPAN / Config. pm (ou ~/.cpan/CPAN/MyConfig.pm) créé après une exécution à partir d'un système, et l'installer comme ~/.cpan/CPAN/MyConfig.pm sur le système que vous souhaitez automatiser. Une autre façon est d'exécuter ce qui suit pour créer le MyConfig.pm fichier pour vous (une chose qui manque ci-dessous est les valeurs réelles pour le paramètre urllist que vous devrez remplir avec les valeurs appropriées pour les miroirs 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
répondu runrig 2010-08-11 19:39:21

Versions récentes de CPAN.pm posez comme première question si le reste de la configuration doit être exécuté automatiquement, il est donc conseillé de mettre à niveau CPAN.pm (manuellement) d'abord: tarballs, repo .

5
répondu daxim 2010-08-11 21:50:40