Virtualizzazione con VirtualBox, Qemu, Docker e Vagrant
Che cos’è la virtualizzazione La virtualizzazione consiste nell’operazione di creare una versione virtuale di qualcosa, un computer, un dispositivo di memoria di massa, una risorsa di rete https://en.wikipedia.org/wiki/Virtualization
HyperVisor La virtualizzazione Hardware si riferisce alla creazione di una macchina virtuale che si comporta come un reale computer con sistema operativo. Il software eseguito nelle macchine virtuali è separato dalle risorse hardware La macchina host è la macchina su cui viene effettuata la virtualizzazione e la macchina guest è la virtual machine. Il software o firmware che crea una macchina virtuale sulla macchina host è chiamato hypervisor o Gestore di Macchine virtuali Snapshot è una istantanea di una macchina virtuale creata in un determinato momento che permette di ripristinarla a una stato precedente. E’ molto utile da fare come backup prima di un’operazione pericolosa, in modo da ripristinare i dati. Virtualbox e Qemu sono esempi di questa tecnologia
Operating-system-level virtualization La virtualizzazione a livello di sistema operativo, conosciuta anche come containerizzazione, è una capacità del sistema operativo per cui il kernel permette l’esistenza di più spazi utente. Queste istanze vengono chiamate container. Un programma che gira in un container può solo vedere il contenuto del container e i dispositivi assegnati allo stesso Esempio di questa tecnologia risulta Docker
VirtualBox sudo apt install virtualbox Scarichiamo Kali Linux, in particolare la versione light da 800 MB da questo sito http://cdimage.kali.org/kali-2017.3/kali- linux-light-2017.3-amd64.iso Apriamo Virtualbox Digitiamo il nome della nostra Macchina Virtuale. Digitando Debian ci propone in Automatico il Sistema operativo Debian e la versione a 64 bit. Premiamo su Avanti Scegliamo la Ram da utilizzare. Attenzione non utilizzate mai troppa in modo da non danneggiare il sistema host. Premiamo su Avanti Creiamo una Nuova Macchina Virtual VDI. Clicchiamo su Crea La macchina Virtuale viene creata. Facciamo doppio Click sull’icona della nostra macchina virtuale. Si avvierà e chiederà la iso del sistema operativo. Scegliamo la iso di Kali e si avvierà la nostra distribuzione linux.
Creare una Snapshot Quando chiudiamo con la X una finestra di una macchina virtuale, ci propone o di spegnere la macchina oppure di salvarne lo stato in modo da riprenderne l’esecuzione dove l’avevamo lasciata.
QEMU – vm da riga di comando QEMU è molto più di un hypervisor, ma ci permette anche di emulare anche altri pc e processori utilizzando KVM. Vediamo se è supportato dal nostro processore egrep ‘(vmx|svm)’ /proc/cupinfo Installiamo qemu e i connettori di rete per poter effettuare la connessione ad internet sudo apt install qemu-kvm bridge-utils Creiamo una immagine di 8 GB per la macchina virtuale qemu-img create -f qcow2 virtuale.qcow2 8G Possiamo usare anche uno strumento Grafico sudo apt install virt-manager virt-manager Possiamo creare anche qui snapshot chiudendo la macchina e indicando Salva
Docker Lo svantaggio delle macchine virtuali risulta nel fatto che dobbiamo replicare lo spazio su disco, installarne tutti i programmi, farne gli aggiornamenti tutte le volte che ne creiamo una. I container permettono la distribuzione dei programmi in modo uniforme su qualsiasi distro Con Docker possiamo avere già delle immagini già pronte ed avviabili corrispondenti per esempio a una istanza di Nextcloud, di Mysql, di un server di posta elettronica, di un NAS. Possiamo creare più container Docker nella stessa macchina e farli comunicare tra di loro. Per esempio possiamo creare un container Wordpress e farlo comunicare con un container MariaDB.
Installare Docker sudo apt install docker docker-compose Recuperiamoci un’immagine docker di Owncloud sudo docker pull owncloud Avviamo il servizio docker sudo systemctl start docker Eseguiamo il container docker appena creato con sudo docker run -d -p 8043:80 owncloud Con -p specifichiamo che la porta 80 del container corrisponderà alla porta 8043 dell’host. Attenzione! La porta 8043 non deve essere in esecuzione, altrimenti darà errore! Questa installazione di Owncloud è in un container, pertanto non interferirà con i file di configurazione di apache sulla vostra macchina Ci viene restituito un lungo codice identificativo del container Per arrestare il container sudo docker stop identificativo_container
Gestione di container Per vedere tutti i container disponibili sul nostro sistema sudo docker ps –all Qui è contenuto il container ID. Occorre fare attenzione allo spazio occupato dalla cartella /var/lib/docker, che si può riempire molto facilmente sudo du -h /var/lib/docker Possiamo il comando sudo docker rmi id_container per rimuovere un container che non ci serve più
Docker start docker start owncloud ci fa avviare un nuovo container docker start id_container ci fa riavviare il container stoppato
Componiamo più container assieme Scarichiamo l’immagine di un container mariadb sudo docker pull mariadb Creiamo una cartella docker-owncloud e creiamo un file docker-compose.yml Nel link sottostante potete trovare il file di configurazione https://gist.github.com/computerluca/bec217dda3dab13cee4 70bb78bfc21dc sudo docker-compose up -d per avviare i due container sudo docker-compose stop per fermare il container sudo docker-compose start per far ripartire il container sudo docker-compose down per eliminare i due container
Connetterci alla shell di un container docker sudo docker exec -t -i nome_contenitore /bin/bash
Vagrant: gestione di più macchine virtuali Le macchine create con VirtualBox devono essere installate, devono essere fatti gli aggiornamenti, devono essere installati i programmi. Con vagrant possiamo automatizzare la creazione di molte macchine virtuali Scarichiamo Vagrant da qui https://releases.hashicorp.com/vagrant/2.0.1/vagrant_2.0.1_x 86_64.deb Creiamo una cartella E digitiamo il comando vagrant init debian/jessie64 vagrant up Apriamo VirtualBox e ci troveremo la nostra VirtualBox avviata
Gestione di un box vagrant vagrant reload (Riavviamo la macchina) vagrant suspend (ibernazione della macchina) vagrant resume (risvegliamo la macchina dall’ibernazione) vagrant halt (spegnimento della macchina) vagrant destroy (cancellazione di tutti i file della macchina) Con vagrant status possiamo avere lo stato di una macchina Possiamo connetterci via ssh alla macchina vagrant ssh
Ancora su Vagrant La debian installata avrà la configurazione della tastiera in inglese Per configurare la tastiera in italiano sudo apt install console-data Nel Vagrant file possiamo specificare alcuni comandi Che devono essere eseguiti automaticamente all’avvio della macchina (per esempio l’aggiornamento del sistema, l’installazione di alcuni pacchetti) In fondo al VagrantFile decommentiamo queste righe. Indichiamo pertanto a Vagrant di effettuare gli aggiornamenti e installare xorg, che non è di default installato nell’immagine di Vagrant vagrant up --provision config.vm.provision "shell", inline: <<-SHELL apt-get update apt-get install -y xorg apt-get install -y xfce4 SHELL
Il formato per la distribuzione dei pacchetti snap Snappy è un gestore di pacchetti ideato da Canonical Ltd. inizialmente solo per Ubuntu, ma è adottato anche da altre distribuzioni. Parte di Ubuntu Core, il tool possiede un meccanismo per applicare aggiornamenti software. Usa il concetto di container per la distribuzione di software indipendente dalla distribuzione Wikipedia Snaps are containerised software packages that are simple to create and install. They auto-update and are safe to run. And because they bundle their dependencies, they work on all major Linux systems without modification. https://snapcraft.io/
Installare Snap sudo apt install snapd → installiamo snapd sudo service snapd start → avviamo il servizio snapd Per il supporto nelle diverse distribuzione visitate questo sito https://tutorials.ubuntu.com/tutorial/basic-snap-usage#1 snapd è il servizio che gira sulla vostra macchina e tiene traccia di tutti i pacchetti snap installati, interagisce con lo store, vi permette di installare e rimuovere pacchetti
Operazioni di base con snap Cercare un pacchetto che contiene la parola “prova” snap find prova Installare un pacchetto sudo snap install hello-world Lista dei pacchetti snap installati snap list L’aggiornamento dei pacchetti viene fatto in automatico Ma se si vuole forzare l’aggiornamento si usa il comando sudo snap refresh hello-world Si può rimuovere un pacchetto con il comando sudo snap remove hello-world
Versioni e canali Ci sono 4 canali: Stabile, Release candidate (pochi giorni prima del rilascio stabile), Beta (non ancora finito, ma abbastanza stabile), Edge (molto instabile) Di default viene utilizzato il canale Stabile sudo snap refresh hello --channel=beta Il pacchetto passa alla versione beta. Possiamo installare un pacchetto direttamente in un certo canale in questo modo sudo snap install hello --channel=beta Possiamo poi tornare alla versione precedente di un applicazione con un semplice comando sudo snap revert hello Per vedere le ultime modifiche fatte ai pacchetti snap (installazioni, rimozioni, aggiornamenti) si usa il comando sudo snap changes
Informazioni su uno snap snap info hello-world Possiamo vedere il nome, la descrizione del pacchetto, possiamo vedere il canale attuale del pacchetto, se è aggiornato, la versione attuale snap find cerca solo i pacchetti nel canale stabile Possiamo usare il comando find per filtrare una determinata sezione (i giochi) snap find --section games snap refresh → aggiorna tutti i pacchetti snap Questo è tratto da due tutorialhttps://tutorials.ubuntu.com/tutorial/advanced-snap- usage https://tutorials.ubuntu.com/tutorial/basic-snap-usage Dove potete trovare maggiori informazioni sui pacchetti snap