Ejecutar comandos en el arranque de GNU/Linux con systemd

Si tienes que ejecutar un comando cuando se enciende el ordenador, como iniciar manualmente un servicio o hacer un ajuste sobre un driver, puedes orquestarlo con systemd.

En este ejemplo vamos a ver cómo ejecutar un comando, como un script, cuando se enciende el ordenador. El objetivo es que durante el proceso de arranque, se invoque el comando; por ejemplo, que si el comando es un script que debe escribir algo en un archivo, lo haga. Para ello, nos estaremos apoyando en systemd, y crearemos una unidad personalizada que ejecute ese comando durante el arranque.

Esto contrasta con otras formas de ejecutar programas al encender el ordenador, como ponerlo en el autostart de nuestro entorno de escritorio o agregarlo al .bashrc, de que se hará durante el proceso de arranque, así que normalmente se ejecutará mientras el ordenador está iniciando, antes siquiera de que pongamos la contraseña.

Creamos un script de apoyo

En este ejemplo, fabricaré un script auxiliar que será el que defina lo que quiera que ocurra cuando se encienda el ordenador. Para este caso particular, haré que mi script escriba algo sobre uno de los archivos del directorio /sys, una operación típica para modificar el funcionamiento de alguno de los dispositivos de hardware del ordenador.

Crearé un script denominado update-led.sh con el código de mi script:

$ cat > update-led.sh <<EOF
> #!/bin/bash
> echo 1 > /sys/devices/platform/leds/leds/red:standby/brightness
> EOF
$

Como este script requiere ser ejecutado como root, lo pondré en una ubicación más propia del sistema, como /usr/local/sbin, y lo haré ejecutable:

sudo mv update-led.sh /usr/local/sbin/update-led.sh
sudo chmod +x /usr/local/sbin/update-led.sh

Si ahora queremos probar que el script funciona correctamente, lo podríamos ejecutar si es que es una opción en primer lugar.

Invocar el script al arrancar el sistema

Ahora definiré una unidad de systemd que todo lo que tiene que hacer es invocar este script que he fabricado. Para ello crearé un archivo en el directorio /etc/systemd/system, que es donde se colocan las unidades personalizadas de systemd. El archivo podrá tener el nombre que más nos interese, pero deberá terminar por .service. El nombre que le demos, quitando el .service, será como luego será ejecutado mediante systemctl start y similares.

Este archivo tendrá que contener lo que describo más abajo, cambiando las siguientes líneas de interés:

  • Description será cambiado por un comentario sobre qué hace el comando, para identificarlo semanas después, por ejemplo, «arreglo para el driver de red» o «ejecuta rm -rf a .cache».
  • ExecStart será cambiado por la ruta completa al script que hayas creado en tu caso.
[Unit]
Description=Activar el LED

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/update-led.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Este servicio está declarado como oneshot. systemd es bueno ejecutando programas que tienen que estar en marcha todo el tiempo mientras el ordenador está encendido, como el sistema de audio, un agente SSH o GPG… Sin embargo, en este caso le pediremos que ejecute el comando una vez y ya está. La instrucción RemainAfterExit también se usa para señalizar que si el comando termina, todo estará correcto.

Finalmente le pediremos a systemd que active esa unidad, ejecutándola a partir del próximo reinicio. Supongamos que el archivo de unidad se denomina update-led.service, pues el nombre a activar será update-led:

sudo systemd enable update-led

Y opcionalmente si queremos probarlo ya, podemos pedirle que ejecute el script inmediatamente con:

sudo systemd start update-led

¿Qué es un archivo ISO y por qué se usan para descargar GNU/Linux?

La gente más joven no recordará esto, pero hubo una época en la que los ordenadores traían un lector de discos ópticos. Aunque ya no estén de moda, siguen siendo representados cada vez que usamos un archivo .iso.

El disco compacto es un formato que empezó a investigarse a finales de los 70 y que derivó en la creación del CD de audio digital en 1982 o del CD-ROM en 1984. Con el CD de audio digital se hacía posible cuantizar la música como ceros y unos para que tuviese una mejor fidelidad. Y con la creación del CD-ROM se pudo guardar cualquier tipo de datos binarios. Sin embargo, el formato siguió desarrollándose durante las siguientes décadas, y para 1995, IBM y Phoenix presentaron la extensión «El Torito» (no es broma, ese es su nombre), que permitía colocar el código máquina de un programa en un CD-ROM que se podía ejecutar al encender el ordenador. Había nacido el Boot CD.

Por supuesto, uno de los primeros beneficiarios del Boot CD fue Microsoft Windows. Ya no era necesario que el ordenador tuviese MS-DOS para ejecutar el .EXE con el instalador de Windows, porque el propio CD-ROM traía el programa de arranque que permitía leer el resto del disco e iniciar el proceso de instalación. Sin embargo, los cargadores de arranque libres tardaron poco en adquirir también la posibilidad de hacer esto mismo. GRUB puede instalarse sobre un CD, haciendo que cuando se encienda el ordenador, se ejecute GRUB, que además sabe como leer el resto del disco para así cargar una copia del kernel, un disco RAM para arrancar el entorno vivo, o el programa de instalación.

Al principio, Slackware o Red Hat prensaban sus propios CD-ROM. Es decir, adquirías físicamente un CD-ROM de Red Hat o de Slackware en su propia caja y lo instalabas igual que se hacía con Microsoft Windows. Sin embargo, para facilitar el acceso y no tener que depender de poder adquirir una copia física de GNU/Linux, en cuanto las velocidades de internet y los tamaños de los discos duros lo permitieron, empezaron a poner esos mismos CDs en sus páginas web y FTP usando los archivos .iso.

¿Qué es un archivo .iso?

Un archivo .iso es una copia digital exacta de los sectores que forman parte de un CD de datos, como un CD-R o un CD-ROM. Dicho de otro modo, si un lector de CD lee cada una de las pistas de datos que hay en uno de estos discos, y copia los ceros y los unos en un archivo, crea una copia digital del CD. Luego un quemador de CD puede hacer el proceso inverso, llevando los ceros y los unos contenidos en ese archivo sobre la superficie de un CD-R. El resultado es que si descargamos de internet un archivo .iso, tenemos en nuestro ordenador el molde digital que nos permite fabricar copias de un disco compacto de datos.

¿Por qué se les llama .iso? Una vez se inventó el formato CD-ROM en 1983, permitiendo guardar unos y ceros aleatorios, fue necesario crear el formato de archivos que debía llevar el CD-ROM. Después de todo, por entonces la informática ya estaba empezando a llegar a más gente y ya existía la noción de archivo. Los datos binarios hay que agruparlos en archivos, igual que ocurre con un diskette o con un disco duro. Dado que un CD-ROM tiene unas características únicas que no tiene ningún otro medio de almacenamiento de la época, se inventó un sistema de archivos nuevo específico para los CD-ROM. Este formato fue finalizado en 1988 y se le llamó ISO 9660.

Así que de ahí el nombre. Si tomamos un CD quemado con el formato ISO y creamos una copia digital, será interesante ponerle como extensión al archivo .iso para identificar que se trata de una copia digital de ese CD, igual que existen otras tantas extensiones para identificar un tipo de archivo.

¿Por qué se sigue usando el .iso?

En primer lugar, por retrocompatibilidad. Muchos ordenadores viejos siguen teniendo lector de CD o de DVD, y para instalar una distribución GNU/Linux en ellos, el paso de quemar un CD o un DVD con el contenido de un archivo .iso sigue siendo lo más simple. Al quemar un archivo .iso, copiamos los bytes que definen el disco, haciendo que se pueda usar exactamente igual que se lleva haciendo toda la vida.

En segundo lugar, porque puedes acabar con el CD, pero no puedes acabar con «el CD». Hoy en día, lo normal es transferir el contenido de un archivo .iso a un disco USB, como un pendrive. Tiene ventajas: un pen no se raya y no deja de funcionar a los pocos usos, y es más ecológico porque se puede borrar y volver a grabar otra ISO sobre él (aparte de cualquier otra cosa). Lo bueno es que los archivos .iso que encontramos en internet hoy en día son híbridos. El programa de arranque está colocado de tal modo que si se copia a un CD, funciona, pero que si se copia a un pendrive, también lo hace de una manera que permite al ordenador encontrarlo y lanzarlo.

En tercer lugar, por integridad. Podríamos vivir en un mundo en el que las distribuciones GNU/Linux se distribuyesen como un .zip que luego es copiado sobre un pendrive. Sin embargo, cabe la posibilidad de que se haga mal y que por lo tanto se creen copias corruptas. Al compactar toda la imagen de disco en un archivo opaco que no se puede modificar se evitan errores que pueden provocar que el proceso de creación de un medio de arranque GNU/Linux sea más complicado de llevar a cabo.

passwd: todo lo que debes saber

Un tutorial para poder utilizar el comando passwd que puede ayudar a las personas que recién llegan a UNIX.

El post en el que explicaba cómo recuperar la contraseña de Debian me dio la idea de profundizar más en el funcionamiento del comando passwd, ya que tiene varias formas de operar según cómo se llame a este comando.

passwd sirve para cambiar la contraseña de una cuenta. Si ejecutas el comando normal en tu terminal, por ejemplo, passwd, bajo tu propia cuenta de usuario solo podrás cambiar tu propia contraseña. Sin embargo, el auténtico poder de este comando está en invocarlo como superusuario (es decir, como root). Cuando la cuenta root ejecuta este comando, puede cambiar cualquier contraseña: la suya o la de otra cuenta.

Cuando invoques passwd con una cuenta normal, lo primero que hará es pedirte la contraseña actual, y así lo veremos cuando dice Current password. Aquí tenemos que meter la contraseña que tenemos ahora mismo. Esto es una medida de precaución para asegurarse de que un script automatizado no trata de cambiar nuestra contraseña sin permiso.

Ten en cuenta que cuando escribas una contraseña, no la verás por pantalla. Igual que pasa con el comando sudo, no habrá feedback. Ni si quiera unos asteriscos. Cuando empieces a escribir la contraseña, hazlo con determinación y no te detengas a medio de teclearla, para no cometer errores.

Después de escribir la contraseña actual y pulsar Enter, el sistema nos preguntará por la contraseña nueva que queramos establecer. En total la tendremos que escribir dos veces, porque nos pedirá confirmación. Así, si la hemos escrito mal, nos avisará para no bloquear nuestro sistema.

$ passwd
Current password:
New password:
Retype new password:
passwd: password updated successfully

Sobre esto, varias notas extra:

  • La configuración del sistema operativo podría traer reglas adicionales que pueden impedir que se guarde la contraseña. Por ejemplo, es posible que rechace cambiar la contraseña si no tiene un número mínimo de caracteres, o incluso si no junta alguna mayúscula o dígito.
  • Es posible que si pones la misma contraseña como nueva contraseña, te lo rechace y te diga que es la misma contraseña de todos modos.

Por último, el auténtico poder de este comando está en lanzarlo como root. Si lo hacemos podremos cambiar la contraseña de cualquier usuario si lo especificamos como parámetro al lanzar el comando. En este caso, de hecho, passwd no preguntará por la contraseña, lo que le convierte también en el comando ideal para usar si tenemos que recuperar una contraseña en concreto:

# passwd ana
New password:
Retype new password:
passwd: password updated successfully

Recuperar la contraseña de superusuario de Debian 11

¿Te has olvidado de la contraseña que le diste a la cuenta de root en tu instalación de Debian? Suele pasar si no la usamos con mucha frecuencia. Te cuento cómo usar el modo rescate para reestablecerla.

Cuando se configura Debian, una de las primeras cosas que pregunta el sistema operativo es qué contraseña le pretendemos dar a la cuenta de superusuario, es decir, a la cuenta root. Otras distribuciones GNU/Linux han decidido restringir el uso de la cuenta root y facilitar que la distribución se instale teniendo una cuenta superusuario como primera cuenta. No es el caso de Debian, que sigue dándole mucha importancia a la cuenta de superusuario root, y que ni siquiera configura por defecto sudo en la cuenta principal cuando se instala el sistema.

Sin embargo, ¿qué hacer cuando no hemos utilizado en una larga temporada esa cuenta y nos hemos olvidado de su contraseña? ¿Cómo podemos reestablecer la contraseña de root en Debian 11? Vamos a ver qué opciones tenemos en este post.

El juego de ejecutar passwd como root

El objetivo es conseguir tener acceso a una shell root desde la que podamos ejecutar passwd. Este es un comando interesante de administración de sistemas UNIX que sirve para cambiar una contraseña. Cuando lo ejecutamos como root, nos permite cambiar la contraseña de cualquier cuenta del sistema.

Si ponemos passwd sin más cuando somos root, cambiaremos la contraseña de root. Tan fácil como esto. De modo que el objetivo de este juego será conseguir una shell de root con la que hacer el cambio de contraseña.

El caso más simple es si ya tienes montado sudo en tu ordenador. Si tu cuenta personal está configurada para poder utilizar sudo, no tienes que hacer nada más que ejecutar sudo su. Con esto, utilizarás tu propia contraseña para acceder a una shell de root.

workstation ~ $ sudo su -
[sudo] contraseña para dani: 
[root@workstation ~]# passwd
Nueva contraseña:

Sólo recuerda que:

  • Cuando teclees la contraseña, esta no será visible por pantalla, así que teclea con confianza y sin detenerte. Con esto evitarás problemas si estás escribiendo palabras y no te equivocarás.
  • Tendrás que escribir la contraseña dos veces y tiene que coincidir. Si la has escrito mal alguna de las veces, te avisará y tendrás que volver a empezar.

Entrar en modo rescate

Si no tienes montado sudo, doas ni nada parecido (cosa que deberías), no quedará otra que entrar en modo de rescate. Resulta sorprendente lo fácil que es arrancar GNU/Linux en modo rescate saltándose cualquier medida de protección, pero si el disco no está cifrado, técnicamente no hay nada que impida hacer esto.

Para entrar en un modo rescate que nos permita saltar la contraseña, todo lo que haremos será reiniciar el ordenador y pulsar e cuando estemos en la pantalla de elección de entorno.

Pantalla de GRUB en Debian 11.

Al pulsar la tecla e aparece el editor de arranque. Con esto podemos modificar los comandos que se ejecutan por GRUB para arrancar el sistema operativo. Por dar la nota, cuando seleccionamos una opción premarcada como Debian GNU/Linux en GRUB realmente ejecutamos todas las instrucciones que se están viendo ahí.

Todo lo que haremos ahora será desplazarnos hacia la línea que empieza por linux (la que empieza por linux /boot/vmlinuz...). Nos desplazamos al final de la línea (aquí puedes usar Ctrl + E para ir rápidamente al final de la línea). Después, borramos las últimas palabras (ro quiet) y en su lugar pondremos rw init=/bin/bash. En definitiva, la línea de linux tiene que quedar tal que así:

    linux    /boot/vmlinuz-5.10.0-19-amd64 root=UUID=... rw init=/bin/bash

Ten en cuenta que la versión del kernel que acompaña a vmlinuz puede cambiar. Además, he suprimido el UUID completo de mi disco porque será diferente al tuyo. Una vez lo hayas comprobado, pulsa Ctrl-X o F10 para arrancar el sistema.

linux /boot/vmlinuz-5.10.0-19-amd64 root=UUID rw init=/bin/bash
El aspecto de GRUB para arrancar en modo rescate

Cuando termine de cargar, verás una shell. Esta shell está conectada al disco duro, por lo que con esto ya tenemos una sesión root para poder ejecutar algunos comandos. Deberías poder comprobar que el disco duro está montado en modo escritura. Esto es algo que puedes hacer ejecutando el comando mount y comprobando si en la salida se incluye una línea que contenga tu partición y la raíz (/). En los flags de montaje debe salir la opción rw. Por ejemplo, en mi caso veo:

/dev/vda1 on / type ext4 (rw,relatime)

Esto es suficiente de por sí.

Como puedes ver en tu shell, root@(none) implicará que tenemos una shell de root. Con esto ya podemos ejecutar el comando passwd y establecer una nueva contraseña para la cuenta de superusuario:

root@(none):/# passwd
New password:
Retype new password:
passwd: password updated successfully
root@(none):/#

Una vez que hagas esto, reinicia tu ordenador. Posiblemente a la fuerza si tienes problemas para escribir reboot. Deberías comprobar que si ahora tratas de escribir la contraseña de superusuario (por ejemplo, usando el comando su), ya te la aceptará.

Debian Backports: qué es y cómo activarlo en Debian 11

En este post te cuento qué es debian-backports y cómo activarlo, para poder instalar versiones más modernas de algunos paquetes que trae Debian 11.

Probablemente te habrás dado cuenta que el software que viene en el gestor de paquetes de Debian es un poco más antiguo que el que se puede encontrar en otras distribuciones. Para paquetes que se actualizan con frecuencia, tal vez te sorprenda descubrir que algunos de estos paquetes en Debian traen versiones un poco más antiguas de lo normal. Existe una razón por la que esto es así.

En Debian, prima más la estabilidad de los paquetes que la frecuencia de actualizaciones. Es por ello que en el ciclo de vida de una versión de Debian, una de las primeras etapas es la congelación del repositorio. Esto ocurre meses antes de que salga una versión de Debian. En ese momento, el repositorio de la siguiente versión de Debian deja de aceptar nuevas versiones de los paquetes que porta, y empieza a aceptar solamente correcciones de errores. La idea es poder garantizar que el software que trae el repositorio por lo menos es robusto y tiene sus errores corregidos.

Sin embargo, en algunas ocasiones esto puede ser un problema. Por ejemplo, puede que nuestro ordenador tenga Debian y queramos utilizar una versión reciente de un SDK o de un programa. O puede que por una necesidad de ciberseguridad tengamos que actualizar a una versión de Apache o NGINX más reciente que la que se porta en el repositorio. Si la versión que hay en los repositorios no es lo suficientemente reciente, podemos tirar de debian-backports, suponiendo que el paquete esté disponible en primer lugar.

En definitiva, debian-backports es una forma de traerse desde la rama testing algunos paquetes para que puedan estar disponibles de forma segura en versiones anteriores de Debian. Por ejemplo, traerse paquetes de la rama testing para poderlos usar de forma segura en Debian 11 pero sin cambiar todo el sistema operativo a testing o a sid, algo que puede ser beneficioso en servidores.

Cómo usar debian-backports en Debian 11

Para utilizar debian-backports, lo primero que tendrás que hacer es agregar el repositorio a tu ordenador. Si bien puedes modificar el archivo /etc/apt/sources.list, mi recomendación aquí es crear un archivo nuevo que termine en .list en el subdirectorio /etc/apt/sources.list.d, por ejemplo, /etc/apt/sources.list.d/backports.list. Dentro, añadirás lo siguiente al final del archivo:

deb http://deb.debian.org/debian bullseye-backports main

Este es un paso que puedes dar con un editor de textos como Vim o Nano. Ten en cuenta que en este caso estamos activando el repositorio bullseye-backports porque se trata de Debian 11.

A partir de ahora, podremos instalar paquetes que se porten en el repositorio de backports. No todos los paquetes están en backports, pero sí hay unos cuantos disponibles. Puedes ver la lista completa en packages.debian.org.

Por ejemplo, imaginemos que queremos actualizar el servidor Redis por uno más reciente que el que trae Debian 11 en sus repositorios normales (la versión 6.0.16). Para instalar un paquete desde backports, tendremos que pedirle a apt que use el repositorio bullseye-backports mediante la opción -t:

sudo apt install -t bullseye-backports redis

Si ya teníamos Redis instalado en el sistema, APT lo interpretará como una actualización de software igualmente y se bajará la nueva versión. En este momento, por ejemplo, bullseye-backports porta la versión 7.0.5.

Un detalle importante a tener en cuenta es que pese a que los paquetes de debian-backports han sido testeados para comprobar que funcionan en Debian 11, igualmente se trata de paquetes procedentes de la rama testing, por lo que puede que no tengan tanta estabilidad y confianza como los paquetes congelados que sí trae Debian.

Cómo recupero la contraseña de Ubuntu

¿Qué hacer cuando no se puede iniciar sesión en Ubuntu porque hemos olvidado la contraseña y no hay más cuentas de usuario en el sistema?

Es posible, si tienes una máquina virtual que no sueles usar a menudo, o si tu ordenador tiene dual boot y no pasas mucho tiempo en Ubuntu, que se te pueda olvidar la contraseña que estableciste cuando instalaste el sistema operativo. O bien, por la razón que sea. Existen muchísimas razones por las que se puede perder la contraseña de instalación. ¿Qué hacemos en caso de que no podamos entrar en nuestra instalación de Ubuntu?

Los supuestos

En este post os voy a contar una forma rápida y efectiva de recuperar la contraseña de Ubuntu. No digo que sea la forma definitiva y puede que haya casos donde no funcione.

Por ejemplo, si tu partición está cifrada con LUKS, este consejo no te vale. Es más, ningún consejo te vale. Si los datos de tu disco duro están cifrados y no recuerdas la contraseña, no existe forma de recuperar el acceso, ni siquiera la información contenida en el disco.

Sin embargo, estas instrucciones os pueden echar una mano si habéis hecho una instalación típica de Ubuntu para sobremesas o para máquinas virtuales.

Cambiando la contraseña desde el modo de recuperación

Esta forma de cambiar una contraseña olvidada es tan simple que parece sorprendente que siga funcionando a día de hoy. Pero no nos vamos a centrar hoy en si es excesivamente inseguro y simplemente vamos a aprovechar en nuestro beneficio el hecho de que desde el modo de recuperación de Ubuntu es posible acceder a una shell del sistema operativo, con la que podremos cambiar la contraseña via el comando passwd.

Todo lo que tienes que hacer es arrancar tu máquina de tal forma que salga el menú GRUB. Si Ubuntu es el único sistema operativo de tu ordenador o máquina virtual, es posible que el menú GRUB se salte y se inicie Ubuntu automáticamente. En este caso, GRUB estará configurado para solamente mostrar el menú si no se pudo arrancar de forma segura por última vez. En este caso, reinicia a la fuerza tu ordenador, para que en el segundo arranque salga el menú.

El cargador de arranque de GRUB, versión 2.06.

Ahora lo que tendremos que hacer es pulsar la tecla Abajo para desplazarnos hacia la opción Advanced options for Ubuntu, y pulsar Enter para abrir el submenú. Dentro de este, utilizaremos las teclas de dirección para seleccionar alguna opción de recuperación (por ejemplo, que termine en recovery mode).

Menú de opciones avanzadas de GRUB

Una vez la tengamos seleccionada, pulsamos Enter y dejamos que arranque el ordenador. En este estado, se iniciará una versión diferente de Ubuntu. En vez de entorno gráfico, se cargará un menú de color donde nos presentarán varias opciones de arranque. Tendremos que usar las teclas de dirección para seleccionar la opción root (consola de superusuario), y pulsaremos Enter para confirmar. Después, pulsaremos Enter una segunda vez para entrar en modo mantenimiento cuando pida la confirmación.

Menú de recuperación de Ubuntu entrando en modo consola de superusuario

En la mayoría de instalaciones recientes de Ubuntu, la partición directamente se montará en modo de lectura y escritura. En otras palabras, con este método hemos ganado acceso a una shell de superusuario en el sistema operativo. ¡Tremendo!

Sin embargo, ahora tenemos la posibilidad de cambiar la contraseña utilizando el comando passwd, que tendremos que invocar especificando la cuenta cuya contraseña querramos cambiar. Por ejemplo, para cambiar la contraseña de una cuenta llamada operator, utilizaremos el siguiente comando:

root@ubuntu22:~# passwd operator
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: contraseña actualizada correctamente

Si tecleáis una contraseña de menos de 8 caracteres es posible que salga un mensaje como CONTRASEÑA INCORRECTA: La contraseña tiene menos de 8 caracteres. Sin embargo, este mensaje es solo un aviso, porque la establecerá igualmente. Contraseñas más largas son más seguras y previenen accesos no autorizados al ordenador.

Hecho eso, salimos de la shell utilizando la combinación de teclas Control-D. Esto nos llevará de vuelta al menú de color, donde tendremos que elegir la opción resume (Continuar con el arranque normal), lo que nos iniciará el ordenador en modo completo, cargando el entorno gráfico.

¿Qué relación y diferencia hay entre Alma Linux y Rocky Linux?

Ambas aparecieron casi a la vez y ambas siguen el mismo sistema de versiones. ¿Por qué existen? ¿En qué se parecen? ¿En qué se diferencian?

Alma Linux y Rocky Linux son dos distribuciones que aparecieron hace unos años para llenar el hueco que iba a dejar CentOS, una veterana distribución derivada directamente de las fuentes de Red Hat Enterprise Linux cuyo soporte fue retirado por Red Hat en 2020. Ambas aparecieron casi a la vez y ambas siguen el mismo sistema de versiones. ¿Por qué existen? ¿En qué se parecen? ¿En qué se diferencian?

Lo que tienen en común

Si bien RHEL es una distribución comercial pensada para empresas y que requiere una suscripción accesible por un jugoso pago periódico, como todo producto con licencia GNU General Public License tiene que tener el código fuente accesible.

Eso significa que otras entidades pueden tomar el código fuente y hacer lo que quieran con él dentro de los términos de uso de la licencia GNU General Public License. Una de las cosas que está permitida es la redistribución, lo que significa que se da la paradoja de que para una distribución comercial como es Red Hat, es igualmente posible tomar las fuentes, recompilarlas y distribuirlas igualmente como otro producto nuevo.

AlmaLinux y Rocky Linux, al igual que su sucesora, CentOS, hacían esto. Tomaban las fuentes de Red Hat y creaban una compilación equivalente en la cual, no obstante, cambiaban todos los logos y nombres de distribución. En parte, la razón por la que se hace esto es porque los términos de la licencia GPL no cubren el uso de marcas, las cuales están registradas. Solo Red Hat puede utilizar su nombre y su logo en sus productos, así que AlmaLinux y Rocky Linux toman las fuentes pero quitan todo el branding para no incurrir en alguna acción ilegal.

Entonces, ¿es lo mismo que ejecutar Red Hat?

Desde el punto de vista del código objeto que se estará corriendo en tu ordenador, tanto AlmaLinux como Rocky Linux garantizan compatibilidad binaria con Red Hat. Eso significa que, incluso si se está usando una de estas distribuciones, tomar cualquier RPM o programa compilado para Red Hat y desplegarlo sobre una máquina que use alguna de estas distros será compatible y el programa funcionará.

Por supuesto, para poder hacer esto, tiene que coincidir la versión. Cada vez que sale una versión de Red Hat, aparece una versión equivalente de sus muchos clones existentes. Estas versiones no tienen mucho campo para innovar. Si acaso, en el software y scripts empleados para generar las ISO. Por ejemplo, AlmaLinux mantiene ALBS, el servidor de compilaciones que se ocupa de compilar los paquetes que luego formarán parte de las versiones publicadas del software.

Sólo es compatible una versión mayor entre sí, como es lógico. Si un paquete se distribuye como compatible con Red Hat 8, no puedes esperar que funcione con AlmaLinux 9. Similarmente, un paquete para Red Hat 9 no va a funcionar en una instalación de Rocky Linux 8.7. Esto es debido a que la compatibilidad binaria no se puede garantizar cuando se trata de una versión mayor diferente, al cambiar tantas cosas en los componentes internos del sistema (versión de glibc, entre otras cosas).

¿Hay realmente alguna diferencia?

Sobre si elegir AlmaLinux o Rocky Linux, no hay ninguna diferencia. Una vez cambia el logo y el nombre, es realmente el mismo software ejecutándose en el equipo. No existe ninguna ventaja entre una distro y la otra.

Las principales diferencias entre AlmaLinux y Rocky Linux están en las personas que están detrás de la distribución. Ambas distros hoy en día han creado una fundación para coordinar el desarrollo. Esto es importante porque hoy día en ambas distribuciones existe toda una sinergia de empresas cooperando para haacer que estas distribuciones funcionen lo mejor posible.

Tras Rocky Linux se encuentra la Rocky Enterprise Software Foundation, una empresa creada por Gregory Kurtzer. Esta persona ya es conocida en el lugar debido a que también fue quien inició el proyecto CentOS allá por 2004, que fue la primera distribución de este estilo que apareció. En cambio, detrás de la AlmaLinux Foundation hay un comité de directores más diverso, ya que su modelo de gobierno está más orientado a la comunidad.

Diccionario UNIX: Tarball

Puede que alguna vez hayas escuchado el término tarball. En esta entrada de blog te quiero contar qué es un tarball. Más concretamente, qué tipos de tarball hay.

Un tarball es simplemente el apodo que recibe un archivo TAR. El origen de la palabra tarball simplemente viene de un juego de palabras, debido a que en inglés, «tar» también quiere decir «alquitrán». Al final del día, no es más que una forma cariñosa de referirse a uno de estos archivos. Pero, ¿qué es realmente un archivo TAR?

TAR es un archivador. Es un formato diseñado para tomar varios archivos y juntarlos en uno único. Por ejemplo, puedes tomar todos los logs de la carpeta /var/log, que estarán dispersos con múltiples nombres, y fabricar un único archivo tar (un tarball) con el que será más fácil de archivar o compartir los datos.

Esquema de cómo funciona (más o menos) un archivo TAR.

El origen de TAR viene de Tape Archiver, y es que TAR es un formato y un programa que lleva con nosotros muchos años. Precisamente el objetivo inicial de TAR era juntar varios archivos en un mismo flujo de bytes para poder pasarlo de forma más fácil a una cinta magnética, en los viejos días donde se usaban cintas magnéticas para guardar la información. Eventualmente, TAR adquirió soporte para guardar en su lugar el flujo de datos en un archivo del disco duro y, hoy en día, sería rara la idea de guardar sobre cinta (a pesar de que hay gente que lo sigue haciendo).

Uno de los puntos clave sobre TAR es que, a diferencia de otros formatos como el ZIP o como el 7Z, TAR no comprime los archivos. Solamente los junta y les pone una serie de metadatos al principio del archivador para que luego se puedan extraer, es decir, separar y volver a dejar como múltiples archivos separados.

Para comprimir un archivo TAR hay que usar otra herramienta separada, como gzip, lzip o xz. Existen múltiples formatos de compresión porque cada uno fue desarrollado en una época distinta y trata de mejorar lo que ya existe. Por ejemplo, el último en aparecer es zstd, el cual promete grandes mejoras de rendimiento cuando se usa en centros de datos grandes.

Sin embargo, lo que hay que tener claro es que, a diferencia de ZIP, donde archivas y comprimes a la vez, en TAR son dos pasos separados. Si quieres crear una carpeta comprimida usando formatos libres, tendrías que:

  1. Juntar con TAR todos los archivos de un directorio en un mismo archivador (por ejemplo, datos.tar).
  2. Comprimir ese archivo (datos.tar), para convertirlo en datos.tar.gz, datos.tar.xz, datos.tar.bz2…
Esquema de la concatenación de un TAR y de su compresión por separado

Por lo general, la forma más correcta de tratar con un archivador comprimido es mantener las dos extensiones, para dejar claro que es un TAR comprimido con algún tipo de algoritmo. En este caso la extensión nos dirá qué tipo de algortimo tenemos que usar para descomprimir. Por ejemplo, .tar.gz nos dice que se trata de un tarball comprimido con gzip, .tar.xz que es un tarball comprimido con xz (LZMA), .tar.bz2 que está comprimido con Bzip2, etc.

Sin embargo, en muchas ocasiones nos vamos a encontrar que juntan ambas extensiones en una única por comodidad. Si somos capaces de entender que .tgz es lo mismo que .tar.gz, y que .txz es lo mismo que .tar.xz, estaremos bien.

RPM Fusion: qué es y cómo activarlo

RPM Fusion es un repositorio de software que trae paquetes adicionales que ni Fedora ni Red Hat empaqueta. En este artículo te cuento cómo puedes activarlo en tu distro.

RPM Fusion es un repositorio de software extra que se puede activar en Fedora, Red Hat y distribuciones derivadas de Red Hat, como CentOS o Rocky Linux. RPM Fusion empaqueta software que de otro modo, ni Fedora ni Red Hat quieren empaquetar, y lo proporciona mediante RPM para que se pueda instalar con herramientas como dnf o yum.

La razón por la que RPM Fusion existe es porque tanto Fedora como Red Hat están gobernados por las mismas políticas en cuanto a software que aceptan en sus repositorios. En particular, hay dos tipos de paquetes de software que suelen estar rechazados.

Aquellos que son privativos, es decir, que no tienen sus fuentes abiertas, suelen tener un rechazo directo por parte de Fedora y de Red Hat para empaquetarlo en sus sistemas. Esto incluye controladores de software publicados para GNU/Linux que no están bajo una licencia compatible con el software libre o que son directamente privativos. En algunos casos, pese a que el código no es abierto, el driver o el software se publica como «distribución permitida», lo que significa que aun así es legal crear copias de los mismos binarios para compartirlas.

En otro caso, se trata de software libre que tiene el código fuente publicado, pero que puede tener problemas de patentes en algunos países en los cuales Red Hat tiene que cumplir la jurisdicción. Suele ser el caso de la mayoría de versiones de codecs de audio y vídeo que, pese a estar publicados como software libre, a menudo juegan en la difusa línea que hay con las incómodas patentes de software. Si puede suponer un problema legal que Fedora o Red Hat porten ese software libre pero relacionado con patentes en su repositorio, es más que probable que no lo hagan.

Lo que precisamente hace con esto RPM Fusion es tomar todo ese software que, como se ve en ambos casos, es legal distribuir debido a los términos de sus licencias (o son libres, o se permite explícitamente distribuirlo), y empaquetarlo en un repositorio de RPM que sea compatible con dnf y con yum. Con esto se puede instalar ese software en distribuciones compatibles: Fedora Linux, Red Hat Linux, AlmaLinux, Rocky Linux, CentOS y otros derivados clónicos de Red Hat.

Mucho software, como los controladores de driver de NVIDIA o Broadcom, códecs como x264 o x265, e incluso programas completos, como Kdenlive, se distribuyen mediante RPM Fusion, y no se van a encontrar de otro modo en el repositorio principal de Fedora o de Red Hat.

Cómo activar RPM Fusion

En distribuciones recientes que utilicen el entorno de escritorio GNOME, una de las formas más simples de activar RPM Fusion es descargar el archivo RPM desde su página web.

Simplemente vamos a la sección «Graphical Setup via Firefox web browser» (que, pese al nombre, funcionará igual en otros navegadores que no sean Firefox, como Brave), y hacemos clic sobre el enlace que más se asemeje a nuestro sistema operativo. Si utilizas CentOS, AlmaLinux o Rocky Linux, solo recuerda que tu sistema operativo es «RHEL or compatible». En todos los casos, recuerda usar la versión correcta de tu sistema operativo, sea Fedora o Red Hat.

Cuando se descargue, únicamente quedará abrir el archivo descargado con GNOME Software, y pulsar el botón Instalar para cargar el contenido del archivo RPM en el sistema. Con esto se importará el repositorio, y la próxima vez que se busque un paquete, se hará una descarga del contenido de RPM Fusion.

Cómo activar RPM Fusion desde la línea de comandos

Pega uno de los siguientes comandos en la terminal de tu sistema operativo de acuerdo con la distribución y versión que estés usando. Recuerda comprobar antes lo que estás pegando en tu terminal. Además, se te van a pedir permisos de superusuario para hacer esta operación.

Activar RPM Fusion Free en Fedora 37 o 36

sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

Activar RPM Fusion non-free en Fedora 37 o 36

sudo dnf install https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Activar RPM Fusion Free con RPM-OSTREE (En Fedora Silverblue)

sudo rpm-ostree install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

Activar RPM Fusion non-free con RPM-OSTREE (en Fedora Silverblue)

sudo rpm-ostree install https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Activar RPM Fusion free en Red Hat, CentOS, AlmaLinux, Rocky Linux

Tendrás que usar dos comandos en vez de uno. Con esto descargarás el soporte para EPEL, un pack de Fedora que también incluye soporte para Linux Empresarial y que es compatible con Red Hat y similares.

sudo dnf install --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E %rhel).noarch.rpm

sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm

Activar RPM Fusion free en Red Hat, CentOS, AlmaLinux, Rocky Linux

El primer comando no es necesario que lo ejecutes si ya lo has ejecutado como paso de la activación de RPM Fusion Free en el mismo sistema operativo.

sudo dnf install --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E %rhel).noarch.rpm

https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm

Diccionario: LTS

Algunas distribuciones GNU/Linux suelen anunciar en su página web el lanzamiento de versiones LTS. Por ejemplo, en el caso de Ubuntu. ¿Qué quiere decir LTS?

Algunas distribuciones GNU/Linux suelen anunciar en su página web el lanzamiento de versiones LTS. Por ejemplo, en el caso de Ubuntu. ¿Qué quiere decir LTS?

LTS son las siglas de Long Term Support, y hace referencia a que se trata de versiones que van a recibir soporte por parte de los maintainers de la distribución durante más años que una versión regular.

En todas las distribuciones de GNU/Linux serias que encontremos por internet, va a haber una persona o grupo de personas a cargo del mantenimiento. Esto incluye detectar y corregir errores que se puedan producir en la versión, o fundamentalmente el coordinar la entrada de actualizaciones por parte de otros paquetes. Por ejemplo, si KDE corrige un bug en Plasma y la distribución porta KDE Plasma en sus repositorios, el soporte hace referencia a que eventualmente tu gestor de paquetes te traiga la actualización que corrige ese bug porque quien está manteniendo la versión de tu distro se ha ocupado de importar en el gestor de paquetes esa versión corregida.

Soportar versiones de GNU/Linux es complicado y lleva esfuerzo, porque hay que vigilar y en algunos casos securizar y validar correcciones de errores a muchos paquetes para asegurarse de que un arreglo en un paquete no causa problemas en otro. Simultáneamente, las distribuciones GNU/Linux a menudo buscan sacar versión cada pocos años para hacer evolucionar la plataforma, cambiando la arquitectura de la distro. Por ejemplo, cambiar a systemd, cambiar a PipeWire…

Estas dos cosas provocan que sea imposible estar perpetuamente dando soporte a una versión de una distribución GNU/Linux. Es mejor centrar sus esfuerzos en un conjunto de versiones limitada e ir rotando. Esto quiere decir que cuando una nueva release de la distribución sale, la más antigua pierde soporte, para que su equipo se centre en corregir los errores de una.

Generalmente las distribuciones tienen un calendario de publicación. Por ejemplo, sacan una nueva ISO y una nueva versión (Debian 8, Debian 9, Debian 10…) cada 2-3 años, o cada 6 meses, o el primer día de cada mes de abril, por decir algo. Y también establecen una duración para el soporte a esa versión. Por ejemplo, durante los siguientes 9 meses, durante los siguientes 2 años, o hasta que pasen 3 meses de la salida de la siguiente versión de nuestra distro.

Las versiones LTS están marcadas porque no son así. En este caso, el soporte durará más tiempo. Por ejemplo, durante 5 años o durante 10 años desde el lanzamiento de la versión. Esto las hace ideales para instalar en entornos donde queramos no estar cambiando cada dos por tres de sistema operativo o actualizando la versión, por los posibles problemas que pueda traer. Esta es la razón por la que es preferible en un servidor web instalar Ubuntu 22.04, que es una versión LTS, a Ubuntu 22.10, que es una versión que no es LTS y que al cabo de 9 meses tendrá que ser sustituida por otra.

Algunos ejemplos de distribuciones que tienen soporte a largo plazo son:

  • Ubuntu. Si bien las versiones regulares se publican con soporte a 9 meses, la versión que sale cada abril de año par (es decir, la 18.04, la 20.04, la 22.04, la 24.04…) es LTS, y tiene soporte durante varios años. Esto la converte en la distro de preferencia para instalar en entornos donde no deba ser tocada en varios años.
  • RHEL y derivadas. Por ejemplo, EuroLinux, Oracle Linux o Rocky Linux. Se tratan de versiones que igualmente parten del código fuente de Fedora, pero que tienen un soporte de varios años (hasta 10 años).
  • Debian. Sale una versión de Debian aproximadamente cada 2 años. El soporte de cada una de estas versiones dura 3 años. Sin embargo, sigue existiendo un soporte a largo plazo que dura más años, por lo que se puede estar aprovechando una instalación hasta 5 años hasta que llegue el momento de despedirse de ella definitivamente.