Lxc host

De Cliss XXI
Sauter à la navigation Sauter à la recherche

1. Les paquets necessaires:

  • lxc
  • bridge-utils
  • linux-image-2.6-{amd/686}

2. Verification des capacites du noyau:

  • lxc-checkconfig
    • si ca ne va pas (le noyau grsec chez OVH empeche pas mal de possibilites), on installe le noyau standard (linux-image-2.6...) et on change la configuration de grub (ou lilo) pour que celui ci demarre le bon noyau (cf /etc/default/grub /etc/grub.d/* )

3. montage des cgroups

  • ajoutez la ligne suivante au fichier /etc/fstab comme suit:
none                     /sys/fs/cgroup cgroup defaults 0 0

4. configuration du réseau

  • la configuration utilisée ici est:
    • un bridge virtuel (br1-nat) qui accede a internet via des regles de NAT sur l'interface externe (eth0 ici)
      • iptables -A POSTROUTING -s 10.21.3.0/24 ! -d 10.21.3.0/24 ! -o lo -j SNAT --to-source <IP-publique>
    • chaque lxc aura au moins une interface ethernet (sous la forme eth-<nom_abrege_du_lxc>) dans le bridge
    • si on dispose d'une IP publique réservée pour la machine lxc, on ajoute 2 regles de NAT qui vont mapper l'ensemble

du trafic entre l'IP publique réservée et l'IP privée de la machine lxc.

    • on permet a l'hote de router les paquet: (fichier /etc/sysctl.d/local.conf)
# enable ip forwarding
net.ipv4.ip_forward=1

5. Fabrication d'une machine de base (cf template lxc-debian-squeeze)

  • lxc-create -t <template>
  • modification du fichier de configuration:
lxc.network.type=veth
### on s'accroche au bridge br1-nat au demarrage du container
lxc.network.link=br1-nat
lxc.network.flags=up
### on nomme l'interface histoire de savoir qui est qui (pratique pour faire des capture)
lxc.network.veth.pair=eth0-tsqueeze
lxc.tty = 4
lxc.pts = 1024
### Le rootfs a utiliser
lxc.rootfs = /var/lib/lxc/test-squeeze/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

### systeme de fichier "kernel"
lxc.mount.entry=proc /var/lib/lxc/test-squeeze/rootfs/proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry=devpts /var/lib/lxc/test-squeeze/rootfs/dev/pts devpts defaults 0 0
lxc.mount.entry=sysfs /var/lib/lxc/test-squeeze/rootfs/sys sysfs defaults  0 0

### Pour la route, un exemple d'un montage partage entre l'hote et l'invite
#lxc.mount.entry=/srv/svg /var/lib/lxc/test-squeeze/rootfs/srv/svg none bind 0 0
  • lxc-ls doit montrer la machine nouvellement cree
  • lxc-start -n <machine> pour la demarrer (a faire de preference dans un screen)
  • init 0 dans la machine lxc (invite) pour l'eteindre.