Translation(s): English - Français - Italiano - Русский
BootProcess > init
Init è il primo programma eseguito dopo che il sistema è avviato e continua a funzionare come processo numero 1 fino a quando il sistema verrà fermato. Il compito di init è di avviare altri programmi che sono essenziali per il funzionamento del sistema, tutti gli altri processi discendono da init.
Contents
Panoramica
Il processo di inizializzazione del sistema è gestito dal demone di init. In squeeze e rilasci precedenti tale demone è fornito dal pacchetto sysvinit e non sono supportate alternative. In wheezy il demone init predefinito è ancora sysvinit, ma è disponibile un'"anteprima tecnologica" di systemd. In jessie e stretch il sistema init predefinito è systemd, ma è supportato il passaggio a sysvinit.
A partire da jessie solo systemd è pienamente supportato; sysvinit è supportato per la maggior parte ma ai pacchetti Debian non viene richiesto di fornire script di avvio per sysvinit. In Buster, è stato introdotto OpenRC, che fornisce alternative per la gestione dei serivizi e i meccanismi dei runlevel di sistema, essendo compatibile con il programma sysv init. Il supporto per sistemi init diversi da systemd è fortemente migliorato in Bullseye. Anche runit è pacchettizzato, ma non ha ricevuto lo stesso livello di test e supporto degli altri. Il supporto per runit come PID 1 è considerato sperimentale. A partire da Bullseye, una raccolta di script di avvio di sysvinit che sono stati rimossi dai rispettivi pacchetti originali è fornita nel pacchetto orphan-sysvinit-scripts.
Determinare il sistema init
In generale si può determinare quale sistema init è installato controllando se il file /sbin/init è un collegamento simbolico. Se non è un collegamento simbolico, allora probabilmente è in uso sysvinit. Se è un collegamento simbolico che punta a /lib/systemd/systemd, allora è in uso systemd. Se è un collegamento simbolico che punta a /lib/sysvinit/init, allora è in unso sysvinit.
Se si sospetta che il sistema init possa essere cambiato senza un riavvio, si può anche usare cat /proc/1/comm per vedere quale nome di comando è stato usato per il demone init durante l'avvio più recente.
Cambiare il sistema init - al momento dell'installazione
Il momento in cui è più facile scegliere un init diverso da systemd è quando si sta installando (dato che i pacchetti di systemd si rifiutano di essere rimossi se systemd è in esecuzione).
Il momento migliore per effettuare il passaggio è dopo la fase ""Selezionare e installare software". Notare che in Bullseye è più difficile fa funzionare senza systemd il desktop GNOME predefinito (perché il suo display manager consueto gdm3 dichiara una dipendenza da libpam-systemd - vedere il bug 991880), perciò se si desidera un ambiente desktop sarà più facile deselezionare GNOME e selezionarne un altro (Xfce, KDE Plasma, LXDE, Cinnamon, MATE e LXQt sono tutti stati testati senza systemd).
Debian Bookworm e successive possono installare gdm3 senza problemi, perciò se si desidera eseguire GNOME basta installare gnome-core dopo aver cambiato l'init. Notare che attualmente ciò è affetto dal bug 1033897.
Una volta completata quella fase, avviare una shell e fare una chroot nel sistema installato digitando chroot /target. Poi si deve dire ad apt di installare il proprio sistema init preferito e, a meno di non usare per nulla un ambiente dekstop, libpam-elogind per fornire le necessarie funzionalità di gestione della sessione con elogind (che sono fornite in un'installazione predefinita da libpam-systemd e systemd). Spesso (incluso in trixie alla data del 2024-09-13) può anche essere necessario installare dbus-x11. E l'installazione predefinita richiama systemd-timesyncd che si vorrà sostituire (probabilmente con ntp).
Per esempio, per un init in stile System-V, digitare apt install sysvinit-core libpam-elogind dbus-x11 ntp. Ciò installa il nuovo sistema init ed elogind e rimuove systemd, libpam-systemd e gli altri componenti che possono funzionare solamente con systemd. Se apt propone di rimuovere un numero molto grande di pacchetti, allora probabilmente è stato selezionato un ambiente desktop che dipende da systemd; sarà meglio fermarsi a quel punto e ritornare alla selezione dei task per sceglierne un altro. Oppure può significare che è comparsa qualche altra dipendenza che apt non gestisce bene (per esempio, se si omette dbus-x11 apt spesso vuole disinstallare l'ambiente desktop).
Una volta fatto, uscire dalla chroot digitando exit, poi ritornare all'installatore (se si stava if you were using a different virtual console by switching back; if you had selected the "Execute a shell" menu option, then by typing exit once more), and resume the installation by moving to the boot loader installation stage, which is typically installing GRUB. You can now complete the installation process as normal.
Una volta completata l'installazione, si vorrà probabilmente creare una configurazione che scavalca quella di apt, qualcosa come:
cat <<'END' >/etc/apt/preferences.d/local-pin-init Package: systemd-sysv Pin: release o=Debian Pin-Priority: -1 Package: systemd Pin: origin "" Pin-Priority: -1 Package: cgmanager Pin: origin "" Pin-Priority: -1 END
Altrimenti a volte apt cerca di cambiare il sistema init quando vengono installati altri pacchetti, anche quando sono installabili perfettamente bene in sistemi non systemd. (Probabilmente correlato al bug 940965.)
== Cambiare il sistema init in un sistema già in esecuzione==
In Bullseye, sono supportati diversi sistemi init alternativi (come init in stile System-V e OpenRC). Generalmente per passare da un sistema init ad un altro si installa il nuovo sistema init e si fa il riavvio. L'eccezione è il passaggio via da systemd: i pacchetti di systemd si rifiutano di essere rimossi se systemd è in esecuzione; perciò il processo è un po' più complicato.
In breve, è necessario scariacare i nuovi pacchetti di cui si ha bisogno, passare in modalità single-user, installare questi nuovi pacchetti e poi fare il riavvio. L'approccio raccomandato è il seguentei: prima pulire /var/cache/apt/archives eseguendo apt clean (ciò rende più facile identificare successivamente i pacchetti da installare). Successivamente, far sì che apt scarichi i nuovi pacchetti di cui si ha bisogno, es.: apt --download-only install sysvinit-core libpam-elogind; libpam-elogind (e elogind da cui dipende) forniscono funzionalità di gestione della sessione di cui probabilmente si avrà bisogno in qualsiasi sistema che esegue un ambiente desktop. A questo punto, controllare le azionni proposte da apt e, se vanno bene, lasciare che proceda.
Ora passare in modalità single-user (systemctl rescue) e installare i pacchetti che sono stati scaricati usando apt install /var/cache/apt/archives/*.deb Una volta che ciò è stato fatto, riavviare il sistema.
un altro metodo alternativo testato che funziona usa chroot. Avviare semplicemente con un supporto live, montare i file system necessari con:
mount -R /dev /mnt/target/dev mount -R /sys /mnt/target/sys mount -t proc proc /mnt/target/proc
ciò presume che il rootfs Debian obiettivo sia montato in /mnt/target.
Per connettersi ad Internet dall'interno di chroot, assicurarsi che /mnt/target/etc/resolv.conf contenga una voce valida per nameserver o che punti ad un file per quello. Tenere a mento che i file al di fuori di /mnt/target (es. il resolv.conf del sistema attuale) non saranno disponibili nella chroot. Il modo più semplice sarebbe quello di copiare il file /etc/resolv.conf del sistema in /mnt/target/etc/resolv.conf (o /mnt/target/tmp/resolv.conf se è un collegamento simbolico). Sarà necessario essere già connessi ad Internet nel sistema ospite.
Da ultimo eseguire
apt install sysvinit-core libpam-elogind
Configurazione di sysvinit
Il file di configurazione inittab dice ad init cosa fare, in particolare contiene le righe:
id:2:initdefault: si::sysinit:/etc/init.d/rcS l2:2:wait:/etc/init.d/rc 2
Che indica al file /etc/init.d/rcS di eseguire l'inizializzazione degli script (in /etc/rcS.d/*), poi gli script per il runlevel richiesto (in /etc/rcS.[0-9]/*).
Ottenere aiuto
Se si incontrano problemi specificatamente associati con l'uso di un sistema init alternativo, esiste una "Debian init system diversity list" che potrebbe essere in grado di aiutare.
Vedere anche
Pagina di manuale di init(1) (da [[DebianPackage:systemd-sysv) ]].
Pagina di manuale di init(8) (da [[DebianPackage:sysvinit-core)]].
- update-rc.d, l'equivalente di chkconfig