Cómo encontrar ficheros duplicados

Guardo muchísimos documentos en PDF y a veces conviene revisar si tengo alguno duplicado. Esto puede serte útil para buscar archivos duplicados en general:

jcea@jcea:~$ sha256sum *.pdf | sort | uniq -d -w 32

Este código calcula el hash SHA256 de los PDF y nos muestra los duplicados. El proceso puede llevar su tiempo si tienes muchos ficheros o son muy largos.

Cómo ver los datos de sincronización de tiempo en un sistema operativo con "systemd"

En entornos Linux que utilicen Systemd es común que el protocolo NTP lo gestione Systemd, así que hay que aprender a plegarse al signo de los tiempos.

Veamos cómo ver detalles de sincronización de tiempo con Systemd:

jcea@jcea:~$ timedatectl status
               Local time: mar 2023-08-22 15:44:17 CET
           Universal time: mar 2023-08-22 14:44:17 UTC
                 RTC time: mar 2023-08-22 14:44:17
                Time zone: Europe/Madrid (CET, +0100)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

jcea@jcea:~$ timedatectl timesync-status
       Server: 2620:2d:4000:1::41 (ntp.ubuntu.com)
Poll interval: 34min 8s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: 4FF33C32
    Precision: 1us (-25)
Root distance: 785us (max: 5s)
       Offset: -48.589ms
        Delay: 31.949ms
       Jitter: 20.555ms
 Packet count: 40
    Frequency: +16,668ppm

How to force a reconfiguration on SmartOS

From time to time we would like to be able to force SmartOS hypervisor to reconfigure again without deleting the complete HardDisk.

It is simple. Just create the following ZFS property in the zones/var dataset: smartdc:factoryreset=yes. Then reboot the SmartOS machine.

If you are curious, check the details in the file /lib/svc/method/fs-joyent. The relevant lines are:

# A machine is reset to its original unsetup state (i.e. a 'factory reset')
# when the smartdc:factoryreset ZFS user property is set on the var dataset.
reset=$(zfs get -H -o value smartdc:factoryreset ${SYS_ZPOOL}/var)
if [ "${reset}" == "yes" ]; then
    destroy_zpools
fi

Cómo cerrar una conexión SSH colgada y otras secuencias de escape SSH

A veces se nos queda una conexión SSH colgada. Esto es típico tras volver de una hibernación o si estamos atravesando un cortafuegos o un NAT con un timeout bajo y la conexión SSH tiene poca actividad.

En esos casos la conexión SSH puede parecer colgada y tenemos que esperar a que la sesión se caiga por timeout SSH.

SSH se puede configurar con un tiempo keepalive corto para mantener el cortafuegos o el NAT contento y, también, para detectar la caída rápidamente tras la vuelta de la hibernación, pero en este artículo vamos a hacerlo de otra manera.

Si estamos en una sesión SSH, podemos pulsar la tecla de línea nueva (la tecla puede etiquetarse como enter, intro o return), luego la virguilla (es decir, ~) y finalmente el signo de interrogación cerrada (es decir, ?). Veremos algo de este estilo:

Supported escape sequences:
 ~.   - terminate connection (and any multiplexed sessions)
 ~B   - send a BREAK to the remote system
 ~C   - open a command line
 ~R   - request rekey
 ~V/v - decrease/increase verbosity (LogLevel)
 ~^Z  - suspend ssh
 ~#   - list forwarded connections
 ~&   - background ssh (when waiting for connections to terminate)
 ~?   - this message
 ~~   - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Aquí vemos algunas secuencias de escape interesantes que conviene conocer. Especialmente nos interesa la secuencia ~., que corta la conexión SSH. Obsérvese también que para enviar una virguilla (~) al servidor hay que pulsarla dos veces.

Recuerda que las secuencias de escape de SSH deben teclearse al principio de la línea. Si no funciona, asegúrate de pulsar la tecla enter primero.

Novedades SmartOS de 20221201 a 20230615

Artículos previos:

Lo cierto es que los proyectos SmartOS e Illumos son muy activos y tienen muchísima actividad. Proporcionar un repaso exhaustivo es mucho trabajo para mí, así que me limitaré a detallar lo que me parece más interesante desde un punto de vista personal.

Puedes ver los cambios con detalle en inglés.

Leer más…

Actualización de características en un sistema de ficheros ZFS (20230515)

Este artículo es una continuación de Actualización de características en un sistema de ficheros ZFS (20200528). Lee primero ese texto para saber de qué estoy hablando.

Con el paso del tiempo voy actualizando ZFS y es posible activar características opcionales adicionales. Desde la actualización de 2020 hay novedades:

encryption
project_quota
device_removal
obsolete_counts
zpool_checkpoint
spacemap_v2
allocation_classes
resilver_defer
bookmark_v2

¿Qué hemos activado realmente?

ZFS está bastante bien documentado. Por ejemplo, podemos ver el manual de zpool-features. También podemos ver la web oficial de OpenZFS.

Leer más…

Compilar las bibliotecas x265, libaom y dav1d en SmartOS

Al igual que hicimos en Compilar la biblioteca x264 en SmartOS con la biblioteca x264, podemos hacer lo mismo con x265 y las bibliotecas para procesar vídeo en formato AV1.

Voy a ir directamente al grano, para no explicar una vez más cómo se compila código en una zona SmartOS PkgSrc:

  • x265: Está en /data/pkgsrc/multimedia/x265. Se puede compilar con opciones avanzadas haciendo:

    -> bmake PKG_OPTIONS.x265=x265-main10 package
    
  • AV1: Tenemos que compilar las bibliotecas libaom y dav1d.

    • La biblioteca libaom está en /data/pkgsrc/multimedia/libaom. No admite opciones de compilación en PkgSrc.
    • La biblioteca dav1d está en /data/pkgsrc/multimedia/dav1d. Tampoco admite opciones de compilación en PkgSrc.

Como en el caso de x264, la mejora de rendimiento al compilar nuestras propias bibliotecas adaptadas a nuestra CPU es de cinco a uno. Vale la pena invertir el esfuerzo, que es bien poco.

Compilar la biblioteca x264 en SmartOS

Se puede instalar la biblioteca x264 en una zona nativa SmartOS usando simplemente PkgSrc, pero está compilada para una CPU genérica, por compatibilidad, y no aprovechará nuestro procesador. Se puede obtener un rendimiento mucho mayor compilando nosotros mismos x264 desde el código fuente, adaptando la versión compilada a las capacidades de nuestra CPU en particular.

Lo más sencillo es utilizar una zona SmartOS PkgSrc como se ha explicado en artículos anteriores. Los pasos son simples:

  1. Activamos el entorno de compilación para la versión de la zona SmartOS que necesitamos. Por ejemplo:

    [root@PkgSrc ~]# run-sandbox 2022Q4-x86_64
    [...]
    --<root@PkgSrc>-(/data/chroot/dev-2022Q4-x86_64)-<~>--
    ->
    
  2. Nos vamos al directorio de x264 en PkgSrc:

    -> cd /data/pkgsrc/multimedia/x264/
    
  3. Vemos qué opciones de compilación tenemos:

    -> bmake show-options
    Any of the following general options may be selected:
            threads  Enable threads support.
    
    These options are enabled by default:
            threads
    
    These options are currently enabled:
            threads
    
    You can select which build options to use by setting PKG_DEFAULT_OPTIONS
    or PKG_OPTIONS.x264.
    

    Vemos que solo hay una opción, threads, y que está activada por defecto. No hay nada que hacer.

  4. Compilamos el código:

    -> bmake package
    [...]
    => Creating pkginfo file /data/packages/SmartOS/2022Q4/x86_64/pkginfo/x264-20220601.pkginfo
    --<root@PkgSrc>-(/data/chroot/dev-2022Q4-x86_64)-</data/pkgsrc/multimedia/x264>--
    ->
    
  5. Ahora tenemos el paquete compilado en /data/packages/SmartOS/2022Q4/x86_64/All/x264-20220601.tgz. Podemos instalarlo en la zona SmartOS deseada, desempaquetarlo y obtener la biblioteca compartida, etc.

El proceso ha sido simple, rápido y limpio.

¿Cuál es la mejora de rendimiento entre utilizar la versión precompilada o compilarla nosotros mismos para nuestra CPU?

En ciertos perfiles de vídeo la versión precompilada es capaz de procesar 0.772 fotogramas por segundo, mientras que nuestra compilación consigue 4.08 fotogramas por segundo. La mejora es de 5.28.

En otros perfiles de vídeo la versión precompilada es capaz de procesar 0.518 fotogramas por segundo, pero nuestra versión obtiene 2.33 fotogramas por segundo. La mejora es de 4.5.

¡No está mal por menos de diez minutos de trabajo!

PS: Obsérvese que se está compilando la versión 20220601 de x264, que tiene casi un año de antigüedad. Habría que probar a compilar una versión más reciente. Tema futuro.

Compilar "Apache HTTP" con soporte ACME en SmartOS

Apache HTTP añadió soporte nativo para el protocolo ACME (renovación automática de certificados X.509) en la versión 2.4.30 del servidor, como un componente opcional y experimental del mismo. La versión del paquete PkgSrc distribuido en SmartOS no tiene dicho módulo, así que en abril de 2020 pedí que se incluyese.

La respuesta fue algo decepcionante: Se añadía a PkgSrc la opción de compilar ese módulo opcional, mod_md, pero dado que sus propios autores lo tienen marcado como experimental, el paquete precompilado para SmartOS seguiría sin incluirlo de serie.

Pero, al menos, ahora puedo compilarlo de forma trivial yo mismo si lo necesito.

No voy a entrar en detalles sobre cómo compilar paquetes en PkgSrc para SmartOS. Este blog tienen muchos artículos sobre este tema, accesibles desde el menú de Tags de la parte superior de la página.

Los pasos concretos para compilar Apache HTTP con el módulo mod_md en una zona PkgSrc de SmartOS son los siguientes:

Leer más…