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 12 ans
- Version cible changé de 48 à Eole 2.4-dev-1
#2 Mis à jour par Daniel Dehennin il y a environ 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 environ 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 environ 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 environ 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
- 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 Mis à jour par Daniel Dehennin il y a environ 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 environ 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 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 environ 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 :
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 presque 12 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 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 plus de 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 plus de 11 ans
- Echéance changé de 01/02/2013 à 08/02/2013
#13 Mis à jour par Redmine Admin il y a plus de 11 ans
- Echéance changé de 08/02/2013 à 08/03/2013
#14 Mis à jour par Daniel Dehennin il y a plus de 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 plus de 11 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 plus de 11 ans
- Statut changé de Résolu à Accepté
Erreur de fixe dans un commit :-/
#17 Mis à jour par Daniel Dehennin il y a plus de 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 plus de 11 ans
- Echéance changé de 08/03/2013 à 15/03/2013
#19 Mis à jour par Daniel Dehennin il y a plus de 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 plus de 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 plus de 11 ans
- Echéance changé de 22/03/2013 à 29/03/2013
#22 Mis à jour par Joël Cuissinat il y a plus de 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 presque 11 ans
- Version cible changé de Eole 2.4-dev-3 à Eole 2.4-alpha
#27 Mis à jour par Joël Cuissinat il y a presque 11 ans
- Version cible changé de Eole 2.4-alpha à 209
#28 Mis à jour par Daniel Dehennin il y a plus de 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 plus de 10 ans
- Echéance changé de 19/04/2013 à 21/03/2014