2010-08-11 9 views
36

La primera vez que ejecuta cpan desde la línea de comandos, se le solicitarán respuestas a varias preguntas. ¿Cómo se automatiza el cpan y se instalan los módulos de forma no interactiva desde el principio?¿Cómo automatizo la configuración de CPAN?

Respuesta

30

Como no se ha mencionado aún, cpanminus es un instalador de configuración cero de conf. Y puede descargar un ejecutable autónomo si no está disponible para su control de versión.

El ejecutable cpanm se instala fácilmente (como se documenta en el propio ejecutable) con:

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

Creo que estoy vendido en cpanminus :-) – runrig

+0

cpanminimus salvó el día para mi Dockerfiles – BitByteDog

5

Una forma es tomar CPAN/Config.pm (o ~/.cpan/CPAN/MyConfig.pm) creado después de una ejecución desde un sistema, e instalarlo como ~/.cpan/CPAN/MyConfig.pm en el sistema que quieres automatizar Otra forma es ejecutar el siguiente para crear el archivo MyConfig.pm para usted (una cosa que falta es a continuación los valores reales para el parámetro urllist el que tendrá que rellenar con los valores apropiados para los espejos 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: [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

Haga su propio archivo de configuración CPAN.pm. Las versiones recientes del comando cpan tienen un interruptor -J para volcar la configuración actual y un interruptor -j para cargar cualquier configuración que desee.

+0

Gracias. No sabía sobre -j y -J – runrig

5

Las versiones recientes de CPAN.pm preguntan como primera pregunta si el resto de la configuración debe ejecutarse automáticamente, por lo que es aconsejable actualizar primero CPAN.pm (manualmente): tarballs, repo.

25

que estaba buscando una solución fácil para esto también y encontré que esto funciona:

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

sólo pensé que iba a publicar aquí por si alguien más llega.

+3

Esto funcionó muy bien para configurar el cpan en Docker. – Sobrique

+3

mina era solo 'eco | cpan', porque la primera pregunta fue '" ¿automatizar tanto como sea posible [sí]? "' – activedecay

Cuestiones relacionadas