Avviare il DE di un'altra distribuzione in Debian 8.x Jessie
Introduzione
Aggiorno per l'attuale Debian stable 8.x Jessie la guida per avviare il desktop environment (DE) di un'altra distribuzione installata in un volume logico o partizione del disco fisso sulla vostra distribuzione preferita ovvero Debian GNU Linux 8.x
Visto l'inconveniente occorsomi nella messa a punto (vedi sotto) devo raccomandare come prerequisito un sistema di rescue, cioè o un sistema multiboot, con quindi la possibilità di avviare da un'altra distribuzione (cosa molto probabile se siete interessati a questa guida) oppure un DVD di installazione (quello di Debian va benissimo anche se non usate Debian) con l'opzione rescue.
Raccomando subito di leggere "man schroot-faq" onde evitare spiacevoli disavventure e capire i semplici passi eventualmente necessari per rimuovere manualmente una sessione schroot non chiusa correttamente.
Configurazione
La distribuzione da mettere nella schroot jail è Kubuntu 14.10 il DE da avviare è Plasma 5 technical preview vediamo subito come configurare schroot. Dopo averlo installato con il consueto comando:
~$ sudo apt-get install schroot
schroot è configurabile attraverso dei profili presenti all'interno della directory “/etc/schroot/” se ne possono creare ex-novo o utilizzare quelli preinstallati, ho scelto di modificare il preinstallato “desktop” editiamo il file “
/etc/schroot/desktop/fstab
” in modo da risultare come segue:# fstab: static file system information for chroots. # Note that the mount point will be prefixed by the chroot path # (CHROOT_PATH) # # <file system> <mount point> <type> <options> <dump> <pass> /proc /proc proc rw,bind 0 0 /sys /sys sysfs rw,bind 0 0 /dev /dev devtmpfs rw,bind 0 0 /dev/pts /dev/pts devpts rw,bind 0 0 # /home /home none rw,bind 0 0 /tmp /tmp ext4 rw,bind 0 0 # If you use gdm3, uncomment this line to allow Xauth to work #/var/run/gdm3 /var/run/gdm3 none rw,bind 0 0 # For PulseAudio and other desktop-related things /var/lib/dbus /var/lib/dbus ext4 rw,bind 0 0 # It may be desirable to have access to /run, especially if you wish # to run additional services in the chroot. However, note that this # may potentially cause undesirable behaviour on upgrades, such as # killing services on the host. /run /run tmpfs rw,bind 0 0 /run/user/1000 /run/user/1000 tmpfs rw,bind 0 0 /run/lock /run/lock tmpfs rw,bind 0 0 /run/shm /run/shm tmpfs rw,bind 0 0 /sys/fs/cgroup/ /sys/fs/cgroup/ tmpfs rw,bind 0 0 /sys/fs/cgroup/systemd /sys/fs/cgroup/systemd none rw,bind 0 0 /sys/fs/cgroup/cpuset /sys/fs/cgroup/cpuset none rw,bind 0 0 /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct none rw,bind 0 0 /sys/fs/cgroup/devices /sys/fs/cgroup/devices none rw,bind 0 0 /sys/fs/cgroup/freezer /sys/fs/cgroup/freezer none rw,bind 0 0 /sys/fs/cgroup/net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio none rw,bind 0 0 /sys/fs/cgroup/blkio /sys/fs/cgroup/blkio none rw,bind 0 0 /sys/fs/cgroup/perf_event /sys/fs/cgroup/perf_event none rw,bind 0 0 /proc/sys/fs/binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,bind 0 0 /dev/mqueue /dev/mqueue mqueue rw,bind 0 0 # /sys/kernel/debug /sys/kernel/debug debugfs rw,bind 0 0 # /sys/fs/fuse/connections /sys/fs/fuse/connections fusectl rw,bind 0 0 /sys/kernel/config /sys/kernel/config configfs rw,bind 0 0
la directory
/run/user/1000
serve per contenere i file runtime specifici dell'utente, nel mio caso lo user identifier (UID) è 1000 controllate con il comando: ~$ id -u
il vostro UID se per esempio è 500 allora la vostra directory dei file runtime sarà /run/user/500 correggete quindi la riga.
Per il tipo di utilizzo discusso nella presente guida raccomando di lasciare commentato il binding di /home in modo da lavorare coi dati nella /home di Kubuntu e non in quella di Debian. Si possono aggiungere altri mount-point per avere disponibili nella schroot jail delle directory presenti nel filesystem Debian, esempio:
/opt/data /mnt none rw,bind 0 0
poi creiamo
/etc/schroot/desktop/config
con il comando (vedi commento di Mcortese sotto):$ sudo tee /etc/schroot/desktop/config <<<'CHROOT_NAME=""'
Vediamo ora come definire la schroot-jail: creiamo il file “
/etc/schroot/chroot.d/kubuntu.conf
” in modo che contenga la “stanza” di configurazione chiamata “[kubuntu]”:[kubuntu] description=Kubuntu 14.10 type=block-device device=/dev/mapper/ld0-lv2 users=mio-utente preserve-environment=false profile=desktop setup.nssdatabases=
Non è un errore, l'ultima linea è da specificare senza valore, con questo file di configurazione viene parametrizzato schroot in modo che avvii una sessione schroot della distribuzione installata nel volume logico “
/dev/mapper/ld0-lv2
” l'utente “mio-utente” avrà il permesso di avviarla e il profilo di configurazione è contenuto nella directory “/etc/schroot/desktop
”, per le altre voci rimando alla pagina di manuale “man schroot.conf”. Si può ora verificarne il funzionamento con:schroot -c kubuntu
Se vi dice che non avete il permesso di avviarla aggiungete il vostro utente alla voce “user” siete così entrati nella chroot jail per uscire basta premere Ctrl-D oppure dare il comando
exit
Per avviare il desktop diamo il comando:
startx /usr/bin/startkde -- :1 vt8 -nolisten tcp >/dev/null 2>&1
Ora premendo la combinazione di tasti Ctrl-Alt-F7 potrete tornare al DE di Debian e con Ctrl-Alt-F8 andare in quello di Kubuntu switchando tra i due, per terminare la sessione occorre fare “click” sulla “K” in basso a sinistra spostarsi sulla linguetta “Esci” e selezionare “Chiudi Sessione” si tornerà al DE di Debian, ricordatevi di chiudere la sessione schroot uscendo dalla chroot jail con Ctrl-D o
exit
Troubleshooting
- Mi è capitato, dopo aver inavvertitamente lanciato più sessioni di schroot (quattro) di fare un reboot e di non arrivare più al login perché systemd si piantava al boot prima di arrivarci, se smanettate tenete presente che potreste ritrovarvi un sistema non avviabile!
Rimedio: avviare da rescue e rimuovere manualmente le sessioni di schroot rimaste attive come spiegato in man schroot-faq.
- Se la sessione di schroot non si è chiusa correttamente schroot vi informa con un messaggio di errore quando uscite dalla sessione. Lo potete anche verificare dall'output del comando mount se vi appaiono righe simili a:
configfs on /var/lib/schroot/mount/kubuntu-bf8a4a28-b1d5-4472-ac13-a9fab78ac158/sys/kernel/config type configfs (rw,relatime)
vi dicono che i mount-point non sono stati smontati.
Rimedio: potrò apparirvi drastico ma ho sempre proceduto riavviando in un'altra distribuzione e montando Debian nella /mnt per poi eliminare i file della sessione schroot. In questo modo non dovevo preoccuparmi di killare eventuali processi che tenessero impegnati i mount-point configurati in fstab. Poi bisognerà indagare in “
/etc/schroot/desktop/fstab
” sulle cause che hanno impedito il smontaggio dei mount-point.
- Ci sono delle problematiche relative all'hardware grafico da affrontare prima di arrivare al risultato descritto, siccome il server Xorg avviato è di Kubuntu occorre che il driver video che il kernel Debian carica sia allineato con quello di Xorg di Kubuntu. Nel mio caso, avendo hardware Nvidia, per aggirare questo ostacolo ho dovuto disinstallare i driver Nvidia di Debian e di Kubuntu ed al loro posto installare il driver proprietario Nvidia sia su Debian che su Kubuntu, con il comando “wget” ho scaricato l'installer:
$ wget us.download.nvidia.com/XFree86/Linux-x86_64/352.41/NVIDIA-Linux-x86_64-352.41.run
Il driver proprietario Nvidia sulla Kubuntu non ha aggiornato il modulo del kernel (nessun problema su Debian) lasciando il kernel col modulo vecchio e aggiornando solo i driver video risultato Kubuntu non si avviava!
Rimedio: avviare da rescue e cancellare/spostare il file
/mnt/lib/modules/”versione_del_kernel”/kernel/drivers/video/nvidia.ko
con il comando:
~# mv /mnt/lib/modules/”versione_del_kernel”/kernel/drivers/video/nvidia.ko ~/
poi avviare Kubuntu e rilanciare l'installer Nvidia.
- Un inciampo nei vari tentativi di far avviare il DE è stato riconoscere che era necessario montare in binding la directory /run/user/1000
infatti inizialmente l'avevo omessa da fstab e sono risalito a lei attraverso la variabile d'ambiente XDG_RUNTIME_DIR
che la contiene come valore. Si può fare a meno di montare /run/user/1000
se all'interno della chroot jail impostate vuota la variabile:
export XDG_RUNTIME_DIR=""
e successivamente lanciate il comando:
startx /usr/bin/startkde -- :1 vt8 -nolisten tcp
per avviare il DE di Kubuntu.
Conclusioni
schroot trovo funzioni perfettamente per chi come me ha l'esigenza di dover sfruttare hardware non virtualizzato per i giochi ad esempio o per avere una o più distribuzioni dove scrivere codice e per comodità la vuole avviare all'interno di una distribuzione di produzione: Debian stable. Altra applicazione che potrebbe interessare per gli scopi discussi in questa guida è “xmount” dalla descrizione:…This makes it for example possible to boot acquired harddisk images using QEMU, KVM, VirtualBox, VMware or alike.
Per il momento è tutto, mi auguro che questa guida possa incuriosire più persone possibile e stimolarle a contribuire al software free.
Commenti
Inviato da mcortese il Lun, 30/05/2016 - 19:22.
Re: Avviare il DE di un'altra distribuzione in Debian 8.x Jessie
Questo comando non può funzionare:
>
e probabilmente non ha diritti di scrivere in/etc/schroot/desktop
.Una soluzione molto diffusa è
Una più elegante è questa
Inviato da frank67 il Lun, 30/05/2016 - 20:42.
Re: Avviare il DE di un'altra distribuzione in Debian 8.x Jessie
Grazie per la puntualizzazione! In effetti avevo digitato quel comando da root non usando sudo. Quando ho redatto la guida ho pedissequamente aggiunto "sudo" alla riga pensando fosse la stessa cosa, mi ha tratto in inganno il fatto che quando devo lanciare un comando che richiede privilegi di root di solito lo racchiudo tra doppi apici e lo dò come parametro a
su -c
e.g.Ciao, Franco
Inviato da mcortese il Mar, 31/05/2016 - 13:20.
Re: Avviare il DE di un'altra distribuzione in Debian 8.x Jessie
Virgolette dentro le virgolette? Mmm...
Secondo me, la pratica migliore quando si scrive una guida è cambiare il prompt, usando
$
quando il comando è da eseguire come utente normale,#
per i comandi di root.Per migliorare la colorazione della sintassi, ricordati di usare il tag
cmdline
invece dicode
, come spiegato in questa guida.