User Tools

Site Tools


educare:user-mode-linux

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
educare:user-mode-linux [2014/08/02 10:13] profproeducare:user-mode-linux [2020/06/08 22:20] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== 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:  [[http://docs.slackware.com/slackbook:linux_kernel|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//
 +      * <code>apt-get install user-mode-linux</code>
 +    - eseguire nella shell 
 +      * <code>linux.uml rootfstype=hostfs rw init=/bin/bash</code>
 +    - **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
 +    * <code>linux.uml</code>
 +  * argomento //root=// per passare il device dove trovare il kernel da caricare
 +    * <code>linux.uml root=//...qualcosa//</code>
 +  * argomento //udb0=// per creare un dispostitivo all'interno dell'ambiente UML, di solito di passa un'immagine di un file system.
 +    * <code>linux.uml udb0=/percorso/di/un/file root=/dev/udb0</code>
 +  * argomento //rw// per caricare il file system in lettura/scrittura
 +    * <code>linux.uml root=/dev/udb0 rw</code>
 +
 +===== Esempi =====
 +
 +  * Si può utilizzare lo stesso file system dell'host
 +    * <code>linux.uml root=/dev/root rootfstype=hostfs rw</code>
 +  * 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=//).
 +    * <code>linux.uml root=/dev/ubd0 ubd0=/path/private_fs rw</code>
 +  * 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)
 +    * <code>linux.uml root=/dev/ubd0 ubd0=/path/private_fs rw,shared_fs</code>
 +  * configurazione filesystem
 +    * http://user-mode-linux.sourceforge.net/configure.html
 +    * http://user-mode-linux.sourceforge.net/old/UserModeLinux-HOWTO-7.html
 +  * configurazione rete
 +    * http://hanez.org/howto-user-mode-linux.html
 +
 +
 +===== Compilare il kernel =====
 +
 +(Non è sempre necessario)
 +
 +==== Fase di download dei sorgenti (80 MB compressi) ====
 +
 +  * <code>wget www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.5.tar.xz</code>
 +  * <code>wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.5.tar.sign</code>
 +  * <code>unxz linux-3.1.5.tar.xz</code>
 +  * <code>apt-get install gnupg</code>
 +  * <code>gpg --keyserver pgp.mit.edu --recv-keys 6092693E</code>
 +  * <code>gpg --verify linux-3.1.5.tar.sign</code>
 +
 +
 +==== 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)
 +    * <code>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</code>
 +    * dopo
 +    * <code>exit</code>
 +    * <code>for i in /sys /proc /dev/pts /dev; do umount /mnt$i; done; sleep 1; umount /mnt</code> 
 +  * <code>tar -xf linux.x.y.z.tar</code>
 +  * <code>cp /boot/config-3.5.1 ./.config</code>
 +  * si può lavorare come utente normale
 +  * <code>cd linux.x.y.x; make oldconfig ARCH=um</code>
 +  * The build will use less disk space if the CONFIG_DEBUG_INFO option is disabled
 +    * https://wiki.debian.org/KernelFAQ
 +
 +==== 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)
 +  * <code>./linux rootfstype=hostfs rw init=/bin/bash</code>
 +  * per conferma eseguire //uname -a; ps ax//
 +
 +
 +
 +
 +
 +  * DA FARE: uno script che monta il file system.....
 +  * DA FARE: eseguire lo script come init
 +  * VEDI: http://www.landley.net/writing/docs/UML.html
 +  * http://eggdrop.ch/texts/uml/
 +  * http://wiki.gentoo.org/wiki/User-mode_Linux/System_testing_with_UML
  
educare/user-mode-linux.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1