IMA4 2016/2017 ECP2

De Wiki de Projets IMA

Présentation du projet

Contexte

L'élève effectue son stage en Roumanie et dispose d'un PC avec une machine virtuelle Linux. Une connexion Internet stable est disponible.

Objectif

Il vous est demandé de concevoir une architecture système et réseau permettant de créer et de détruire facilement des conteneurs pour sites Web personnels. Les conteneurs doivent être créés sans utiliser d'usine à gaz de gestion de conteneurs (typiquement l'environnement Docker).

Description du projet

D'un point de vue système, les conteneurs seront créés en utilisant l'utilitaire Linux unshare. Vous devez créer un conteneur avec son propre espace disque et sa propre table de processus. Vous utiliserez ensuite les cgroups pour limiter la mémoire et l'espace disque accessibles par les conteneurs. Consultez [1] pour plus de détails.

D'un point de vue réseau vous utilisez la commande ip pour créer une interface virtuelle eth0 dans le conteneur en liaison avec une interface miroir dans le système d'exploitation hôte. L'interface miroir se trouvera dans un commutateur logiciel créé par la commande brctl. Les conteneurs seront ainsi accessible par réseau du système hôte. Consultez [2] pour plus détails.

Concernant le système de fichiers du conteneur, vous le construirez en utilisant l'utilitaire debootstrap. Un conteneur doit faire tourner un serveur ssh, un serveur Web et un serveur de base de données.

Vous prendrez soin d'écrire un script de création et de destruction de conteneur mais aussi un script de relance des conteneurs en cas de redémarrage du système hôte. Le script de création s'occupe de créer le système de fichiers et d'affecter une adresse IP. Le script de lancement effectue les commandes nécessaires pour lancer, de façon isolée, le processus initial du conteneur, de créer l'interface réseau du conteneur et de lancer les processus nécessaires à la gestion du site Web.

Un système de redirection de ports doit permettre à un utilisateur de se connecter d'Internet, par ssh, à son conteneur. L'accès aux sites Web se fera par un mandataire inverse tournant sur la machine hôte.

Cahier des charges

Planning prévisionnel

Travail effectué

Pour pouvoir commencer ce projet, je me suis d'abord lancé dans des recherches étant donné que je n'ai aucune connaissance dans ce domaine, la plus grosse partie de ce début de projet portera sur la compréhension du sujet et ce qui m'est réellement demandé de faire.

Après des recherches sur les conteneurs, je suis passé à l'utilitaire linux Unshare. J'ai pour l'instant un peu de mal à comprendre comment celui ci fonctionne.

Je suis actuellement en train d'essayer de créer un conteneur. Je rencontre quelques problèmes. J'utilise le lien fourni pour avancer sur ce sujet.

Lorsque j'utilise unshare, un problème survient avec les options. Il me faut en trouver la cause pour avancer plus loin.

Après avoir cherché pendant un long moment et avoir testé sur un certain nombre de machine, je me suis aperçu que la version de ubuntu j'utilisais sur ma machine virtuel posait certains problèmes. N'arrivant pas à les résoudre, j'ai installé une autre machine virtuelle beaucoup plus récente que la précédente.

J'ai alors pu faire marcher les commandes qui bloquaient. Je suis actuellement sur l'écriture du script de démarrage. Le problème que je rencontre actuellement se situe lorsque je souhaite mettre les processus dans le répertoire tasks directement depuis le script, je n'y arrive pas. J'ai déja pu tester de le faire directement en ligne de commande il n'y a aucun soucis. Il s'avère que l'utilitaire Unshare soit bloquant. Je dois donc mettre celui ci en tâche de fond.

J'ai trouver quelque façon de faire ceci comme d'utiliser & en fin de commande ou encore l'utilitaire Nohup. Le problème que je rencontre actuellement est lorsque que j'utilise la commande &, je n'arrive plus à récupérer le PID du processus. Lorsqu'on le met directement en ligne de commande il apparaît dans la commande. Cependant lorsque la commande est dans le script, je n'ai pas encore trouver le moyen de le récupérer. De plus je ne le vois pas lorsque je fais un ps.

Je résolus mon problème ( je pense ) en supprimant des options de l'utilitaire unshare. J'essaye maintenant de récupérer le PID de celui ci pour pouvoir le mettre dans le tasks mais je rencontre actuellement quelque problème. Je n'arrive pas à écrire dans le tasks pour le moment.

Sources

https://openclassrooms.com/courses/introduction-aux-conteneurs/

Documents