Linux Container (LXC) bieten eine performante Möglichkeit zum Betrieb virtualisierter Linuxsysteme. Hierbei wird auf Kernelebene ein Linux mit eingeschränkten Rechten emuliert d.h. damit lassen sich weitere "Linuxe" virtualisieren. Hauptvorteile: Kernel ab 2.6.26 unterstützen Container ohne weitere Patches und es entsteht kaum Overhead, außer zusätzlich benötigter Plattenplatz (welcher aus finanzieller Sicht am günstigsten zu haben ist). Dokumentation: https://wiki.debian.org/LXC = Installation & Konfiguration = * Vorraussetzungen schaffen: {{{ aptitude install lxc bridge-utils debootstrap mkdir /cgroups echo "cgroup /cgroup cgroup defaults 0 0" >> /etc/fstab mount /cgroups }}} * Hier wird die notwendige userspace Software installiert und "cgroup" gemountet * virtuellen Linux Container anlegen: mkdir -p /var/lib/lxc/lxc1 /usr/lib/lxc/templates/lxc-debian -p /var/lib/lxc/lxc1 }}} * An dieser Stelle wird im zunächst erstellten Verzeichnis ein Debiansystem mittels debootstrap installiert. "lxc1" ist der Name des virtuellen Systems. * ''/var/lib/lxc/lxc1'' nach eigenen Wünschen anpassen und folgende Zeilen für das Netzwerk hinzufügen: {{{ lxc.utsname = lxc1 lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 # lxc.network.name = eth0 lxc.network.hwaddr = 00:FF:12:34:56:78 lxc.network.ipv4 = 172.16.2.2/24 }}} * Im virtuellen Linux sollte die Netzwerkadresse in ''etc/network/interfaces'' mit der "lxc.network.ipv4" übereinstimmen. * Netzwerkkrate in Bridgemode betreiben. Dazu in /etc/network/interfaces beispielsweise folgendes schreiben: {{{ #allow-hotplug eth0 #iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_fd 0 bridge_maxwait 0 }}} * eth0 ist in diesem Fall die verwendete Netzwerkarte * Damit ist erstmal alles Grundsätzliche für den Betrieb von Linux Containern vorbereitet. = Test = * Der Aufruf von ''lxc-checkconfig'' sollte eine ähnlich erfreuliche Ausgabe wie diese hervor bringen: {{{ lxc-checkconfig Kernel config /proc/config.gz not found, looking in other places... Found kernel config file /boot/config-2.6.32-5-686 --- 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 namespace: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: missing Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled }}} * memory controller ist im Standard-Debian-Squeeze-Kernel nicht aktiv aber für's erste auch nicht weiter wild. Wer mag baut sich einen eigenen Kernel und aktiviert “General Setup -> Control Group support -> Resource Counters -> Memory Resource Controller for Control Groups * Details dazu finden sich z.B. hier: http://blog.foaa.de/2010/05/lxc-on-debian-squeeze/#building-a-kernel-with-memory-controller = Container anlegen = * lxc-create -n lxc1 -t debian -- -r jessie = im laufenden Betrieb = * Den eben erzeugten Linuxcontainer starten: {{{ lxc-start -n lxc1 }}} * Konsole in das virtuelle System: {{{ lxc-console -n lxc1 }}} * Kann im ersten Moment ein Weilchen dauern, bis die Konsole angezeigt wird. * ein zusätzliches ''-t 1'' nutzt das erste tty, ''-t 2'' das zweite usw... * alternativ läuft in dem Container ein ssh Server... * Stop mittels: {{{ lxc-stop -n lxc1 }}} = weiterführende Links = * wer sich für die Hintergründe vpn Linuxcontainern aka cgroups interessiert findet hier eine ausführlihce Beschreibung: * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/cgroups/cgroups.txt;h=0b33bfe7dde99ecc98df6d0fa4466b3e79eb8f2b;hb=HEAD * ausführliche Beschreibung zum Bridging: * http://qemu-buch.de/d/Netzwerkoptionen/_Virtuelle_Netzwerke_konfigurieren#Bridging_und_Switching