Depuis la sortie de Debian squeeze , la distribution ne propose plus par défaut la solution de virtualisation openvz . Elle a été remplacée par LXC.
De façon global LXC fournit en environnement virtuel on pourrait le comparer à un chroot mais avec plus de fonctionnalités .
Avantages du produit :
- Pas de correctif noyau comme Openvz
- Ne nécessite pas de matériel particulier
- Meilleure isolation qu'un chroot
Maintenant que nous avons fait un peu le tour on peut s'attaquer à l'installation
Installation
- /*
- aptitude install bridge-utils lxc debootstrap
- */
Création environnement cgroup
- /*
- mkdir /cgroup
- cat cgroup /cgroup cgroup defaults 0 0 >> /etc/fstab
- mount cgroup
- */
Vérification de la configuration
- */
- lxc-checkconfig
- Kernel config /proc/config.gz not found, looking in other places...
- Found kernel config file /boot/config-2.6.32-bpo.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
- Note : Before booting a new kernel, you can check its configuration
- usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
- */
Configuration réseau
- /*
- #auto eth0
- #iface eth0 inet dhcp
- auto br0
- iface br0 inet dhcp
- bridge_ports eth0
- bridge_stp off
- bridge_fd 0
- bridge_maxwait 0
- */
Pour une configuration en ip statique
- /*
- auto br0
- iface br0 inet static
- bridge_ports eth0
- bridge_stp off
- bridge_fd 0
- bridge_maxwait 0
- address 10.10.10.10
- netmask 255.255.255.0
- gateway 10.10.10.254
- dns-nameservers 10.10.10.254
- */
N'oubliez pas de relancer le daemon networking . Vous allez perdre la main ne vous inquiétez pas
Maintenant il faut passer à la configuration du container . Bien-sur nous avons un fichier templates qui pourras nous aider . Les fichiers templates se trouvent dans : /usr/lib/lxc/templates
- /*
- cp /usr/lib/lxc/templates/lxc-debian /usr/local/sbin/
- chmod +x /usr/local/sbin/lxc-debian
- */
Pour information "lxc-debian" est un template d'installation pour une lenny et non une squeeze
Préparation de l'environnement
- /*
- mkdir -p /usr/lib/lxc/templates/test
- lxc-debian -p /usr/lib/lxc/templates/test
- */
Vous devriez avoir ceci
- /*
- :/usr/lib/lxc/templates# lxc-debian -p test
- debootstrap is /usr/sbin/debootstrap
- Checking cache download in /var/cache/lxc/debian/rootfs-i386 ...
- Copying rootfs to test/rootfs...Generating locales (this might take a while)...
- Generation complete.
- Removing any system startup links for /etc/init.d/umountfs ...
- /etc/rc0.d/S40umountfs
- /etc/rc6.d/S40umountfs
- Removing any system startup links for /etc/init.d/hwclock.sh ...
- /etc/rc0.d/K25hwclock.sh
- /etc/rc6.d/K25hwclock.sh
- /etc/rcS.d/S11hwclock.sh
- Removing any system startup links for /etc/init.d/hwclockfirst.sh ...
- /etc/rcS.d/S08hwclockfirst.sh
- __Root password is 'root', please change !__
- */
Personnalisation de notre environnement
- /*
- lxc.tty = 4
- lxc.pts = 1024
- lxc.rootfs = test/rootfs
- lxc.cgroup.devices.deny = a
- # /dev/null and zero
- lxc.cgroup.devices.allow = c 1:3 rwm
- lxc.cgroup.devices.allow = c 1:5 rwm
- # consoles
- lxc.cgroup.devices.allow = c 5:1 rwm
- lxc.cgroup.devices.allow = c 5:0 rwm
- lxc.cgroup.devices.allow = c 4:0 rwm
- lxc.cgroup.devices.allow = c 4:1 rwm
- # /dev/{,u}random
- lxc.cgroup.devices.allow = c 1:9 rwm
- lxc.cgroup.devices.allow = c 1:8 rwm
- lxc.cgroup.devices.allow = c 136:* rwm
- lxc.cgroup.devices.allow = c 5:2 rwm
- # rtc
- lxc.cgroup.devices.allow = c 254:0 rwm
- # mounts point
- lxc.mount.entry=proc test/rootfs/proc proc nodev,noexec,nosuid 0 0
- lxc.mount.entry=devpts test/rootfs/dev/pts devpts defaults 0 0
- lxc.mount.entry=sysfs test/rootfs/sys sysfs defaults 0 0
- lxc.utsname = test
- lxc.network.type = veth
- lxc.network.flags = up
- lxc.network.link = br0
- # lxc.network.name = eth0 (option par défaut)
- lxc.network.hwaddr = 00:FF:12:34:56:78
- lxc.network.ipv4 = 10.10.10.25/24
- */
On peut démarrer notre VM test
- /*
- lxc-start -n test -d
- */
En exécutant ceci vous pouvez obtenir l'erreur suivante
- /*
- lxc-start: no configuration file for '/sbin/init' (may crash the host)
- */
Pour corriger ceci
- /*
- lxc-start -n test -f test/config -d
- */
On obtiens ceci
- /*
- lxc-start -n test -f test/config
- INIT: version 2.86 booting
- Activating swap...done.
- Cleaning up ifupdown....
- Checking file systems...fsck 1.41.3 (12-Oct-2008)
- done.
- Setting kernel variables (/etc/sysctl.conf)...done.
- Mounting local filesystems...done.
- Activating swapfile swap...done.
- Setting up networking....
- Configuring network interfaces...Internet Systems Consortium DHCP Client V3.1.1
- Copyright 2004-2008 Internet Systems Consortium.
- All rights reserved.
- For info, please visit http://www.isc.org/sw/dhcp/
- Listening on LPF/eth0/00:ff:12:34:56:78
- Sending on LPF/eth0/00:ff:12:34:56:78
- Sending on Socket/fallback
- DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
- DHCPOFFER from 10.10.10.254
- DHCPREQUEST on eth0 to 255.255.255.255 port 67
- DHCPACK from 10.10.10.254
- bound to 10.10.10.16 -- renewal in 1270 seconds.
- done.
- INIT: Entering runlevel: 3
- Starting OpenBSD Secure Shell server: sshd.
- Debian GNU/Linux 5.0 test console
- test login:
- */
Comme on peut le voir malgré avoir fixé l'IP en dur dans notre fichier "config" l'ip se récupère par DHCP et ce n'est pas le but (même si ça fonctionne) .
Il faut commenter les lignes 57 et 58 du fichier lxc-debian
- /*
- #auto eth0
- #iface eth0 inet dhcp
- */
Après avoir effectué cette modification il faut supprimer votre VM et la recréer .
Quelques commandes utiles
- /*
- lxc-info -n nom_VM
- lxc-destroy -n nom_VM
- lxc-stop -n nom_VM
- */
Les principales sources utilisées pour l'écriture de ce billet :
http://blog.foaa.de/2010/05/lxc-on-debian-squeeze/
http://jtrancas.wordpress.com/2011/02/10/debian-squeeze-lxc-template/