<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ael-mess</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ael-mess"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Ael-mess"/>
		<updated>2026-05-14T05:00:44Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49607</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49607"/>
				<updated>2019-01-24T13:35:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Amélioration si plus temps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouter à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter le leds, plus un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds, et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finaliser le programme de la Raspberry et installer les librairies qui permettent d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est crée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en Entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initial et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parser en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoie et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieurs à 99 secondes en minutes et celle inférieurs à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49606</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49606"/>
				<updated>2019-01-24T13:35:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Séance 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouter à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter le leds, plus un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds, et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finaliser le programme de la Raspberry et installer les librairies qui permettent d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est crée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en Entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initial et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parser en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoie et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieurs à 99 secondes en minutes et celle inférieurs à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis) &lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49605</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49605"/>
				<updated>2019-01-24T13:34:49Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouter à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter le leds, plus un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds, et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finaliser le programme de la Raspberry et installer les librairies qui permettent d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est crée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en Entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initial et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parser en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoie et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieurs à 99 secondes en minutes et celle inférieurs à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
====Séance 6====&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis) &lt;br /&gt;
&lt;br /&gt;
====Flyer====&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49604</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49604"/>
				<updated>2019-01-24T12:55:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Flyer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouter à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter le leds, plus un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds, et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flyer===&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49603</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49603"/>
				<updated>2019-01-24T12:54:58Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Structuration du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouter à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter le leds, plus un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds, et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flyer===&lt;br /&gt;
&amp;lt;div style=&amp;quot;&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49602</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49602"/>
				<updated>2019-01-24T12:52:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Séance 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouter à notre liste de matériel un transformateur&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flyer===&lt;br /&gt;
&amp;lt;div style=&amp;quot;&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49601</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49601"/>
				<updated>2019-01-24T12:50:36Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Séance 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flyer===&lt;br /&gt;
&amp;lt;div style=&amp;quot;&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49600</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49600"/>
				<updated>2019-01-24T12:42:56Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Carte électronique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flyer===&lt;br /&gt;
&amp;lt;div style=&amp;quot;&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49599</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49599"/>
				<updated>2019-01-24T12:37:02Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Structuration du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmer à travers elle.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir bien avancé sur la carte, nous nous sommes rendu compte que les afficheurs utilisés étaient à cathode commune. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des multiplexeurs. Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flyer===&lt;br /&gt;
&amp;lt;div style=&amp;quot;&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49405</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49405"/>
				<updated>2019-01-21T10:14:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Séance 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds que nous contrôlerons avec 3 GPIO de la Raspberry&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir bien avancé sur la carte, nous nous sommes rendu compte que les afficheurs utilisés étaient à cathode commune. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des multiplexeurs. Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49404</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49404"/>
				<updated>2019-01-21T10:07:09Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Recherche d'un sujet et clarification du cahier des charges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous avons passé du temps lors de cette séance à trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir bien avancé sur la carte, nous nous sommes rendu compte que les afficheurs utilisés étaient à cathode commune. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des multiplexeurs. Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49403</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49403"/>
				<updated>2019-01-21T08:44:03Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Séance 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous avons passé du temps lors de cette séance à trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir bien avancé sur la carte, nous nous sommes rendu compte que les afficheurs utilisés étaient à cathode commune. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des multiplexeurs. Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49402</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49402"/>
				<updated>2019-01-21T08:38:55Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Recherche d'un sujet et clarification du cahier des charges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous avons passé du temps lors de cette séance à trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir bien avancé sur la carte, nous nous sommes rendu compte que les afficheurs utilisés étaient à cathode commune. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des multiplexeurs. Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49223</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49223"/>
				<updated>2019-01-07T17:20:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[Poubelle connectée]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[Cadenas connecté|Cadenas connecté]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Rideau connecté]] || Lijie YAO, Ji YANG&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]] || Naif Mehanna, Maxime Créteur, Amine El Messaoudi&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018| Noeud papillon connecté]] || Moustafa THIAM, Nicolas HAVARD&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Localisation pour Malvoyant ]] || Quentin Hochart, Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Matériel à acquérir =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]]&lt;br /&gt;
|&lt;br /&gt;
* 2*TLC5947 (disponible).&lt;br /&gt;
* Raspberry pi 3 (disponible).&lt;br /&gt;
* [https://www.mouser.fr/ProductDetail/Hammond-Manufacturing/229D12?qs=sGAEpiMZZMumryolnogYRpD5mAKdvhRQ 229D12 transformateur].&lt;br /&gt;
* [https://www.mouser.fr/ProductDetail/STMicroelectronics/L78S05CV?qs=%2fha2pyFaduiWO8JtUWKMAZnjtu7hdXWcILElZCfVsnk%3d L78S05CV regulateur].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49222</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49222"/>
				<updated>2019-01-07T17:20:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[Poubelle connectée]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[Cadenas connecté|Cadenas connecté]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Rideau connecté]] || Lijie YAO, Ji YANG&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]] || Naif Mehanna, Maxime Créteur, Amine El Messaoudi&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018| Noeud papillon connecté]] || Moustafa THIAM, Nicolas HAVARD&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Localisation pour Malvoyant ]] || Quentin Hochart, Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Matériel à acquérir =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]]&lt;br /&gt;
|&lt;br /&gt;
* 2*TLC5947 (disponible).&lt;br /&gt;
* Raspberry pi 3 (disponible).&lt;br /&gt;
* [[https://www.mouser.fr/ProductDetail/Hammond-Manufacturing/229D12?qs=sGAEpiMZZMumryolnogYRpD5mAKdvhRQ 229D12 transformateur]].&lt;br /&gt;
* [[https://www.mouser.fr/ProductDetail/STMicroelectronics/L78S05CV?qs=%2fha2pyFaduiWO8JtUWKMAZnjtu7hdXWcILElZCfVsnk%3d L78S05CV regulateur]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49221</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49221"/>
				<updated>2019-01-07T17:19:44Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[Poubelle connectée]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[Cadenas connecté|Cadenas connecté]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Rideau connecté]] || Lijie YAO, Ji YANG&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]] || Naif Mehanna, Maxime Créteur, Amine El Messaoudi&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018| Noeud papillon connecté]] || Moustafa THIAM, Nicolas HAVARD&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Localisation pour Malvoyant ]] || Quentin Hochart, Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Matériel à acquérir =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]]&lt;br /&gt;
|&lt;br /&gt;
* 2*TLC5947 (disponible).&lt;br /&gt;
* Raspberry pi 3 (disponible).&lt;br /&gt;
* [[https://www.mouser.fr/ProductDetail/Hammond-Manufacturing/229D12?qs=sGAEpiMZZMumryolnogYRpD5mAKdvhRQ|229D12 transformateur]].&lt;br /&gt;
* [[https://www.mouser.fr/ProductDetail/STMicroelectronics/L78S05CV?qs=%2fha2pyFaduiWO8JtUWKMAZnjtu7hdXWcILElZCfVsnk%3d|L78S05CV regulateur]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49218</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49218"/>
				<updated>2019-01-07T17:19:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[Poubelle connectée]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[Cadenas connecté|Cadenas connecté]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Rideau connecté]] || Lijie YAO, Ji YANG&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]] || Naif Mehanna, Maxime Créteur, Amine El Messaoudi&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018| Noeud papillon connecté]] || Moustafa THIAM, Nicolas HAVARD&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Localisation pour Malvoyant ]] || Quentin Hochart, Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Matériel à acquérir =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]]&lt;br /&gt;
|&lt;br /&gt;
* 2*TLC5947 (disponible).&lt;br /&gt;
* Raspberry pi 3 (disponible).&lt;br /&gt;
* [[229D12 transformateur|https://www.mouser.fr/ProductDetail/Hammond-Manufacturing/229D12?qs=sGAEpiMZZMumryolnogYRpD5mAKdvhRQ]].&lt;br /&gt;
* [[L78S05CV regulateur|https://www.mouser.fr/ProductDetail/STMicroelectronics/L78S05CV?qs=%2fha2pyFaduiWO8JtUWKMAZnjtu7hdXWcILElZCfVsnk%3d]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49217</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49217"/>
				<updated>2019-01-07T17:18:26Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[Poubelle connectée]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[Cadenas connecté|Cadenas connecté]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Rideau connecté]] || Lijie YAO, Ji YANG&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]] || Naif Mehanna, Maxime Créteur, Amine El Messaoudi&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018| Noeud papillon connecté]] || Moustafa THIAM, Nicolas HAVARD&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Localisation pour Malvoyant ]] || Quentin Hochart, Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Matériel à acquérir =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]]&lt;br /&gt;
|&lt;br /&gt;
* 2*TLC5947 (disponible)&lt;br /&gt;
* Raspberry pi 3 (disponible)&lt;br /&gt;
* [229D12 transformateur | https://www.mouser.fr/ProductDetail/Hammond-Manufacturing/229D12?qs=sGAEpiMZZMumryolnogYRpD5mAKdvhRQ]&lt;br /&gt;
* [L78S05CV regulateur | https://www.mouser.fr/ProductDetail/STMicroelectronics/L78S05CV?qs=%2fha2pyFaduiWO8JtUWKMAZnjtu7hdXWcILElZCfVsnk%3d]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49216</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49216"/>
				<updated>2019-01-07T17:18:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Matériel à acquérir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[Poubelle connectée]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[Cadenas connecté|Cadenas connecté]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Rideau connecté]] || Lijie YAO, Ji YANG&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]] || Naif Mehanna, Maxime Créteur, Amine El Messaoudi&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018| Noeud papillon connecté]] || Moustafa THIAM, Nicolas HAVARD&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Localisation pour Malvoyant ]] || Quentin Hochart, Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Matériel à acquérir =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]]&lt;br /&gt;
|&lt;br /&gt;
* 2*TLC5947 (disponible)&lt;br /&gt;
* Raspberry pi 3 (disponible)&lt;br /&gt;
* [229D12 transformateur|https://www.mouser.fr/ProductDetail/Hammond-Manufacturing/229D12?qs=sGAEpiMZZMumryolnogYRpD5mAKdvhRQ]&lt;br /&gt;
* [L78S05CV regulateur|https://www.mouser.fr/ProductDetail/STMicroelectronics/L78S05CV?qs=%2fha2pyFaduiWO8JtUWKMAZnjtu7hdXWcILElZCfVsnk%3d]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49215</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49215"/>
				<updated>2019-01-07T17:17:53Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[Poubelle connectée]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[Cadenas connecté|Cadenas connecté]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Rideau connecté]] || Lijie YAO, Ji YANG&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]] || Naif Mehanna, Maxime Créteur, Amine El Messaoudi&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018| Noeud papillon connecté]] || Moustafa THIAM, Nicolas HAVARD&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Localisation pour Malvoyant ]] || Quentin Hochart, Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Matériel à acquérir =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Matériel&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]]&lt;br /&gt;
|&lt;br /&gt;
* 2*TLC5947 (disponible)&lt;br /&gt;
* Raspberry pi 3 (disponible)&lt;br /&gt;
* [229D12 transformateur| https://www.mouser.fr/ProductDetail/Hammond-Manufacturing/229D12?qs=sGAEpiMZZMumryolnogYRpD5mAKdvhRQ]&lt;br /&gt;
* [L78S05CV regulateur| https://www.mouser.fr/ProductDetail/STMicroelectronics/L78S05CV?qs=%2fha2pyFaduiWO8JtUWKMAZnjtu7hdXWcILElZCfVsnk%3d]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019&amp;diff=48358</id>
		<title>TP sysres IMA5sc 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019&amp;diff=48358"/>
				<updated>2018-12-02T19:32:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Plan d'adressage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Elèves &lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G1 | Cahier groupe n°1]]&lt;br /&gt;
| Taky Djeraba &amp;amp; Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G2 | Cahier groupe n°2]]&lt;br /&gt;
|  Jade Dupont &amp;amp; Quentin Boëns&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G3 | Cahier groupe n°3]]&lt;br /&gt;
| Antoine Duquenoy &amp;amp; Anthony Durot&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G4 | Cahier groupe n°4]]&lt;br /&gt;
| Paul Ribeiro &amp;amp; Antoine Untereiner&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G5 | Cahier groupe n°5]]&lt;br /&gt;
| Delobelle Matthieu&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G6 | Cahier groupe n°6]]&lt;br /&gt;
| Simon Feutrier &amp;amp; Antoine Gosse&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G7 | Cahier groupe n°7]]&lt;br /&gt;
| Naif Mehanna &amp;amp; Maxime Créteur&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G8 | Cahier groupe n°8]]&lt;br /&gt;
| Justine Senellart &amp;amp; Rodolphe Toin&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G9 | Cahier groupe n°9]]&lt;br /&gt;
| Amine El Messaoudi &amp;amp; Thibault Cattelain&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G10 | Cahier groupe n°10]]&lt;br /&gt;
| Etienne Profit &amp;amp; Olivier Mahieux&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G12 | Cahier groupe n°11]]&lt;br /&gt;
| Benjamin Canu &amp;amp; Amaury Carval&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G13 | Cahier groupe n°12]]&lt;br /&gt;
| Ji YANG&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Plan d'adressage ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom !! VLAN !! Réseau IPV4 !! Réseau IPV6 !! IP routeur 1 !! IP routeur 2 !! Routeur virtuel !! Nom VM !! IP VM&lt;br /&gt;
|-&lt;br /&gt;
|XEN&lt;br /&gt;
|43&lt;br /&gt;
|193.48.57.176/28&lt;br /&gt;
|2001.660.4401.60C0::/64 &lt;br /&gt;
|193.48.57.188/28&lt;br /&gt;
|193.48.57.189/28&lt;br /&gt;
|193.48.57.190/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 1&lt;br /&gt;
|11&lt;br /&gt;
|10.60.11.0/24&lt;br /&gt;
|2001.660.4401.60C1::/64 &lt;br /&gt;
|10.60.11.252/24&lt;br /&gt;
|10.60.11.253/24&lt;br /&gt;
|10.60.11.254/24&lt;br /&gt;
|Thot&lt;br /&gt;
|193.48.57.177/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 2&lt;br /&gt;
|12&lt;br /&gt;
|10.60.12.0/24&lt;br /&gt;
|2001.660.4401.60C2::/64 &lt;br /&gt;
|10.60.12.252/24&lt;br /&gt;
|10.60.12.253/24&lt;br /&gt;
|10.60.12.254/24&lt;br /&gt;
|Dionysos&lt;br /&gt;
|193.48.57.178/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 3&lt;br /&gt;
|13&lt;br /&gt;
|10.60.13.0/24&lt;br /&gt;
|2001.660.4401.60C3::/64 &lt;br /&gt;
|10.60.13.252/24&lt;br /&gt;
|10.60.13.253/24&lt;br /&gt;
|10.60.13.254/24&lt;br /&gt;
|Pegase&lt;br /&gt;
|193.48.57.179/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 4&lt;br /&gt;
|14&lt;br /&gt;
|10.60.14.0/24&lt;br /&gt;
|2001.660.4401.60C4::/64 &lt;br /&gt;
|10.60.14.252/24&lt;br /&gt;
|10.60.14.253/24&lt;br /&gt;
|10.60.14.254/24&lt;br /&gt;
|Hades&lt;br /&gt;
|193.48.57.180/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 5&lt;br /&gt;
|15&lt;br /&gt;
|10.60.15.0/24&lt;br /&gt;
|2001.660.4401.60C5::/64 &lt;br /&gt;
|10.60.15.252/24&lt;br /&gt;
|10.60.15.253/24&lt;br /&gt;
|10.60.15.254/24&lt;br /&gt;
|Chronos&lt;br /&gt;
|193.48.57.181/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 6&lt;br /&gt;
|16&lt;br /&gt;
|10.60.16.0/24&lt;br /&gt;
|2001.660.4401.60C6::/64 &lt;br /&gt;
|10.60.16.252/24&lt;br /&gt;
|10.60.16.253/24&lt;br /&gt;
|10.60.16.254/24&lt;br /&gt;
|Poseidon&lt;br /&gt;
|193.48.57.182/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 7&lt;br /&gt;
|17&lt;br /&gt;
|10.60.17.0/24&lt;br /&gt;
|2001.660.4401.60C7::/64 &lt;br /&gt;
|10.60.17.252/24&lt;br /&gt;
|10.60.17.253/24&lt;br /&gt;
|10.60.17.254/24&lt;br /&gt;
|Hercule&lt;br /&gt;
|193.48.57.183/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 8&lt;br /&gt;
|18&lt;br /&gt;
|10.60.18.0/24&lt;br /&gt;
|2001.660.4401.60C8::/64 &lt;br /&gt;
|10.60.18.252/24&lt;br /&gt;
|10.60.18.253/24&lt;br /&gt;
|10.60.18.254/24&lt;br /&gt;
|Nyx&lt;br /&gt;
|193.48.57.184/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 9&lt;br /&gt;
|19&lt;br /&gt;
|10.60.19.0/24&lt;br /&gt;
|2001.660.4401.60C9::/64 &lt;br /&gt;
|10.60.19.252/24&lt;br /&gt;
|10.60.19.253/24&lt;br /&gt;
|10.60.19.254/24&lt;br /&gt;
|Aphrodite&lt;br /&gt;
|193.48.57.185/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 10&lt;br /&gt;
|20&lt;br /&gt;
|10.60.20.0/24&lt;br /&gt;
|2001.660.4401.60CA::/64 &lt;br /&gt;
|10.60.20.252/24&lt;br /&gt;
|10.60.20.253/24&lt;br /&gt;
|10.60.20.254/24&lt;br /&gt;
|Hermes&lt;br /&gt;
|193.48.57.186/28&lt;br /&gt;
|-&lt;br /&gt;
|Groupe 11&lt;br /&gt;
|21&lt;br /&gt;
|10.60.21.0/24&lt;br /&gt;
|2001.660.4401.60CB::/64 &lt;br /&gt;
|10.60.21.252/24&lt;br /&gt;
|10.60.21.253/24&lt;br /&gt;
|10.60.21.254/24&lt;br /&gt;
|NOM MACHINE VIRTUELLE&lt;br /&gt;
|193.48.57.187/28&lt;br /&gt;
|-&lt;br /&gt;
|Interconnexion&lt;br /&gt;
|131&lt;br /&gt;
|192.168.222.8/29&lt;br /&gt;
|Router1 : fe80:0000:0042:0002 // Router2 : fe80:0000:0042:0003 // Ecole : fe80:0000:0042:0001&lt;br /&gt;
|192.168.222.9/29&lt;br /&gt;
|192.168.222.10/29&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48111</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48111"/>
				<updated>2018-11-27T09:41:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Activation des interfaces sur les containers&amp;gt; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
Et donc :&lt;br /&gt;
 root@zabeth04:/home/pifou# brctl show&lt;br /&gt;
 bridge name	bridge id		STP enabled	interfaces&lt;br /&gt;
 br-d8330a30a134		8000.0242b8ae38c5	no&lt;br /&gt;
 bridge		8000.00224d7aeaa1	no		eth0&lt;br /&gt;
                                         eth1&lt;br /&gt;
                                         vif4&lt;br /&gt;
 docker0		8000.0242ad165937	no		veth0b1f71b&lt;br /&gt;
 interne		8000.3ee68d5b1e14	no		vif1&lt;br /&gt;
                                         vif2&lt;br /&gt;
                                         vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
==Création d'un conteneur avec Docker :==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Création d'une première image :===&lt;br /&gt;
Nous avons créé un premier container à l'aide la commande :&lt;br /&gt;
 docker run -i -t debian /bin/bash&lt;br /&gt;
Exporte de la variable d'environement hhtp_proxy :&lt;br /&gt;
 export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
Instalation d'un éditeur de texte et d'un serveur web :&lt;br /&gt;
 apt-get install nano vi apache2&lt;br /&gt;
&lt;br /&gt;
===Création de trois conteneurs dans un même réseau :===&lt;br /&gt;
Avec un &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt; nous avons recupérer l'id du conteneur puis :&lt;br /&gt;
 docker commit -m &amp;quot;debian&amp;quot; 367f5e8adddf&lt;br /&gt;
Création d'un réseau :&lt;br /&gt;
 docker network create tham&lt;br /&gt;
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 : &lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -p 80:80 -i -t b7f9916f224e /bin/bash&lt;br /&gt;
Et donc :&lt;br /&gt;
 root@zabeth04:/home/pifou# docker ps&lt;br /&gt;
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES&lt;br /&gt;
 8e4a821cf3a3        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              18 minutes ago      Up 18 minutes                                confident_leakey&lt;br /&gt;
 c5ec790866ae        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              19 minutes ago      Up 19 minutes                                objective_golick&lt;br /&gt;
 b287061163af        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              22 minutes ago      Up 22 minutes       0.0.0.0:80-&amp;gt;80/tcp       objective_bhabha&lt;br /&gt;
 8ee36885e7fb        registry:2          &amp;quot;/entrypoint.sh /etc…&amp;quot;   5 weeks ago         Up 38 minutes       0.0.0.0:5000-&amp;gt;5000/tcp   registry&lt;br /&gt;
&lt;br /&gt;
===Configuration de apache2 :===&lt;br /&gt;
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&lt;br /&gt;
Puis dans &amp;lt;code&amp;gt;/etc/apache2/sites-available/&amp;lt;/code&amp;gt; :&lt;br /&gt;
 &lt;br /&gt;
 root@zabeth04:/etc/apache2/sites-available# cat 000-default.conf&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
 	 ServerName tham1.plil.space&lt;br /&gt;
 	 ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
 	 DocumentRoot /var/www/html/tham1/&lt;br /&gt;
 &lt;br /&gt;
 	 ProxyPass / http://192.168.4.2/&lt;br /&gt;
 	 ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
 	 ProxyRequests Off&lt;br /&gt;
 &lt;br /&gt;
 	 ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
 	 CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
         ServerName tham3.plil.space&lt;br /&gt;
         ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
 	 DocumentRoot /var/www/html/tham3/&lt;br /&gt;
 &lt;br /&gt;
         ProxyPass / http://192.168.4.3/&lt;br /&gt;
         ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
         ProxyRequests Off&lt;br /&gt;
 &lt;br /&gt;
 	 ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
         CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
Après avoir modifer notre fichier html et relancer apache2, nous obtenant bien un résultat identique à celui d'avant.&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
Pour l'interface eth0 :&lt;br /&gt;
&lt;br /&gt;
  address 127.26.145.146/24&lt;br /&gt;
  gateway 192.26.145.253&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
  domain polytech-lille.org&lt;br /&gt;
  search deule.net&lt;br /&gt;
  nameserver 192.48.57.48&lt;br /&gt;
  nameserver 193.48.57.33&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
&lt;br /&gt;
  nano ~/.profile&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;br /&gt;
Dans un premier temps, nous commençons par remplacer les disques défectueux.&lt;br /&gt;
Grâce à la commande&lt;br /&gt;
&lt;br /&gt;
  ssacli ctrl all show config detail&lt;br /&gt;
&lt;br /&gt;
nous pouvons voir que deux disques sont en predictive failure (les disques 3 et 8) et un disque est HS (le disque 4).&lt;br /&gt;
&lt;br /&gt;
Nous procédons au remplacement par des disques neufs.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous ajoutons le disque 6 qui était manquant.&lt;br /&gt;
&lt;br /&gt;
Le nouveau disque en place, nous allons essayer de l'ajouter à la grappe existante.&lt;br /&gt;
&lt;br /&gt;
On entre dans le programme ssacli et on fait un premier était des lieux :&lt;br /&gt;
&lt;br /&gt;
  ctrl all show config&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
On liste ensuite les disques physiques :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot 4 pd all show&lt;br /&gt;
&lt;br /&gt;
Notre disque a ajouter est le 1E:1:6&lt;br /&gt;
&lt;br /&gt;
On l'ajoute alors a la grappe B :&lt;br /&gt;
&lt;br /&gt;
  array B add drives=1E:1:6&lt;br /&gt;
&lt;br /&gt;
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 :&lt;br /&gt;
&lt;br /&gt;
  show&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  controller slot=4 array B delete&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
&lt;br /&gt;
La grappe raid est créée avec succès, nous pouvons d'ailleurs suivre son état :&lt;br /&gt;
&lt;br /&gt;
  array B show&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvons voir que le disque rajouté au slot 6 est également en predictive failure.&lt;br /&gt;
&lt;br /&gt;
Nous procédons à son remplacement, et après quelque instants un show config nous montre que le raid est en reconstruction :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48110</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48110"/>
				<updated>2018-11-27T09:39:45Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Configuration de apache2 : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
==Création d'un conteneur avec Docker :==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Création d'une première image :===&lt;br /&gt;
Nous avons créé un premier container à l'aide la commande :&lt;br /&gt;
 docker run -i -t debian /bin/bash&lt;br /&gt;
Exporte de la variable d'environement hhtp_proxy :&lt;br /&gt;
 export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
Instalation d'un éditeur de texte et d'un serveur web :&lt;br /&gt;
 apt-get install nano vi apache2&lt;br /&gt;
&lt;br /&gt;
===Création de trois conteneurs dans un même réseau :===&lt;br /&gt;
Avec un &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt; nous avons recupérer l'id du conteneur puis :&lt;br /&gt;
 docker commit -m &amp;quot;debian&amp;quot; 367f5e8adddf&lt;br /&gt;
Création d'un réseau :&lt;br /&gt;
 docker network create tham&lt;br /&gt;
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 : &lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -p 80:80 -i -t b7f9916f224e /bin/bash&lt;br /&gt;
Et donc :&lt;br /&gt;
 root@zabeth04:/home/pifou# docker ps&lt;br /&gt;
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES&lt;br /&gt;
 8e4a821cf3a3        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              18 minutes ago      Up 18 minutes                                confident_leakey&lt;br /&gt;
 c5ec790866ae        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              19 minutes ago      Up 19 minutes                                objective_golick&lt;br /&gt;
 b287061163af        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              22 minutes ago      Up 22 minutes       0.0.0.0:80-&amp;gt;80/tcp       objective_bhabha&lt;br /&gt;
 8ee36885e7fb        registry:2          &amp;quot;/entrypoint.sh /etc…&amp;quot;   5 weeks ago         Up 38 minutes       0.0.0.0:5000-&amp;gt;5000/tcp   registry&lt;br /&gt;
&lt;br /&gt;
===Configuration de apache2 :===&lt;br /&gt;
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&lt;br /&gt;
Puis dans &amp;lt;code&amp;gt;/etc/apache2/sites-available/&amp;lt;/code&amp;gt; :&lt;br /&gt;
 &lt;br /&gt;
 root@zabeth04:/etc/apache2/sites-available# cat 000-default.conf&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
 	 ServerName tham1.plil.space&lt;br /&gt;
 	 ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
 	 DocumentRoot /var/www/html/tham1/&lt;br /&gt;
 &lt;br /&gt;
 	 ProxyPass / http://192.168.4.2/&lt;br /&gt;
 	 ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
 	 ProxyRequests Off&lt;br /&gt;
 &lt;br /&gt;
 	 ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
 	 CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
         ServerName tham3.plil.space&lt;br /&gt;
         ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
 	 DocumentRoot /var/www/html/tham3/&lt;br /&gt;
 &lt;br /&gt;
         ProxyPass / http://192.168.4.3/&lt;br /&gt;
         ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
         ProxyRequests Off&lt;br /&gt;
 &lt;br /&gt;
 	 ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
         CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
Après avoir modifer notre fichier html et relancer apache2, nous obtenant bien un résultat identique à celui d'avant.&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
Pour l'interface eth0 :&lt;br /&gt;
&lt;br /&gt;
  address 127.26.145.146/24&lt;br /&gt;
  gateway 192.26.145.253&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
  domain polytech-lille.org&lt;br /&gt;
  search deule.net&lt;br /&gt;
  nameserver 192.48.57.48&lt;br /&gt;
  nameserver 193.48.57.33&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
&lt;br /&gt;
  nano ~/.profile&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;br /&gt;
Dans un premier temps, nous commençons par remplacer les disques défectueux.&lt;br /&gt;
Grâce à la commande&lt;br /&gt;
&lt;br /&gt;
  ssacli ctrl all show config detail&lt;br /&gt;
&lt;br /&gt;
nous pouvons voir que deux disques sont en predictive failure (les disques 3 et 8) et un disque est HS (le disque 4).&lt;br /&gt;
&lt;br /&gt;
Nous procédons au remplacement par des disques neufs.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous ajoutons le disque 6 qui était manquant.&lt;br /&gt;
&lt;br /&gt;
Le nouveau disque en place, nous allons essayer de l'ajouter à la grappe existante.&lt;br /&gt;
&lt;br /&gt;
On entre dans le programme ssacli et on fait un premier était des lieux :&lt;br /&gt;
&lt;br /&gt;
  ctrl all show config&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
On liste ensuite les disques physiques :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot 4 pd all show&lt;br /&gt;
&lt;br /&gt;
Notre disque a ajouter est le 1E:1:6&lt;br /&gt;
&lt;br /&gt;
On l'ajoute alors a la grappe B :&lt;br /&gt;
&lt;br /&gt;
  array B add drives=1E:1:6&lt;br /&gt;
&lt;br /&gt;
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 :&lt;br /&gt;
&lt;br /&gt;
  show&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  controller slot=4 array B delete&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
&lt;br /&gt;
La grappe raid est créée avec succès, nous pouvons d'ailleurs suivre son état :&lt;br /&gt;
&lt;br /&gt;
  array B show&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvons voir que le disque rajouté au slot 6 est également en predictive failure.&lt;br /&gt;
&lt;br /&gt;
Nous procédons à son remplacement, et après quelque instants un show config nous montre que le raid est en reconstruction :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48109</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48109"/>
				<updated>2018-11-27T09:39:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Configuration de apache2 : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
==Création d'un conteneur avec Docker :==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Création d'une première image :===&lt;br /&gt;
Nous avons créé un premier container à l'aide la commande :&lt;br /&gt;
 docker run -i -t debian /bin/bash&lt;br /&gt;
Exporte de la variable d'environement hhtp_proxy :&lt;br /&gt;
 export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
Instalation d'un éditeur de texte et d'un serveur web :&lt;br /&gt;
 apt-get install nano vi apache2&lt;br /&gt;
&lt;br /&gt;
===Création de trois conteneurs dans un même réseau :===&lt;br /&gt;
Avec un &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt; nous avons recupérer l'id du conteneur puis :&lt;br /&gt;
 docker commit -m &amp;quot;debian&amp;quot; 367f5e8adddf&lt;br /&gt;
Création d'un réseau :&lt;br /&gt;
 docker network create tham&lt;br /&gt;
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 : &lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -p 80:80 -i -t b7f9916f224e /bin/bash&lt;br /&gt;
Et donc :&lt;br /&gt;
 root@zabeth04:/home/pifou# docker ps&lt;br /&gt;
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES&lt;br /&gt;
 8e4a821cf3a3        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              18 minutes ago      Up 18 minutes                                confident_leakey&lt;br /&gt;
 c5ec790866ae        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              19 minutes ago      Up 19 minutes                                objective_golick&lt;br /&gt;
 b287061163af        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              22 minutes ago      Up 22 minutes       0.0.0.0:80-&amp;gt;80/tcp       objective_bhabha&lt;br /&gt;
 8ee36885e7fb        registry:2          &amp;quot;/entrypoint.sh /etc…&amp;quot;   5 weeks ago         Up 38 minutes       0.0.0.0:5000-&amp;gt;5000/tcp   registry&lt;br /&gt;
&lt;br /&gt;
===Configuration de apache2 :===&lt;br /&gt;
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&lt;br /&gt;
Puis dans &amp;lt;code&amp;gt;/etc/apache2/sites-available/&amp;lt;/code&amp;gt; :&lt;br /&gt;
 &lt;br /&gt;
 root@zabeth04:/etc/apache2/sites-available# cat 000-default.conf&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
 	 ServerName tham1.plil.space&lt;br /&gt;
 	 ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
 	 DocumentRoot /var/www/html/tham1/&lt;br /&gt;
 &lt;br /&gt;
 	 ProxyPass / http://192.168.4.2/&lt;br /&gt;
 	 ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
 	 ProxyRequests Off&lt;br /&gt;
 &lt;br /&gt;
 	 ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
 	 CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
         ServerName tham3.plil.space&lt;br /&gt;
         ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
 	 DocumentRoot /var/www/html/tham3/&lt;br /&gt;
 &lt;br /&gt;
         ProxyPass / http://192.168.4.3/&lt;br /&gt;
         ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
         ProxyRequests Off&lt;br /&gt;
 &lt;br /&gt;
 	 ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
         CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
Après avoir modifer notre fichier html et relancer apache2, nous obtenant bien un résultat identique à celui d'avant.&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
Pour l'interface eth0 :&lt;br /&gt;
&lt;br /&gt;
  address 127.26.145.146/24&lt;br /&gt;
  gateway 192.26.145.253&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
  domain polytech-lille.org&lt;br /&gt;
  search deule.net&lt;br /&gt;
  nameserver 192.48.57.48&lt;br /&gt;
  nameserver 193.48.57.33&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
&lt;br /&gt;
  nano ~/.profile&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;br /&gt;
Dans un premier temps, nous commençons par remplacer les disques défectueux.&lt;br /&gt;
Grâce à la commande&lt;br /&gt;
&lt;br /&gt;
  ssacli ctrl all show config detail&lt;br /&gt;
&lt;br /&gt;
nous pouvons voir que deux disques sont en predictive failure (les disques 3 et 8) et un disque est HS (le disque 4).&lt;br /&gt;
&lt;br /&gt;
Nous procédons au remplacement par des disques neufs.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous ajoutons le disque 6 qui était manquant.&lt;br /&gt;
&lt;br /&gt;
Le nouveau disque en place, nous allons essayer de l'ajouter à la grappe existante.&lt;br /&gt;
&lt;br /&gt;
On entre dans le programme ssacli et on fait un premier était des lieux :&lt;br /&gt;
&lt;br /&gt;
  ctrl all show config&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
On liste ensuite les disques physiques :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot 4 pd all show&lt;br /&gt;
&lt;br /&gt;
Notre disque a ajouter est le 1E:1:6&lt;br /&gt;
&lt;br /&gt;
On l'ajoute alors a la grappe B :&lt;br /&gt;
&lt;br /&gt;
  array B add drives=1E:1:6&lt;br /&gt;
&lt;br /&gt;
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 :&lt;br /&gt;
&lt;br /&gt;
  show&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  controller slot=4 array B delete&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
&lt;br /&gt;
La grappe raid est créée avec succès, nous pouvons d'ailleurs suivre son état :&lt;br /&gt;
&lt;br /&gt;
  array B show&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvons voir que le disque rajouté au slot 6 est également en predictive failure.&lt;br /&gt;
&lt;br /&gt;
Nous procédons à son remplacement, et après quelque instants un show config nous montre que le raid est en reconstruction :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48107</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48107"/>
				<updated>2018-11-27T09:38:01Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Configuration de apache2 : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
==Création d'un conteneur avec Docker :==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Création d'une première image :===&lt;br /&gt;
Nous avons créé un premier container à l'aide la commande :&lt;br /&gt;
 docker run -i -t debian /bin/bash&lt;br /&gt;
Exporte de la variable d'environement hhtp_proxy :&lt;br /&gt;
 export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
Instalation d'un éditeur de texte et d'un serveur web :&lt;br /&gt;
 apt-get install nano vi apache2&lt;br /&gt;
&lt;br /&gt;
===Création de trois conteneurs dans un même réseau :===&lt;br /&gt;
Avec un &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt; nous avons recupérer l'id du conteneur puis :&lt;br /&gt;
 docker commit -m &amp;quot;debian&amp;quot; 367f5e8adddf&lt;br /&gt;
Création d'un réseau :&lt;br /&gt;
 docker network create tham&lt;br /&gt;
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 : &lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -p 80:80 -i -t b7f9916f224e /bin/bash&lt;br /&gt;
Et donc :&lt;br /&gt;
 root@zabeth04:/home/pifou# docker ps&lt;br /&gt;
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES&lt;br /&gt;
 8e4a821cf3a3        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              18 minutes ago      Up 18 minutes                                confident_leakey&lt;br /&gt;
 c5ec790866ae        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              19 minutes ago      Up 19 minutes                                objective_golick&lt;br /&gt;
 b287061163af        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              22 minutes ago      Up 22 minutes       0.0.0.0:80-&amp;gt;80/tcp       objective_bhabha&lt;br /&gt;
 8ee36885e7fb        registry:2          &amp;quot;/entrypoint.sh /etc…&amp;quot;   5 weeks ago         Up 38 minutes       0.0.0.0:5000-&amp;gt;5000/tcp   registry&lt;br /&gt;
&lt;br /&gt;
===Configuration de apache2 :===&lt;br /&gt;
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&lt;br /&gt;
Puis dans &amp;lt;code&amp;gt;/etc/apache2/sites-available/&amp;lt;/code&amp;gt; :&lt;br /&gt;
 &lt;br /&gt;
 root@zabeth04:/etc/apache2/sites-available# cat 000-default.conf&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	 ServerName tham1.plil.space&lt;br /&gt;
	 ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
	 DocumentRoot /var/www/html/tham1/&lt;br /&gt;
 &lt;br /&gt;
	 ProxyPass / http://192.168.4.2/&lt;br /&gt;
	 ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
	 ProxyRequests Off&lt;br /&gt;
 &lt;br /&gt;
	 ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
	 CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
     ServerName tham3.plil.space&lt;br /&gt;
     ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
	 DocumentRoot /var/www/html/tham3/&lt;br /&gt;
 &lt;br /&gt;
     ProxyPass / http://192.168.4.3/&lt;br /&gt;
     ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
     ProxyRequests Off&lt;br /&gt;
 &lt;br /&gt;
	 ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
     CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
Après avoir modifer notre fichier html et relancer apache2, nous obtenant bien un résultat identique à celui d'avant.&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
Pour l'interface eth0 :&lt;br /&gt;
&lt;br /&gt;
  address 127.26.145.146/24&lt;br /&gt;
  gateway 192.26.145.253&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
  domain polytech-lille.org&lt;br /&gt;
  search deule.net&lt;br /&gt;
  nameserver 192.48.57.48&lt;br /&gt;
  nameserver 193.48.57.33&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
&lt;br /&gt;
  nano ~/.profile&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;br /&gt;
Dans un premier temps, nous commençons par remplacer les disques défectueux.&lt;br /&gt;
Grâce à la commande&lt;br /&gt;
&lt;br /&gt;
  ssacli ctrl all show config detail&lt;br /&gt;
&lt;br /&gt;
nous pouvons voir que deux disques sont en predictive failure (les disques 3 et 8) et un disque est HS (le disque 4).&lt;br /&gt;
&lt;br /&gt;
Nous procédons au remplacement par des disques neufs.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous ajoutons le disque 6 qui était manquant.&lt;br /&gt;
&lt;br /&gt;
Le nouveau disque en place, nous allons essayer de l'ajouter à la grappe existante.&lt;br /&gt;
&lt;br /&gt;
On entre dans le programme ssacli et on fait un premier était des lieux :&lt;br /&gt;
&lt;br /&gt;
  ctrl all show config&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
On liste ensuite les disques physiques :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot 4 pd all show&lt;br /&gt;
&lt;br /&gt;
Notre disque a ajouter est le 1E:1:6&lt;br /&gt;
&lt;br /&gt;
On l'ajoute alors a la grappe B :&lt;br /&gt;
&lt;br /&gt;
  array B add drives=1E:1:6&lt;br /&gt;
&lt;br /&gt;
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 :&lt;br /&gt;
&lt;br /&gt;
  show&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  controller slot=4 array B delete&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
&lt;br /&gt;
La grappe raid est créée avec succès, nous pouvons d'ailleurs suivre son état :&lt;br /&gt;
&lt;br /&gt;
  array B show&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvons voir que le disque rajouté au slot 6 est également en predictive failure.&lt;br /&gt;
&lt;br /&gt;
Nous procédons à son remplacement, et après quelque instants un show config nous montre que le raid est en reconstruction :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48106</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48106"/>
				<updated>2018-11-27T09:37:03Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Création d'un container avec Docker : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
==Création d'un conteneur avec Docker :==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Création d'une première image :===&lt;br /&gt;
Nous avons créé un premier container à l'aide la commande :&lt;br /&gt;
 docker run -i -t debian /bin/bash&lt;br /&gt;
Exporte de la variable d'environement hhtp_proxy :&lt;br /&gt;
 export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
Instalation d'un éditeur de texte et d'un serveur web :&lt;br /&gt;
 apt-get install nano vi apache2&lt;br /&gt;
&lt;br /&gt;
===Création de trois conteneurs dans un même réseau :===&lt;br /&gt;
Avec un &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt; nous avons recupérer l'id du conteneur puis :&lt;br /&gt;
 docker commit -m &amp;quot;debian&amp;quot; 367f5e8adddf&lt;br /&gt;
Création d'un réseau :&lt;br /&gt;
 docker network create tham&lt;br /&gt;
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 : &lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -i -t b7f9916f224e /bin/bash&lt;br /&gt;
 docker run --net tham -p 80:80 -i -t b7f9916f224e /bin/bash&lt;br /&gt;
Et donc :&lt;br /&gt;
 root@zabeth04:/home/pifou# docker ps&lt;br /&gt;
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES&lt;br /&gt;
 8e4a821cf3a3        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              18 minutes ago      Up 18 minutes                                confident_leakey&lt;br /&gt;
 c5ec790866ae        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              19 minutes ago      Up 19 minutes                                objective_golick&lt;br /&gt;
 b287061163af        b7f9916f224e        &amp;quot;/bin/bash&amp;quot;              22 minutes ago      Up 22 minutes       0.0.0.0:80-&amp;gt;80/tcp       objective_bhabha&lt;br /&gt;
 8ee36885e7fb        registry:2          &amp;quot;/entrypoint.sh /etc…&amp;quot;   5 weeks ago         Up 38 minutes       0.0.0.0:5000-&amp;gt;5000/tcp   registry&lt;br /&gt;
&lt;br /&gt;
===Configuration de apache2 :===&lt;br /&gt;
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&lt;br /&gt;
Puis dans &amp;lt;code&amp;gt;/etc/apache2/sites-available/&amp;lt;/code&amp;gt; :&lt;br /&gt;
 root@zabeth04:/etc/apache2/sites-available# cat 000-default.conf&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	ServerName tham1.plil.space&lt;br /&gt;
	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
&lt;br /&gt;
	ProxyPass / http://192.168.4.2/&lt;br /&gt;
	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
	ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName tham3.plil.space&lt;br /&gt;
    ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / http://192.168.4.3/&lt;br /&gt;
    ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
    CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
Après avoir modifer notre fichier html et relancer apache2, nous obtenant bien un résultat identique à celui d'avant.&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
Pour l'interface eth0 :&lt;br /&gt;
&lt;br /&gt;
  address 127.26.145.146/24&lt;br /&gt;
  gateway 192.26.145.253&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
&lt;br /&gt;
  nano /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
  domain polytech-lille.org&lt;br /&gt;
  search deule.net&lt;br /&gt;
  nameserver 192.48.57.48&lt;br /&gt;
  nameserver 193.48.57.33&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
&lt;br /&gt;
  nano ~/.profile&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;br /&gt;
Dans un premier temps, nous commençons par remplacer les disques défectueux.&lt;br /&gt;
Grâce à la commande&lt;br /&gt;
&lt;br /&gt;
  ssacli ctrl all show config detail&lt;br /&gt;
&lt;br /&gt;
nous pouvons voir que deux disques sont en predictive failure (les disques 3 et 8) et un disque est HS (le disque 4).&lt;br /&gt;
&lt;br /&gt;
Nous procédons au remplacement par des disques neufs.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous ajoutons le disque 6 qui était manquant.&lt;br /&gt;
&lt;br /&gt;
Le nouveau disque en place, nous allons essayer de l'ajouter à la grappe existante.&lt;br /&gt;
&lt;br /&gt;
On entre dans le programme ssacli et on fait un premier était des lieux :&lt;br /&gt;
&lt;br /&gt;
  ctrl all show config&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
On liste ensuite les disques physiques :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot 4 pd all show&lt;br /&gt;
&lt;br /&gt;
Notre disque a ajouter est le 1E:1:6&lt;br /&gt;
&lt;br /&gt;
On l'ajoute alors a la grappe B :&lt;br /&gt;
&lt;br /&gt;
  array B add drives=1E:1:6&lt;br /&gt;
&lt;br /&gt;
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 :&lt;br /&gt;
&lt;br /&gt;
  show&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  controller slot=4 array B delete&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
&lt;br /&gt;
La grappe raid est créée avec succès, nous pouvons d'ailleurs suivre son état :&lt;br /&gt;
&lt;br /&gt;
  array B show&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
De cette manière nous pouvons voir que le disque rajouté au slot 6 est également en predictive failure.&lt;br /&gt;
&lt;br /&gt;
Nous procédons à son remplacement, et après quelque instants un show config nous montre que le raid est en reconstruction :&lt;br /&gt;
&lt;br /&gt;
  ctrl slot=4 show config&lt;br /&gt;
&lt;br /&gt;
IMAGE&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48093</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48093"/>
				<updated>2018-11-27T09:11:21Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Création d'un container avec Docker : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec Docker :==&lt;br /&gt;
&lt;br /&gt;
===Création d'une première image :===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48092</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48092"/>
				<updated>2018-11-27T09:10:26Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec Docker :==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48091</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48091"/>
				<updated>2018-11-27T09:09:28Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Séance 2 : TP ASR (suite) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec Docker :==&lt;br /&gt;
&lt;br /&gt;
===&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48090</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48090"/>
				<updated>2018-11-27T09:08:26Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Création d'un container unshare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container avec unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48089</id>
		<title>TP sysres IMA5sc 2018/2019 G9</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G9&amp;diff=48089"/>
				<updated>2018-11-27T09:08:09Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Séance 1 : TP ASR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Séance 1 : TP ASR=&lt;br /&gt;
Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.&lt;br /&gt;
&lt;br /&gt;
==Création d'un container unshare==&lt;br /&gt;
&lt;br /&gt;
===Création de l'image disque===&lt;br /&gt;
  dd if=/dev/zero of=disc1.img bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
===Mise en place du file system===&lt;br /&gt;
  mkfs disc1.img&lt;br /&gt;
&lt;br /&gt;
===Création du point de montage et montage de l'image===&lt;br /&gt;
  mkdir /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Installation du debian dans le point de montage===&lt;br /&gt;
Afin de pouvoir installer debian, il faut que la machine accède à internet :&lt;br /&gt;
&lt;br /&gt;
  export http_proxy=http://proxy.polytech-lille.fr:3128/&lt;br /&gt;
&lt;br /&gt;
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :&lt;br /&gt;
&lt;br /&gt;
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
===Simplification de l'accès===&lt;br /&gt;
  echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; /tmp/rootfs1/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===Clonage des images===&lt;br /&gt;
  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 :&lt;br /&gt;
&lt;br /&gt;
  umount /tmp/rootfs1&lt;br /&gt;
&lt;br /&gt;
On copie l'image :&lt;br /&gt;
&lt;br /&gt;
  cp disc1.img disc2.img&lt;br /&gt;
  cp disc1.img disc3.img&lt;br /&gt;
&lt;br /&gt;
On monte les 3 images :&lt;br /&gt;
&lt;br /&gt;
  mount -o loop disc1.img /tmp/rootfs1&lt;br /&gt;
  mount -o loop disc2.img /tmp/rootfs2&lt;br /&gt;
  mount -o loop disc3.img /tmp/rootfs3&lt;br /&gt;
&lt;br /&gt;
===Lancement des trois containers===&lt;br /&gt;
  unshare nous permet de lancer les trois images précédemment montées :&lt;br /&gt;
&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.&lt;br /&gt;
&lt;br /&gt;
==Mise en place du réseau==&lt;br /&gt;
&lt;br /&gt;
Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.&lt;br /&gt;
&lt;br /&gt;
===Création de 4 interfaces virtuelles===&lt;br /&gt;
&lt;br /&gt;
  ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
  ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
  ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
  ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
===Connexion de chaque interface à une interface eth0 sur les containers===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth0@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif2 netns /proc/&amp;lt;pid2&amp;gt;/ns/net name eth0&lt;br /&gt;
  ip link set eth0@vif3 netns /proc/&amp;lt;pid3&amp;gt;/ns/net name eth0&lt;br /&gt;
&lt;br /&gt;
pid1, pid2, pid3 peuvent être déterminés via la commande :&lt;br /&gt;
  ps aux | grep unshare&lt;br /&gt;
&lt;br /&gt;
===Connexion à eth1 sur le premier container===&lt;br /&gt;
&lt;br /&gt;
  ip link set eth1@vif1 netns /proc/&amp;lt;pid1&amp;gt;/ns/net name eth1&lt;br /&gt;
&lt;br /&gt;
===Création d'un bridge===&lt;br /&gt;
&lt;br /&gt;
  ip link add interne type bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif4 à bridge===&lt;br /&gt;
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge&lt;br /&gt;
&lt;br /&gt;
  ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
===Ajout de vif1, vif2, vif3 à interne===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 master interne&lt;br /&gt;
  ip link set vif2 master interne&lt;br /&gt;
  ip link set vif3 master interne&lt;br /&gt;
&lt;br /&gt;
===Activation de toutes les interfaces===&lt;br /&gt;
&lt;br /&gt;
  ip link set vif1 up&lt;br /&gt;
  ip link set vif2 up&lt;br /&gt;
  ip link set vif3 up&lt;br /&gt;
  ip link set bridge up&lt;br /&gt;
  ip link set interne up&lt;br /&gt;
&lt;br /&gt;
===Attribution des adresses ip===&lt;br /&gt;
&lt;br /&gt;
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth0 192.168.4.1/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID2&amp;gt; -n ip address add dev eth0 192.168.4.2/24&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID3&amp;gt; -n ip address add dev eth0 192.168.4.3/24&lt;br /&gt;
&lt;br /&gt;
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :&lt;br /&gt;
&lt;br /&gt;
  nsenter -t &amp;lt;PID1&amp;gt; -n ip address add dev eth1 172.26.145.234/24&lt;br /&gt;
&lt;br /&gt;
===Activation des interfaces sur les containers&amp;gt;===&lt;br /&gt;
Sur chaque containers, lancer :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth0 up&lt;br /&gt;
  ip link set dev lo up&lt;br /&gt;
&lt;br /&gt;
Ainsi que sur le container 1 :&lt;br /&gt;
&lt;br /&gt;
  ip link set dev eth1 up&lt;br /&gt;
&lt;br /&gt;
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :&lt;br /&gt;
&lt;br /&gt;
  bridge : eth0 eth1 vif4&lt;br /&gt;
&lt;br /&gt;
  interne : vif1 vif2 vif3&lt;br /&gt;
&lt;br /&gt;
=Séance 2 : TP ASR (suite)=&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Attribution des noms de domaine==&lt;br /&gt;
&lt;br /&gt;
Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.&lt;br /&gt;
&lt;br /&gt;
Onglet Domaines, on choisit le domaine plil.space.&lt;br /&gt;
&lt;br /&gt;
Onglet DNS Records, on ajoute un DNS type A :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham2&lt;br /&gt;
  IP : 172.26.145.234&lt;br /&gt;
&lt;br /&gt;
Puis on ajoute deux DNS type Cname :&lt;br /&gt;
&lt;br /&gt;
  Nom : tham1 &amp;amp; tham3&lt;br /&gt;
  Nom d'hote : tham2&lt;br /&gt;
&lt;br /&gt;
De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space&lt;br /&gt;
&lt;br /&gt;
==Configuration d'apache2==&lt;br /&gt;
&lt;br /&gt;
===Fichier conf===&lt;br /&gt;
Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName tham1.plil.space&lt;br /&gt;
  	ServerAdmin webmaster@tham1.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham1/&lt;br /&gt;
  &lt;br /&gt;
  	ProxyPass / http://192.168.4.2/&lt;br /&gt;
  	ProxyPassReverse / http://192.168.4.2/&lt;br /&gt;
  	ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
  	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName tham3.plil.space&lt;br /&gt;
      ServerAdmin webmaster@tham3.plil.space&lt;br /&gt;
  	DocumentRoot /var/www/html/tham3/&lt;br /&gt;
  	&lt;br /&gt;
      ProxyPass / http://192.168.4.3/&lt;br /&gt;
      ProxyPassReverse / http://192.168.4.3/&lt;br /&gt;
      ProxyRequests Off&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
      CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
===Activation des modules proxy et proxy_http===&lt;br /&gt;
&lt;br /&gt;
  a2enmod proxy&lt;br /&gt;
  a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
===Activation du site===&lt;br /&gt;
&lt;br /&gt;
  a2ensite 000-default.conf&lt;br /&gt;
&lt;br /&gt;
Tout est maintenant configuré, on peut donc rebooter apache :&lt;br /&gt;
&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Création d'une page web===&lt;br /&gt;
&lt;br /&gt;
Dans les containers 2 et 3 on créé une simple page web et on reboot apache :&lt;br /&gt;
&lt;br /&gt;
Container 2 :&lt;br /&gt;
&lt;br /&gt;
  cat 1 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Container 3 :&lt;br /&gt;
&lt;br /&gt;
  cat 3 /var/www/html/index.html&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Visualisation de la page web===&lt;br /&gt;
&lt;br /&gt;
On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :&lt;br /&gt;
&lt;br /&gt;
  tham1.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 1&lt;br /&gt;
&lt;br /&gt;
  tham3.plil.space/index.html&lt;br /&gt;
&lt;br /&gt;
firefox affiche 3&lt;br /&gt;
&lt;br /&gt;
11h10 =&amp;gt; Serveurs Web OK (unshare)&lt;br /&gt;
&lt;br /&gt;
12h20 =&amp;gt; Serveurs Web OK (docker)&lt;br /&gt;
&lt;br /&gt;
=Séance 3 : TP PRA=&lt;br /&gt;
Le sujet choisi ici est le sujet n°10 : HP + DAS -&amp;gt; Baie.&lt;br /&gt;
Notre travail consiste à installer un OS Devuan sur un serveur HP et ensuite le connecter à un DAS HP.&lt;br /&gt;
&lt;br /&gt;
==Le matériel==&lt;br /&gt;
Le serveur est un HP XXXXXX, ses caractéristiques sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
XX&lt;br /&gt;
&lt;br /&gt;
Le SAS est un HP XXXXXXX.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Sur le panneau arrière nous constatons qu'il  y a une redondance d'alimentations, et deux connecteurs SAS SFF-8088 (io/out)&lt;br /&gt;
&lt;br /&gt;
==Mise en route du serveur==&lt;br /&gt;
Lors de la mise en route du serveur, nous constations trois problèmes :&lt;br /&gt;
 -Les ventilateurs tournent à  100% sans arrêt.&lt;br /&gt;
 -La LED internal health clignote rouge.&lt;br /&gt;
 -Un bip long est émis périodiquement.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous avons ensuite monté 2x1Go de RAM sur le slot 1 et 3 correspondant au channel A.&lt;br /&gt;
&lt;br /&gt;
Une fois remonté, le serveur bootait correctement.&lt;br /&gt;
&lt;br /&gt;
==Installation de Devuan==&lt;br /&gt;
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é.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Une fois fait, nous pouvons installer notre Devuan sur la grappe avec les configurations classiques (utilisateur pifou et mot de passe habituel).&lt;br /&gt;
&lt;br /&gt;
==Configurations réseau==&lt;br /&gt;
Dans un premier temps, nous avons raccordé l'interface réseau principale du serveur au réseau polytech.&lt;br /&gt;
&lt;br /&gt;
Nous avons trouvé une adresse ip disponible sur le réseau et l'avons configurée dans interfaces :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons configuré les DNS :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Et enfin nous avons ajouté le proxy polytech :&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
Une fois fait, notre serveur avait accès au réseau de polytech.&lt;br /&gt;
&lt;br /&gt;
==Installation des outils HP==&lt;br /&gt;
&lt;br /&gt;
=Séance 4 : TP PRA (Suite)=&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019&amp;diff=47527</id>
		<title>TP sysres IMA5sc 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019&amp;diff=47527"/>
				<updated>2018-11-12T14:51:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ael-mess : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Elèves &lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G1 | Cahier groupe n°1]]&lt;br /&gt;
| Taky Djeraba &amp;amp; Baptiste Cartier&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G2 | Cahier groupe n°2]]&lt;br /&gt;
|  Jade Dupont &amp;amp; Quentin Boëns&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G3 | Cahier groupe n°3]]&lt;br /&gt;
| Antoine Duquenoy &amp;amp; Anthony Durot&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G4 | Cahier groupe n°4]]&lt;br /&gt;
| Paul Ribeiro &amp;amp; Antoine Untereiner&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G5 | Cahier groupe n°5]]&lt;br /&gt;
| Delobelle Matthieu &amp;amp; Yang Ji&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G6 | Cahier groupe n°6]]&lt;br /&gt;
| Simon Feutrier &amp;amp; Antoine Gosse&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G7 | Cahier groupe n°7]]&lt;br /&gt;
| Naif Mehanna &amp;amp; Maxime Créteur&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G8 | Cahier groupe n°8]]&lt;br /&gt;
| Justine Senellart &amp;amp; Rodolphe Toin&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G9 | Cahier groupe n°9]]&lt;br /&gt;
| Amine El Messaoudi &amp;amp; Thibault Cattelain&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G10 | Cahier groupe n°10]]&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G11 | Cahier groupe n°11]]&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G12 | Cahier groupe n°12]]&lt;br /&gt;
| Benjamin Canu &amp;amp; Amaury Carval&lt;br /&gt;
|-&lt;br /&gt;
| [[ TP sysres IMA5sc 2018/2019 G13 | Cahier groupe n°13]]&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ael-mess</name></author>	</entry>

	</feed>