Después de tres meses de desarrollo, se lanza la versión 261 del gestor de sistema systemd. Cambios clave: preparación para el soporte de API para la verificación de edad, soporte para los subsistemas Kexec Handover y Live Update Orchestration para reinicios sin pérdida de estado, subsistema IMDS (Instance Metadata Service), funcionalidad para la protección de arranque en sistemas sin TPM (Trusted Platform Module) físico, componente systemd-sysinstall con la implementación del instalador.
Entre los cambios en la nueva versión:
- Se ha añadido un nuevo componente systemd-sysinstall con la implementación de un instalador sencillo del sistema operativo, que se puede gestionar desde la línea de comandos o a través de una interfaz de texto interactiva. La funcionalidad de systemd-sysinstall se ha formado a partir de las capacidades existentes de systemd: para la configuración de particiones de disco se utiliza systemd-repart, para instalar el núcleo y generar el menú de arranque se usa el comando 'bootctl link', para instalar el gestor de arranque systemd-boot se emplea el comando 'bootctl install', y para la configuración inicial del sistema instalado (por ejemplo, elección de la localización y distribución de teclado) se utiliza systemd-creds.
- En preparación para la implementación de los requisitos de las leyes sobre la integración en el sistema operativo, se ha añadido al API para la verificación de edad en la base de datos userdb el campo birthDate con la fecha de nacimiento del usuario. Este campo añadido podrá ser utilizado en el portal xdg-desktop-portal que se está desarrollando para las distribuciones y en el servicio AccountsService para proporcionar a las aplicaciones información sobre la categoría de edad del usuario a través de la interfaz D-Bus 'org.freedesktop.AgeVerification1' o 'org.freedesktop.ParentalControls'. Para establecer la edad, se ha añadido la opción '--birth-date' a la herramienta homectl.
- Se ha añadido soporte para los subsistemas del núcleo de Linux LUO (Live Update Orchestration) y KHO (Kexec Handover) en el manejador PID1, que permiten reiniciar y actualizar el núcleo sin detener el funcionamiento y sin perder el estado del sistema, dispositivos y procesos. KHO proporciona capacidades para iniciar un nuevo núcleo desde el viejo sin perder el estado del sistema, mientras que LUO implementa la preservación del estado de los dispositivos y de la memoria, así como asegura la continuidad de las operaciones relacionadas con DMA y el manejo de interrupciones.
En systemd, se ha implementado la posibilidad de guardar descriptores de archivos antes de invocar kexec y restaurarlos después de reiniciar el núcleo a través de kexec para unidades del sistema y del usuario. También es posible crear sesiones LUO personalizadas en las unidades, que se guardan y se restauran al realizar kexec. Para habilitar el almacenamiento del estado de los descriptores de archivos, se debe utilizar la configuración 'FileDescriptorStorePreserve=yes'.
- Se ha implementado el subsistema systemd-imdsd, que proporciona una API basada en Varlink IPC para que los programas locales accedan a los servicios IMDS (Instance Metadata Service) ofrecidos por diversos proveedores de sistemas en la nube. IMDS permite máquinas virtuales obtener información sobre el entorno en la nube; por ejemplo, se puede obtener información sobre la configuración de red, la ubicación geográfica del nodo, el tipo de CPU y el tamaño del almacenamiento. systemd-imdsd proporciona tanto una API de bajo nivel para acceder a campos individuales, como una interfaz de alto nivel para realizar consultas basadas en claves estándar, que se correlacionan con claves específicas de plataformas en la nube. Se ha añadido la herramienta systemd-imds para interactuar con systemd-imdsd, permitiendo importar campos desde IMDS al sistema local de cuentas.
Para reconocer plataformas en la nube a partir de la información de SMBIOS y determinar la funcionalidad IMDS disponible en el nodo actual, se ha añadido una nueva base de datos hwdb.d/40-imds.hwdb. Se ha implementado el reconocimiento de plataformas en la nube Amazon EC2, Microsoft Azure, Google Compute Engine, Hetzner, Oracle Cloud, Scaleway, Tencent Cloud, Alibaba ECS y Vultr. Se encuentra disponible un generador systemd-imds para la inserción automática del servicio para obtener datos a través de IMDS en caso de detectar el funcionamiento bajo una plataforma en la nube compatible. Es posible crear imágenes universales que admitan el uso de IMDS al iniciarse en entornos en la nube, pero que también puedan funcionar sin IMDS.
- En systemd-stub, se ha implementado la funcionalidad de «boot secret», que permite generar una clave basada en una variable EFI, almacenada en un área inaccesible para el sistema operativo e inicializada con un valor aleatorio. En initrd, la clave se transmite a través del archivo /.extra/boot-secret. Esta funcionalidad puede ser necesaria para obtener una clave aleatoria específica del sistema para la verificación del proceso de arranque o cifrado en sistemas sin TPM (Trusted Platform Module) de hardware.
- Se ha añadido el servicio systemd-tpm2-swtpm.service para iniciar el emulador de chips TPM swtpm (Emulador de TPM por Software), que se puede utilizar para revertir automáticamente a la implementación de software de TPM para un arranque seguro en sistemas sin TPM de hardware. El TPM por software opera en el espacio de usuario y no proporciona el mismo nivel de protección que un TPM de hardware, pero en ciertas situaciones su uso es justificable en comparación con la operación sin TPM. Por ejemplo, el TPM por software puede obtener la clave de cifrado de las particiones usando la nueva funcionalidad «boot secret» y utilizar para almacenar su estado la partición ESP (EFI System Partition) en el disco. Para activar automáticamente el TPM por software, se ha propuesto un parámetro en la línea de comandos del núcleo systemd.tpm2_software_fallback.
- Se ha declarado estable y se ha colocado en /usr/bin el componente systemd-sysupdate, destinado a la detección automática, descarga e instalación de actualizaciones utilizando un mecanismo atómico de sustitución de particiones, archivos o directorios (se utilizan dos particiones/archivos/directorios independientes, uno de los cuales contiene el recurso en funcionamiento actual y el otro se utiliza para instalar la actualización, tras lo cual las particiones/archivos/directorios cambian de lugar).
- En systemd-resolved se ha implementado la opción de sobrescribir o indicar nuevos registros DNS mediante la colocación de archivos en formato JSON en los directorios systemd/resolve/static.d/. A diferencia de /etc/hosts, en los nuevos archivos no solo se pueden asociar IP a nombres de host, sino también definir registros DNS RR de recursos diferentes a «A» y «AAAA». Además, se han añadido configuraciones del tamaño de la caché DNS en systemd-resolved: ‘DNSCacheSize’, ‘MulticastDNSCacheSize’ y ‘LLMNRCacheSize’.
- Se ha añadido la utilidad ‘storagectl’ para inspeccionar dispositivos de almacenamiento y gestionar la conexión de dispositivos de bloques y sistemas de archivos.
- En el marco de la iniciativa para reducir las dependencias, se ha implementado la carga dinámica de las bibliotecas libgnutls, libmicrohttpd, libcurl, libcrypto, libssl, libfdisk y libcryptsetup en libsystemd
mediante la llamada a dlopen() en situaciones donde realmente son necesarias sus funciones. - En systemd-tmpfiles se añadió la opción «--inline», que permite establecer directivas en la línea de comandos sin crear archivos de configuración en tmpfiles.d y sin enviar configuraciones a través de STDIN. Se añadió un nuevo tipo de directiva ‘k/K’ para establecer capacidades. Se añadió el archivo de configuración tmpfiles.d/root.conf, que establece permisos 0555 (-r-xr-xr-x) en el directorio raíz (/) para proteger contra la asignación incorrecta de permisos durante la formación dinámica del sistema de archivos raíz.
- En la utilidad bootctl se garantiza la creación de una copia de seguridad del cargador systemd-boot y la inscripción de la versión anterior en UEFI como una alternativa de arranque.
- En systemd-vmspawn se añadió soporte para el arranque directo del núcleo sin usar firmware UEFI. Se implementó la opción «--firmware-features» para habilitar o deshabilitar selectivamente ciertas funcionalidades del firmware. Se añadió el modo «--console=headless» para iniciar la máquina virtual sin consola y pantalla. Se añadió la opción «--image-disk-type» para seleccionar el tipo de almacenamiento en bloque utilizado en VM (virtio-blk, virtio-scsi, nvme, scsi-cd). Se añadió la opción «--coco» (Computación Confidencial) para habilitar el modo de cifrado de memoria. máquinas virtuales utilizando la tecnología AMD SEV-SNP.
- En systemd-hostnamed y /etc/machine-info se añadió soporte para adjuntar etiquetas arbitrarias al sistema actual, utilizando el parámetro «Tags». Las etiquetas establecidas pueden luego aplicarse para aplicar configuraciones selectivamente con verificación a través de la expresión ConditionMachineTag.
- Se añadieron las configuraciones EventLoopRateLimitIntervalSec y EventLoopRateLimitBurst, que limitan la intensidad del ciclo de procesamiento de eventos en PID1 para liberar recursos de CPU en caso de un bucle infinito.
- En el gestor de servicios se implementó la configuración MinimumUptimeSec para definir el tiempo mínimo de funcionamiento del sistema (15 segundos por defecto). Si se inicia un apagado o reinicio antes de que transcurra este tiempo, se añade un retraso correspondiente en la fase final.
- Para las unidades se implementaron nuevas configuraciones CPUSetPartition para establecer el tipo de partición cpuset en cgroup («root», «isolated», «member»), RestrictFileSystemAccess para permitir la ejecución solo de archivos ejecutables verificados mediante firma digital a través de dm-verity, y CPUPressureWatch/CPUPressureThresholdSec/IOPressureWatch/IOPressureThresholdSec para recibir notificaciones sobre alta carga en CPU y entrada/salida.
- Se ha ampliado la lista de métricas proporcionadas por la herramienta systemd-report. Por ejemplo, se han añadido datos sobre el tamaño de la memoria física y los núcleos de CPU activos, información sobre el contenido de los campos SMBIOS y /etc/machine-info, detalles sobre el soporte del modo Confidential Computing y datos sobre el fabricante de los chips TPM2.
- En systemd-oomd se ha implementado la posibilidad de definir reglas para la eliminación de procesos en caso de escasez de memoria en el sistema. Las reglas se pueden establecer en el directorio /etc/systemd/oomd/rules.d/ o en unidades de servicio a través de la directiva OOMRule.
- Se ha añadido soporte para el protocolo ‘PROXY’ en systemd-socket-proxy, que corresponde a la primera versión del protocolo ‘haproxy’.
- En systemd-networkd se ha implementado un nuevo backend sd-dhcp-relay para relés DHCP. Se han declarado obsoletas las configuraciones en la sección ‘[DHCPServer]’ — BindToInterface, RelayTarget, RelayAgentCircuitId y RelayAgentRemoteId, que deben ser reemplazadas por el parámetro DHCPRelay en la sección ‘[Network]’ y una serie de nuevas configuraciones en la sección [DHCPRelay] y en el archivo networkd.conf. Se ha añadido el comando ‘networkctl dhcp-lease INTERFACE’ para guardar un volcado con información sobre la asignación de direcciones IP (DHCP lease).
- Se ha añadido la opción ‘—restrict-address-families’ a la herramienta systemd-nspawn, y en los archivos .nspawn la configuración RestrictAddressFamilies para limitar las familias de direcciones de los sockets utilizados en el contenedor. En futuras versiones, por defecto solo se permitirán las familias AF_INET, AF_INET6 y AF_UNIX.
- Se ha descontinuado el soporte para el antiguo formato de base de datos udev (versión 0.x). La actualización en caliente desde versiones de systemd hasta la versión 247 ya no se soporta.
- Al compilar con la biblioteca C musl, ahora se requiere al menos la versión musl 1.2.6.
Cabe destacar también el lanzamiento del proyecto liberated-systemd 261, que desarrolla un fork de systemd, libre de código que puede ser usado para espiar a los usuarios. En este lanzamiento, los cambios consisten en eliminar el código que añadía al userdb el campo birthDate con la fecha de nacimiento del usuario, y en la herramienta homectl la opción ‘—birth-date’ para establecer la edad.
Fuente: opennet.ru
