educare:user-mode-linux
Table of Contents
User mode linux
- È chiamato anche UML e permette di eseguire un kernel sullo stesso terminale dove si eseguono i normali processi.
- Permette al normale utente di eseguire un sistema Linux all'interno di una shell, come se fosse l'amministratore.
- Il sistema operativo non corre alcun rischio di sicurezza perché il guest viene tutto eseguito in user mode, all'interno di una applicazione del vero sistema operativo.
- Permette di studiare il funzionamento del sistema operativo poiché questo sistema avrà le sue chiamate di sistema, la sua paginazione, il proprio schedulatore dei processi. Si possono eseguire processi come su un sistema operativo virtuale.
- La funzione HostFS permette di usare lo stesso file system del computer host e salvare solo le differenze.
Documentazione
- Lettura: a cosa serve il kernel? (en)
- documentazione ufficiale: apt-get install user-mode-linux-doc
Per gli impazienti
- Se usi Debian
- installare il pacchetto user-mode-linux
apt-get install user-mode-linux
- eseguire nella shell
linux.uml rootfstype=hostfs rw init=/bin/bash
- fine
- Altrimenti, puoi ricompilare il kernel
UML command line argument
Il comando linux.uml può essere seguito da degli argomenti (molto spesso sono gli stessi argomenti ricevuti anche dal kernel linux tramite il boot manager GRUB):
- comando senza argomenti
linux.uml
- argomento root= per passare il device dove trovare il kernel da caricare
linux.uml root=//...qualcosa//
- argomento udb0= per creare un dispostitivo all'interno dell'ambiente UML, di solito di passa un'immagine di un file system.
linux.uml udb0=/percorso/di/un/file root=/dev/udb0
- argomento rw per caricare il file system in lettura/scrittura
linux.uml root=/dev/udb0 rw
Esempi
- Si può utilizzare lo stesso file system dell'host
linux.uml root=/dev/root rootfstype=hostfs rw
- Si può utilizzare un file system contenuto in un disco immagine (private_fs)
- nota: questo comando prima trasforma un disco immagine (/path/private_fs) in un device all'interno di UML (/dev/ubd0) e poi lo utilizza per avviare il kernel UML (argomento root=).
linux.uml root=/dev/ubd0 ubd0=/path/private_fs rw
- Si può condividere un disco immagine (shared_fs) tra più guest (in sola lettura) e scrivere le modifiche in un altro file (/path/private_fs)
- A volte il primo è chiamato backfile mentre il secondo COW file (Copy-On-Write)
linux.uml root=/dev/ubd0 ubd0=/path/private_fs rw,shared_fs
- configurazione filesystem
- configurazione rete
Compilare il kernel
(Non è sempre necessario)
Fase di download dei sorgenti (80 MB compressi)
wget www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.5.tar.xz
wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.5.tar.sign
unxz linux-3.1.5.tar.xz
apt-get install gnupg
gpg --keyserver pgp.mit.edu --recv-keys 6092693E
gpg --verify linux-3.1.5.tar.sign
Fase di configurazione
- compilare un kernel in un sistema della stessa architettura uname -a
- possibilmente compilare in chroot sul sistema in cui si vuole compilare e installare il nuovo kernel
- istruzioni per il chroot (editare sdb6)
mount /dev/sdb6 /mnt ; sleep 1; for i in /dev /dev/pts /proc /sys; \ do mount -B $i /mnt$i; done; sleep 1; chroot /mnt
- dopo
exit
for i in /sys /proc /dev/pts /dev; do umount /mnt$i; done; sleep 1; umount /mnt
tar -xf linux.x.y.z.tar
cp /boot/config-3.5.1 ./.config
- si può lavorare come utente normale
cd linux.x.y.x; make oldconfig ARCH=um
- The build will use less disk space if the CONFIG_DEBUG_INFO option is disabled
Fase di compilazione
- make distclean (necessario perchè ARCH è cambiato)
- make ARCH=um (attendere 15 minuti per la compilazione)
- produce un eseguibile ./linux
- usando strip si potrebbe ridurre la dimensione dell'eseguibile
Fase di utilizzo
- L'utente può avviare il sistema operativo fornendo parametri al kernel (come farebbe grub)
./linux rootfstype=hostfs rw init=/bin/bash
- per conferma eseguire uname -a; ps ax
- DA FARE: uno script che monta il file system…..
- DA FARE: eseguire lo script come init
educare/user-mode-linux.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1