Projet

Général

Profil

Evolution #2622

Mettre à jour l’utilisation de LXC pour 2.4

Ajouté par Daniel Dehennin il y a plus de 12 ans. Mis à jour il y a environ 10 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
developpeurs_eole
Catégorie:
-
Début:
28/01/2013
Echéance:
21/03/2014
% réalisé:

100%

Temps passé:
Distribution:
EOLE 2.4

Description

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


Demandes liées

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

Révisions associées

Révision 896051e9 (diff)
Ajouté par Daniel Dehennin il y a plus de 11 ans

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

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

Ref: #2622 @5m

Révision 4d275a64 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision 400e6e66 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision b4cd5fd9 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision f9321f4d (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision d11e3cac (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision 2eb41833 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision 605d14d5 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision 8140bf80 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision 6b96fbc3 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

Révision 8a6f93f9 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

Factorisation de « gen_conteneurs »

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

Ref: #2622 @2m

Révision dc5cf564 (diff)
Ajouté par Daniel Dehennin il y a environ 11 ans

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

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

Ref: #2622 @2m

Historique

#1 Mis à jour par Daniel Dehennin il y a plus de 12 ans

  • Version cible changé de 48 à Eole 2.4-dev-1

#2 Mis à jour par Daniel Dehennin il y a presque 12 ans

  • Sujet changé de Test si le script d’init lxc est nécessaire pour la 2.4 à Mettre à jour l’utilisation de LXC pour 2.4

#3 Mis à jour par Daniel Dehennin il y a presque 12 ans

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

#4 Mis à jour par Daniel Dehennin il y a presque 12 ans

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 Mis à jour par Daniel Dehennin il y a presque 12 ans

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 Mis à jour par Daniel Dehennin il y a presque 12 ans

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 Mis à jour par Daniel Dehennin il y a presque 12 ans

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 Mis à jour par Daniel Dehennin il y a presque 12 ans

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 Mis à jour par Daniel Dehennin il y a plus de 11 ans

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 Mis à jour par Joël Cuissinat il y a plus de 11 ans

  • Version cible changé de Eole 2.4-dev-1 à Eole 2.4-dev-2

#11 Mis à jour par Benjamin Bohard il y a environ 11 ans

  • Echéance mis à 01/02/2013
  • Statut changé de Nouveau à Accepté
  • Début changé de 19/12/2011 à 28/01/2013

#12 Mis à jour par Luc Bourdot il y a environ 11 ans

  • Echéance changé de 01/02/2013 à 08/02/2013

#13 Mis à jour par Redmine Admin il y a environ 11 ans

  • Echéance changé de 08/02/2013 à 08/03/2013

#14 Mis à jour par Daniel Dehennin il y a environ 11 ans

  • Assigné à mis à developpeurs_eole
  • % réalisé changé de 0 à 20

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

#15 Mis à jour par Daniel Dehennin il y a environ 11 ans

  • Statut changé de Accepté à Résolu
  • % réalisé changé de 20 à 100

#16 Mis à jour par Daniel Dehennin il y a environ 11 ans

  • Statut changé de Résolu à Accepté

Erreur de fixe dans un commit :-/

#17 Mis à jour par Daniel Dehennin il y a environ 11 ans

  • % réalisé changé de 100 à 40

Erreur de fixe dans un commit: oubli du %

#18 Mis à jour par Luc Bourdot il y a environ 11 ans

  • Echéance changé de 08/03/2013 à 15/03/2013

#19 Mis à jour par Daniel Dehennin il y a environ 11 ans

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 Mis à jour par Daniel Dehennin il y a environ 11 ans

  • Echéance changé de 15/03/2013 à 22/03/2013
  • % réalisé changé de 40 à 80

Il reste à faire des vérifications.

#21 Mis à jour par Luc Bourdot il y a environ 11 ans

  • Echéance changé de 22/03/2013 à 29/03/2013

#22 Mis à jour par Joël Cuissinat il y a environ 11 ans

  • Version cible changé de Eole 2.4-dev-2 à Eole 2.4-dev-3

#23 Mis à jour par Luc Bourdot il y a environ 11 ans

  • Echéance changé de 29/03/2013 à 05/04/2013

#24 Mis à jour par Luc Bourdot il y a environ 11 ans

  • Echéance changé de 05/04/2013 à 12/04/2013

#25 Mis à jour par Luc Bourdot il y a environ 11 ans

  • Echéance changé de 12/04/2013 à 19/04/2013

#26 Mis à jour par Joël Cuissinat il y a plus de 10 ans

  • Version cible changé de Eole 2.4-dev-3 à Eole 2.4-alpha

#27 Mis à jour par Joël Cuissinat il y a plus de 10 ans

  • Version cible changé de Eole 2.4-alpha à 209

#28 Mis à jour par Daniel Dehennin il y a environ 10 ans

  • Statut changé de Accepté à Fermé
  • Version cible changé de 209 à Eole 2.4-RC3
  • % réalisé changé de 80 à 100

Toutes les demandes liées sont fermées.

#29 Mis à jour par Daniel Dehennin il y a environ 10 ans

  • Echéance changé de 19/04/2013 à 21/03/2014

Formats disponibles : Atom PDF