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
. Il suffit de se reconnecter , la seule différence c'est qu'on sera connecté via br0 au lieu de eth0 .
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/
Derniers commentaires