TP sysres IMA5sc 2018/2019 G9

De Wiki d'activités IMA
Révision datée du 27 novembre 2018 à 09:37 par Ael-mess (discussion | contributions) (Création d'un container avec Docker :)

Séance 1 : TP ASR

Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.

Création d'un container avec unshare

Création de l'image disque

 dd if=/dev/zero of=disc1.img bs=1024K count=10240

Mise en place du file system

 mkfs disc1.img

Création du point de montage et montage de l'image

 mkdir /tmp/rootfs1
 mount -o loop disc1.img /tmp/rootfs1

Installation du debian dans le point de montage

Afin de pouvoir installer debian, il faut que la machine accède à internet :

 export http_proxy=http://proxy.polytech-lille.fr:3128/

debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :

 debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1

Simplification de l'accès

 echo "proc /proc proc defaults 0 0" >> /tmp/rootfs1/etc/fstab

Clonage des images

 L'image est maintenant prête, nous pouvons maintenant la cloner afin d'en avoir 3 identiques. Pour cela on démonte l'image 1 :
 umount /tmp/rootfs1

On copie l'image :

 cp disc1.img disc2.img
 cp disc1.img disc3.img

On monte les 3 images :

 mount -o loop disc1.img /tmp/rootfs1
 mount -o loop disc2.img /tmp/rootfs2
 mount -o loop disc3.img /tmp/rootfs3

Lancement des trois containers

 unshare nous permet de lancer les trois images précédemment montées :
 unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c "mount /proc ; /bin/bash"
 unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c "mount /proc ; /bin/bash"
 unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c "mount /proc ; /bin/bash"

Les trois containers sont maintenant lancés, nous pouvons travailler dessus.

Mise en place du réseau

Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.

Création de 4 interfaces virtuelles

 ip link add vif1 type veth peer name eth0@vif1
 ip link add vif2 type veth peer name eth0@vif2
 ip link add vif3 type veth peer name eth0@vif3
 ip link add vif4 type veth peer name eth1@vif4

Connexion de chaque interface à une interface eth0 sur les containers

 ip link set eth0@vif1 netns /proc/<pid1>/ns/net name eth0
 ip link set eth0@vif2 netns /proc/<pid2>/ns/net name eth0
 ip link set eth0@vif3 netns /proc/<pid3>/ns/net name eth0

pid1, pid2, pid3 peuvent être déterminés via la commande :

 ps aux | grep unshare

Connexion à eth1 sur le premier container

 ip link set eth1@vif1 netns /proc/<pid1>/ns/net name eth1

Création d'un bridge

 ip link add interne type bridge

Ajout de vif4 à bridge

L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge

 ip link set vif4 master bridge

Ajout de vif1, vif2, vif3 à interne

 ip link set vif1 master interne
 ip link set vif2 master interne
 ip link set vif3 master interne

Activation de toutes les interfaces

 ip link set vif1 up
 ip link set vif2 up
 ip link set vif3 up
 ip link set bridge up
 ip link set interne up

Attribution des adresses ip

On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :

 nsenter -t <PID1> -n ip address add dev eth0 192.168.4.1/24
 nsenter -t <PID2> -n ip address add dev eth0 192.168.4.2/24
 nsenter -t <PID3> -n ip address add dev eth0 192.168.4.3/24

On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :

 nsenter -t <PID1> -n ip address add dev eth1 172.26.145.234/24

Activation des interfaces sur les containers>

Sur chaque containers, lancer :

 ip link set dev eth0 up
 ip link set dev lo up

Ainsi que sur le container 1 :

 ip link set dev eth1 up

Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :

 bridge : eth0 eth1 vif4
 interne : vif1 vif2 vif3

Séance 2 : TP ASR (suite)

Lors de cette séance, nous allons configurer apache2 afin de pouvoir accéder à deux sites web différents hébergés sur les containers 2 et 3, et ce depuis des noms de domaine choisis.

Attribution des noms de domaine

Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.

Onglet Domaines, on choisit le domaine plil.space.

Onglet DNS Records, on ajoute un DNS type A :

 Nom : tham2
 IP : 172.26.145.234

Puis on ajoute deux DNS type Cname :

 Nom : tham1 & tham3
 Nom d'hote : tham2

De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space

Configuration d'apache2

Fichier conf

Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :

 <VirtualHost *:80>
 	ServerName tham1.plil.space
 	ServerAdmin webmaster@tham1.plil.space
 	DocumentRoot /var/www/html/tham1/
 
 	ProxyPass / http://192.168.4.2/
 	ProxyPassReverse / http://192.168.4.2/
 	ProxyRequests Off
 
 	ErrorLog ${APACHE_LOG_DIR}/error.log
 	CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>
 <VirtualHost *:80>
     ServerName tham3.plil.space
     ServerAdmin webmaster@tham3.plil.space
 	DocumentRoot /var/www/html/tham3/
 	
     ProxyPass / http://192.168.4.3/
     ProxyPassReverse / http://192.168.4.3/
     ProxyRequests Off
 
 	ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>

On redirige tham1.plil.space vers le container 2 et tham3.plil.space vers le container 3 via leurs ip (192.168.4.2 et 192.168.4.3)

Activation des modules proxy et proxy_http

 a2enmod proxy
 a2enmod proxy_http

Activation du site

 a2ensite 000-default.conf

Tout est maintenant configuré, on peut donc rebooter apache :

 service apache2 restart

Création d'une page web

Dans les containers 2 et 3 on créé une simple page web et on reboot apache :

Container 2 :

 cat 1 /var/www/html/index.html
 service apache2 restart

Container 3 :

 cat 3 /var/www/html/index.html
 service apache2 restart

Visualisation de la page web

On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :

 tham1.plil.space/index.html

firefox affiche 1

 tham3.plil.space/index.html

firefox affiche 3

Création d'un conteneur avec Docker :

Nos conteneurs et serveur web fonctionnent très bien, mais la procedure de création est relativement longue, c'est pour cela que nous allons utiliser Docker pour recréer nos conteneurs et les gérer.

Création d'une première image :

Nous avons créé un premier container à l'aide la commande :

docker run -i -t debian /bin/bash

Exporte de la variable d'environement hhtp_proxy :

export http_proxy=http://proxy.polytech-lille.fr:3128/

Instalation d'un éditeur de texte et d'un serveur web :

apt-get install nano vi apache2

Création de trois conteneurs dans un même réseau :

Avec un docker ps nous avons recupérer l'id du conteneur puis :

docker commit -m "debian" 367f5e8adddf

Création d'un réseau :

docker network create tham

Création des trois conteneurs à partir de l'image, en veillant à bien relier le port 80 du reverse proxy au port 80 de la machine :

docker run --net tham -i -t b7f9916f224e /bin/bash
docker run --net tham -i -t b7f9916f224e /bin/bash
docker run --net tham -p 80:80 -i -t b7f9916f224e /bin/bash

Et donc :

root@zabeth04:/home/pifou# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
8e4a821cf3a3        b7f9916f224e        "/bin/bash"              18 minutes ago      Up 18 minutes                                confident_leakey
c5ec790866ae        b7f9916f224e        "/bin/bash"              19 minutes ago      Up 19 minutes                                objective_golick
b287061163af        b7f9916f224e        "/bin/bash"              22 minutes ago      Up 22 minutes       0.0.0.0:80->80/tcp       objective_bhabha
8ee36885e7fb        registry:2          "/entrypoint.sh /etc…"   5 weeks ago         Up 38 minutes       0.0.0.0:5000->5000/tcp   registry

Configuration de apache2 :

Comme fait avant nous allons atribuer des noms de domaines aux adresse ip des conteneurs, sachant que l'adresse ip du DNS A est la même que l'adresse ip de la machine physique Puis dans /etc/apache2/sites-available/ :

root@zabeth04:/etc/apache2/sites-available# cat 000-default.conf
<VirtualHost *:80>

ServerName tham1.plil.space ServerAdmin webmaster@tham1.plil.space DocumentRoot /var/www/html/tham1/

ProxyPass / http://192.168.4.2/ ProxyPassReverse / http://192.168.4.2/ ProxyRequests Off

ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
<VirtualHost *:80>
   ServerName tham3.plil.space
   ServerAdmin webmaster@tham3.plil.space

DocumentRoot /var/www/html/tham3/

   ProxyPass / http://192.168.4.3/
   ProxyPassReverse / http://192.168.4.3/
   ProxyRequests Off

ErrorLog ${APACHE_LOG_DIR}/error.log

   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Après avoir modifer notre fichier html et relancer apache2, nous obtenant bien un résultat identique à celui d'avant.

11h10 => Serveurs Web OK (unshare)

12h20 => Serveurs Web OK (docker)

Séance 3 : TP PRA

Le sujet choisi ici est le sujet n°10 : HP + DAS -> Baie. Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.

Le matériel

Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :

XX XX XX XX XX XX

Le SAS est un HP XXXXXXX. Au départ nous pouvons voir qu'il est peuplé de 11 disques durs SATA classiques (pas comme le serveurs qui est peuplé de disques SATA dont le connecteur physique est spécifique HP). Chaque disque dur a une capacité de 1To.

Sur le panneau arrière nous constatons qu'il y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)

Mise en route du serveur

Lors de la mise en route du serveur, nous constations trois problèmes :

-Les ventilateurs tournent à  100% sans arrêt.
-La LED internal health clignote rouge.
-Un bip long est émis périodiquement.

De ce fait, nous avons ouvert le serveur, et une inspection visuelle montrera que ce dernier était dépourvu de RAM. Après consultation du manuel, nous avons vu que la RAM nécessaire était de la DDR2 ECC Registred.

Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.

Une fois remonté, le serveur bootait correctement.

Installation de Devuan

Le serveur peut booter sur un périphérique USB, nous avons donc récupéré une clé avec un Devuan bootable installé dessus. Après avoir mis la clé en premier boot dans le bios, le serveur boot sans souci sur la clé. Le souci que nous allons rencontrer se trouve au moment du partitionnement. De vieilles grappes RAID sont toujours configurées et plus d'actualité, nous allons donc y remédier.

Pour ce faire, nous entrons dans l'utilitaire de configuration RAID (au boot F9 puis F8), supprimons toutes les grappes existantes et en créons une nouvelle en RAID5.

Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).

Configurations réseau

Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.

Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :

 nano /etc/network/interfaces

Pour l'interface eth0 :

 address 127.26.145.146/24
 gateway 192.26.145.253

Ensuite, nous avons configuré les DNS :

 nano /etc/resolv.conf
 domain polytech-lille.org
 search deule.net
 nameserver 192.48.57.48
 nameserver 193.48.57.33

Et enfin nous avons ajouté le proxy polytech :

 nano ~/.profile
 export http_proxy=http://proxy.polytech-lille.fr:3128

Une fois fait, notre serveur avait accès au réseau de polytech.

Installation des outils HP

Séance 4 : TP PRA (Suite)

Dans un premier temps, nous commençons par remplacer les disques défectueux. Grâce à la commande

 ssacli ctrl all show config detail

nous pouvons voir que deux disques sont en predictive failure (les disques 3 et 8) et un disque est HS (le disque 4).

Nous procédons au remplacement par des disques neufs.

Une fois fait, nous ajoutons le disque 6 qui était manquant.

Le nouveau disque en place, nous allons essayer de l'ajouter à la grappe existante.

On entre dans le programme ssacli et on fait un premier était des lieux :

 ctrl all show config

Cela nous permet d'apprendre que nous avons notre grappe de 1TB en Array A et celle de 10TB en Array B, et que notre controlleur est sur le slot 4.

On liste ensuite les disques physiques :

 ctrl slot 4 pd all show

Notre disque a ajouter est le 1E:1:6

On l'ajoute alors a la grappe B :

 array B add drives=1E:1:6

Ceci nous retournera un message d'erreur nous indiquant que le cache est désactivé du fait que la batterie du contrôleur est morte. Ceci est visible en lançant la commande :

 show

IMAGE

Etant donné que nous n'avons pas de données perdre sur les disques, nous allons supprimer la grappe existante et en recréer une nouvelle.

 controller slot=4 array B delete
 ctrl slot=4 create type=ld drives=1E:1:1,1E:1:2,1E:1:3,1E:1:4,1E:1:5,1E:1:6,1E:1:7,1E:1:8,1E:1:9,1E:1:10,1E:1:11,1E:1:12 raid=5

La grappe raid est créée avec succès, nous pouvons d'ailleurs suivre son état :

 array B show
 ctrl slot=4 show config

De cette manière nous pouvons voir que le disque rajouté au slot 6 est également en predictive failure.

Nous procédons à son remplacement, et après quelque instants un show config nous montre que le raid est en reconstruction :

 ctrl slot=4 show config

IMAGE