LXC (Linux Container) debian

Publié le 24 juin 2011 par Lmns972 @guestblog

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

  1. /*
  2. aptitude install bridge-utils lxc debootstrap
  3. */

Création environnement cgroup

  1. /*
  2. mkdir /cgroup
  3. cat cgroup /cgroup cgroup defaults 0 0 >> /etc/fstab
  4. mount cgroup
  5. */

Vérification de la configuration

  1. */
  2. lxc-checkconfig
  3. Kernel config /proc/config.gz not found, looking in other places...
  4. Found kernel config file /boot/config-2.6.32-bpo.5-686
  5. --- Namespaces ---
  6. Namespaces: enabled
  7. Utsname namespace: enabled
  8. Ipc namespace: enabled
  9. Pid namespace: enabled
  10. User namespace: enabled
  11. Network namespace: enabled
  12. Multiple /dev/pts instances: enabled
  13. --- Control groups ---
  14. Cgroup: enabled
  15. Cgroup namespace: enabled
  16. Cgroup device: enabled
  17. Cgroup sched: enabled
  18. Cgroup cpu account: enabled
  19. Cgroup memory controller: missing
  20. Cgroup cpuset: enabled
  21. --- Misc ---
  22. Veth pair device: enabled
  23. Macvlan: enabled
  24. Vlan: enabled
  25. File capabilities: enabled
  26. Note : Before booting a new kernel, you can check its configuration
  27. usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
  28. */

Configuration réseau

  1. /*
  2. #auto eth0
  3. #iface eth0 inet dhcp
  4. auto br0
  5. iface br0 inet dhcp
  6. bridge_ports eth0
  7. bridge_stp off
  8. bridge_fd 0
  9. bridge_maxwait 0
  10. */

Pour une configuration en ip statique

  1. /*
  2. auto br0
  3. iface br0 inet static
  4. bridge_ports eth0
  5. bridge_stp off
  6. bridge_fd 0
  7. bridge_maxwait 0
  8. address 10.10.10.10
  9. netmask 255.255.255.0
  10. gateway 10.10.10.254
  11. dns-nameservers 10.10.10.254
  12. */

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

  1. /*
  2. cp /usr/lib/lxc/templates/lxc-debian /usr/local/sbin/
  3. chmod +x /usr/local/sbin/lxc-debian
  4. */

Pour information "lxc-debian" est un template d'installation pour une lenny et non une squeeze

Préparation de l'environnement

  1. /*
  2. mkdir -p /usr/lib/lxc/templates/test
  3. lxc-debian -p /usr/lib/lxc/templates/test
  4. */

Vous devriez avoir ceci

  1. /*
  2. :/usr/lib/lxc/templates# lxc-debian -p test
  3. debootstrap is /usr/sbin/debootstrap
  4. Checking cache download in /var/cache/lxc/debian/rootfs-i386 ...
  5. Copying rootfs to test/rootfs...Generating locales (this might take a while)...
  6. Generation complete.
  7. Removing any system startup links for /etc/init.d/umountfs ...
  8. /etc/rc0.d/S40umountfs
  9. /etc/rc6.d/S40umountfs
  10. Removing any system startup links for /etc/init.d/hwclock.sh ...
  11. /etc/rc0.d/K25hwclock.sh
  12. /etc/rc6.d/K25hwclock.sh
  13. /etc/rcS.d/S11hwclock.sh
  14. Removing any system startup links for /etc/init.d/hwclockfirst.sh ...
  15. /etc/rcS.d/S08hwclockfirst.sh
  16. __Root password is 'root', please change !__
  17. */

Personnalisation de notre environnement

  1. /*
  2. lxc.tty = 4
  3. lxc.pts = 1024
  4. lxc.rootfs = test/rootfs
  5. lxc.cgroup.devices.deny = a
  6. # /dev/null and zero
  7. lxc.cgroup.devices.allow = c 1:3 rwm
  8. lxc.cgroup.devices.allow = c 1:5 rwm
  9. # consoles
  10. lxc.cgroup.devices.allow = c 5:1 rwm
  11. lxc.cgroup.devices.allow = c 5:0 rwm
  12. lxc.cgroup.devices.allow = c 4:0 rwm
  13. lxc.cgroup.devices.allow = c 4:1 rwm
  14. # /dev/{,u}random
  15. lxc.cgroup.devices.allow = c 1:9 rwm
  16. lxc.cgroup.devices.allow = c 1:8 rwm
  17. lxc.cgroup.devices.allow = c 136:* rwm
  18. lxc.cgroup.devices.allow = c 5:2 rwm
  19. # rtc
  20. lxc.cgroup.devices.allow = c 254:0 rwm
  21. # mounts point
  22. lxc.mount.entry=proc test/rootfs/proc proc nodev,noexec,nosuid 0 0
  23. lxc.mount.entry=devpts test/rootfs/dev/pts devpts defaults 0 0
  24. lxc.mount.entry=sysfs test/rootfs/sys sysfs defaults 0 0
  25. lxc.utsname = test
  26. lxc.network.type = veth
  27. lxc.network.flags = up
  28. lxc.network.link = br0
  29. # lxc.network.name = eth0 (option par défaut)
  30. lxc.network.hwaddr = 00:FF:12:34:56:78
  31. lxc.network.ipv4 = 10.10.10.25/24
  32. */

On peut démarrer notre VM test

  1. /*
  2. lxc-start -n test -d
  3. */

En exécutant ceci vous pouvez obtenir l'erreur suivante

  1. /*
  2. lxc-start: no configuration file for '/sbin/init' (may crash the host)
  3. */

Pour corriger ceci

  1. /*
  2. lxc-start -n test -f test/config -d
  3. */

On obtiens ceci

  1. /*
  2. lxc-start -n test -f test/config
  3. INIT: version 2.86 booting
  4. Activating swap...done.
  5. Cleaning up ifupdown....
  6. Checking file systems...fsck 1.41.3 (12-Oct-2008)
  7. done.
  8. Setting kernel variables (/etc/sysctl.conf)...done.
  9. Mounting local filesystems...done.
  10. Activating swapfile swap...done.
  11. Setting up networking....
  12. Configuring network interfaces...Internet Systems Consortium DHCP Client V3.1.1
  13. Copyright 2004-2008 Internet Systems Consortium.
  14. All rights reserved.
  15. For info, please visit http://www.isc.org/sw/dhcp/
  16. Listening on LPF/eth0/00:ff:12:34:56:78
  17. Sending on LPF/eth0/00:ff:12:34:56:78
  18. Sending on Socket/fallback
  19. DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
  20. DHCPOFFER from 10.10.10.254
  21. DHCPREQUEST on eth0 to 255.255.255.255 port 67
  22. DHCPACK from 10.10.10.254
  23. bound to 10.10.10.16 -- renewal in 1270 seconds.
  24. done.
  25. INIT: Entering runlevel: 3
  26. Starting OpenBSD Secure Shell server: sshd.
  27. Debian GNU/Linux 5.0 test console
  28. test login:
  29. */

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

  1. /*
  2. #auto eth0
  3. #iface eth0 inet dhcp
  4. */

Après avoir effectué cette modification il faut supprimer votre VM et la recréer .

Quelques commandes utiles

  1. /*
  2. lxc-info -n nom_VM
  3. lxc-destroy -n nom_VM
  4. lxc-stop -n nom_VM
  5. */

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/