redhat - ¿Estrategia para mantener Tomcat actualizado?

CorePress2024-01-24  10

Mantengo varios servidores RedHat Enterprise Linux (tanto 7 como 8) (>100) con diferentes aplicaciones. Para mantener la cordura, por supuesto estoy usando herramientas como Ansible y, más concretamente en estas preguntas, copias reflejadas localmente de repositorios RPM públicos (usando Satellite Server para ese propósito).

Se aplican actualizaciones periódicamente desde estos repositorios para mantener los servidores seguros.

Algunos de estos servidores necesitan tener instalado Apache Tomcat. Esta es una de las pocas aplicaciones que, que yo sepa, no está disponible en ningún repositorio basado en RPM; debe instalarse manualmente desde un tarball. Las actualizaciones también son manuales (con la ayuda de un rol de Ansible, pero aún debo estar al tanto de la nueva versión y cambiarla manualmente).

¿Existe alguna estrategia para mantener Tomcat en funcionamiento?¿Estás al día con poca o ninguna atención constante?

Actualización:

Encontré la mitad de una solución a mi problema. De forma predeterminada, Tomcat mantiene la instalación y la configuración de la instancia mezcladas en un único árbol de directorio identificado por CATALINA_HOME. Eso hace que actualizar Tomcat sin alterar la configuración sea complicado.

Para resolver esto, puede colocar los archivos específicos de la instancia en un árbol de directorio separado identificado con la variable CATALINA_BASE. Actualizar Tomcat será tan fácil como:

Descarga el nuevo archivo tar. Descomprimirlo en una nueva ubicación Revise el archivo Léame y el registro de cambios para detectar cambios importantes. Actualice la variable CATALINA_HOME para que apunte a la nueva ubicación, manteniendo la variable CATALINA_BASE sin cambios. Reinicie Tomcat, usando los scripts en el nuevo CATALINA_HOMDirectorio E bin.

No estoy proporcionando código aquí porque dónde y cómo configurar CATALINA_HOME y CATALINA_BASE variarán. Configuré ambas variables en el archivo de la unidad de servicio que también inicia Tomcat.

Aún abierto: encontrar una manera de saber automáticamente cuándo se publica una nueva versión de Tomcat.

mantenga los paquetes relacionados en alguna carpeta del servidor ansible. cada vez que realice una nueva actualización, copie esta carpeta a la carpeta remota y ejecute el módulo yum para instalar esos paquetes

- SAURABH PANDEY

27 de marzo de 2021 a las 3:23

@SAURABHPANEY Gracias. Estoy usando una estrategia similar, usando Ansible para descargar Tomcat directamente desde un espejo de Apache según el número de versión. Pero no resuelve el problema fundamental de que tengo que averiguar manualmente cuándo actualizar el número de versión o, con su enfoque, descargar manualmente el último tarball de Tomcat.

- Kevin Keane

27 de marzo de 2021 a las 3:37



------------------------------------

Después de investigar mucho, encontré las respuestas que necesitaba. Mi pregunta tiene fundamentalmente dos partes:

Cómo actualizar Tomcat sin alterar las configuraciones del sitio existente. Cómo encontrar la versión actual de Tomcat automáticamente. Cómo actualizar Tomcat sin alterar las configuraciones existentes del sitio

La respuesta está en usar el directorio CATALINA_HOME solo para el binario Tomcat real y colocar la configuración en un directorio separado especificado con CATALINA_BASE.

El directorio CATALINA_HOME simplemente debe contener el contenido del tarball de Tomcat sin modificaciones. Puede eliminar ciertos archivos de acuerdo con la documentación de Tomcat y es posible que desee agregar ciertos archivos compartidos, como las bibliotecas nativas de Tomcat.

El directorio CATALINA_BASE contendrán los directorios /conf, /webapp, /logs y algunos otros.

Antes de iniciar Tomcat, configure y exporte ambas variables de entorno.

Como ejemplo, esta es la plantilla de unidad de servicio systemd que uso. Lo puse en /etc/system/systems/[email protected]

[Unit]
Description=Apache Tomcat Web Application Container for %I
After=syslog.target network.target

[Service]
Type=forking
Environment="CATALINA_HOME={{ usd_tomcat_catalina_home }}" "CATALINA_BASE={{ usd_tomcat_catalina_base }}/%i"
ExecStart=/bin/bash {{ usd_tomcat_catalina_home }}/bin/catalina.sh start
ExecStop=/bin/bash {{ usd_tomcat_catalina_home }}/bin/catalina.sh stop
SuccessExitStatus=126 143
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

Las instrucciones detalladas para usar CATALINA_BASE se encuentran en el sitio de documentación de Tomcat.

https://tomcat.apache.org/tomcat-9.0-doc/introduction.html

Cómo encontrar la versión actual de Tomcat automáticamente

El segundo problema es cómo encontrar la versión correcta del tarball de Tomcat para descargar. La fundación Apache eliminará el archivo tar de una versión menor cuando se publique la próxima versión menor.

Por lo tanto, lo siguiente generó un error 404 tan pronto como se publicó la versión 9.0.45.

wget https://mirrors.sonic.net/apache/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44.tar.gz

Esto tiene bYa hemos respondido antes en Stackoverflow aquí: Cómo obtener siempre el enlace más reciente para descargar el servidor Tomcat usando Shell

TOMCAT_VER=`curl --silent http://mirror.sonic.net/apache/tomcat/tomcat-9/ | grep v9 | awk '{split(,c,">v") ; split(c[2],d,"/") ; print d[1]}'`
wget https://mirrors.sonic.net/apache/tomcat/tomcat-9/v$TOMCAT_VER/bin/apache-tomcat-${TOMCAT_VER}.tar.gz

Descubrí que la solución awk es algo frágil ya que los números de campo pueden moverse. Haciendo lo mismo con sed:

curl --silent http://mirror.sonic.net/apache/tomcat/tomcat-9/ | grep v9 | sed 's/.*v\([0-9]*\.[0-9]*\.[0-9]*\).*//'

La expresión regular busca una secuencia de v + dígitos + . + dígitos + . + dígitos. Luego descarta todo excepto los dígitos y los puntos.



------------------------------------

[rohtash@172 blockinfile]$ cat cron.yml 
- hosts: remote1
  gather_facts: no 
  tasks:
  - name: create file in a min
    cron:
       name: "task"
       minute: "*/1"
       job: "/usr/bin/sh -c 'ansible-playbook update_pkgs.yml'"

en el servidor remoto puedes comprobar

[root@scp ~]# crontab -l
#Ansible: task
*/1 * * * * /usr/bin/sh -c 'ansible-playbook update_pkgs.yml'

Qué hace el módulo cron: ejecutará este manual cada minuto. Dentro de este libro de jugadas puedes usar cuando un módulo comoesto

- include_tasks: yum_install.yml
  when: version != {{ what_you_earlier_saved }}

Puedes aumentar o disminuir el tiempo de ejecución de tu trabajo cron: minutos, día, hora, semana, lo que sea.

what_you_earlier_saved esta variable tienes que crearla y guardarla en un archivo como este

- shell: rpm -qa|grep python3-pip-wheel > lastversion
- shell: cat lastversion
  register: what_you_earlier_saved

después de la actualización del paquete, cada vez que su libro de jugadas ansible actualizará este archivo de última versión.

6

1

¡Gracias! ¿Cómo puedo saber que se ha lanzado una nueva versión de Tomcat? Ésa es mi principal preocupación aquí. Además, estoy confundido acerca de su solución en otro punto. Parece queIntentaría ejecutar un libro de jugadas ansible en el host remoto en lugar del controlador. ¿Por qué es eso?

- Kevin Keane

27/03/2021 a las 17:53

No entendí tu problema. Quiere recibir actualizaciones en línea desde Internet o sin conexión sin Internet. Como si estuviera usando Internet, puede ejecutar el módulo yum con el estado: último. Se actualizará automáticamente con la última versión.

- SAURABH PANDEY

28 de marzo de 2021 a las 5:31

Si va a desconectarse para instalar la última versión, en ese caso tendrá que conectarse a Internet y descargar el paquete más reciente y actualizarlo en esa carpeta manualmente. Ahora este módulo cron seguirá ejecutando este libro de jugadas y verificará que su carpeta de actualizaciones contenga un paquete diferente o el mismo y, en consecuencia, ejecutará el libro de jugadas. Puede cambiar el parámetro hosts: de remoto a localhost si desea ejecutar el módulo cron en el mismo servidor. Eso no debería ser un problema

- SAURABH PANDEY

28 de marzo de 2021 a las 5:33

1

¿Tomcat está disponible como RPM desde un repositorio de yum? Esa sería la solución ideal, pero no he encontrado ningún repositorio que la tenga. ¿Puedes indicarme qué repositorio lo tiene?

- Kevin Keane

28 de marzo de 2021 a las 6:22

Requisitos previos En este artículo, asumo una máquina RHEL 7 recién instalada y suscrita correctamente, para que podamos instalar los paquetes. Instalación La instalación es bastante sencilla, ya que los paquetes están disponibles en el canal predeterminado (@rhel-7-server-rpms): Raw # yum install -y tomcat httpd Esto incorporará todas las dependencias, especialmente. OpenJDK 1.8.

- SAURABH PANDEY

28 de marzo de 2021 a las 10:37



------------------------------------

Para obtener actualizaciones sobre nuevos lanzamientos, únase a la lista de correo de Tomcat tomcat-announce. 'La lista se utiliza para anunciar lanzamientos de Tomcat, vulnerabilidades de seguridad y otros anuncios de proyectos.'

https://tomcat.apache.org/lists.html#tomcat-announce

Compartir SeguirRespondido

7 de diciembre de 2022 a las 20:19

Cosas con mantequilla

Cosas con mantequilla

1

1

1 insignia de bronce

1

Aunque en general es una buena idea, no capta el objetivo de la pregunta porque no es un método automático.

- Kevin Keane

16 de enero de 2023 a las 8:59

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare