LXC (Linux Container) debian

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

Pour générer une adresse MAC vous pouvez utiliser le script suivant :

http://www.easyvmx.com/software/easymac.sh

Si le lien venait à disparaître vous pouvez le récupérer à cette adresse

http://www.robertain.com/wp-content/uploads/2013/01/easymac.sh

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/

Related posts

One thought on “LXC (Linux Container) debian

  1. Michel

    Ce tutoriel est très réussi. Pour ma part, j’ai été aidé par des tutoriels en vidéos sur http://www.alphorm.com/tutoriel/formation-en-ligne-lxc pour réussir à maîtriser LXC. En tout cas, merci pour ce partage.

Leave a Comment