LXC è la nuova tecnologia per il controllo degli userspace attraverso i Linux Containers, un meccanismo leggerissimo per avere un sistema virtuale.
LXC è un’evoluzione di chroot per implementare sistemi completi virtuali, con l’aggiunta di meccanismi di gestione avanzate delle risorse attraverso cgroup e che offre un avanzato grado di isolamento sia di sistema che di applicazione.

I containers Linux adottano un approccio completamente diverso rispetto alle tecnologie di virtualizzazione come Xen e KVM.

E’ possibile virtualizzare solamente macchine linux su linux. Le macchine virtualizzate condividono con il sistema ospitante il kernel con un sistema molto efficiente di isolamento e di sicurezza, e come si può ben capire molto molto efficiente in termini di risorse utilizzate. Con questo sistema si è in grado di supportare simultaneamente centinaia di sistemi emulati su un singolo server. Le macchine virtuali non avranno nessuna perdita di prestazioni rispetto alla macchina che ospita il tutto.

E non è tutto! Il bello sta nella facilità di installazione e di gestione delle macchine virtuali. Non necessita di nessuna modifica al kernel. E’ possibile comprimere una intera macchina virtuale e clonarla in pochi secondi, impressionante.

Beh veniamo al dunque. Come si Fa (HOW TO).

Io ho testato il tutto su Ubuntu 11.04.

Da terminale diventate Root e installate i pacchetti necessari.

1
2
sudo -s
apt-get install lxc debootstrap bridge-utils

Configuriamo la rete aggiungendo un’interfaccia Bridge per LXC e configurando alcune semplici regole di NAT con iptables.
Per fare ciò aggiungiamo al file /etc/network/interfaces il seguente codice (potete utilizzare vim, gedit o qualsiasi editor di testo)

1
2
3
4
5
6
7
8
9
10
11
# LXC bridge
auto br-lxc
iface br-lxc inet static
address 192.168.254.1
netmask 255.255.255.0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
pre-down echo 0 > /proc/sys/net/ipv4/ip_forward
pre-down iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
bridge_ports none
bridge_stp off

attivate l’interfaccia appena creata

1
ifup br-lxc

Attiviamo ora cgroup che serve a gestire le risorse, e che da la possibilità di assegnare carico CPU, Memoria, risorse di rete e accessi al disco in maniera molto sempice (per approfondire)

Create la directory /cgroup e attivate un mountpoint nel file fstab e montate la directory

1
2
mkdir /cgroup
gedit /etc/fstab

aggiungere alla fine del file

1
cgroup /cgroup cgroup

salvare e montare la directory appena creata (avendo detto che il punto di mount è di tipo cgroup abbiamo attivato il sistema di gestione delle risorse)

1
mount /cgroup

Finora abbiamo solamente attivato una porta bridge e cgroup.

Ora per comodità nella vostra home create una cartella lxc nella vostra home

1
2
 mkdir lxc
cd lxc

create un file e nominatelo network.conf all’interno scrivete

1
2
3
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br-lxc

sono le configurazioni di base per tutte le macchine virtuali che creeremo.

ora creiamo il nostro primo container.
Le operazioni che seguono sono quelle che dovete eseguire ogni volta che volete creare un nuovo container anche se dopo vedremo come clonarne uno.

1
lxc-create -n natty01 -t natty -f network.conf

diciamo a lxc di creare un container di nome natty01 di tipo natty (ubuntu 10.04) e di applicare la configurazione di base scritta nel file network.conf.

A questo punto il sistema scaricherà i file necessari alla creazione di una macchina ubuntu 11.04 niente paura , non dobbiamo scaricare 700 Mega ma solamente 40 mega. Esatto 40 Mega per avere il sistema base. Da notare che condivide il kernel del vostro PC.

Oltre a natty è possibile specificare come template busybox, debian, fedora, lucid, maverick, natty o sshd

il template è stato scaricato nella directory /var/lib/lxc

1
2
cd /var/lib/lxc
ls -la

vediamo la nostra directory (template) natty01 possiamo editare i file che ci interessano all’interno della macchina dal di fuori.

1
gedit /var/lib/lxc/natty01/rootfs/etc/network/interfaces

sostituiamo il contenuto del file con le seguenti righe per configurare la rete e fornire un indirizzo ip alla macchina virtuale

1
2
3
4
5
6
7
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1

Ed è tutto, ora basta solo far partire la macchina virtuale

1
lxc-start -n natty01

oppure come demone

1
lxc-start -n natty01 -d

attendere 10 secondi e ci connettiamo alla macchina con

1
lxc-console -n natty01

per uscire dalla macchina premere
< CTRL+q a >

una volta connessi mettiamo a posto il file resolv.conf per la risoluzione dei nomi con DNS
eliminiamo il pacchetto resolvconf che a mio avviso fa più casino che altro

1
apt-get remove resolvconf

e editiamo il file /etc/resolv.conf aggiungendo le seguenti righe

1
2
nameserver 208.67.222.222
nameserver 208.67.220.220

per connetterci alla macchina possiamo utilizzare anche SSh

1
ssh root@192.168.254.2

per stoppare una macchina

1
lxc-stop -n natty01

per visualizzare le macchina installate

1
lxc-ls

per distruggere un container

1
lxc-destroy -n natty01

e prossimamente vedremo come clonare un container, magari dopo aver installato alcuni servizi che vogliamo replicare.

per approfondire
http://lxc.sourceforge.net/

https://help.ubuntu.com/community/LXC

http://blog.bodhizazen.net/linux/lxc-configure-debian-lenny-containers/

http://www.stgraber.org/2011/05/04/state-of-lxc-in-ubuntu-natty/

http://www.ibm.com/developerworks/linux/library/l-lxc-containers/

Be Sociable, Share!