Table of Contents

LXC

http://linuxcontainers.org/
https://launchpad.net/ubuntu/+source/lxc

Requisitos

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

Instalacion

https://wiki.debian.org/LXC

Paquetes

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

Cgroups

http://libvirt.org/cgroups.html

1. (Opcional) Instalo systemd y elimino la entrada en /etc/fstab

Creación de máquinas

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

RED

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