LXC
http://linuxcontainers.org/
https://launchpad.net/ubuntu/+source/lxc
sudo egrep '(vmx|svm)' --color=always /proc/cpuinfo
SI soporta virtualizacion si vemos la siguiente salida:
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow vnmi flexpriority flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow vnmi flexpriority
3.12-1-amd64
grep -i _ns /boot/config-$(uname -r)
CONFIG_UTS_NS=y CONFIG_IPC_NS=y CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_NF_CONNTRACK_NETBIOS_NS=m CONFIG_NSC_FIR=m CONFIG_PATA_NS87415=m CONFIG_PATA_NS87410=m CONFIG_NS83820=m CONFIG_GAMEPORT_NS558=m CONFIG_TCG_NSC=m CONFIG_NCPFS_NFS_NS=y CONFIG_NCPFS_OS2_NS=y
1. Elegir las herramientas de usuario. Hay dos opciones:
sudo aptitude install lxc * Libvirt
sudo aptitude install libvirt-bin
Yo he instalado tambien los siguientes paquetes
2. Instalar mas paquetes (quiza son dependencias de los anteriores):
sudo aptitude install bridge-utils debootstrap
3. (Comprobar si es estrictamente necesario) Montar cgroup
3.1. Editar:
sudo vim /etc/fstab
Y anyadir la siguiente linea:
cgroup /sys/fs/cgroup cgroup defaults 0 0
3.2. Montar:
sudo mount /sys/fs/cgroup
4. Para comprobar que todos los requisitos estan satisfechos:
sudo lxc-checkconfig
Salida esperada:
--- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
http://libvirt.org/cgroups.html
1. (Opcional) Instalo systemd y elimino la entrada en /etc/fstab
Como root
lxc-create -t <template> -n <nombre_servert>
Por ejemplo:
lxc-create -t debian -n mldonkey
Cuando la crea te da la password de root.
La podemos arrancar:
root@alcala:~# lxc-start -n mldonkey -d
Mirar como está
root@alcala:~# lxc-info -n mldonkey Name: mldonkey State: RUNNING PID: 15393 CPU use: 0.07 seconds BlkIO use: 0 bytes
Todas los contenedores
root@alcala:~# lxc-ls -f NAME STATE IPV4 IPV6 AUTOSTART ---------------------------------------- mldonkey RUNNING - - NO
Podemos entrar en ella
root@alcala:~# lxc-attach -n mldonkey root@mldonkey:~#
Vemos que tiene el mismo kernel que el host
root@alcala:~# uname -a Linux alcala 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17) x86_64 GNU/Linux root@mldonkey:~# uname -a Linux mldonkey 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17) x86_64 GNU/Linux
En el host tenemos que crear un bridge con nuestra tarjeta de red:
auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_fd 0 bridge_maxwait 0
En el fichero de configuración por defecto ponemos que cada máquina tenga una interficie con el bridge:
/etc/lxc/default.conf lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0
Cuando creemos una máquina le pondrá esa configuración, por ejemplo:
/var/lib/lxc/mldonkey/config