Cómo reducir el tamaño de un fichero de log en caliente

Algunos ficheros no deben modificarse mientras están en uso porque comprometen la “estabilidad” del sistema. Son poco y uno de ellos es /var/log/lastlog donde se registra información en formato binario sobre los accesos al sistema.

Un ejemplo sería encontrar un fichero con este tamaño:

root@hostname:[~]$ ls -shl /var/log/lastlog 
48K -rw-rw-r--. 1 root utmp 523G jul 11 08:04 /var/log/lastlog

Para reducir el tamaño mientras está en uso sin comprometer las esstabilidad del sistema operativo se utiliza el comando truncate.

Por ejemplo, específicando el tamaño (size) en bytes al que queremos reducir el fichero. Conservará las entradas más recientes.

$ truncate -s 104857600 /var/log/lastlog

El resultado es la esperada reducción de tamaño (en el ejemplo sobre un fichero de 523G) sin que haya afectado a la escritura en él

root@hostname:[~]$ ls -shl /var/log/lastlog 
44K -rw-rw-r--. 1 root utmp 100M jul 11 14:20 /var/log/lastlog

Listar contenido de un paquete no instalado

Existen distintas manera de listar el contenido de un paquete rpm instalado. Una que funciona siempre es ejecutar:

rpm -ql NombreDelPaquete

El comando anterior funciona solamente si el paquete está instalado. ¿Y si queremos conocer qué contiene un paquete sin haberlo instalado o antes de instalarlo? He encontrado una manera de hacerlo sin instalar el paquete y que consulta a la información de la base de datos rpm / dnf:

dnf repoquery -l NombreDelPaquete

Un ejemplo para el paquete cmatrix (un pequeño paquete que presenta un protector de pantalla en el terminal). Primero se desintala, con lo que el comando rpm -ql cmatrix no encontrará nada en la base de datos del sistema. Segundo se ejecuta el dnf repoquery -l cmatrix que consultará la información presente en el repositorio.

[root@host ~]# rpm -ql cmatrix
el paquet cmatrix no està instal·lat
[root@host ~]# dnf repoquery -l cmatrix
Fedora 37 - x86_64 - Updates 15 kB/s | 7.9 kB 00:00
Fedora Modular 37 - x86_64 - Updates 33 kB/s | 17 kB 00:00
Fedora 37 - x86_64 - VirtualBox 2.9 kB/s | 6.9 kB 00:02
/usr/bin/cmatrix
/usr/bin/cmatrix-tty
/usr/lib/.build-id
/usr/lib/.build-id/11
/usr/lib/.build-id/11/92b5cf8ad61f36e6322a0f1270a4a88eaf5d5a
/usr/lib/kbd/consolefonts/matrix.fnt
/usr/lib/kbd/consolefonts/matrix.psf.gz
/usr/share/doc/cmatrix
/usr/share/doc/cmatrix/AUTHORS
/usr/share/doc/cmatrix/CODE_OF_CONDUCT.md
/usr/share/doc/cmatrix/CONTRIBUTING.md
/usr/share/doc/cmatrix/ChangeLog
/usr/share/doc/cmatrix/ISSUE_TEMPLATE.md
/usr/share/doc/cmatrix/NEWS
/usr/share/doc/cmatrix/README
/usr/share/doc/cmatrix/README.md
/usr/share/licenses/cmatrix
/usr/share/licenses/cmatrix/COPYING
/usr/share/man/man1/cmatrix.1.gz

Sin dispositivos visibles en “adb”

Tecleas el siguiente comando en tu ordenador y la lista de dispositivos (habitualmente un teléfono) está vacía:

# adb devices

La expectiva es que, si se ha habilitado el modo desarrollador USB en el teléfono, apareciera en el ordenador el teléfono en el que lo hemos configurado.

Solución. Seguir los siguientes pasos, porque, además del paso anterior, también es necesario en algunos teléfonos añadir la depuración USB:

Ajustes -> Sistema -> Opciones para desarrolladores -> Depuración USB (habilitar)

En mi caso, segui con la guía para actualizar la versión de LineageOS a la última versión. Las actualizaciones normales no lo permiten y se requiere una instalación completa de la ROM, basada en Android 12. Solamente faltó completar:

# adb reboot sideload

El teléfono se reinicia y en terminal del ordenador se ejecuta:

# adb sideload lineage-19.1.20220510-nightly-enchilada-signed.zip

Elegir sistema en la pantalla del teléfono tras reiniciar y completada la actualización

Infraestructura de MercadoLibre

La entrevista de Pelado Neerd a dos administradores de sistemas de MercadoLibre (familiarmente y en adelante ML) aporta el estímulo de conocer qué se hace en otros entornos, sus diferencias con los nuestros, por tamaño o por decisiones para retos de infraestructura. Destaco unos pocos asuntos que me han llamado la atención y porqué:

  • Servidores: 10.000, aparentemente todo máquinas virtuales y no se menciona que haya infraestructura en centro de datos propio.
  • Equipo: 300 personas en mantenimiento de la infraestructura y 7.000 desarrolladores. Dividido en equipos de comunicaciones, creación y mejora de la propia infraestructura, operación de la infraestructura.
  • Nubes empleadas: emplean AWS y GCE para evitar dependencias, realizan movimiento de infraestructura de una a otra aunque determinados servicios está atados a una de ellas.
  • Machine Learning para optimización de la infraestructura: han empleado machine learning para diagnosticos de la infraestructura, si proyectan crecimientos, dónde optimizar, etc. Coinciden con Pelado Nerd que un acercamiento menos ambicioso es más efectivo. Hay herramientas de machine learning en el mercado que ofrecen ahorros como resultados de sus diagnósticos y el coste de la herramienta es superior al ahorro que propone.
  • Infraestructura para pruebas: las pruebas de desarrollo se realizan automatizadamente (CI / CD vía Git, sin necesidad del equipo de infraestructura) en una infraestructura que se despliega a propósito para cada prueba sin afectar al resto de los entornos, cuando finaliza la prueba se destruye.
  • Modelos de despliegue: “blue-green” es empleado mayoritariamente, en ocasiones “rolling

Acotando el comando top para un proceso concreto

El comando top ofrece opciones para casi todo. La administración de Linux requiere, a veces, fijarse en uno o unos pocos procesos concretos. Hay otras maneras de hacerlo (es una de las ventajas de Linux).

Resulta fácil recordar esta opción, en la que a continuación del comando top añadimos “-p” de process y podemos poner tantos PID separados por coma como sean necesarios.

# top -p659

Un ejemplo de cómo se ve un solo proceso, en este caso el demonio de fail2ban:

Otro ejemplo de cómo ver más de un proceso, en este caso, dos procesos de nginx:

# top -p487,488