De eerste publieke release van het Nitro-project is uitgebracht, dat zich richt op het ontwikkelen van een minimalistisch init-systeem met functies voor procesbewaking. Het project wordt geleid door Leah Neukirchen, een van de onderhouden pakketten in de Void Linux-distributie. De code is geschreven in de programmeertaal C en wordt verspreid onder de 0BSD-licentie.
Nitro kan zowel worden gebruikt als init-proces (pid 1) als in de vorm van een niet-geprivilegieerd proces dat de robuuste uitvoering van applicaties in de gebruikersruimte beheert en taken herstart bij fouten. Het ondersteunt werking op Linux en FreeBSD, en het kan gebruikt worden in omgevingen die zijn gebaseerd op de standaard C-bibliotheek Musl. Mogelijke toepassingsgebieden zijn embedded systemen, ramdisk-images (initramfs), containers (Docker/Podman/LXC/Kubernetes), maar ook werkstations en serversystemen. Voor het beheer van services en interactie met het init-proces wordt de opdrachtregelutility nitroctl meegeleverd.
In plaats van samengestelde initialisatiescripts gebruikt Nitro een model dat elke functie in een apart script plaatst. Voor elke service wordt in de hiërarchie /etc/nitro een submap aangemaakt waarin de volgende scripts kunnen worden geplaatst: setup - bevat commando's die vóór het starten van de service worden uitgevoerd; run - definieert het script voor het starten van de service; finish - bevat commando's die na de voltooiing van de service worden uitgevoerd. Voor logboekregistratie wordt een symbolische link met de naam log gebruikt, die naar een andere service wijst waar de uitvoer naartoe wordt geleid. Om de automatische start van een service uit te schakelen, hoeft alleen maar een bestand met de naam 'down' in de map te worden gemaakt, en om de service te negeren, moet een '@'-teken aan de mapnaam worden toegevoegd.
De auteur van het project noemt de volgende voordelen van Nitro ten opzichte van andere init-systemen:
- Alle toestand wordt in het RAM opgeslagen, wat het werken in omgevingen met schijfpartities in alleen-lezen modus vergemakkelijkt.
- Een architectuur gebaseerd op event-driven verwerking, zonder polling.
- Geen geheugenallocaties tijdens de uitvoering (alle buffers worden tijdens de opstart toegewezen).
- Beperkt gebruik van bestandshandles tijdens de uitvoering.
- De distributie in de vorm van ƩƩn zelfstandige uitvoerbare bestand en een utility voor systeembeheer.
- Het ontbreken van compilatiefases in de configuratie - de werking van de service wordt bepaald door eenvoudige scripts in de gekoppelde catalogus.
- Beschikbaarheid van de functie om services opnieuw op te starten na een storing.
- Aanwezigheid van een logmechanisme dat zowel standaard als selectief voor individuele services kan worden ingeschakeld.
- Mogelijkheid om een logverwerkingsketen op te bouwen die meerdere services omvat.
- De werking is onafhankelijk van de nauwkeurigheid van de systeemklokken.
- Ondersteuning voor opstarten in FreeBSD via /etc/ttys.
- Mogelijkheid om te bouwen in de vorm van een miniatuur statisch gecompileerd uitvoerbaar bestand bij gebruik van musl libc.
Bron: opennet.ru
