Project

General

Profile

Evolution #2622

Mettre à jour l’utilisation de LXC pour 2.4

Added by Daniel Dehennin about 8 years ago. Updated almost 6 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
developpeurs_eole
Category:
-
Start date:
01/28/2013
Due date:
03/21/2014
% Done:

100%

Spent time:
Distribution:
EOLE 2.4

Description

Ubuntu livre un script d’init pour LXC, il faut voir si cela remplace source:eole-conteneur/lxc.


Related issues

Related to creole - Anomalie #2559: lxc_install.sh modifie /lib/init/fstab dans les conteneurs Fermé 03/11/2013 03/15/2013
Related to creole - Evolution #4317: Revoir la détection du mode conteneur en 2.4 Fermé 01/28/2013 02/08/2013
Related to Distribution EOLE - Evolution #4444: Revoir l’architecture réseau Fermé 11/15/2012 12/06/2013
Related to eole-antivirus - Anomalie #7063: Le service antivirus ne se lance pas Fermé 01/20/2014 01/24/2014
Blocked by creole - Evolution #5052: Génération des conteneurs et de leur configurations Fermé 03/04/2013 03/15/2013
Blocked by python-pyeole - Evolution #5127: Revoir la gestion des paquets par pyeole/pkg.py Fermé 07/23/2013 07/26/2013

Associated revisions

Revision 896051e9 (diff)
Added by Daniel Dehennin over 7 years ago

Le paquet lxc dépend des paquets apparmor et libapparmor1.

  • remove.d/eole.conf: Ne plus supprimer les paquets.

Ref: #2622 @5m

Revision 4d275a64 (diff)
Added by Daniel Dehennin about 7 years ago

Préparation LXC pour EOLE 2.4

L’installation des conteneurs LXC en 2.4 se fera avec la commande
lxc-create et un template d’installation EOLE :

lxc-create n test -t eole - --release precise

L’utilitaire « gen_conteneurs » n’est pas encore utilisable pour EOLE
2.4.

Suppression de l’arborescence source eole-conteneur avec dispersion des
fichiers encore utiles. On supprime le fstab et le répertoire hosts
devenu obsolète avec les nouvelles balises creole.

  • Makefile (eole_lxc_templates_PROG_DIR): Répertoire des templates
    lxc-create.
  • lxc/templates/lxc-eole: Installation d’un conteneur EOLE, basé sur
    lxc-ubuntu.
  • scripts/gen_conteneurs: n’est pas encore utilisable.
  • dicos/01_container.xml: Forcer la variable « mode_conteneur_actif » à
    oui.
    Installer une configuration sshd dans tous les conteneurs.
    Créer un fichier témoin d’activation du mode conteneur.
  • tmpl/lxc-controller.enable: Verrou d’activation du mode conteneur.

Ref: #2622 @5h
Ref: #4317

Revision 400e6e66 (diff)
Added by Daniel Dehennin about 7 years ago

Installation des fichiers pour eole-lxc-controller

  • debian/eole-lxc-controller.install: Fichier à installer par le paquet
  • debian/eole-lxc-controller.postinst: Désactivation du bridge lxc.
  • debian/rules: Surcharger le debhelper dh_install afin d’exclure les
    fichiers appartenenant à « eole-lxc-controller » du
    paquet « eole-server ».

Ref: #2622 @15m

Revision b4cd5fd9 (diff)
Added by Daniel Dehennin almost 7 years ago

Génération des verrous du mode conteneur

La variable « mode_conteneur_actif » n’est gérée que par dictionnaire.

  • dicos/00_common.xml: Instanciation d’un verrou de désactivation.
    Suppression du calcul automatique sur « mode_conteneur_actif ».
  • dicos/01_container.xml: Instanciation du verrou d’activation du mode
    conteneur.
    Surcharge de la variable « mode_conteneur_actif » pour l’activer.
  • tmpl/lxc-controller.lockfile: Fichier servant de verrou.

Ref: #2622 @5m
Ref: #4317 @2m

Revision f9321f4d (diff)
Added by Daniel Dehennin almost 7 years ago

Le template de lock pour LXC doit être dans le paquet « eole-server »

Le fichier debian/rules exclu du paquet « eole-server » tous les fichiers
contenant lxc dans leur nom.

  • tmpl/container.lockfile: Nouveau nom de « lxc-controller.lockfile »
    afin d’être intégré au paquet « eole-server ».
  • dicos/00_common.xml: Changement de nom de « lxc-controller.lockfile »
    à « controller.lockfile ».
  • dicos/01_container.xml: Idem.

Fixes: #2622 @2m

Revision d11e3cac (diff)
Added by Daniel Dehennin almost 7 years ago

Correction du nom de la source des verrous

  • dicos/00_common.xml: La source est « container.lockfile ».
  • dicos/01_container.xml: Idem.

Ref: #2622 @1m

Revision 2eb41833 (diff)
Added by Daniel Dehennin almost 7 years ago

Ajout des templates de configuration des conteneurs LXC

Ces templates sont pris en charge de façon spécifique
par « creole.containers.ContainerTemplateEngine » et ne sont associés à
aucune balise <file/>.

Les conteneurs sont non confinés jusqu’à ce qu’on arrive à configurer
apparmor pour NFS.

  • tmpl/lxc.config: Fichier de configuration LXC.
  • tmpl/lxc.fstab: Montage supplémentaire à l’intérieur du conteneur.
  • tmpl/lxc.interfaces: Fichier « /etc/network/interfaces » qui doit être
    généré avant que le conteneur ne démarre.

Ref: #2622 @2h30m

Revision 605d14d5 (diff)
Added by Daniel Dehennin almost 7 years ago

Les templates n’ont pas accès aux attributs des conteneurs

L’utilisation de « %%current_container.ip » ou
« %%current_container['ip'] » retourne l’erreur :

root - Erreur: Utilisation d'une variable non existante dans le
template de t : u"ip' while searching for 'current_container.ip"
root - Erreur lors de l'instanciation du template de t : 'CreoleGet'
object has no attribute '__getitem__'
  • creole/template.py (CreoleGet.__getitem__): L’accès par notation
    pointée et par crochet requiert « __getitem__ ».

Ref: #2622 @5m

Revision 8140bf80 (diff)
Added by Daniel Dehennin almost 7 years ago

Nouveau script « gen_conteneurs »

  • scripts/gen_conteneurs: Utilisation de « creole.containers » pour
    générer les conteneurs LXC et leurs fichiers configurations.

Ref: #2622 @25m

Revision 6b96fbc3 (diff)
Added by Daniel Dehennin almost 7 years ago

Il faut un « creole » récent pour utiliser « gen_conteneurs »

  • debian/control (Depends): Ajout de la version « 2.4.0-88 »
    sur « creole ».

Ref: #2622 @1m

Revision 8a6f93f9 (diff)
Added by Daniel Dehennin almost 7 years ago

Factorisation de « gen_conteneurs »

  • scripts/gen_conteneurs: Utilisation de « reconfigure.containers() ».

Ref: #2622 @2m

Revision dc5cf564 (diff)
Added by Daniel Dehennin almost 7 years ago

L’outil « gen_conteneurs » requiert « reconfigure.containers() »

  • debian/control (Depends): Version de « creole » 2.4.0-91.

Ref: #2622 @2m

History

#1 Updated by Daniel Dehennin about 8 years ago

  • Target version changed from 48 to Eole 2.4-dev-1

#2 Updated by Daniel Dehennin over 7 years ago

  • Subject changed from Test si le script d’init lxc est nécessaire pour la 2.4 to Mettre à jour l’utilisation de LXC pour 2.4

#3 Updated by Daniel Dehennin over 7 years ago

Le paquet dépend de apparmor et libapparmor1, on ne peut donc plus les supprimer dans source:remove.d/eole.conf

#4 Updated by Daniel Dehennin over 7 years ago

Debian/Ubuntu livre un paquet linux-container qui fourni des template afin de configurer un conteneur LXC (README)

Mais il reste un peut de travail à faire

#5 Updated by Daniel Dehennin over 7 years ago

La commande lxc-create utilise un « template » afin de créer le conteneur, le backingstore par défaut est un répertoire dans /var/lib/lxc/<name>/rootfs.

Le fichier /etc/lxc/lxc.conf est utilisé comme base au fichier de configuration du conteneur si l’option -f <config file> n’est pas utilisée.

Le template ubuntu accepte les agurments suivants :

/usr/lib/lxc/templates/lxc-ubuntu -h|--help [-a|--arch] [-b|--bindhome <user>] [--trim] [-d|--debug]
   [-F | --flush-cache] [-r|--release <release>] [ -S | --auth-key <keyfile>]
release: the ubuntu release (e.g. precise): defaults to host release on ubuntu, otherwise uses latest LTS
trim: make a minimal (faster, but not upgrade-safe) container
bindhome: bind <user>'s home into the container
          The ubuntu user will not be created, and <user> will have
          sudo access.
arch: the container architecture (e.g. amd64): defaults to host arch
auth-key: SSH Public key file to inject into container
  • Il faudra faire un lien /var/lib/lxc => /opt/lxc
  • On peut donc générer une clef SSH sur le maître afin de contrôler directement les conteneurs
  • Un utilisateur nommé ubuntu est créé dans le conteneur avec:
    • un mot de passe par défaut à ubuntu
    • la capacité sudo
    • ~/.ssh/authorized_keys contenant la clef ssh passé à lxc-create
  • debootstrap n’est pas installé par défaut
  • archive.ubuntu.com est le dépôt utilisé par défaut, il est configurable par /etc/default/lxc
  • dnsmasq est utilisé avec une configuration fournie dans /etc/dnsmasq.d/lxc:
    bind-interfaces
    except-interface=lxcbr0
    
  • Le fstab du lxc est défini par la configuration lxc.mount = /var/lib/lxc/<name>/fstab (cf. #2559)
  • stop lxc utilise lxc-shutdown et kill le conteneur après LXC_SHUTDOWN_TIMEOUT=120 (/etc/default/lxc)

L’utilisation de dnsmasq permettrait de conserver les conteneurs en DHCP avec une configuration statique au niveau de dnsmasq, aini, une renumérotation du plan d’adressage nécessiterai :

  1. stop lxc : arrête les conteneur
  2. stop lxc-net : arrête le réseau des conteneurs
  3. perl -pi -e "s/${ANCIEN_RESEAU}/${NOUVEAU_RESEAU}/" /etc/default/lxc
  4. start lxc-net : démarre le réseau des conteneurs avec les nouveaux paramètres
  5. start lxc : démarre les conteneurs

#6 Updated by Daniel Dehennin over 7 years ago

Le démarrage automatique des conteneurs est assuré par la mise en place de liens symboliques dans /etc/lxc/auto/ pointant vers les configurations:

  • Le lien symbolique doit avoir l’extension .conf (c.f. script upstrart)
    root@amonecole:~# ln -s /opt/lxc/test/config /etc/lxc/auto/test.conf
    

#7 Updated by Daniel Dehennin over 7 years ago

La configuration du réseau est faite par /etc/init/lxc-net.conf avec le fichier de configuration /etc/default/lxc et la variable USE_LXC_BRIDGE :

  • true : active le bridge
  • false: utilise un bridge déjà existant ou des macvlan

Un seul réseau LXC est définissable par cette méthode.

La mise en place du bridge ajoute un masquerade de tout ce qui vient du plan d’adressage défini par LXC_NETWORK

La configuration de /etc/network/interface dans le conteneur est fonctionnelle :

auto eth0
iface eth0 inet static
    address 10.5.4.3
    netmask 255.255.255.0
    broadcast 10.5.4.255
    network 10.5.4.0
    gateway 10.5.4.254
    dns-nameservers 10.5.4.2
    dns-search example.net

#8 Updated by Daniel Dehennin over 7 years ago

On peut fournir un modèle de configuration lxc par « type » de conteneurs (1 carte, 2 cartes, bridges, macvlan), par example : /etc/lxc/eole.conf.

L’installation des conteneurs pourra se dérouler lors de l’instanciation ou des reconfigures, comme suit :

  1. pretemplate
    1. création des conteneurs avec un modèle de configuration de base:
      lxc-create -n ${LXC_NAME} -f /etc/lxc/eole.conf -t ubuntu -- --release precise --auth-key /root/.ssh/id_rsa.pub \
          && test -h /etc/lxc/auto/${LXC_NAME}.conf || ln -s /opt/lxc/${LXC_NAME}/config /etc/lxc/auto/${LXC_NAME}.conf
      
    2. Stop les conteneurs et les réseaux si l’ip du bridge change
      if [ "${ip_network_br0}" != $(awk -F'=' '/^LXC_NETWORK/ {print $2}') ]
      then
          stop lxc
          stop lxc-net
      fi
      
  2. templatisation, entre autres :
    1. /etc/default/lxc
    2. /opt/lxc/<name>/rootfs/etc/network/interfaces
    3. /opt/lxc/<name>/config
  3. posttemplate
    1. prise en compte du nouveau réseau si nécessaire
      start lxc-net
      

Il reste à gérer le cas de l’ enregistrement_zephir qui peut vouloir copier des fichiers dans un conteneur.

#9 Updated by Daniel Dehennin over 7 years ago

Il y a un soucis avec la gestion des groupes de conteneurs.

Si un conteneur fait parti d’un groupe de conteneurs :

  1. il ne faut pas générer son @/opt/lxc/<container name>/
  2. Le groupe de conteneur doit avoir toutes les interfaces nécessaires au conteneur: en nombre et en connexion sur les différents réseaux, si :
    • Un groupe de conteneur à 2 interfaces: eth0 connecté au réseau1 et eth1 connecté à réseau2
    • Un conteneur de ce groupe à besoin de 3 interfaces: une connecté à réseau1, une connecté à réseau3 et une connecté à réseau4
      alors le group de conteneur doit avoir 4 interfaces

#10 Updated by Joël Cuissinat about 7 years ago

  • Target version changed from Eole 2.4-dev-1 to Eole 2.4-dev-2

#11 Updated by Benjamin Bohard about 7 years ago

  • Due date set to 02/01/2013
  • Status changed from Nouveau to Accepté
  • Start date changed from 12/19/2011 to 01/28/2013

#12 Updated by Luc Bourdot about 7 years ago

  • Due date changed from 02/01/2013 to 02/08/2013

#13 Updated by Redmine Admin almost 7 years ago

  • Due date changed from 02/08/2013 to 03/08/2013

#14 Updated by Daniel Dehennin almost 7 years ago

  • Assigned To set to developpeurs_eole
  • % Done changed from 0 to 20

On avance un peu la demande car il y a des choses de faites.

#15 Updated by Daniel Dehennin almost 7 years ago

  • Status changed from Accepté to Résolu
  • % Done changed from 20 to 100

#16 Updated by Daniel Dehennin almost 7 years ago

  • Status changed from Résolu to Accepté

Erreur de fixe dans un commit :-/

#17 Updated by Daniel Dehennin almost 7 years ago

  • % Done changed from 100 to 40

Erreur de fixe dans un commit: oubli du %

#18 Updated by Luc Bourdot almost 7 years ago

  • Due date changed from 03/08/2013 to 03/15/2013

#19 Updated by Daniel Dehennin almost 7 years ago

Une API creole permet de générer tous les conteneurs et leurs configurations minimales:

>>> from creole import containers
>>> e = containers.ContainerTemplateEngine() # Chargement du moteur de template
>>> containers.generate_lxc_containers() # Génération des conteneurs avec lxc-create

No config file specified, using the default config
debootstrap est /usr/sbin/debootstrap
Checking cache download in /var/cache/lxc/precise/rootfs-amd64 ... 
Copy /var/cache/lxc/precise/rootfs-amd64 to /var/lib/lxc/web/rootfs ... 
Copying rootfs to /var/lib/lxc/web/rootfs ...
Generating locales...
  fr_FR.UTF-8... done
Generation complete.
Inserted SSH public key from /root/.ssh/id_rsa into /root/.ssh/authorized_keys

##
# The default user is 'root' with password disabled!
##

'eole' template installed
'web' created

No config file specified, using the default config
debootstrap est /usr/sbin/debootstrap
Checking cache download in /var/cache/lxc/precise/rootfs-amd64 ... 
Copy /var/cache/lxc/precise/rootfs-amd64 to /var/lib/lxc/ltspserver/rootfs ... 
Copying rootfs to /var/lib/lxc/ltspserver/rootfs ...
Generating locales...
  fr_FR.UTF-8... done
Generation complete.
Inserted SSH public key from /root/.ssh/id_rsa into /root/.ssh/authorized_keys

##
# The default user is 'root' with password disabled!
##

'eole' template installed
'ltspserver' created

>>> e.instance_lxc_files() # Génération des fichiers /var/lib/lxc/*/{config,fstab,rootfs/etc/network/interfaces}

#20 Updated by Daniel Dehennin almost 7 years ago

  • Due date changed from 03/15/2013 to 03/22/2013
  • % Done changed from 40 to 80

Il reste à faire des vérifications.

#21 Updated by Luc Bourdot almost 7 years ago

  • Due date changed from 03/22/2013 to 03/29/2013

#22 Updated by Joël Cuissinat almost 7 years ago

  • Target version changed from Eole 2.4-dev-2 to Eole 2.4-dev-3

#23 Updated by Luc Bourdot almost 7 years ago

  • Due date changed from 03/29/2013 to 04/05/2013

#24 Updated by Luc Bourdot almost 7 years ago

  • Due date changed from 04/05/2013 to 04/12/2013

#25 Updated by Luc Bourdot almost 7 years ago

  • Due date changed from 04/12/2013 to 04/19/2013

#26 Updated by Joël Cuissinat over 6 years ago

  • Target version changed from Eole 2.4-dev-3 to Eole 2.4-alpha

#27 Updated by Joël Cuissinat over 6 years ago

  • Target version changed from Eole 2.4-alpha to 209

#28 Updated by Daniel Dehennin almost 6 years ago

  • Status changed from Accepté to Fermé
  • Target version changed from 209 to Eole 2.4-RC3
  • % Done changed from 80 to 100

Toutes les demandes liées sont fermées.

#29 Updated by Daniel Dehennin almost 6 years ago

  • Due date changed from 04/19/2013 to 03/21/2014

Also available in: Atom PDF