2008-09-27 9 views
11

Parece que la mayoría de los instaladores de Perl se centran en la instalación de módulos Perl, no en aplicaciones. Cosas como ExtUtils :: MakeMaker y Module :: Build son muy adecuadas para los módulos, pero requieren un trabajo adicional para las aplicaciones web.¿Cuál es el mejor sistema para instalar una aplicación web de Perl?

Lo ideal sería agradable ser capaz de hacer lo siguiente después de la salida de la fuente desde el repositorio:

  • tienen dependencias faltantes detectados
  • Descargar e instalar las dependencias de CPAN
  • Ejecutar un comando para "compilar" la fuente en un estado final (realizar cualquier análisis fuente o configuración necesaria para el entorno local).
  • Ejecute un comando para instalar los archivos creados en las ubicaciones adecuadas. No solo los módulos perl, sino también elementos como archivos de plantilla (.tt) y scripts CGI, JS y archivos de imágenes que deben ser accesibles desde la web.
  • Asegúrese de que se establezcan los permisos adecuados en los archivos instalados (y contexto de SELinux si es necesario).

En este momento tenemos un sistema basado en módulo :: Build que hace la mayor parte de este. El trabajo fue realizado por mi compañero de trabajo que estaba aprendiendo a usar Module :: Build en ese momento, y nos gustaría obtener algunos consejos para generalizar nuestra solución, ya que es bastante específica de la aplicación en este momento. En particular, nuestro sistema requiere que instalemos dependencias a mano (aunque sí las detecta).

¿Hay algún sistema en particular que haya utilizado que haya sido particularmente exitoso? ¿Tiene que escribir un instalador basado en Module :: Build o ExtUtils :: MakeMaker que sea particular para su aplicación, o hay algo más general disponible?

EDIT: Para responder a las preguntas de Brian siguientes:

  • Podemos iniciar sesión en las máquinas
  • No tenemos acceso root a las máquinas
  • Las máquinas están (aparentemente) se basa idénticos de RHEL5 con SELinux habilitado
  • Actualmente, las personas que instalan las máquinas son solo programadores de nuestro grupo, y nuestra fuente no está disponible para el público en general. Sin embargo, es concebible que nuestra fuente pueda eventualmente instalarse en las máquinas de otra persona en nuestra organización, para que la instalen sus programadores o personas de sistemas.
  • Lo instalamos desde el repositorio, aunque nos gustaría tener la opción de utilizar un archivo distribuido (ver arriba).

Respuesta

6

¿Cuáles son sus limitaciones para instalar aplicaciones web? ¿Puedes iniciar sesión en la máquina? ¿Todas las máquinas ejecutan lo mismo? ¿Las personas instalan los compañeros de aplicaciones web o personas al azar del público en general? ¿La gente está instalando este administrador del sistema, programadores, administradores web u otra cosa? ¿Instalas distribuido un archivo o revisando desde el control de origen?

Para la mayoría de mis cosas, lo que implica a los administradores de sistemas familiarizados con la instalación de Perl en entornos de control, solo uso MakeMaker. Es fácil hacer que haga todas las cosas que mencionó si conoce un poco acerca de MakeMaker. Si quieres saber más sobre eso, haz otra pregunta. ;) Module::Build es igual de fácil, sin embargo, y el camino a seguir si todavía no te gusta usar MakeMaker.

Module::Build sería una buena manera de manejar muchas situaciones diferentes si las personas son moderadamente hábiles con respecto a la línea de comandos y la instalación del software. Tendrá mucha flexibilidad con Module::Build, pero también un poco más de trabajo. Y la herramienta cpan (que viene con Perl), puede instalarse desde el directorio actual y manejar las dependencias por usted. Sólo dígale que instale el directorio actual:

$ cpan . 

Si sólo tiene que instalar en un solo platorm, es probable que les resulta más fácil hacer un paquete en el formato nativo. Incluso podría tener Module::Build hacer ese paquete para que los desarrolladores tengan la flexibilidad de Module::Build, pero los instaladores tienen la facilidad del proceso nativo. Seguir con Module::Build también significa que puede crear diferentes paquetes para diferentes plataformas desde una única herramienta de compilación.

Si las personas que instalan la aplicación web realmente no tienen idea acerca de las líneas de comando, CPAN y otras cosas, es probable que desee utilizar un empaquetador e instalador que no los asuste o les haga pensar en lo que está pasando y puede informarle problemas de manera automática y precisa.

Como señala Dave, usar un espejo CPAN real siempre le ofrece la última versión de un módulo, pero también puede hacer su propia réplica CPAN "falsa" con exactamente las distribuciones que desea y las herramientas CPAN normales deben instalarse desde ese. Para nuestros clientes, hacemos "CPAN en un CD" (aunque las memorias USB también son buenas). Con un simple script "run me" todo se instala exactamente en las versiones que necesitan. Ver, por ejemplo, mi http://www.slideshare.net/brian_d_foy/mycpan-lapm-september-2007"> Hacer mi propia charla de CPAN si te interesa eso. De nuevo, considera la audiencia cuando piensas en eso. . No es algo que entregarías al público en general.

Buena suerte, :)

3

Yo recomendaría seriamente considerar un sistema de paquete como RPM para hacer esto. Incluso si está ejecutando en Windows, consideraría que RPM y cygwin realizan la instalación. Incluso podría configurar un repositorio de yum o apt para entregar los paquetes a sistemas remotos.

Si está buscando un instalador general para clientes que ejecutan cualquier cantidad de sistemas operativos y distribuciones, entonces el problema se vuelve mucho más difícil.

6

La respuesta que sugiere RPM definitivamente es buena.Usar el administrador de paquetes de su sistema definitivamente puede hacer su vida más fácil. Sin embargo, podría significar que también necesita empaquetar un montón de otros módulos de Perl.

También puede consultar Shipwright. Esta es una herramienta basada en Perl para empaquetar una aplicación y todas sus dependencias de módulos Perl. Todavía es temprano, pero parece prometedor.

En cuanto a la instalación de dependencias, no sería difícil empacar un montón de tarballs y luego instalarlo en una solución Module :: Build. Debería echar un vistazo a pip, lo que hace que la instalación de un módulo de un tarball sea bastante trivial. Puede empaquetar esto con su base de código y simplemente llamarlo desde su propio instalador para manejar los deps.

Me pregunto si confiar en CPAN es una buena idea. El shell CPAN siempre busca la última versión de una distribución, en lugar de una versión específica. Si está interesado en garantizar instalaciones repetibles, no es la herramienta adecuada.

2

Tome un vistazo a PAR.

Jonathan Rockway como una pequeña sección sobre cómo usar esto con Catalyst en su libro.

Cuestiones relacionadas