Evolution #2622
Mettre à jour l’utilisation de LXC pour 2.4
Description
Ubuntu livre un script d’init pour LXC, il faut voir si cela remplace source:eole-conteneur/lxc.
Related issues
Associated revisions
Le paquet lxc dépend des paquets apparmor et libapparmor1.
- remove.d/eole.conf: Ne plus supprimer les paquets.
Ref: #2622 @5m
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.
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
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.
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
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
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
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
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
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
Factorisation de « gen_conteneurs »
- scripts/gen_conteneurs: Utilisation de « reconfigure.containers() ».
Ref: #2622 @2m
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 almost 12 years ago
- Target version changed from 48 to Eole 2.4-dev-1
#2 Updated by Daniel Dehennin over 11 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 11 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 11 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 11 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
- un mot de passe par défaut à
debootstrap
n’est pas installé par défautarchive.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
utiliselxc-shutdown
et kill le conteneur aprèsLXC_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 :
stop lxc
: arrête les conteneurstop lxc-net
: arrête le réseau des conteneursperl -pi -e "s/${ANCIEN_RESEAU}/${NOUVEAU_RESEAU}/" /etc/default/lxc
start lxc-net
: démarre le réseau des conteneurs avec les nouveaux paramètresstart lxc
: démarre les conteneurs
#6 Updated by Daniel Dehennin over 11 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 11 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 bridgefalse
: 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 11 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 :
pretemplate
- 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
- 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
- création des conteneurs avec un modèle de configuration de base:
templatisation
, entre autres :/etc/default/lxc
/opt/lxc/<name>/rootfs/etc/network/interfaces
/opt/lxc/<name>/config
posttemplate
- prise en compte du nouveau réseau si nécessaire
start lxc-net
- prise en compte du nouveau réseau si nécessaire
Il reste à gérer le cas de l’ enregistrement_zephir
qui peut vouloir copier des fichiers dans un conteneur.
#9 Updated by Daniel Dehennin about 11 years ago
Il y a un soucis avec la gestion des groupes de conteneurs.
Si un conteneur fait parti d’un groupe de conteneurs :
- il ne faut pas générer son @/opt/lxc/<container name>/
- 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 almost 11 years ago
- Target version changed from Eole 2.4-dev-1 to Eole 2.4-dev-2
#11 Updated by Benjamin Bohard over 10 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 over 10 years ago
- Due date changed from 02/01/2013 to 02/08/2013
#13 Updated by Redmine Admin over 10 years ago
- Due date changed from 02/08/2013 to 03/08/2013
#14 Updated by Daniel Dehennin over 10 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 over 10 years ago
- Status changed from Accepté to Résolu
- % Done changed from 20 to 100
Appliqué par commit f9321f4d969b53dd1e1fcf90c1a5aac2b60ab6a6.
#16 Updated by Daniel Dehennin over 10 years ago
- Status changed from Résolu to Accepté
Erreur de fixe dans un commit :-/
#17 Updated by Daniel Dehennin over 10 years ago
- % Done changed from 100 to 40
Erreur de fixe dans un commit: oubli du %
#18 Updated by Luc Bourdot over 10 years ago
- Due date changed from 03/08/2013 to 03/15/2013
#19 Updated by Daniel Dehennin over 10 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 over 10 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 over 10 years ago
- Due date changed from 03/22/2013 to 03/29/2013
#22 Updated by Joël Cuissinat over 10 years ago
- Target version changed from Eole 2.4-dev-2 to Eole 2.4-dev-3
#23 Updated by Luc Bourdot over 10 years ago
- Due date changed from 03/29/2013 to 04/05/2013
#24 Updated by Luc Bourdot over 10 years ago
- Due date changed from 04/05/2013 to 04/12/2013
#25 Updated by Luc Bourdot over 10 years ago
- Due date changed from 04/12/2013 to 04/19/2013
#26 Updated by Joël Cuissinat about 10 years ago
- Target version changed from Eole 2.4-dev-3 to Eole 2.4-alpha
#27 Updated by Joël Cuissinat about 10 years ago
- Target version changed from Eole 2.4-alpha to 209
#28 Updated by Daniel Dehennin over 9 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 over 9 years ago
- Due date changed from 04/19/2013 to 03/21/2014