Después de tres meses de desarrollo está disponible lanzamiento del gestor de sistemas systemd 261. Cambios clave: preparación para el soporte de la API para la verificación de edad, soporte de las subsistemas Kexec Handover y Live Update Orchestration para reinicios sin pérdida de estado, subsistema IMDS (Servicio de Metadatos de Instancia), funcionalidad para proteger el arranque en sistemas sin TPM (Módulo de Plataforma Confiable) físico, componente systemd-sysinstall con implementación de un instalador.
Entre cambios en este nuevo lanzamiento:
- Se ha añadido un nuevo componente systemd-sysinstall con una implementación de un instalador simple 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 configurar las particiones de disco se utiliza systemd-repart, para la instalación del núcleo y la generación del menú de arranque — el comando «bootctl link», para instalar el gestor de arranque systemd-boot — el comando «bootctl install», para la configuración inicial del sistema instalado (por ejemplo, selección de locale y disposición del teclado) — systemd-creds.
- En el marco de la preparación para implementar los requisitos de las leyes sobre la integración en el sistema operativo de API para la verificación de edad en la base de datos userdb se ha añadido el campo birthDate con la fecha de nacimiento del usuario. El campo añadido podrá ser utilizado en el portal en desarrollo para distribuciones xdg-desktop-portal 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 en la utilidad homectl se ha añadido la opción —birth-date.
- En el controlador PID1 se ha añadido soporte para los subsistemas del núcleo de Linux LUO (Live Update Orchestration) y KHO (Kexec Handover), que permiten reiniciar y actualizar completamente el núcleo sin detener la operación y sin perder el estado del sistema, dispositivos y procesos. KHO ofrece capacidades para ejecutar un nuevo núcleo desde el viejo sin pérdida del estado del sistema, y LUO implementa la conservación del estado de los dispositivos y la memoria RAM, así como garantiza la continuidad de las operaciones relacionadas con DMA y manejo de interrupciones.
En systemd se ha implementado una funcionalidad para las unidades del sistema y del usuario que permite conservar los descriptores de archivos antes de llamar a kexec y restaurarlos después del reinicio del núcleo a través de kexec. En las unidades también se pueden crear sesiones propias. LUO, se guardan y se restauran al ejecutar kexec. Para habilitar la preservación del estado del almacenamiento de 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) proporcionados por diferentes proveedores de sistemas en la nube. IMDS permite a las máquinas virtuales obtener información sobre el entorno en la nube, como 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. En systemd-imdsd se ofrece tanto una API de bajo nivel para acceder a campos individuales, como una interfaz de alto nivel para consultar por claves estándar, coincidiendo con claves específicas de plataformas en la nube. Para interactuar con systemd-imdsd, se ha añadido la utilidad systemd-imds, que permite importar campos de IMDS al sistema local de cuentas.
Para el reconocimiento de plataformas en la nube a partir de la información de SMBIOS y la determinación de la funcionalidad de 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 como Amazon EC2, Microsoft Azure, Google Compute Engine, Hetzner, Oracle Cloud, Scaleway, Tencent Cloud, Alibaba ECS y Vultr. Se encuentra disponible el generador systemd-imds-generator para la inserción automática del servicio que obtiene datos a través de IMDS si se detecta que se está ejecutando en una plataforma en la nube soportada. Es posible crear imágenes universales que apoyen 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, lo que permite formar una clave basada en una variable EFI almacenada en un área inaccesible para el sistema operativo y que se inicializa con un valor aleatorio. En initrd, la clave se transmite a través del archivo /.extra/boot-secret. Esta función puede ser necesaria para obtener una clave aleatoria específica del sistema para verificar el proceso de arranque o cifrado en sistemas sin un TPM (Trusted Platform Module) de hardware.
- Se ha añadido el servicio systemd-tpm2-swtpm.service para iniciar el emulador de chips TPM swtpm (Software TPM Emulator), que se puede usar para retroceder automáticamente a la implementación de software de TPM para un arranque seguro en sistemas sin TPM de hardware. El TPM de software opera en el espacio de usuario y no permite alcanzar el mismo nivel de protección que el TPM de hardware, pero en algunas ocasiones su uso está justificado en comparación con trabajar sin TPM. Por ejemplo, el TPM de software puede obtener la clave de cifrado de particiones mediante la nueva funcionalidad 'boot secret' y usar la partición ESP (EFI System Partition) en el disco para almacenar su estado. Para activar automáticamente el TPM de software se ha propuesto el parámetro de 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, diseñado para detectar, descargar e instalar actualizaciones automáticamente utilizando un mecanismo atómico de reemplazo de particiones, archivos o directorios (se utilizan dos particiones/archivos/directorios independientes, uno de los cuales contiene el recurso en funcionamiento actual, mientras que en el otro se instala la actualización correspondiente, después de lo cual se intercambian las particiones/archivos/directorios).
- En systemd-resolved se ha implementado la posibilidad de sobreescribir o especificar nuevos registros DNS a través de 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 puede vincular direcciones IP a nombres de host, sino también definir registros RR de recursos DNS distintos de 'A' y 'AAAA'. Además, se han añadido configuraciones para el 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 de la iniciativa para reducir las dependencias en libsystemd, se ha implementado la carga dinámica de las bibliotecas libgnutls, libmicrohttpd, libcurl, libcrypto, libssl, libfdisk y libcryptsetup mediante la llamada dlopen() en situaciones donde realmente son necesarias sus funciones.
- En systemd-tmpfiles se ha añadido la bandera --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 ha añadido un nuevo tipo de directivas k/K para establecer capabilities. Se ha añadido un archivo de configuración tmpfiles.d/root.conf, que establece los permisos de acceso 0555 (-r-xr-xr-x) para el directorio raíz (/) para protegerse contra la asignación incorrecta de permisos durante la formación dinámica del sistema de archivos raíz.
- En la utilidad bootctl se ha asegurado la copia de seguridad del cargador systemd-boot y la escritura de la versión anterior en UEFI como una alternativa de arranque.
- En systemd-vmspawn se ha añadido soporte para la carga directa del núcleo sin utilizar el firmware UEFI. Se ha implementado la opción —firmware-features para activar o desactivar de forma selectiva ciertas capacidades del firmware. Se ha añadido el modo —console=headless para iniciar una máquina virtual sin consola y pantalla. Se ha añadido la opción —image-disk-type para seleccionar el tipo de almacenamiento en bloque utilizado en la VM (virtio-blk, virtio-scsi, nvme, scsi-cd). Se ha añadido la opción —coco (Confidential Computing) para habilitar el modo de cifrado de la memoria de las máquinas virtuales utilizando la tecnología AMD SEV-SNP.
- En systemd-hostnamed y /etc/machine-info se ha añadido soporte para adjuntar etiquetas arbitrarias al sistema actual utilizando el parámetro Tags. Las etiquetas asignadas pueden aplicarse posteriormente para la aplicación selectiva de configuraciones con una verificación a través de la expresión ConditionMachineTag.
- Se han añadido 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 bucle.
- 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 los unit se han implementado nuevas configuraciones CPUSetPartition para establecer el tipo de partición de cpuset en cgroup (root, isolated, member), RestrictFileSystemAccess para permitir la ejecución solo de archivos ejecutables verificados por firma digital mediante dm-verity, y CPUPressureWatch/CPUPressureThresholdSec/IOPressureWatch/IOPressureThresholdSec para recibir notificaciones sobre alta carga de CPU y entrada/salida.
- Se ha ampliado la lista de métricas proporcionadas por la herramienta systemd-report. Por ejemplo, se han añadido detalles 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 chips TPM2.
- En systemd-oomd se ha implementado la capacidad de definir reglas para filtrar procesos ante la falta de memoria en el sistema. Las reglas se pueden especificar en el directorio /etc/systemd/oomd/rules.d/ o en los unit de servicio a través de la directiva OOMRule.
- En systemd-socket-proxy se ha añadido soporte para el protocolo PROXY, que corresponde a la primera versión del protocolo haproxy.
- En systemd-networkd Se ha implementado un nuevo backend sd-dhcp-relay para relay DHCP. Se han declarado obsoletas las configuraciones en la sección [DHCPServer] — BindToInterface, RelayTarget, RelayAgentCircuitId y RelayAgentRemoteId, y en su lugar se debe utilizar 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 el enlace de direcciones IP (DHCP lease).
- En la utilidad Llamada Se ha añadido la opción —restrict-address-families, y en los archivos .nspawn se configura RestrictAddressFamilies para limitar las familias de direcciones de sockets utilizadas en el contenedor. En futuras versiones, por defecto solo se permitirán las familias AF_INET, AF_INET6 y AF_UNIX.
- Se ha dejado de soportar el antiguo formato de base de datos udev (versiones 0.x). La actualización en caliente desde versiones de systemd hasta el lanzamiento 247 (opennet.ru) ya no es compatible.
- Al compilar con la biblioteca C musl, ahora se requiere al menos la versión musl 1.2.6.
También se puede destacar lanzamiento el proyecto liberated-systemd 261, un fork de systemd, libre de código que puede ser utilizado para rastrear a los usuarios. En el lanzamiento propuesto, los cambios se limitan a la eliminación del código que añadía al userdb el campo birthDate con la fecha de nacimiento del usuario, y en la utilidad homectl la opción —birth-date para establecer la edad.
Fuente: linux.org.ru
