2010-06-13 16 views
12

Tenemos una granja de servidores que estamos migrando lentamente a una nueva versión de Perl (5.12.1). Actualmente estamos ejecutando 5.8.5. El sistema operativo también se actualizará de RedHat 4 a RedHat 5, pero RedHat 5 aún está de vuelta en Perl 5.8.8. Por lo tanto, durante un tiempo en nuestro árbol fuente apoyaremos dos versiones de Perl.¿Las diferentes versiones de Perl requieren diferentes instalaciones de módulos de CPAN?

Me han dicho que instale la nueva versión de Perl en nuestro árbol fuente, y también todos los módulos CPAN que usamos actualmente. Realmente me dijeron que 'compilara' los módulos con la versión correcta de Perl. Estoy confundido por esto. ¿Algunos módulos realmente se configuran de forma diferente para diferentes versiones de Perl? Dado esto, ¿supongo que debo configurar un directorio CPAN para cada versión de Perl en nuestro árbol?

¿Alguna información o 'trampas' sobre este escenario?

Editar: Como una pregunta adicional, ¿servirá el mismo directorio de cpan (señalado por ~/.cpan) para ambos árboles, o debería vincular en diferentes directorios cuando estoy trabajando en diferentes árboles (instalando módulos)?

Respuesta

9

Cualquier módulo perl que use XS (código C compilado, cargado dinámicamente), en general, solo funcionará con la misma versión de perl con la que se compilaron. Esto se debe a dos razones:

La razón uno es que, de forma predeterminada, están instaladas en un directorio que incluye el número de versión de Perl, y cualquier otra versión de perl no buscará en ese directorio.

La razón dos es que la API perl puede cambiar entre versiones principales, por lo que incluso si copiara las bibliotecas en el directorio apropiado, podrían funcionar o no según las características que utilicen y cuán diferentes sean las dos versiones de perl son. Entre 5.8 y 5.12 hay diferencias significativas que pueden romper casi todo el código.

Esto no se aplica en absoluto a módulos Perl puros, sin embargo; se pueden copiar libremente con muy pocas excepciones. Solo el código XS es ​​el problema.

5

Algunos módulos perl se compilan y se vinculan a las bibliotecas del sistema. Si actualiza su sistema operativo, existe la posibilidad de que estas bibliotecas ya no estén presentes, lo que hará que estos módulos se porten mal o no se ejecuten en absoluto. Por lo tanto recomiendo recompilar sus módulos perl.

Si reinstala una nueva versión de perl desde cero en su nuevo sistema, entonces no debería tener problemas, ya que durante la instalación se usarán los encabezados y libs correctos.

4

No será la versión de Perl el problema sino la plataforma subyacente. Redhat4 y Redhat5 son mucho más diferentes que Perl 5.8.5 y 5.8.8. De hecho, si encuentra una diferencia entre estas versiones, probablemente sea un error.

RH4 y RH5 tienen diferentes conjuntos de bibliotecas, y las extensiones nativas de perl tendrán que volver a compilarse en estas bibliotecas. Si mantiene estos árboles compilados en su repositorio fuente, de hecho necesitará 2 árboles. Si quiere evitar esto, puede 'compilar estáticamente', pero esto se vuelve extremadamente complicado y puede afectar seriamente la huella de memoria y los tiempos de carga asociados al script, no recomendado (y en muchos casos ni siquiera posible).

Una solución limpiadora sería una secuencia de comandos de instalación que descarga/compila/instala copias del CPAN y mantiene el árbol fuente libre de estos artefactos. Aún puede decidir si desea hacer esto como parte de la instalación en la máquina de destino o como parte de la creación de un paquete binario antes de la instalación en la máquina de destino.

-1

Encuentre la URL a continuación para saber cómo instalar módulos para diferentes CPAN.

http://perllinux.blogspot.in/2014/08/multiple-perl-cpan-on-single-machine.html

Y, sí, diferentes verisons de Perl necesita módulos que se instalarán en todos ellos.

+0

Por favor, cite o resuma el artículo en lugar de simplemente proporcionar un enlace. De esa forma, su respuesta sigue siendo útil, incluso si la fuente desaparece. – Brian

+0

@Gautam Prashant: resuma el artículo :) :) –

Cuestiones relacionadas