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.
Demandes liées
Révisions associées
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
Historique
#1 Mis à jour par Daniel Dehennin il y a plus de 14 ans
- Version cible changé de 48 à Eole 2.4-dev-1
#2 Mis à jour par Daniel Dehennin il y a plus de 13 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 plus de 13 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 plus de 13 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 plus de 13 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é
ubuntuest créé dans le conteneur avec:- un mot de passe par défaut à
ubuntu - la capacité
sudo ~/.ssh/authorized_keyscontenant la clef ssh passé àlxc-create
- un mot de passe par défaut à
debootstrapn’est pas installé par défautarchive.ubuntu.comest 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 lxcutiliselxc-shutdownet 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/lxcstart lxc-net: démarre le réseau des conteneurs avec les nouveaux paramètresstart lxc: démarre les conteneurs
#6 Mis à jour par Daniel Dehennin il y a plus de 13 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 plus de 13 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 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 Mis à jour par Daniel Dehennin il y a plus de 13 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 :
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 Mis à jour par Daniel Dehennin il y a plus de 13 ans
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 Mis à jour par Joël Cuissinat il y a plus de 13 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 13 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 13 ans
- Echéance changé de 01/02/2013 à 08/02/2013
#13 Mis à jour par Redmine Admin il y a environ 13 ans
- Echéance changé de 08/02/2013 à 08/03/2013
#14 Mis à jour par Daniel Dehennin il y a environ 13 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 13 ans
- Statut changé de Accepté à Résolu
- % réalisé changé de 20 à 100
Appliqué par commit f9321f4d969b53dd1e1fcf90c1a5aac2b60ab6a6.
#16 Mis à jour par Daniel Dehennin il y a environ 13 ans
- Statut changé de Résolu à Accepté
Erreur de fixe dans un commit :-/
#17 Mis à jour par Daniel Dehennin il y a environ 13 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 13 ans
- Echéance changé de 08/03/2013 à 15/03/2013
#19 Mis à jour par Daniel Dehennin il y a environ 13 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 13 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 13 ans
- Echéance changé de 22/03/2013 à 29/03/2013
#22 Mis à jour par Joël Cuissinat il y a presque 13 ans
- Version cible changé de Eole 2.4-dev-2 à Eole 2.4-dev-3
#23 Mis à jour par Luc Bourdot il y a presque 13 ans
- Echéance changé de 29/03/2013 à 05/04/2013
#24 Mis à jour par Luc Bourdot il y a presque 13 ans
- Echéance changé de 05/04/2013 à 12/04/2013
#25 Mis à jour par Luc Bourdot il y a presque 13 ans
- Echéance changé de 12/04/2013 à 19/04/2013
#26 Mis à jour par Joël Cuissinat il y a plus de 12 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 12 ans
- Version cible changé de Eole 2.4-alpha à 209
#28 Mis à jour par Daniel Dehennin il y a environ 12 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 12 ans
- Echéance changé de 19/04/2013 à 21/03/2014