Acceso ssh lento contenedores proxmox debian 11

Llevo unos días que me encuentro que el acceso ssh de los contenedores lxc de proxmox con debian 11 es horrorosamente lento.

Si miramos el log del servicio ssh nos encontramos esto:

root@ns2:/etc/ssh# cat /var/log/auth.log
Jan  4 13:55:25 ns2 dbus-daemon[70]: [system] Failed to activate service 'org.freedesktop.login1': timed out (service_start_timeout=25000ms)
Jan  4 13:55:25 ns2 sshd[280]: pam_systemd(sshd:session): Failed to create session: Failed to activate service 'org.freedesktop.login1': timed out (service_start_timeout=25000ms)
Jan  4 13:58:54 ns2 dbus-daemon[70]: [system] Failed to activate service 'org.freedesktop.login1': timed out (service_start_timeout=25000ms)
Jan  4 14:00:20 ns2 dbus-daemon[70]: [system] Failed to activate service 'org.freedesktop.login1': timed out (service_start_timeout=25000ms)

El motivo es porqué el servicio systemd-logind no está levantado:

root@ns2:~# systemctl status systemd-logind
● systemd-logind.service
     Loaded: masked (Reason: Unit systemd-logind.service is masked.)
     Active: failed (Result: exit-code) since Tue 2022-01-04 14:59:55 CET; 22min ago
   Main PID: 3620 (code=exited, status=226/NAMESPACE)

Jan 04 14:59:55 ns2 systemd[1]: systemd-logind.service: Main process exited, code=exited, status=226/NAMESPACE
Jan 04 14:59:55 ns2 systemd[1]: systemd-logind.service: Failed with result 'exit-code'.
Jan 04 14:59:55 ns2 systemd[1]: Failed to start User Login Management.
Jan 04 14:59:55 ns2 systemd[1]: systemd-logind.service: Scheduled restart job, restart counter is at 5.
Jan 04 14:59:55 ns2 systemd[1]: Stopped User Login Management.
Jan 04 14:59:55 ns2 systemd[1]: systemd-logind.service: Start request repeated too quickly.
Jan 04 14:59:55 ns2 systemd[1]: systemd-logind.service: Failed with result 'exit-code'.
Jan 04 14:59:55 ns2 systemd[1]: Failed to start User Login Management.

Tenemos dos opciones, la primera es posible que tengamos que activar el nesting en el contenedor (ya configurado por defecto en proxmox 7) o la otra opción es:

Lo

Benchmarking y tunning de servidores para ceph

Una vez tenemos una infraestructura de servidores funcionando bajo ceph, nos podemos preguntar ¿Cómo compruebo que mi cluster está funcionando a máximo rendimiento? En este post vamos a ver algunas herramientas para comprobar el rendimiento y tunning que podemos realizar en nuestros servidores para sacarle mas partido a Ceph.

Comprobar la escritura de disco
La forma mas sencilla para hacer un benchmark del disco es usando el comando dd. Para ello vamos a usar el siguiente comando, añadiendo la etiqueta oflag para bypassear la cache del disco:

# dd if=/dev/zero of=here bs=1G count=1 oflag=direct

Esta es la salida de uno de mis servidores, la primera sobre /root y la otra sobre /mnt/pve/ceph_data que es donde está montado un pool de ceph

root@wezen3D:~# dd if=/dev/zero of=here bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 11.1835 s, 96.0 MB/s

root@wezen3D:/mnt/pve/ceph_data# dd if=/dev/zero of=here bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 46.5157 s, 23.1 MB/s

Comprobar la velocidad de la red
Cuando estamos usando ceph, la red es un factor muy importante. En mi actual infraestructura estoy usando puertos ethernet a 1Gbps. En los foros de proxmox muchos de los administradores usan varios puertos ethernet en bonding o incluso puertos de fibra de 10Gbps. Espero que en unas semanas pueda tener funcionando la segunda opción, de mientras todo el tunning que puedo hacer es tocar parámetros y configuración (ahora entraremos en ello).

La herramienta por excelencia …

Ceph: El maldito deep scrubbing

Si has llegado aquí es que estás buscando ¿qué coño es esto del deep scrubbing? y es que no hay sólo deep scrubbing, sino que ¡hay también otro! el scrubbing a secas. Si aún no has llegado aquí te lo cuento.

En ceph hay los pg, que vendrían a ser las unidades de datos dentro de ceph. En estas unidades de dados es realmente donde se almacena la información y una forma de verlos sería como ficheros o volúmenes de datos.
Para que los datos sean coherentes entre los distintos servidores, ceph hace scrubbing y deep scrubbing. Aquí lo explican muy bien.

En resumen sería

  • scrubbing (a secas). captura los errores del OSD o del sistema de ficheros. Este proceso suele ser ligero y no generar un gran impacto en la lectura y escritura de disco (iout o io)
  • deep scrubbing, compara los datos de los objetos PG, bit a bit. Busca sectores defectuosos en los discos. Este proceso genera un I/O alto.

Una cosa que ya he identificado es que un I/O alto afecta al rendimiento de todo el sistema. Hace que todo vaya leeeeentooooo, que mover ficheros de un lugar a otro sea un supliciooooo….

Desde que actualicé de proxmox 6 a proxmox 7 y actualizando la versión del ceph, todo ha ido empeorando con el paso de los días. He comprado un switch mikrotik con 8 puertos de fibra de 10G y a ver si con las tarjetas de red de 10Gb de fibra y los …

Convertir una web con wordpress a estática con httrack

Hace unos días llegó a mí una de aquellas tareas que en teoría tenía que ser poquitas horas, las poquitas horas han terminado siendo casi un mes entero de trabajo.

La tarea encomendada era la de arreglar la portada de la página web del periódico digital de contrainformación kaosenlared.net.

La web estaba usando el tema publisher y la portada estaba construida con gutenberg, además para cachear la web se estaba usando el plugin W3 total cache. Una combinación del tema y los dos plugins mencionados hacían que se descuadrase toda la página. Por suerte se disponía de una copia de seguridad de un día anterior a que se rompiese la portada. Mi tarea fue pues reestablecer la configuración del tema desde las opciones de exportación y cargar el contenido de la página de la portada. Al arreglarlo y volver a poner la página en producción, a las pocas horas, la portada se volvía a descuadrar. El cliente pidió simplemente dar de baja esta web, hacer algo con los archivos y aprovechar para crear otra nueva que ya estaban usando como web de emergencia.

Así que mi propuesta fue arreglar de nuevo el wordpress y convertir la página web a estática, ya que la página web tenía un pequeño detallito de nada, la friolera de 407.000 entradas, cosa que hacía que el consumo de recursos de la web fuese espectacular, por la gran cantidad de páginas y usuarios que visitaban diariamente el sitio.

Lo primero pues fue copiar todo el …

Proxmox: Ceph y error SECURITY information

Olrait! otro problemilla de estos tontos que tenía pendientes de solucionar, resuelto!

La cosa es que hace un par de meses actualicé un proxmox 6.4 a 7.0, con major upgrade del sistema operativo (debian 10 a debian 11) incluso antes que saliese liberada la propia debian 11! Al hacerlo también tuve que subir la versión de ceph de nautilus (14.x) a octopus (15.x).

Al terminar, aquella misma noche recibo un mensaje de todos y cada uno de los servidores que había actualizado el ceph

Asunto: *** SECURITY information for planet1A.lamardebits.org ***

Cuerpo:
planet1A.lamardebits.org : Sep 9 00:08:13 : ceph : a password is required ; PWD=/ ; USER=root ; COMMAND=nvme wdc_wd4003ffbx-68mu3n0 smart-log-add –json /dev/sdb

La solución viene hoy pues tras encontrar éste mail en las listas de proxmox. Hay que entender el problema, falta algo en sudo o algo otro en otro programa para que suelte esto:

Primero será mirar qué hay en sudoers

root@planet1A:/etc/sudoers.d# cat ceph-osd-smartctl 
## allow ceph-osd (which runs as user ceph) to collect device health metrics

ceph ALL=NOPASSWD: /usr/sbin/smartctl -a --json=o /dev/*
ceph ALL=NOPASSWD: /usr/sbin/nvme * smart-log-add --json /dev/*

Después será mirar si existe el keyring de ceph para conectar con los otros ceph:

root@planet1A:~# cat /var/lib/ceph/bootstrap-osd/ceph.keyring
[client.bootstrap-osd]
	key = *****************************

Finalmente y lo que ha sido creo la solución, porque al mirar ambas cosas estaban correctas, ha sido instalar el paquete nvme-cli y listos, sin reiniciar ni nada.

root@planet1A:~# apt -y install nvme-cli

Cada día, al ejecutarse la copia de seguridad salía el …

Instalador y actualizador de paquetes user friendly en cinnamon

El otro día reinstalé el ordenador de una usuaria a debian 11 con cinnamon. Se lo dejé todo niquelado con sus programas, su configuración anterior del navegador y la instalación del programa llamado keepassx para almacenar contraseñas. Instalé todos los programas y plugins que consideraba que la usuaria iba a necesitar, configuré el escritorio, los menús, etc. pero me quedó una cosa un poco coja, la de la actualización de los paquetes del sistema. Lo dejé como tarea pendiente a solucionar.

Tras unas dudas con una página web que le estoy haciendo, entré a su ordenador usando el programa anydesk y mientras ella atendía una llamada me miré el tema de las actualizaciones para que fuese un poco mas user friendly, pero el synaptic package manager era demasiado tosco para éste tipo de usuaria (ya usuaria experimentada de linux pero no al nivel de usar una terminal), además que no había tiempo para explicárselo de forma clara. No me convenció y decidí ponerme a buscar una solución. Así que os la comparto aquí hoy! :)

Al pensar en ello, se me ha ocurrido plantear la pregunta en el grupo de telegram de debian_es, y en poco rato han salido un par de opciones gnome-software y plasma de kde. Como no me gusta mucho la apariencia de la librería qt y al estar cinnamon basado en gnome me he tirado evidentemente a gnome-software.

Lo primero será instalarlo de esta forma tan cómoda que es para nosotros la instalación de …

Actualitzar gitlab 10.7.3 con debian 8 a gitlab 14.1.0 con debian 10

Hoy os traigo una migración que me ha llevado 4 días largos y el motivo es el de dejar sin actualizar demasiado tiempo un sistema. Con el tiempo lo he ido poniendo todo al día pero siempre había éste (y otro) servicio que se me resistía. Hablamos de gitlab instalado usando los repositorios de gitlab y cabe decir que aunque haya sido una actualización larga y puñetera me ha obligado a mirarme como funcionaba a nivel de sistemas gitlab y telita la de cosas que tiene!

El gitlab que tengo instalado, la curiosidad es que “trae los programas dentro”, es decir, en lugar de estar instalados por apt con los repositorios de debian están ahí metidos en una carpeta.

Otra cosa que tendremos que tener en cuenta es que para hacer una migración a una nueva versión se recomienda hacerlo desde otras versiones tal como explica en la documentación.

En mi caso por las versiones que debería pasar son las:

11.11.8 -12.0.12 -12.1.17 -12.10.14 -13.0.14 -13.1.11 -latest 13.12.Z -latest 14.0.Z -14.1.Z -latest 14.Y.Z

Así que vamos a empezar.

Actualizar de debian 8 a debian 10
En esta migración me ha tocado sacarme el miedo con los upgrades de versiones major de debian. Siempre he tenido la costumbre cada vez que ha habido una release de debian nueva ir migrando los servicios en un sistema nuevo. Por la complejidad de la instalación y porqué al principio no me enteraba muy bien …

Proxmox 7 y limpiar lvm ceph

Ayer instalé proxmox 7 que se ha avanzado a la release de debian 11, aunque debian 11 no haya salido estable, proxmox 7 ya viene con debian 11 bullseye. Debian 11 será liberada el próximo 17 de Julio.

Tenía que hacer la migración de unos datos de un clúster a éste y entre procastinación por otras cosas y una todolist líquida y movible la tarea se quedó pendiente, así que aprovechando a tener una máquina lista para tal tarea directamente le instalé la nueva versión de proxmox para ver qué tal! al hacerlo lo hice a lo bruto sin limpiar previamente los discos, como tal me encontré que al montar ceph los discos destinados al osd estaban ocupados por la instalación anterior y no había forma de borrar las particiones lvm que me había creado al no aparecer en pvscan, ni lvscan ni nada, así que aquí os traigo la solución de como limpiar las particiones para poder usarlas.

root@planet2A:~# sgdisk -Z /dev/sdb
Warning: Partition table header claims that the size of partition table
entries is 0 bytes, but this program  supports only 128-byte entries.
Adjusting accordingly, but partition table may be garbage.
Warning: Partition table header claims that the size of partition table
entries is 0 bytes, but this program  supports only 128-byte entries.
Adjusting accordingly, but partition table may be garbage.
Creating new GPT entries in memory.
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.

root@planet2A:~# reboot

Esto en cada …

Instalar gnome40 en debian 11 (fail)

Spoiler: no funciona! mejor usar de momento otra distribución de linux que no sea debian quieres usar gnome40.

Ya tenemos a debian en RC2, que quiere decir esto? pues que le queda menos para su liberación a estable que está prevista el 17 de Julio de 2021.

Una de las “puñetas” de debian es que no siempre disponemos de las últimas versiones de los programas y una que me ha sabido un poco mal es la de gnome40, que salió como estable pocas horas después de que debian hiciese el freeze de bullseye, para los foráneos, la congelación de versiones de las versiones de los programas para empezar a prepararlo todo para la liberación de la versión estable de debian, debian 11. Esto se hace para dejar unos meses para comprobar que nada pete (cosa buena).

Así que vamos a ver que tal se comporta gnome40 con debian 11 (RC2).

El mayor problema es la actualización de gnome3 a gnome40, muchos de los programas usan la librería de gnome gtk para funcionar y esto puede hacer que algunos programas no funcionen correctamente (ventanas con apariencia extraña o fuera de lugar) o simplemente que se cierren programas de golpe! así que ya lo pruebo yo por vosotros y os ahorro todo este trabajo. Entonces decidid vosotros mismos si dais el salto o no :) Si las pruebas son infructuosas, a mis usuarios les diré de seguir con cinnamon que es un buen entorno de escritorio y muy cómo de usar :)…

Cambiar valor de option al seleccionar un campo select con jquery

Pequeño tip para hacer que al seleccionar un valor de un select se cambien las opciones de otro select.

Partimos de los dos select:

<select class="form-control rounded-0" name="sanctioningprocedure" onchange="update_reasons()">
    <option value="">{% trans "Select Sanctioning Procedure" %}</option>
    {% for sc in box.multiple_sanctioning_procedure_group.all %}
        <option value="{{ sc.pk }}">{{ sc|object_name:request.language }}</option>
    {% endfor %}
</select>

<select class="form-control rounded-0" name="complaint_reason">
    <option value="">{% trans "Select Reason" %}</option>
</select>

La parte de javascript:

<script>
function update_reasons(){
    var group = document.getElementById("sanctioningprocedure").value;

    $("#complaint_reason").empty();
    option = '';
    {% for r in all_reasons %}
        if (group == {{ r.group.pk }}) {
            option = option + '<option value="{{ r.pk }}">{{ r|object_name:request.language }}</option>';
        }
     {% endfor %}

     $("#complaint_reason").html(option);
}
</script>

 

 …