|===\ | /====\ /==== | / | ~ /===== | | ======= | / | | | | |/ | | | | | | |===\ | | == | | | | | | = \ |===| | | | | | | | |\ | | | | | | | |===/ |==== | | \==== | \ |==== | |====/ | | = ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ ~~~ ~~~ Creazione e installazione di un sistema ~~~ ~~~ Debian virtualizzato, in chroot e in UML ~~~ ~~~ ~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ==Creazione di un'immagine== Esamineremo qui un modo per installare in locale una Debian, da eseguire all'interno del proprio sistema Unix già installato (che sia esso Slackware, Ubuntu, Fedora, SuSe o un'altra Debian) ed eseguibile anche in User Mode Linux o su una virtual machine. Cominciamo creando l'immagine del nostro sistema tramite dd (in questo caso creerò un'immagine grande 1 GB): dd if=/dev/zero of=debian.img bs=1 count=1 seek=1G Ora sul file appena creato creiamo un filesystem di tipo ext3: mke2fs -j -v debian.img Fatto il filesystem, provvediamo a montarlo: mkdir /mnt/virtual mount -t ext3 -o loop debian.img /mnt/virtual Se dovessimo ottenere un errore del tipo 'impossibile montare il filesystem come loop' probabilmente dobbiamo caricare il modulo di loop: modprobe loop ==Installazione di Debian sull'immagine== Ora dobbiamo installare sul filesystem appena creato un sistema Debian. Per farlo usiamo il comando debootstrap messo a disposizione da Debian stessa. Se non siamo su una Debian possiamo scaricare il pacchetto .deb che ci serve, convertirlo nel formato della nostra distro e installarlo. Ad esempio, su una Slackware: wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_0.3.3.2etch1_all.deb ar x debootstrap_0.3.3.2etch1_all.deb mv data.tar.gz debootstrap_0.3.3.2etch1_all.tgz installpkg debootstrap_0.3.3.2etch1_all.tgz Installata l'utility, procediamo con l'installazione del sistema Debian nel seguente modo: debootstrap --verbose --arch i386 etch /mnt/virtual http://ftp.de.debian.org/debian Il processo richiederà un po' e tutti i pacchetti verranno installati sul sistema. A questo punto possiamo passare sul nostro sistema virtuale appena installato con una semplice chroot: chroot /mnt/virtual La prima cosa che possiamo fare è aggiornare la lista dei repository. Modifichiamo a nostro piacimento il file /etc/apt/sources.list includendo i repository che vogliamo, quindi aggiorniamo la lista: apt-get update E ora possiamo installare via apt-get i pacchetti che vogliamo sul nostro sistema. Per uscire e tornare sul sistema 'ospite' basterà un exit. ==User Mode Linux== Volendo possiamo anche avviare l'immagine via User Mode Linux, in modo da eseguire un'autentica piccola macchina virtuale, utile nel caso di testing di kernel e/o applicazioni o nell'ambito della sicurezza. Per fare ciò, scarichiamo da kernel.org l'ultima versione dei sorgenti del kernel, esempio: wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.3.tar.bz2 tar jxvf linux-2.6.24.3.tar.bz2 cd linux-2.6.24.3.tar.bz2 Ora configuriamo e compiliamo il kernel in modo che sia pronto per bootare un sistema User Mode Linux: make ARCH=um menuconfig # Configurare il kernel a modo make ARCH=um linux Alla fine della fase di compilazione ci ritroveremo con un'immagine bootabile chiamata 'linux'. Copiamola in /usr/bin, in /usr/local/bin o in qualsiasi directory del PATH. Possiamo ora aviare il nostro sistema semplicemente in questo modo: linux ubd0=debian.img ==COW (Copy-On-Write)== Una cosa molto utile in User Mode Linux è fare in modo di lasciare inalterata l'immagine originaria, è costruire su quest'ultima anche più di una macchina virtuale, in modo da fare esperimenti su questa senza toccare la base originaria. È anche molto utile per eseguire contemporaneamente più sistemi virtuali con caratteristiche diverse sulla stessa base. Per fare ciò, User Mode Linux mette a disposizione il meccanismo dei file COW (Copy-On-Write). L'uso è molto semplice: quando avviamo la nostra immagine, specifichiamo anche che file COW usare: linux ubd0=immagine1.cow,debian.img In questo modo tutte le operazioni che faremo sul nostro sistema operativo virtualizzato verranno salvate sul file COW, lasciando inalterata l'immagine Debian. ==Interfacce di rete== Se il sistema ospite ha il modulo tuntap, è possibile condividere la sua interfaccia di rete con il sistema virtualizzato in User Mode Linux (bridged networking). Ciò è possibile semplicemente richiamando il sistema come linux ubd0=immagine1.cow,debian.img eth0=tuntap,,,192.168.1.2 In questo caso al boot verrà creata l'interfaccia di rete eth0, che è condivisa con il sistema ospite, che in questo caso ha IP 192.168.1.2. L'alternativa per fare esperimenti con più macchine virtuali contemporaneamente è quella di scaricare le uml-utilities e usare uml_switch. In questo caso avviamo un hub o uno switch virtuale, attraverso il quale possiamo simulare il comportamento di un'intera rete. Per creare uno switch virtuale di tipo Unix ad esempio, uml_switch -unix /tmp/switch.ctl Verrà creato il descrittore specificato in /tmp. Se invece di uno switch volessimo creare un hub, ovvero un semplice replicatore di pacchetti virtuale su cui fare i nostri esperimenti, daremmo il comando uml_switch -unix /tmp/switch.ctl -hub Ora per avviare una macchina virtuale che usi questo switch daremo linux ubd0=immagine1.cow,debian.img eth0=daemon,,unix,/tmp/switch.ctl by BlackLight, (C) 2008 http://blacklight.gotdns.org