• Publicidad

Sincronizar módulos entre máquinas

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Sincronizar módulos entre máquinas

Notapor magiza83 » 2012-03-06 11:49 @534

Hola.

Necesito tener 2 máquinas completamente sincronizadas en cuando a módulos de Perl se refiere. Ambas deben de poder ejecutar los mismos scripts, pero como los scripts los he estado creando en una e instalando módulos a medida que los necesitaba, la segunda máquina se ha quedado desincronizada.

¿Hay alguna manera de sincronizarlos?

¿Basta con hacer un rsync de los folder de @INC?

Muchas gracias.
magiza83
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2012-02-22 05:29 @270

Publicidad

Re: Sincronizar módulos entre máquinas

Notapor explorer » 2012-03-06 14:49 @659

Lo normal es usar un lugar (un servidor aparte, o uno de estos dos servidores) como repositorio local de los módulos que vamos a necesitar, y bajar solo a él desde CPAN. Para eso, se suele usar la distribución CPAN::Site, que trae el programa cpansite, con el que se puede crear y gestionar de forma fácil una instalación así.

Para conocer la lista de módulos instalados, prueba a ejecutar el comando

instmodsh

en tu sistema. Es uno de los programas que vienen de base con Perl.

Puedes sacar la lista completa de módulos, pedir información de dónde está instalado cada uno de ellos, qué archivos contienen los directorios, comprobar el estado de los archivos .packlist...

De forma programada, puedes hacerlo con este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use warnings;
  3.  
  4. use ExtUtils::Installed;
  5.  
  6. my $instmod = ExtUtils::Installed->new();
  7. foreach my $module ($instmod->modules()) {
  8.   my $version = $instmod->version($module);
  9.   if ( $version ) {
  10.     print "$module installed, version $version\n";
  11.   } else {
  12.     print "$module installed, version not available\n";
  13.   }
  14. }
  15.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

También se puede usar el comando cpanp. Con la opción b, cpanp crea un archivo "bundle" con la configuración actual, incluyendo la lista de módulos instalados. Por ejemplo, lo creará en un sitio parecido a este:

~/.cpanplus/5.13.4/dist/autobundle/Snapshot_2011_05_18_00.pm

Esto lo haces en el ordenador donde estabas trabajando. Así tienes ya la lista de todos los módulos que funcionan.

Luego, llevas el fichero Snapshot_* a la otra máquina, y ejecutas

cpanp file://Snapshot_2011_05_18_00.pm

que hará instalar todos los módulos que tenía el primer ordenador.

Si en vez de cpanp estás usando el comando cpan, entonces se hace algo parecido:

cpan -a

copias el archivo que está dentro de ~/.cpan/Bundle a la otra máquina, y allí haces

cpan -i Bundle::nombre_del_archivo_creado_menos_el_punto_pm'

El método de copiar los directorios de uno a otro debería funcionar también, si los dos perl (los intérpretes) son de la misma versión, y están en máquinas con la misma arquitectura. No hay problemas con los módulos escritos en puro Perl, pero sí podría haberlos en los que necesitan bibliotecas compiladas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sincronizar módulos entre máquinas

Notapor magiza83 » 2012-03-08 09:39 @443

Hola,

Creo que algo no debo estar haciendo bien ya que no me funcionan ninguno de los dos:

En Origen
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[CYR6-patch /etc/scripts]$  cpanp b
Wrote autobundle to '/root/.cpanplus/5.10.1/dist/autobundle/Snapshot_2012_03_08_01.pm'
[CYR6-patch /etc/scripts]$  scp /root/.cpanplus/5.10.1/dist/autobundle/Snapshot_2012_03_08_01.pm root@slave:/root/.cpanplus/5.10.1/dist/autobundle/
Snapshot_2012_03_08_01.pm                                                                                                                                          100%   53KB  52.7KB/s   00:00
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


En Destino
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[CYR7-patch /etc/scripts]$  cpanp /root/.cpanplus/5.10.1/dist/autobundle/Snapshot_2012_03_08_01.pm
[ERROR] No such plugin command
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Intentando la segunda opcion:

Origen
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[CYR6-patch /etc/scripts]$  cpan -a
...
...
Wrote bundle file
    /root/.cpan/Bundle/Snapshot_2012_03_08_01.pm
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4




Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[CYR7-patch /etc/scripts]$  cpan -i Bundle::Snapshot_2012_03_08_01.pm
Reading '/root/.cpan/sources/authors/01mailrc.txt.gz'
............................................................................DONE
Reading '/root/.cpan/sources/modules/02packages.details.txt.gz'
  Database was generated on Thu, 08 Mar 2012 07:13:59 GMT
  HTTP::Date not available
............................................................................DONE
Reading '/root/.cpan/sources/modules/03modlist.data.gz'
............................................................................DONE
CPAN: Storable loaded ok (v2.20)
Writing /root/.cpan/Metadata
Warning: Cannot install Bundle::Snapshot_2012_03_08_01.pm, don't know what it is.
Try the command

    i /Bundle::Snapshot_2012_03_08_01.pm/

to find objects with matching identifiers.
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Saludos y muchas gracias.
magiza83
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2012-02-22 05:29 @270

Re: Sincronizar módulos entre máquinas

Notapor explorer » 2012-03-08 11:15 @511

En el caso de cpanp debes indicar la posición con file:// :

cpanp file:///root/.cpanplus/5.10.1/dist/autobundle/Snapshot_2012_03_08_01.pm

En el caso de cpan, si lo que quieres es instalar Bundle::Snapshot_2012_03_08_01.pm, debes guardar el fichero Snapshot_2012_03_08_01.pm dentro de un directorio ~/.cpan/Bundle .
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sincronizar módulos entre máquinas

Notapor magiza83 » 2012-03-08 11:32 @522

Perdón por mi ignorancia pero es que de ese modo ya lo he probado:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[CYR7-patch /etc]$  ls -la /root/.cpanplus/5.10.1/dist/autobundle/
total 116
drwxr-xr-x 2 root root  4096 Mar  8 13:56 .
drwxr-xr-x 3 root root  4096 Mar  8 13:55 ..
-rw-r--r-- 1 root root 52080 Mar  8 13:56 Snapshot_2012_03_08_00.pm
-rw-r--r-- 1 root root 53913 Mar  8 13:56 Snapshot_2012_03_08_01.pm
[CYR7-patch /etc]$  cpanp /root/.cpanplus/5.10.1/dist/autobundle/Snapshot_2012_03_08_01.pm
[ERROR] No such plugin command
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y

en caso de cpan, también había probado meterlo en el directorio que comentas... ¡pero nada!

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[CYR7-patch /etc]$  ls -la ~/.cpan/Bundle
total 112
drwxr-xr-x 2 root root  4096 Mar  8 15:31 .
drwxr-xr-x 6 root root  4096 Mar  8 15:36 ..
-rw-r--r-- 1 root root 53231 Mar  8 09:10 Snapshot_2012_03_08_00.pm
-rw-r--r-- 1 root root 53231 Mar  8 15:31 Snapshot_2012_03_08_01.pm

[CYR7-patch /etc]$  cpan -i Bundle::Snapshot_2012_03_08_01.pm
Reading '/root/.cpan/sources/authors/01mailrc.txt.gz'
............................................................................DONE
Reading '/root/.cpan/sources/modules/02packages.details.txt.gz'
  Database was generated on Thu, 08 Mar 2012 07:13:59 GMT
  HTTP::Date not available
............................................................................DONE
Reading '/root/.cpan/sources/modules/03modlist.data.gz'
............................................................................DONE
CPAN: Storable loaded ok (v2.20)
Writing /root/.cpan/Metadata
Warning: Cannot install Bundle::Snapshot_2012_03_08_01.pm, don't know what it is.
Try the command

    i /Bundle::Snapshot_2012_03_08_01.pm/

to find objects with matching identifiers.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¡Todo está copiado y ejecutado como root!

Gracias.
magiza83
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2012-02-22 05:29 @270

Re: Sincronizar módulos entre máquinas

Notapor explorer » 2012-03-08 12:47 @574

En el caso de cpan, te sobra el '.pm' del final.

Y lo del cpanp, pues no sé... quizás las versiones de cpanplus no sean iguales entre las máquinas... y dentro del fichero generado haya una petición de carga de un complemente que el otro cpanp no tiene... Habría que mirarlo con detalle (yo lo ejecutaría paso a paso para ver qué plugin está intentando cargar).

Te dije que le pusieras el file:// delante del nombre del fichero. Debería ser así:

cpanp file:///root/.cpanplus/5.10.1/dist/autobundle/Snapshot_2012_03_08_01.pm

De todas formas, esto voy a revisarlo. Acabo de ver que cpanplus es capaz de conectarse a un servidor local y bajarse los módulos desde él, así que te ahorrarías también el scp :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados

cron