Error al desplegar Symfony en el servidor: PHP version «>= 8.0.0»

Tras desplegar un proyecto nuevo de Symfony en el servidor de producción me he encontrado con este problema:

Composer detected issues in your platform:

Your Composer dependencies require a PHP version ">= 8.0.0". You are running 7.3.29.

Tras verificar que la versión de PHP era la correcta, y tras dar algunas vueltas por el fichero composer.json para comprobar que todo estaba en orden, probamos a forzar al actualización de composer sobre el servidor. Mano de santo!

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Descargamos un composer.phar de la página oficial de Composer y ejecutamos una actualización sobre el proyecto:

php composer.phar update

Configurar All in One en el Garmin Forerunner 235

Uno de los inconvenientes que me he encontrado con el Garmin Forerunner 235 es que no es posible ver muchos datos al mismo tiempo y te obliga a ir cambiando de pantalla.

La solución llega con aplicaciones de la tienda IQ como All in One que permite añadir varios campos de datos en la misma pantalla. Para ello tenemos que descargar e instalar la aplicación en nuestro reloj a través de ConnectIQ.

Una vez instalado tendremos que configurarlo para que se muestre, y aquí es donde siempre se me olvida donde demonios está esa configuración. Una vez activado no lo volverás a necesitar, hasta que quieras añadirlo a otra actividad, como ha sido mi caso después de más de dos años. Así que he decidido dejarlo en mi blog a modo de recordatorio para cuando vuelta a necesitarlo, y seguro que a alguien le puede servir.

Configurar All in One en Garmin Forerunner 235

Vamos a la activación de la pantalla All in One. Lo primero es pulsar sobre la tecla de actividades (parte superior derecha del reloj, indicada con un dibujo de un corredor) y luego seleccionar la actividad sobre la que queremos configurar (en este caso he seleccionado bici).

Pulsamos Menu >> Configuración de actividad >> Pantallas de datos. Aquí podemos optar por la Pantalla 1 o la Pantalla 2, yo en la pantalla 1 tengo la configuración de cuatro campos que quiero mantener, así que selecciono la Pantalla 2 (debemos activarla si no está activa) y en Disposición debemos tener 1 campo. Si no está en 1 campo tenemos que entrar y mover las teclas de arriba y abajo para dejar 1 sólo campo en la pantalla. Volvemos atrás y vamos a Campo 1.

En Campo 1 seleccionamos Connect IQ (debería mostrar el número de aplicaciones que tenemos añadidas, en mi caso como tengo 2 muestra 0/2 añadido(s)) y una vez dentro encontramos la opción All in One, la seleccionamos y ya tenemos activada la pantalla para poder ver varios campos al mismo tiempo, en mi caso he activado 9 campos como podéis ver en la imagen.

Galicia: Datos del coronavirus por municipios 22/02/2021

Hoy se reúne la Xunta de Galicia para tomar una decisión sobre la reapertura de la movilidad entre municipios. Se espera que los concellos con una incidencia acumulada a 14 días menos a 250 casos por cada 100.000 habitantes puedan volver a recuperar la movilidad perdida en las últimas semanas, así como una reapertura de la hostelería parcial de los municipios.

Mapa de contagiados por coronavirus en España

Mapa del estado de contagios por coronavirus en España actualizado a 14 de marzo de 2020, datos por comunidades autónomas (datos distribuidos por el Ministerio de Sanidad de España)

Información suministrada por la OMS (Organización Mundial de la Salud) sobre el coronavirus

El COVID-19 es una enfermedad infecciosa causada por un nuevo virus (SARS-CoV-2) que no había sido detectado en humanos hasta la fecha y que se ha convertido en pandemia mundial a inicios de 2020. El virus causa una enfermedad respiratoria como la gripe (influenza) con diversos síntomas (tos, fiebre, etc.) que, en casos graves, puede producir una neumonía. Como medida de protección puede lavarse las manos regularmente y evitar tocarse la cara.


¿CÓMO SE PROPAGA?

El nuevo coronavirus se propaga principalmente por contacto directo (menos de 1 metro de distancia) con una persona infectada cuando tose o estornuda, o por contacto con sus gotículas respiratorias (saliva o secreciones nasales).

Síntomas

El COVID-19 se caracteriza por síntomas leves, como, secreciones nasales, dolor de garganta, tos y fiebre. La enfermedad puede ser más grave en algunas personas y provocar neumonía o dificultades respiratorias. Más raramente puede ser mortal. Las personas de edad avanzada y las personas con otras afecciones médicas (como asma, diabetes o cardiopatías) pueden ser más vulnerables y enfermar de gravedad.


Los signos y síntomas pueden ser: secreciones nasales, dolor de garganta, tos, fiebre o dificultad para respirar (en casos graves).

Prevención

Actualmente no existe vacuna para prevenir el COVID-19. Aunque varios laboratorios a nivel mundial trabajan a contrareloj para encontrar una vacuna.


Puede reducir el riesgo de infección con estos consejos:

  • Lavándose las manos regularmente con agua y jabón o con desinfectante de manos a base de alcohol.
  • Cubriéndose la nariz y la boca al toser y estornudar con un pañuelo de papel desechable o con la parte interna del codo.
  • Evitando el contacto directo (1 metro) con cualquier persona con síntomas de resfriado o gripe.

Tratamientos

No existe ningún medicamento para prevenir o tratar la COVID-19. Algunos pacientes pueden necesitar tratamiento sintomático que les ayude a respirar.

Cuidados personales:

Si presenta síntomas leves, quédese en casa hasta recuperarse. Puede aliviar sus síntomas:

  • descansando y durmiendo
  • manteniéndose caliente
  • bebiendo muchos líquidos
  • utilizando humidificadores o tomando duchas calientes para aliviar el dolor de garganta y la tos

Tratamientos médicos:

Si presenta fiebre, tos y dificultad para respirar, busque inmediatamente atención médica. Llame con antelación a su proveedor de atención de salud e indíquele si recientemente ha viajado o estado en contacto con personas que hayan viajado.

Redimensionar innodb_log_file_size de MySQL

Tras realizar un análisis del estado del servidor de MySQL con MySQL Tunner, mostraba que deberíamos cambiar el valor del parámetro innodb_log_file_size.

Así que nos vamos al fichero de configuración (my.cnf) y, como no existe, añado innodb_log_file_size=16M. Reinicio el servicio de base de datos y… no arranca el servicio. En el log veo el motivo, sólo se permiten valores entre 0 y 5M.

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 1073741824 bytes!
InnoDB: Possible causes for this error:
 (a) Incorrect log file is used or log file size is changed
 (b) In case default size is used this log file is from 10.0
 (c) Log file is corrupted or there was not enough disk space
 In case (b) you need to set innodb_log_file_size = 48M

Tras realizar una búsqueda por Google, encuentro la solución en una entrada de Andy Hayes en DBA Diaries, donde se explica detalladamente que hay dos motivos por los que se bloquea esa modificación: por un lado el valor de innodb_fast_shutdown (no era nuestro caso) y por otro los errores de los ficheros de log.

1.- Cambiar el valor de innodb_fast_shutdown a 0 o 1
2.- Para el servidor de MySQL y revisar que no existan errores
3.- Mover los ficheros de log fuera del directorio de datos (ib_logfile0, ib_logfile1, etc)
4.- Cambiar el valor de innodb_log_file_size en my.cnf
5.- Iniciar el servicio de MySQL

DNS de Quad9: EDNS Client-Subnet

En noviembre del año pasado se presentaba un nuevo proveedor de DNS independiente: Quad9. Su IP primaria en 9.9.9.9, claramente se posicionaba como alternativa al conocido servicio 8.8.8.8 de Google.

Sin entrar a valorar si funciona bien o mal, esta mañana me he despertado con un «tweet» de Diego Parrilla donde nos avisaba de un posible bloqueo por parte de este servicio DNS.

Después de revisar a través de la web de Quad9 que no había un bloqueo. Y que añadiendo ese servicio de DNS resolvía sin problema el site de El Español empezamos a buscar donde podría estar el problema.

El problema principal estaba en que la resolución de DNS llevaba al usuario a obtener respuesta desde USA, en lugar de hacerlo desde nuestros servidores en Madrid, los que le corresponderían por posicionamiento geográfico. Sin embargo, utilizando el servicio de DNS de Google, sí que obtenía respuesta desde Madrid.

La respuesta a esta «misterio» podemos encontrarla a través de las FAQ’s de Quad9 y el uso de EDNS Client-Subnet (gracias Fermín y Diego).

Para el servicio en la IP primaria 9.9.9.9 no se envía EDNS Client-Subnet como medida de proteger la privacidad del usuario. Esto se traduce en que no sabemos desde donde está haciendo la petición el usuario y no es posible «llevarle» al servidor más cercano y que, por tanto, ofrecerá una respuesta más rápida.

Como alternativa con soporte para EDNS Client-Subnet desde Quad9 ofrecen el servicio en 9.9.9.10, aunque con esta opción «perdemos» el bloqueo de seguridad que nos ofrece el servicio principal.

Logrotate, rotado automático de logs en Linux

Una de las tareas más importantes de un administrador de sistemas es la correcta gestión de los logs que se generan. Almacenar información que nos permita descubrir un error es importante, pero esa información no debe terminar por saturar nuestros sistemas.

Y una de las herramientas que nos van a permitir cumplir ese objetivo es logrotate, esta utilidad en linux nos permite rotar, comprimir y renovar los ficheros de log de forma automatizada. En este post voy a exponer algunos ejemplos que yo utilizo para este cometido, pero desde «man logrotate» tenéis información adicional para adaptar la configuración a vuestras necesidades.

El fichero principal de configuración está accesible por defecto en /etc/logrotate.conf

$ cat /etc/logrotate.conf
weekly
rotate 4
create
include /etc/logrotate.d
/var/log/mail {
    daily
    size 1M
    create 0664 root utmp
    rotate 1
}

El directorio /etc/logrotate.d/ contiene ficheros de configuración de otras aplicaciones instaladas en el sistema, como Apache (httpd) por ejemplo. Y allí podéis crear vuestro propio fichero para ejecutar la rotación de logs.

Así la configuración básica, incluye una ruta, seguida de llaves, donde se incluye la configuración que se quiere para el rotado de logs en esa ruta.

A través de las opciones daily, weekly, monthly, yearly se le indica cada cuanto tiempo se debe ejecutar el rotado. Así si elegimos weekly, una vez a la semana se hará el rotado del fichero indicado.

Rotar cuando se alcanza un determinado tamaño de fichero

/var/log/mail.log {
        size 1M
        rotate 4
}

Con la opción size se le indica a partir de que tamaño deber rotar, si el fichero no ha alcanzado el tamaño, en nuestro ejemplo 1 mega, el fichero no será rotado.

Entre las opciones más destacadas encontramos rotate, seguido de un número entero, le indica cuantos ficheros debemos conservar. Una vez alcanzado ese número se borrará el más antiguo.

Otra opción interesante es copytruncate, que realiza una copia del fichero original y luego vacia el fichero para que los procesos que estaban trabajando con ese fichero puedan seguir haciéndolo a pesar de la rotación.

Y la otra opción, que casi diría que es fija para la mayoría de administradores, es poder comprimir los logs una vez realizada la rotación para reducir espacio. Esta opción se indica con compress. Una última opción que puede ser de mucha utilidad es missingok, que evita retornar un error en caso de que se produzca.

Así una configuración básica que rotase todos los logs dentro del directorio /var/log/ cuando alcancen el mega de tamaño, manteniendo 5 rotados y comprimiendo los antiguos, quedaría así:

/var/log/*.log {
        size 1M
        copytruncate
        rotate 5
        compress
        missingok
}

Para ejecutar el comando manualmente haríamos lo siguiente:

logrotate -vf /etc/logrotate.conf