User Tools

Site Tools


educare:user-mode-linux

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

Per gli impazienti

  • Se usi Debian
    1. installare il pacchetto user-mode-linux
      • apt-get install user-mode-linux
    2. eseguire nella shell
      • linux.uml rootfstype=hostfs rw init=/bin/bash
    3. 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
educare/user-mode-linux.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1