News Ticker

Back to the kernel: in arrivo un namespace per il tempo

E’ chiaro che il riferimento al film culto degli anni 80 “Ritorno al futuro” è più che voluto. Ma cosa centra tutto questo con il nostro amato kernel?

E’ stata fatta in questi giorni la richiesta di commenti sulla mailing list del kernel riguardo una possibile nuova introduzione nel kernel Linux: un namespace per il tempo.

Ma cos’è un namespace, e cosa realmente significa questa aggiunta? Beh, se vi è capitato anche solo una volta di utilizzare un container su Linux, sappiate che li avete utilizzati eccome.

Cercando di non andare troppo nel tecnico, i namespace sono una funzione del kernel che permette di “partizionare” le risorse dello stesso al fine di garantire che un processo non solo abbia delle risorse ad esso dedicato, ma non possa in alcun modo accedere alle altre risorse presenti sullo stesso sistema.

Al momento il kernel Linux dispone di 7 differenti namespace:

  • mount: gestisce i punti di mount, permettendo di averne di specifici per il relativo namespace
  • pid: separa la lista di ID dei processi
  • net: isola la rete
  • ipc: permette di isolare i processi dal comunicare tra di loro in modalità SysV (ad esempio, utilizzando le funzioni shm -shared memory- per creare memoria condivisa tra due processi)
  • uts: utilizzato per far apparire il sistema con un nuovo nome host o di dominio
  • uid: garantisce non solo l’isolamento dei privilegi, ma anche la segregazione degli utenti attraverso diversi processi
  • cgroup: permette di isolare i control group, ovvero sistemi di associazione di risorse hardware ai processi

Quindi, avete mai provato ad ottenere la lista di tutti i processi (ps aux) in un container Linux, e vederene presente solo 1? Questo è perchè quel “container” non è altro che un processo che gira in un namespace pid differente da quello del sistema. Stessa cosa avviene abitualmente per la rete ed i cgroup.

All’atto pratico il Time Namespace permetterà di alterare l’orario e la data in un namespace differente da quello generale; ad esempio per testare il funzionamento di un dato software (processo) alterando la data in cui crede di essere eseguito; volete provare se il vostro software avrebbe dato problemi nel momento del millenium bug? Oppure se quando raggiungeremo il limite degli epoch si romperà tutto? I namespace di tempo vi permetteranno di eseguire questo test senza realmente cambiare la data sul vostro sistema (o magari sul server di test utilizzato da altri 20 utenti in quel momento).

Insomma, sicuramente non sarà qualcosa che ci cambierà la vita, ma volete mettere lanciare “uptime” impostando il 12 Novembre 1955?

Utente Linux/Unix da circa 20 anni, cerco sempre di condividere il mio know-how ed, occasionalmente, litigo con lo sviluppatore di Postfix. Adoro tutto ciò che può essere automatizzato e reso dinamico, l’HA e l’universo container. Autore dal 2011, provo a condividere quei piccoli tips&tricks che migliorano il lavoro e la giornata.