33
11/06/2015 Systemd SystemD 11 Giugno 2015 Christopher R. Gabriel < cgabriel @ truelite.it > © 2015 Truelite Srl - La copia letterale e la distribuzione del materiale qui raccolto nella sua integrità sono permesse con qualsiasi mezzo, a condizione che questa nota sia riprodotta.

Systemd - Como Lug

Embed Size (px)

Citation preview

11/06/2015 Systemd

SystemD

11 Giugno 2015

Christopher R. Gabriel

< cgabriel @ truelite.it >

© 2015 Truelite Srl - La copia letterale e la distribuzione del materiale qui raccolto nella sua integrità sono permesse con qualsiasi mezzo, a condizione che questa nota sia riprodotta.

11/06/2015 Systemd

Perchè siamo qui?

● Provare a capire cosa è Systemd.● Come è fatto, e come impatta nella routine di

un amministratore di sistema.● Avere le nozioni sufficienti per capire se ci

piace o no.● Condividere opinioni/esperienze personali.

11/06/2015 Systemd

NON siamo qui per...

● Promuovere Systemd, senza motivazioni oggettive.

● Respingere Systemd, senza motivazioni oggettive.

● Valutare la bontà o meno di un software giudicando l'autore (sarebbe una lista infinita)

11/06/2015 Systemd

WTF?

Fonte: Google Trends, 16/02/2015

11/06/2015 Systemd

WTF!

18 Maggio 2015:Revert upstream commit 743970d which immediately SIGKILLs units during shutdown

This leads to problems like bash not being able to write its history, mosh not saving its state, and similar failed cleanup actions.

11/06/2015 Systemd

Contesto: chi sono

● NON sono un amministratore di sistema● 20 anni che uso e lavoro con Unix, Linux e software

libero● Incuriosito e interessato alla discussione● Influenzato professionalmente da Systemd● Mi piace capire e sapere per poter giudicare● Non ho mai avuto problemi con systemd sui miei

sistemi● Giusto per chiarirsi subito: Systemd non mi piace.

11/06/2015 Systemd

11/06/2015 Systemd

Un sistema di init

● Quali sono i compiti di un sistema di init?

11/06/2015 Systemd

Un sistema di init

● In un sistema operativo Unix, è il primo processo che il kernel manda in esecuzione dopo la fase di bootstrap. (PID 1)

● Deve avviare programmi e servizi necessari allo stato operativo.

● Deve prendere in affido i processi orfani (senza parent PID), curando il recupero della loro terminazione, per evitare di creare processi zombie.

11/06/2015 Systemd

Sistemi storici

● SysV Init (runlevel, directory per ogni runlevel)● BSD (runlevel, script per ogni runlevel)● Upstart (ubuntu, parallelizzazione)

E poi, nel 2010....

11/06/2015 Systemd

11/06/2015 Systemd

SystemD

● Progetto di Lennart Poettering e Kay Sievers● Licenza LGPL● Sviluppato sopra la Linux API (non utilizzabile

su kernel diversi, allo stato attuale)● Ispirato in parte a launchd (OSX)● File di configurazione in formato simil-INI

11/06/2015 Systemd

Una breve storia● 30 Marzo 2010: Prima release di systemd● Maggio 2011: Fedora è la prima tra le principali distribuzioni Linux ad abilitare l'uso

di system come predefinito.● 2012: Patrick Volkerding esprime riserve sull'architettura di systemd, a suo dire

contraria alla filosofia Unix. All'agosto 2014, Slackware non supporta ancora systemd.

● Gennaio 2013: Lennart Poettering scrive un lungo post sul suo blog chiamato “The Biggest Myths”, per sfatare alcuni miti riguardo systemd.

● Ottobre 2013 Agosto 2014→ : dibattito interno al comitato tecnico Debian riguardo a quale sistema di init utilizzare per la release Debian 8 “Jessie”, che culmina con la decisione di utilizzare systemd. Il dibattito in ogni caso è ancora in corso.

● Febbraio 2014: Mark Shuttleworth annuncia che Ubuntu adotterà systemd a seguito delle decisioni di Debian, pur ricordando i suoi commenti dell'Ottobre 2013 che descriveva no systemd come “altamente invasivo e difficilmente giustificabile”.

11/06/2015 Systemd

Una breve storia (2)● Aprile 2014: Linus Torvalds esprime le sue riserve riguardo il comportamento degli autori

principali di systemd verso gli utenti e le segnalazioni di bug (ma dai?).● Aprile 2014: Viene avviata un campagna di boicottaggio verso systemd, pubblicando su

un sito web dedicato le varie ragioni contro la sua adozione.● Ottobre 2014: Poettering si lamenta del fatto che “la comunità Open Source è piena di

str*nzi, io sono probabilmente uno dei loro obbiettivi preferiti”● Novembre 2014: I maintainer Debian e membri del comitato tecnico Joey Hess, Russ

Allbery, Ian Jackson e il maintainer del pacchetto systemd Tollef Fog Heen rassegnano le dimissioni dai loro ruoli. Hanno giustificato la loro decisione sulla mailing list pubblica di Debian e su blog personali, adducendola allo straordinario livello di stress riguardo le disputa dell'integrazione in Debian di systemd, rendendo difficile lavorare con serenità al suo mantenimento.

● Dicembre 2014: Un fork di Debian, chiamato “Devuan”, è stato annunciato da un gruppo di persone che si fanno chiamare “Veteran Unix Admins”. L'intento è quello di fornire una variante di Debian senza systemd installato di default.

11/06/2015 Systemd

Attuale adozioneDistribuzione Repository Predefinito Dal

Arch Linux Gen 2012 Si Ott 2012

CoreOS Lug 2013 Si Ott 2013

Debian Apr 2012 Debian 8 Aprile 2015

Fedora Mag 2011 Si Mag 2011

Gentoo 2011 No

Mageia Mag 2012 Si Mag 2012

OpenSuse Mar 2011 Si Set 2012

RHEL Giu 2014 Si Giu 2014

SUSE ES 2014 si Ott 2014

Tizen 2012 Si 2012

Ubuntu Apr 2013 Pianificato

11/06/2015 Systemd

Perchè Systemd (1)

● Problemi di performance (serializzazione dell'avvio dei processi)

● Avvio di tutti i processi (anche se già attivi, o anche se non necessari)

● Dipendenze (es. rete non configurata, avvio di demone di rete) e successiva serializzazione (Upstart)

● Complessità direttamente proporzionale alla flessibilità (scripts)

● Creazione di socket per IPC

11/06/2015 Systemd

Perchè Systemd (2)

● Socket e D-Bus activation, avvio servizi on-demand● Parallelizzazione aggressiva● Esecuzione asincrona rispetto alla disponibilità delle

risorse● Logica transazionale di controllo dei servizi e relative

dipendenze● Snapshotting & restoring● Approccio utilizzato da superdaemon e launchd (OS-X)● Uso estensivo dei cgroups

11/06/2015 Systemd

Componenti

● Demoni● Unit● Target● Sistema di log● Strumenti accessori

11/06/2015 Systemd

Demoni

● systemd● systemd –user● consoled: supporto per virtual terminal in userspace● journald: logger degli eventi, append only, binario.● logind: gestione dei login (avvio di unit specifiche per l'utenza).

Integrato nei login manager. Sostituisce ConsoleKit● networkd: gestione della configurazione di rete● timedated: gestione dell'ora di sistema, timezone. Accessibile tramite

D-Bus● udevd: gestione dei device (/dev), gestione dei firmware. Integrato in

systemd dall'aprile 2012.

11/06/2015 Systemd

Unit

● Configurazione di:– Service– Device– Mount– Automount– Swap

– Target– Path– Timer– Snapshot– Slice– Scope

11/06/2015 Systemd

Unit (2)

● Supporta sintassi con specifier● Configurazione di un servizio, device,

partizione, filesystem, path, timer etc etc controllati e supervisionati da Systemd

● Estensione uguale alla tipologia di contenuto, ma sono sempre Unit

● systemd-unit(1)

11/06/2015 Systemd

Target

● Unit con estensione .target● Raggruppamento di altre unit (cfr. runlevel)● Fissano punti di sincronizzazione● Vengono forniti target di compatibilità per i

runlevel, cosi' come tool di supporto tipo telinit

11/06/2015 Systemd

Sistema di log

● systemd-journald.service(8)● Demone di logging, riceve dati via:

– syslog(3)– Api nativa– Messaggi del kernel– stdout/stderr di service controllati– Aggiunge metadati

11/06/2015 Systemd

Sistema di log

● Log BINARIO● Formato ancora incerto● Messaggi fino a 2^64-1 B● Dati volatili o meno, a seconda della

configurazione● Possibilità di interrogazione strutturate● Log multipli per utente, personalizzati

11/06/2015 Systemd

Strumenti accessori

● systemctl: controllo di systemd e del service manager

● journalctl: interrogazione del log di sistema

● loginctl: controllo del login manager

11/06/2015 Systemd

Alternative

Rimpiazzi, fork e alternative a systemd, che garantiscono (o tentano di) fornire compatibilità verso le applicazioni.● uselessd● eudev● systembsd (per sistemi BSD)

Altra alternativa: non usarlo (il bello del software libero!)

11/06/2015 Systemd

Critiche (in ordine sparso)

● Contro la filosofia Unix “un compito solo e fallo bene”

● Log in formato binario● Solo Linux● Single Point of Failure ad alta complessità● Glibc● Interazione con upstream (problema diffuso)

11/06/2015 Systemd

Cosa mi piace

● Processo di standardizzazione (che in generale, fa bene alla salute)

● Quindi, compatibilità tra distribuzioni che lo adottano (write once , run everywhere!)

● Possibilità di personalizzazioni per l'utente non privilegiato

● Query strutturate sui log● Uso dei cgroups

11/06/2015 Systemd

Cheat sheet

SysV SystemD Descrizione

service foobar start systemctl start goober Avvia un servizio

service goober stop systemctl stop goober Termina un servizio

service goober restart systemctl restart goober Riavvia un servizio

service goober reload systemctl reload goober Se supportato, ricarica il file di configurazione senza interruzione

service goober condrestart systemctl condrestart goober

Riavvia un servizio se già avviato

service goober status systemctl status goober Mostra se il servizio è già avviato o meno

chkconfig goober on systemctl enable goober Abilita il servizio al prossimo avvio

chkconfig goober off systemctl disable goober Disabilita il servizio al prossimo riavvio

chkconfig goober systemctl is-enabled goober Mostra se configurato per l'avvio

11/06/2015 Systemd

systemctl

Comando Alias Significato

systemctl default systemctl isolate default.target Modalità predefinita

systemctl rescue systemctl isolate rescue.target Entra in modalità rescue

systemctl emergency systemctl isolate emergency.target Modalità emergenza (init 1)

systemctl halt systemctl start halt.target --irreversible

Shutdown della macchina, inviando messaggio agli utenti.

systemctl poweroff systemctl start poweroff.target --irreversible

Shutdown e spegnimento della macchina

systemctl reboot systemctl start reboot.target --irreversible

Riavvio della macchina

systemctl suspend Trigger di suspend.target Suspend to RAM

systemctl hibernate Trigger di hibernate.target Ibernazione

11/06/2015 Systemd

journalctl

Opzione Significato

-b N Limita i risultati a partire dal Nesimo riavvio

-e Si porta direttamente alla fine del log

-f Resta agganciato al terminal per mostrare nuove voci registrate (tail -f )

-k Solo messaggi del kernel

-p prio Solo i messaggi a partire dalla priorità indicata (0->7)

-u unit Solo i messaggi relativi alla unità indicata

--since=data Solo i messaggi a partire dalla data fornita (in formato date)

11/06/2015 Systemd

Extras

● systemd-bootchart(1)● systemd-analyze● systemd-nspawn● systemd-cgtop● systemd-machined

11/06/2015 Systemd

Riferimenti

● www.freedesktop.org/wiki/Software/systemd/

● https://wiki.debian.org/systemd

● http://people.truelite.it/~cgabriel/systemd-haiku/