<?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=Elopes</id>
	<title>Wiki d&#039;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=Elopes"/>
	<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Elopes"/>
	<updated>2026-11-11T12:54:58Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47018</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47018"/>
		<updated>2018-02-05T15:32:42Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Le système overlayfs pour la sécurisation de configuration/données d&amp;#039;origine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de configuration d&amp;#039;origine==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, /var, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount -t overlay -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work overlay /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette configuration, toutes les modifications qui seront faites au niveau du répertoire /etc vont apparaître sur /data/etc, et le /etc restera intact.&lt;br /&gt;
&lt;br /&gt;
[https://windsock.io/the-overlay-filesystem/ system overlay]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47017</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47017"/>
		<updated>2018-02-05T15:32:07Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Le système overlayfs pour la sécurisation de données d&amp;#039;origine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de configuration/données d&amp;#039;origine==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, /var, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount -t overlay -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work overlay /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette configuration, toutes les modifications qui seront faites au niveau du répertoire /etc vont apparaître sur /data/etc, et le /etc restera intact.&lt;br /&gt;
&lt;br /&gt;
[https://windsock.io/the-overlay-filesystem/ system overlay]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47016</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47016"/>
		<updated>2018-02-05T15:31:42Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Le système overlayfs pour la sécurisation de données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données d&amp;#039;origine==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, /var, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount -t overlay -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work overlay /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette configuration, toutes les modifications qui seront faites au niveau du répertoire /etc vont apparaître sur /data/etc, et le /etc restera intact.&lt;br /&gt;
&lt;br /&gt;
[https://windsock.io/the-overlay-filesystem/ system overlay]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47015</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47015"/>
		<updated>2018-02-05T15:30:29Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, /var, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount -t overlay -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work overlay /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette configuration, toutes les modifications qui seront faites au niveau du répertoire /etc vont apparaître sur /data/etc, et le /etc restera intact.&lt;br /&gt;
&lt;br /&gt;
[https://windsock.io/the-overlay-filesystem/ system overlay]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47014</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47014"/>
		<updated>2018-02-05T15:29:01Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, /var, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount none -t overlay -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette configuration, toutes les modifications qui seront faites au niveau du répertoire /etc vont apparaître sur /data/etc, et le /etc restera intact.&lt;br /&gt;
&lt;br /&gt;
[https://windsock.io/the-overlay-filesystem/ system overlay]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47013</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47013"/>
		<updated>2018-02-05T15:20:27Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, /var, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount none -t overlay -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette configuration, toutes les modifications qui seront faites au niveau du répertoire /etc vont apparaître sur /data/etc, et le /etc restera intact.&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47012</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47012"/>
		<updated>2018-02-05T15:19:40Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, /var, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount none -t overlayfs -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette configuration, toutes les modifications qui seront faites au niveau du répertoire /etc vont apparaître sur /data/etc, et le /etc restera intact.&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47011</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47011"/>
		<updated>2018-02-05T15:18:10Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount none -t overlayfs -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec cette configuration, toutes les modifications qui seront faites au niveau du répertoire /etc vont apparaître sur /data/etc, et le /etc restera intact.&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47010</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47010"/>
		<updated>2018-02-05T15:12:48Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut remonter la partition système en lecture seule: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount / -o ro,remount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous pouvons réaliser le montage overlay de /data/etc en superposition sur /etc, tout en utilisant /data/work comme répertoire de travail interne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount none -t overlayfs -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/work /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47009</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47009"/>
		<updated>2018-02-05T15:09:02Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47008</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47008"/>
		<updated>2018-02-05T15:07:45Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Le système overlayfs pour la sécurisation de données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;br /&gt;
&lt;br /&gt;
Un système overlayfs est un mécanisme de montage permettant de superposer dans un répertoire le contenu de plusieurs autres répertoires.&lt;br /&gt;
La configuration la plus simple est celle de deux répertoires, appelons-les upper et lower que l’on peut imaginer comme des calques contenant des fichiers. Lorsque l’on veut lire le contenu d’un fichier, on regarde tout d’abord sur le calque supérieur – upper – puis, si aucun fichier ne correspond au nom recherché on ira examiner ensuite le contenu du calque inférieur. &lt;br /&gt;
Ce système permet de garder les fichiers originaux du systèmes en créant des copies modifiables.&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&amp;#039;un système overlayfs sous une machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple on s&amp;#039;intéresse au répertoire /etc; on peut faire autrement avec d&amp;#039;autres répertoires du système: /usr, /bin, etc.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il faut monter la partition réservée pour le système overlay:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir /data &lt;br /&gt;
mkfs -t ext4 /dev/xvdd5&lt;br /&gt;
mount /dev/xvdd5 /data&lt;br /&gt;
mkdir /data/etc&lt;br /&gt;
mkdir /data/work     &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47007</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47007"/>
		<updated>2018-02-05T14:54:11Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Soutenance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d&amp;#039;ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d&amp;#039;apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par &amp;#039;copy&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec &amp;#039;notify&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;br /&gt;
&lt;br /&gt;
==Le système overlayfs pour la sécurisation de données==&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47003</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47003"/>
		<updated>2018-02-04T15:26:35Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Sécurisation avec DNSSEC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47002</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47002"/>
		<updated>2018-02-04T15:20:36Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Cryptage des données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o papaye.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47001</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47001"/>
		<updated>2018-02-04T15:18:43Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Cryptage des données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o papaye.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/cypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47000</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47000"/>
		<updated>2018-02-04T15:17:34Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* RAID5 et cryptage des données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o papaye.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/cypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46999</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46999"/>
		<updated>2018-02-04T15:04:41Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Sécurisation via RAID5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o papaye.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46998</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46998"/>
		<updated>2018-02-04T15:03:08Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* RAID5 et cryptage des données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d&amp;#039;un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L&amp;#039;objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d&amp;#039;un système linux (configuration réseau, packages, et dossiers importants) afin de l&amp;#039;utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l&amp;#039;état n-1 voire à l&amp;#039;état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d&amp;#039;un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l&amp;#039;opposé du premier, supprimant la configuration actuelle d&amp;#039;un nouveau système linux pour y coller celle que l&amp;#039;on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L&amp;#039;option -a permet de copier les liens symboliques ainsi que l&amp;#039;arborescence tels qu&amp;#039;ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d&amp;#039;upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d&amp;#039;une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l&amp;#039;aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L&amp;#039;adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L&amp;#039;interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ &amp;#039;mac=00:16:3E:5C:6B:A2, bridge=INSECURE&amp;#039; ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d&amp;#039;une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d&amp;#039;abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_var,xvda3,w&amp;#039;,&lt;br /&gt;
                  &amp;#039;phy:/dev/virtual/ima5-tomate_home,xvda4,w&amp;#039;&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d&amp;#039;abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l&amp;#039;option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d&amp;#039;abord installer bind pour la configuration du DNS ainsi qu&amp;#039;un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Gérer les &amp;#039;glues records&amp;#039;&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l&amp;#039;onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d&amp;#039;abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d&amp;#039;apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o papaye.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec &amp;#039;&amp;#039;lvcreate&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w&amp;#039;,&lt;br /&gt;
&amp;#039;phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w&amp;#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu&amp;#039;il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46861</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46861"/>
		<updated>2018-01-24T14:03:35Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Code de gestion des capteurs et de la liaison série côte arduino */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Cela va nous permettre de faire du Bluetooth via une liaison série.  &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code de gestion de message Bluetooth côté Raspberry pi===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 from bluetooth import *                                                         &lt;br /&gt;
 import time                                                                     &lt;br /&gt;
 import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
 server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
 server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
 #                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
 print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
 ser = serial.Serial(&amp;#039;/dev/ttyUSB0&amp;#039;)                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = ser.readline()                                                   &lt;br /&gt;
        if len(data) == 0: break                                                &lt;br /&gt;
        #print(&amp;quot;received [%s]&amp;quot; % data)                                          &lt;br /&gt;
        client_sock.send(data)                                                  &lt;br /&gt;
 except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock.close()                                                             &lt;br /&gt;
 server_sock.close()                                                             &lt;br /&gt;
 print(&amp;quot;all done&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Code de gestion des capteurs et de la liaison série côté arduino===&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
 #include &amp;quot;Adafruit_TCS34725.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 /* Example code for the Adafruit TCS34725 breakout library */&lt;br /&gt;
&lt;br /&gt;
 /* Connect SCL    to analog 5&lt;br /&gt;
   Connect SDA    to analog 4&lt;br /&gt;
   Connect VDD    to 3.3V DC&lt;br /&gt;
   Connect GROUND to common ground */&lt;br /&gt;
   &lt;br /&gt;
 /* Initialise with default values (int time = 2.4ms, gain = 1x) */&lt;br /&gt;
 // Adafruit_TCS34725 tcs = Adafruit_TCS34725();&lt;br /&gt;
&lt;br /&gt;
 /* Initialise with specific int time and gain values */&lt;br /&gt;
 Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X);&lt;br /&gt;
&lt;br /&gt;
 const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)&lt;br /&gt;
 unsigned int sample;&lt;br /&gt;
 int count = 0;&lt;br /&gt;
&lt;br /&gt;
 void setup(void) {&lt;br /&gt;
   Serial.begin(9600);&lt;br /&gt;
  &lt;br /&gt;
   if (tcs.begin()) {&lt;br /&gt;
     //Serial.println(&amp;quot;Found sensor&amp;quot;);&lt;br /&gt;
   } else {&lt;br /&gt;
     Serial.println(&amp;quot;No TCS34725 found ... check your connections&amp;quot;);&lt;br /&gt;
     while (1);&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   // Now we&amp;#039;re ready to get readings!&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void loop(void) {&lt;br /&gt;
  &lt;br /&gt;
   uint16_t r, g, b,c,lux;&lt;br /&gt;
   tcs.getRawData(&amp;amp;r, &amp;amp;g, &amp;amp;b,&amp;amp;c);&lt;br /&gt;
   lux = tcs.calculateLux(r, g, b);&lt;br /&gt;
   //Serial.println(lux);&lt;br /&gt;
   int val = (r + g +b);&lt;br /&gt;
   int mini = 900;&lt;br /&gt;
   //int maxi = ;&lt;br /&gt;
  &lt;br /&gt;
   if(val &amp;gt;= mini){&lt;br /&gt;
     count ++;&lt;br /&gt;
    // Serial.println(count);&lt;br /&gt;
    &lt;br /&gt;
    if(count == 10) {&lt;br /&gt;
      Serial.print(&amp;quot;Alert: il faut faire une pause!&amp;quot;);&lt;br /&gt;
      Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      count = 0;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
   else count = 0;&lt;br /&gt;
  &lt;br /&gt;
   if(lux &amp;lt;= 300){&lt;br /&gt;
      Serial.print(&amp;quot;Alert: Vous n&amp;#039;etes pas une souve-souris? allummez la lumiere!&amp;quot;);&lt;br /&gt;
      Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
   /*Serial.print(&amp;quot;R: &amp;quot;); Serial.println(r); Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
   Serial.print(&amp;quot;G: &amp;quot;); Serial.println(g); Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
   Serial.print(&amp;quot;B: &amp;quot;); Serial.println(b); Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
   */&lt;br /&gt;
   unsigned long startMillis= millis();  // Start of sample window&lt;br /&gt;
   unsigned int peakToPeak = 0;   // peak-to-peak level&lt;br /&gt;
&lt;br /&gt;
   unsigned int signalMax = 0;&lt;br /&gt;
   unsigned int signalMin = 1024;&lt;br /&gt;
  &lt;br /&gt;
   // collect data for 50 mS&lt;br /&gt;
    while (millis() - startMillis &amp;lt; sampleWindow)&lt;br /&gt;
    {&lt;br /&gt;
      sample = analogRead(0);&lt;br /&gt;
      if (sample &amp;lt; 1024)  // toss out spurious readings&lt;br /&gt;
      {&lt;br /&gt;
         if (sample &amp;gt; signalMax)&lt;br /&gt;
         {&lt;br /&gt;
            signalMax = sample;  // save just the max levels&lt;br /&gt;
         }&lt;br /&gt;
         else if (sample &amp;lt; signalMin)&lt;br /&gt;
         {&lt;br /&gt;
            signalMin = sample;  // save just the min levels&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
    peakToPeak = signalMax - signalMin;  // max - min = peak-peak amplitude&lt;br /&gt;
    double volts = (peakToPeak * 5.0) / 1024;  // convert to volts&lt;br /&gt;
   &lt;br /&gt;
    if(volts &amp;gt;= 3.9){&lt;br /&gt;
      Serial.print(&amp;quot;Alert: trop de bruit!&amp;quot;);&lt;br /&gt;
      Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    //Serial.print(&amp;quot;Volts: &amp;quot;); Serial.println(volts); Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    //Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Script: lancement du service au démarrage de la Raspberry Pi ===&lt;br /&gt;
&lt;br /&gt;
 #/bin/sh                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 up      # start bluetooth module                                              &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 piscan  # put rpi bluetooth pairable and discoverable&lt;br /&gt;
&lt;br /&gt;
 # do it while a usb device is not connected on rpi &lt;br /&gt;
                                        &lt;br /&gt;
 while true ; do                                                                 &lt;br /&gt;
   ls -l /dev/ttyUSB0 &amp;gt; /dev/null 2&amp;gt; /dev/null                                   &lt;br /&gt;
   if [ $? -eq 0 ] ; then break; fi                                              &lt;br /&gt;
   sleep 1                                                                       &lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 # launch the service&lt;br /&gt;
                                                                            &lt;br /&gt;
 /usr/bin/python /home/pi/rfcomm-server.py &amp;amp;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46860</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46860"/>
		<updated>2018-01-24T14:03:03Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Code de gestion de message Bluetooth côté Raspberry pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Cela va nous permettre de faire du Bluetooth via une liaison série.  &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code de gestion de message Bluetooth côté Raspberry pi===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 from bluetooth import *                                                         &lt;br /&gt;
 import time                                                                     &lt;br /&gt;
 import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
 server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
 server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
 #                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
 print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
 ser = serial.Serial(&amp;#039;/dev/ttyUSB0&amp;#039;)                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = ser.readline()                                                   &lt;br /&gt;
        if len(data) == 0: break                                                &lt;br /&gt;
        #print(&amp;quot;received [%s]&amp;quot; % data)                                          &lt;br /&gt;
        client_sock.send(data)                                                  &lt;br /&gt;
 except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock.close()                                                             &lt;br /&gt;
 server_sock.close()                                                             &lt;br /&gt;
 print(&amp;quot;all done&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Code de gestion des capteurs et de la liaison série côte arduino===&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
 #include &amp;quot;Adafruit_TCS34725.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 /* Example code for the Adafruit TCS34725 breakout library */&lt;br /&gt;
&lt;br /&gt;
 /* Connect SCL    to analog 5&lt;br /&gt;
   Connect SDA    to analog 4&lt;br /&gt;
   Connect VDD    to 3.3V DC&lt;br /&gt;
   Connect GROUND to common ground */&lt;br /&gt;
   &lt;br /&gt;
 /* Initialise with default values (int time = 2.4ms, gain = 1x) */&lt;br /&gt;
 // Adafruit_TCS34725 tcs = Adafruit_TCS34725();&lt;br /&gt;
&lt;br /&gt;
 /* Initialise with specific int time and gain values */&lt;br /&gt;
 Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X);&lt;br /&gt;
&lt;br /&gt;
 const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)&lt;br /&gt;
 unsigned int sample;&lt;br /&gt;
 int count = 0;&lt;br /&gt;
&lt;br /&gt;
 void setup(void) {&lt;br /&gt;
   Serial.begin(9600);&lt;br /&gt;
  &lt;br /&gt;
   if (tcs.begin()) {&lt;br /&gt;
     //Serial.println(&amp;quot;Found sensor&amp;quot;);&lt;br /&gt;
   } else {&lt;br /&gt;
     Serial.println(&amp;quot;No TCS34725 found ... check your connections&amp;quot;);&lt;br /&gt;
     while (1);&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   // Now we&amp;#039;re ready to get readings!&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void loop(void) {&lt;br /&gt;
  &lt;br /&gt;
   uint16_t r, g, b,c,lux;&lt;br /&gt;
   tcs.getRawData(&amp;amp;r, &amp;amp;g, &amp;amp;b,&amp;amp;c);&lt;br /&gt;
   lux = tcs.calculateLux(r, g, b);&lt;br /&gt;
   //Serial.println(lux);&lt;br /&gt;
   int val = (r + g +b);&lt;br /&gt;
   int mini = 900;&lt;br /&gt;
   //int maxi = ;&lt;br /&gt;
  &lt;br /&gt;
   if(val &amp;gt;= mini){&lt;br /&gt;
     count ++;&lt;br /&gt;
    // Serial.println(count);&lt;br /&gt;
    &lt;br /&gt;
    if(count == 10) {&lt;br /&gt;
      Serial.print(&amp;quot;Alert: il faut faire une pause!&amp;quot;);&lt;br /&gt;
      Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      count = 0;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
   else count = 0;&lt;br /&gt;
  &lt;br /&gt;
   if(lux &amp;lt;= 300){&lt;br /&gt;
      Serial.print(&amp;quot;Alert: Vous n&amp;#039;etes pas une souve-souris? allummez la lumiere!&amp;quot;);&lt;br /&gt;
      Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
   /*Serial.print(&amp;quot;R: &amp;quot;); Serial.println(r); Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
   Serial.print(&amp;quot;G: &amp;quot;); Serial.println(g); Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
   Serial.print(&amp;quot;B: &amp;quot;); Serial.println(b); Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
   */&lt;br /&gt;
   unsigned long startMillis= millis();  // Start of sample window&lt;br /&gt;
   unsigned int peakToPeak = 0;   // peak-to-peak level&lt;br /&gt;
&lt;br /&gt;
   unsigned int signalMax = 0;&lt;br /&gt;
   unsigned int signalMin = 1024;&lt;br /&gt;
  &lt;br /&gt;
   // collect data for 50 mS&lt;br /&gt;
    while (millis() - startMillis &amp;lt; sampleWindow)&lt;br /&gt;
    {&lt;br /&gt;
      sample = analogRead(0);&lt;br /&gt;
      if (sample &amp;lt; 1024)  // toss out spurious readings&lt;br /&gt;
      {&lt;br /&gt;
         if (sample &amp;gt; signalMax)&lt;br /&gt;
         {&lt;br /&gt;
            signalMax = sample;  // save just the max levels&lt;br /&gt;
         }&lt;br /&gt;
         else if (sample &amp;lt; signalMin)&lt;br /&gt;
         {&lt;br /&gt;
            signalMin = sample;  // save just the min levels&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
    peakToPeak = signalMax - signalMin;  // max - min = peak-peak amplitude&lt;br /&gt;
    double volts = (peakToPeak * 5.0) / 1024;  // convert to volts&lt;br /&gt;
   &lt;br /&gt;
    if(volts &amp;gt;= 3.9){&lt;br /&gt;
      Serial.print(&amp;quot;Alert: trop de bruit!&amp;quot;);&lt;br /&gt;
      Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    //Serial.print(&amp;quot;Volts: &amp;quot;); Serial.println(volts); Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    //Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Script: lancement du service au démarrage de la Raspberry Pi ===&lt;br /&gt;
&lt;br /&gt;
 #/bin/sh                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 up      # start bluetooth module                                              &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 piscan  # put rpi bluetooth pairable and discoverable&lt;br /&gt;
&lt;br /&gt;
 # do it while a usb device is not connected on rpi &lt;br /&gt;
                                        &lt;br /&gt;
 while true ; do                                                                 &lt;br /&gt;
   ls -l /dev/ttyUSB0 &amp;gt; /dev/null 2&amp;gt; /dev/null                                   &lt;br /&gt;
   if [ $? -eq 0 ] ; then break; fi                                              &lt;br /&gt;
   sleep 1                                                                       &lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 # launch the service&lt;br /&gt;
                                                                            &lt;br /&gt;
 /usr/bin/python /home/pi/rfcomm-server.py &amp;amp;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46857</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46857"/>
		<updated>2018-01-24T11:39:51Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Script: lancement du service au démarrage de la Raspberry Pi via rc.local */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Cela va nous permettre de faire du Bluetooth via une liaison série.  &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code de gestion de message Bluetooth côté Raspberry pi===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 from bluetooth import *                                                         &lt;br /&gt;
 import time                                                                     &lt;br /&gt;
 import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
 server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
 server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
 #                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
 print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
 ser = serial.Serial(&amp;#039;/dev/ttyUSB0&amp;#039;)                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = ser.readline()                                                   &lt;br /&gt;
        if len(data) == 0: break                                                &lt;br /&gt;
        #print(&amp;quot;received [%s]&amp;quot; % data)                                          &lt;br /&gt;
        client_sock.send(data)                                                  &lt;br /&gt;
 except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock.close()                                                             &lt;br /&gt;
 server_sock.close()                                                             &lt;br /&gt;
 print(&amp;quot;all done&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Script: lancement du service au démarrage de la Raspberry Pi ===&lt;br /&gt;
&lt;br /&gt;
 #/bin/sh                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 up      # start bluetooth module                                              &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 piscan  # put rpi bluetooth pairable and discoverable&lt;br /&gt;
&lt;br /&gt;
 # do it while a usb device is not connected on rpi &lt;br /&gt;
                                        &lt;br /&gt;
 while true ; do                                                                 &lt;br /&gt;
   ls -l /dev/ttyUSB0 &amp;gt; /dev/null 2&amp;gt; /dev/null                                   &lt;br /&gt;
   if [ $? -eq 0 ] ; then break; fi                                              &lt;br /&gt;
   sleep 1                                                                       &lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 # launch the service&lt;br /&gt;
                                                                            &lt;br /&gt;
 /usr/bin/python /home/pi/rfcomm-server.py &amp;amp;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46856</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46856"/>
		<updated>2018-01-24T11:39:37Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Script: lancement du service au démarrage de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Cela va nous permettre de faire du Bluetooth via une liaison série.  &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code de gestion de message Bluetooth côté Raspberry pi===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 from bluetooth import *                                                         &lt;br /&gt;
 import time                                                                     &lt;br /&gt;
 import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
 server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
 server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
 #                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
 print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
 ser = serial.Serial(&amp;#039;/dev/ttyUSB0&amp;#039;)                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = ser.readline()                                                   &lt;br /&gt;
        if len(data) == 0: break                                                &lt;br /&gt;
        #print(&amp;quot;received [%s]&amp;quot; % data)                                          &lt;br /&gt;
        client_sock.send(data)                                                  &lt;br /&gt;
 except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock.close()                                                             &lt;br /&gt;
 server_sock.close()                                                             &lt;br /&gt;
 print(&amp;quot;all done&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Script: lancement du service au démarrage de la Raspberry Pi via rc.local===&lt;br /&gt;
&lt;br /&gt;
 #/bin/sh                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 up      # start bluetooth module                                              &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 piscan  # put rpi bluetooth pairable and discoverable&lt;br /&gt;
&lt;br /&gt;
 # do it while a usb device is not connected on rpi &lt;br /&gt;
                                        &lt;br /&gt;
 while true ; do                                                                 &lt;br /&gt;
   ls -l /dev/ttyUSB0 &amp;gt; /dev/null 2&amp;gt; /dev/null                                   &lt;br /&gt;
   if [ $? -eq 0 ] ; then break; fi                                              &lt;br /&gt;
   sleep 1                                                                       &lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 # launch the service&lt;br /&gt;
                                                                            &lt;br /&gt;
 /usr/bin/python /home/pi/rfcomm-server.py &amp;amp;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46855</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46855"/>
		<updated>2018-01-24T11:38:37Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Code de gestion de message Bluetooth côté Raspberry pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Cela va nous permettre de faire du Bluetooth via une liaison série.  &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code de gestion de message Bluetooth côté Raspberry pi===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 from bluetooth import *                                                         &lt;br /&gt;
 import time                                                                     &lt;br /&gt;
 import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
 server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
 server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
 #                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
 print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
 ser = serial.Serial(&amp;#039;/dev/ttyUSB0&amp;#039;)                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = ser.readline()                                                   &lt;br /&gt;
        if len(data) == 0: break                                                &lt;br /&gt;
        #print(&amp;quot;received [%s]&amp;quot; % data)                                          &lt;br /&gt;
        client_sock.send(data)                                                  &lt;br /&gt;
 except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock.close()                                                             &lt;br /&gt;
 server_sock.close()                                                             &lt;br /&gt;
 print(&amp;quot;all done&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Script: lancement du service au démarrage de la Raspberry Pi ===&lt;br /&gt;
&lt;br /&gt;
 #/bin/sh                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 up      # start bluetooth module                                              &lt;br /&gt;
 /usr/local/bin/hciconfig hci0 piscan  # put rpi bluetooth pairable and discoverable&lt;br /&gt;
&lt;br /&gt;
 # do it while a usb device is not connected on rpi &lt;br /&gt;
                                        &lt;br /&gt;
 while true ; do                                                                 &lt;br /&gt;
   ls -l /dev/ttyUSB0 &amp;gt; /dev/null 2&amp;gt; /dev/null                                   &lt;br /&gt;
   if [ $? -eq 0 ] ; then break; fi                                              &lt;br /&gt;
   sleep 1                                                                       &lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 # launch the service&lt;br /&gt;
                                                                            &lt;br /&gt;
 /usr/bin/python /home/pi/rfcomm-server.py &amp;amp;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46854</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46854"/>
		<updated>2018-01-24T11:34:02Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Détail du travail de la cinquième séance */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Cela va nous permettre de faire du Bluetooth via une liaison série.  &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code de gestion de message Bluetooth côté Raspberry pi===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 from bluetooth import *                                                         &lt;br /&gt;
 import time                                                                     &lt;br /&gt;
 import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
 server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
 server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
 advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
 #                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
 print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
 ser = serial.Serial(&amp;#039;/dev/ttyUSB0&amp;#039;)                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
 try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = ser.readline()                                                   &lt;br /&gt;
        if len(data) == 0: break                                                &lt;br /&gt;
        #print(&amp;quot;received [%s]&amp;quot; % data)                                          &lt;br /&gt;
        client_sock.send(data)                                                  &lt;br /&gt;
 except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
 print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
 client_sock.close()                                                             &lt;br /&gt;
 server_sock.close()                                                             &lt;br /&gt;
 print(&amp;quot;all done&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46853</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46853"/>
		<updated>2018-01-24T11:32:42Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Détail du travail de la cinquième séance */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Cela va nous permettre de faire du Bluetooth via une liaison série.  &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code de gestion de message Bluetooth côté Raspberry pi===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from bluetooth import *                                                         &lt;br /&gt;
import time                                                                     &lt;br /&gt;
import serial                                                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
server_sock=BluetoothSocket( RFCOMM )                                           &lt;br /&gt;
server_sock.bind((&amp;quot;&amp;quot;,PORT_ANY))                                                 &lt;br /&gt;
server_sock.listen(1)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
port = server_sock.getsockname()[1]                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
uuid = &amp;quot;94f39d29-7d6d-437d-973b-fba39e49d4ee&amp;quot;                                   &lt;br /&gt;
                                                                                &lt;br /&gt;
advertise_service( server_sock, &amp;quot;SampleServer&amp;quot;,                                 &lt;br /&gt;
                   service_id = uuid,                                           &lt;br /&gt;
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],               &lt;br /&gt;
                   profiles = [ SERIAL_PORT_PROFILE ],                          &lt;br /&gt;
#                   protocols = [ OBEX_UUID ]                                   &lt;br /&gt;
                    )                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;Waiting for connection on RFCOMM channel %d&amp;quot; % port)                     &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock, client_info = server_sock.accept()                                 &lt;br /&gt;
print(&amp;quot;Accepted connection from &amp;quot;, client_info)&lt;br /&gt;
                                 &lt;br /&gt;
ser = serial.Serial(&amp;#039;/dev/ttyUSB0&amp;#039;)                                             &lt;br /&gt;
                                                                                &lt;br /&gt;
try:                                                                            &lt;br /&gt;
    while True:                                                                 &lt;br /&gt;
        data = ser.readline()                                                   &lt;br /&gt;
        if len(data) == 0: break                                                &lt;br /&gt;
        #print(&amp;quot;received [%s]&amp;quot; % data)                                          &lt;br /&gt;
        client_sock.send(data)                                                  &lt;br /&gt;
except IOError:                                                                 &lt;br /&gt;
    pass                                                                        &lt;br /&gt;
                                                                                &lt;br /&gt;
print(&amp;quot;disconnected&amp;quot;)                                                           &lt;br /&gt;
                                                                                &lt;br /&gt;
client_sock.close()                                                             &lt;br /&gt;
server_sock.close()                                                             &lt;br /&gt;
print(&amp;quot;all done&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46852</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46852"/>
		<updated>2018-01-24T11:29:08Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration du périphérique Bluetooth */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Cela va nous permettre de faire du Bluetooth via une liaison série.  &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46851</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46851"/>
		<updated>2018-01-24T11:24:50Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Installation des libraires nécessaires */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Configuration du périphérique Bluetooth====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord il est important de modifier le fichier &amp;lt;code&amp;gt; /lib/systemd/system/bluetooth.service &amp;lt;/code&amp;gt; en ajoutant les 2 lignes suivantes:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/local/libexec/bluetooth/bluetoothd -C&lt;br /&gt;
 ExecStartPost=/usr/bin/sdptool add SP &lt;br /&gt;
&lt;br /&gt;
Ensuite il faut désactiver le plugin &amp;lt;code&amp;gt;pnat&amp;lt;/code&amp;gt; de bluez en ajoutant à la fin du fichier &amp;lt;code&amp;gt;/etc/bluetooth/main.conf&amp;lt;/code&amp;gt; la ligne suivante: &lt;br /&gt;
&lt;br /&gt;
 DisablePlugins = pnat&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46832</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46832"/>
		<updated>2018-01-23T19:07:14Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46831</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46831"/>
		<updated>2018-01-23T19:04:19Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant pi et le mot de passe raspberry. &lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46830</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46830"/>
		<updated>2018-01-23T18:58:21Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande dd :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant pi et le mot de passe raspberry. &lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46829</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46829"/>
		<updated>2018-01-23T18:57:55Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande dd :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu l&amp;#039;invite de connexion de la Raspberry:&lt;br /&gt;
&lt;br /&gt;
 Raspbian GNU/Linux 9 raspberrypi ttyS0                                          &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
&lt;br /&gt;
On se connecte avec l&amp;#039;identifiant pi et le mot de passe raspberry. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46828</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46828"/>
		<updated>2018-01-23T18:52:56Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande dd :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  115200  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46827</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46827"/>
		<updated>2018-01-23T18:52:01Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande dd :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
Nous avons mis la carte SD sur la RPi, puis nous l&amp;#039;avons alimentée et lancé la commande suivante sur le PC:&lt;br /&gt;
&lt;br /&gt;
 minicom -D /dev/ttyUSB0 -b  125200  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46826</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46826"/>
		<updated>2018-01-23T18:46:11Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande dd :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
puis nous avons examiné les fichiers cmdline.txt et config.txt pour  vérifier que l&amp;#039;option console=serial0,115200 est bien présente dans la ligne du fichier cmdline.txt et ajoutez enable_uart=1 à la fin du fichier config.txt pour activer la liaison série.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46825</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46825"/>
		<updated>2018-01-23T18:43:30Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Configuration de la Raspberry Pi */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande dd :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons monté la première partition de la carte SD Raspian Lite avec la commande: &lt;br /&gt;
&lt;br /&gt;
 mount /dev/sdb1 /mnt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46824</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46824"/>
		<updated>2018-01-23T18:36:56Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Détail du travail de la deuxième séance */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
===Configuration de la Raspberry Pi===&lt;br /&gt;
Nous avons besoin d&amp;#039;une liaison Bluetooth entre le système embarqué et l&amp;#039;application mobile android, afin d&amp;#039;envoyer une alerte à l&amp;#039;utilisateur dès qu&amp;#039;il y a un problème; Pour cela nous allons utiliser une Raspberry pi 3, cette carte est déjà équipée d&amp;#039;un module Bluetooth.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, nous avons télécharger la dénier version de la distribution Linux pour Raspberry pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Stretch Lite&amp;quot; plus légère en terme d&amp;#039;espace disque. &lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;archive zippée de la distribution récupérée nous l&amp;#039;avions installée sur la carte SD après l&amp;#039;avoir décompressée en utilisant la commande dd :&lt;br /&gt;
&lt;br /&gt;
 dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Installation des libraires nécessaires====&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46814</id>
		<title>P2 IOT 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P2_IOT_2017&amp;diff=46814"/>
		<updated>2018-01-23T18:19:13Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Détail du travail de la quatrième séance */&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;
Les maux de tête est un mal courant de nos jours, causés principalement par la surexposition des nos sens. Notamment la vue et l&amp;#039;ouïe. Des recommandations existent comme se reposer après un certain temps de travail mais ces dernières sont peu suivies. En effet, l&amp;#039;absorption dans une tâche très passionnante fait oublier le temps ! &lt;br /&gt;
Nous voulons ainsi proposer des lunettes alertant l&amp;#039;utilisateur qu&amp;#039;il faut faire une pause pour qu&amp;#039;il garde le sentiment de bien-être tout au long de sa journée !&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Lunettes avec les capteurs de : &lt;br /&gt;
- luminosité&lt;br /&gt;
- décibels&lt;br /&gt;
- oculaire&lt;br /&gt;
&lt;br /&gt;
Fonctionnement : les capteurs enregistrent le temps passé à une certaine luminosité et envoie un signal via une application une fois un certain temps écoulé pour faire une pause. Parallèlement, le capteur oculaire enregistre les clignement des yeux pour voir l&amp;#039;état de fatigue et envoie un signal. La capteur de décibels enregistre le son ambiant et envoie un signal quand le temps passé à un certain volume devient dangereux.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* Lunettes&lt;br /&gt;
* Capteurs (de luminosité, webcam, décibel)&lt;br /&gt;
* Raspberry Pi 3 + alimentation + câble série&lt;br /&gt;
* Arduino + câble USB&lt;br /&gt;
* Piles&lt;br /&gt;
* Colle/résine&lt;br /&gt;
* Android Studio (programmation application android)&lt;br /&gt;
* Smartphone&lt;br /&gt;
* Ordinateur&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (08/01/2018)&lt;br /&gt;
 | Recherche de l&amp;#039;idée du projet. Définition du besoin. Cahier des charges. Rassemblement des pièces nécessaires.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (09/01/2018)&lt;br /&gt;
 | Test de fonctionnement sur le capteur de couleur RGB TCS34725. Test de fonctionnement sur le micro MAX 4463. Recherche sur la création d&amp;#039;une application android.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (16/01/2018)&lt;br /&gt;
 | Reprogrammation de la Rasberry P3 connectée à la caméra (défaut présent sur la carte SD). Ébauche du poster de présentation. Téléchargement logiciel Android Studio.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (17/01/2018)&lt;br /&gt;
 | Essais de la caméra. Communication entre la RPi3 et Arduino nano.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (22/01/2018)&lt;br /&gt;
 | Test programme capteurs ensembles. Essais de fonctionnement avec l&amp;#039;application mobile. Suite mise en page du poster. Montage des lunettes.&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (24/01/2018)&lt;br /&gt;
 | activité ...&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la première séance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition du besoin et de l&amp;#039;objet connecté. Rassemblement du matériel nécessaire au fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la deuxième séance==&lt;br /&gt;
Précision de la fonction des capteurs.&lt;br /&gt;
[[Fichier:Utilisation_capteurs.JPG|200px|thumb|center|Schéma explicatif des capteur et de leur utilité]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le capteur de la luminosité seule a été remplacé par un capteur de couleurs. Ce dernier peut également détecter le niveau de la lumière en plus des couleurs et de la température.&lt;br /&gt;
&lt;br /&gt;
Site internet pour créer une application android :[https://appinventorapi.com// App Invertor API]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la troisième séance==&lt;br /&gt;
Résolution du problème de programmation sur la Raspberry P3 connectée à la caméra. Configuration du réseau de la PR3.&lt;br /&gt;
Ébauche de l&amp;#039;affiche finale de présentation.&lt;br /&gt;
Ébauche de l&amp;#039;application Android faite sur [http://appinventor.mit.edu/explore/index-2.html/ MIT App Inventor]&lt;br /&gt;
Test du fonctionnement de la caméra.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la quatrième séance==&lt;br /&gt;
Installation de la caméra. Prise de quelques photos?=.&lt;br /&gt;
Communication entre la RP3 et Arduino.&lt;br /&gt;
Le proxy de polytech a empêché l’installation des librairies.&lt;br /&gt;
Essai de l&amp;#039;application créée sur MIT app inventor. Erreur 507 Unable to connect. Testé sur 4 téléphones. Essais d&amp;#039;une app exemple et essais d&amp;#039;une app modifié.&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la cinquième séance==&lt;br /&gt;
Résolution du problème du Bluetooth sur la Rasberry. L&amp;#039;idée des la caméra est abandonnée. Test de capteurs (programme, réception des données, envoie des alertes quand il faut). Test de communication entre capteur et application mobile. Suite de la création de l&amp;#039;affiche A3.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App_1.PNG|200px|thumb|center|Interface utilisateur de l&amp;#039;application et éléments présents]][[Fichier:App_2.PNG|200px|thumb|center|Codage de l&amp;#039;application]][[Fichier:Idealement.PNG|200px|thumb|center|Description de la fonctionnalité des capteurs]]&lt;br /&gt;
&lt;br /&gt;
==Détail du travail de la sixième séance==&lt;br /&gt;
&lt;br /&gt;
=Rendu=&lt;br /&gt;
&lt;br /&gt;
==Poster==&lt;br /&gt;
Version électronique du poster :&lt;br /&gt;
[[Fichier:2017_IOT_P0_poster.png|center|500px|Notre poster]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers rendus==&lt;br /&gt;
&lt;br /&gt;
Notre application : [[Media:2017_IOT_P0_application.zip]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45957</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45957"/>
		<updated>2017-10-26T20:46:14Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Server/Client UDP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant on vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on a envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le message a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Archive Git==&lt;br /&gt;
&lt;br /&gt;
https://archives.plil.fr/elopes/PFE15.git&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45956</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45956"/>
		<updated>2017-10-26T20:45:44Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant on vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on a envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le message a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;br /&gt;
&lt;br /&gt;
==Archive Git==&lt;br /&gt;
&lt;br /&gt;
https://archives.plil.fr/elopes/PFE15.git&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45955</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45955"/>
		<updated>2017-10-26T20:45:26Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Archive Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant on vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on a envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le message a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;br /&gt;
&lt;br /&gt;
==Archive Git==&lt;br /&gt;
&lt;br /&gt;
https://archives.plil.fr/elopes/PFE15.git&lt;br /&gt;
&lt;br /&gt;
====Conclusion====&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45948</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45948"/>
		<updated>2017-10-26T20:25:12Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Mise en place d&amp;#039;un réseau statique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant on vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on a envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le message a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;br /&gt;
&lt;br /&gt;
====Archive Git====&lt;br /&gt;
&lt;br /&gt;
https://archives.plil.fr/elopes/PFE15.git&lt;br /&gt;
&lt;br /&gt;
====Conclusion====&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45947</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45947"/>
		<updated>2017-10-26T20:24:48Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Server/Client UDP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant On vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on a envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le message a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;br /&gt;
&lt;br /&gt;
====Archive Git====&lt;br /&gt;
&lt;br /&gt;
https://archives.plil.fr/elopes/PFE15.git&lt;br /&gt;
&lt;br /&gt;
====Conclusion====&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45941</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45941"/>
		<updated>2017-10-26T20:00:41Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Archive Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant On vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on a envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le messages a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;br /&gt;
&lt;br /&gt;
====Archive Git====&lt;br /&gt;
&lt;br /&gt;
https://archives.plil.fr/elopes/PFE15.git&lt;br /&gt;
&lt;br /&gt;
====Conclusion====&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45939</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45939"/>
		<updated>2017-10-26T19:55:48Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Server/Client UDP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant On vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on a envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le messages a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;br /&gt;
&lt;br /&gt;
====Archive Git====&lt;br /&gt;
====Conclusion====&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45938</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45938"/>
		<updated>2017-10-26T19:54:22Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Server/Client UDP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant On vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on a envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le messages a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45937</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45937"/>
		<updated>2017-10-26T19:53:35Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Test sur la communication réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant On vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test, communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord on a démarré un serveur upd au node3:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,250 - INFO #  udp server start 12345&lt;br /&gt;
 2017-10-22 18:30:34,252 - INFO # Success: started UDP server on port 12345&lt;br /&gt;
&lt;br /&gt;
Ensuite on envoyé un message (&amp;quot;test&amp;quot;) UDP du node1 vers le node3:&lt;br /&gt;
&lt;br /&gt;
 udp send baad:a555::1736 12345 test &lt;br /&gt;
 2017-10-22 18:31:30,696 - INFO #  udp send baad:a555::1736 12345 test&lt;br /&gt;
 2017-10-22 18:31:30,699 - INFO # Success: sent 4 byte(s) to [baad:a555::1736]:12345&lt;br /&gt;
&lt;br /&gt;
Le messages a été bien reçu par le node3, cela montre que le réseau  a été bien mis en place:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; 2017-10-22 18:31:30,728 - INFO #  PKTDUMP: data received:&lt;br /&gt;
 2017-10-22 18:31:30,730 - INFO # ~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF (0)&lt;br /&gt;
 2017-10-22 18:31:30,731 - INFO # 00000000  74  65  73  74&lt;br /&gt;
 2017-10-22 18:31:30,732 - INFO # ~~ SNIP  1 - size:   8 byte, type: NETTYPE_UDP (4)&lt;br /&gt;
 2017-10-22 18:31:30,733 - INFO #    src-port: 12345  dst-port: 12345&lt;br /&gt;
 2017-10-22 18:31:30,734 - INFO #    length: 12  cksum: 0xc94b&lt;br /&gt;
 2017-10-22 18:31:30,736 - INFO # ~~ SNIP  2 - size:  40 byte, type: NETTYPE_IPV6 (2)&lt;br /&gt;
 2017-10-22 18:31:30,737 - INFO # traffic class: 0x00 (ECN: 0x0, DSCP: 0x00)&lt;br /&gt;
 2017-10-22 18:31:30,738 - INFO # flow label: 0x00000&lt;br /&gt;
 2017-10-22 18:31:30,739 - INFO # length: 12  next header: 17  hop limit: 63&lt;br /&gt;
 2017-10-22 18:31:30,740 - INFO # source address: baad:a555::1702&lt;br /&gt;
 2017-10-22 18:31:30,741 - INFO # destination address: baad:a555::1736&lt;br /&gt;
 2017-10-22 18:31:30,754 - INFO # ~~ SNIP  3 - size:  24 byte, type: NETTYPE_NETIF (-1)&lt;br /&gt;
 2017-10-22 18:31:30,755 - INFO # if_pid: 7  rssi: 21  lqi: 255&lt;br /&gt;
 2017-10-22 18:31:30,756 - INFO # flags: 0x0&lt;br /&gt;
 2017-10-22 18:31:30,757 - INFO # src_l2addr: 10:10:64:32:14:0f:17:32&lt;br /&gt;
 2017-10-22 18:31:30,758 - INFO # dst_l2addr: 10:10:64:2d:14:39:17:36&lt;br /&gt;
 2017-10-22 18:31:30,760 - INFO # ~~ PKT    -  4 snips, total size:  76 byte&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45936</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45936"/>
		<updated>2017-10-26T19:47:00Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Test sur la communication réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant On vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test sur la communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
=====Server/Client UDP=====&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45935</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45935"/>
		<updated>2017-10-26T19:44:29Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Récupération du code et installation des outils de compilation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant On vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test sur la communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45934</id>
		<title>P15 Réseau de capteurs temps réel</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=P15_R%C3%A9seau_de_capteurs_temps_r%C3%A9el&amp;diff=45934"/>
		<updated>2017-10-26T19:43:15Z</updated>

		<summary type="html">&lt;p&gt;Elopes : /* Test sur la communication réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Etudiant : Edmur Lopes&lt;br /&gt;
*Encadrants : Alexandre Boé / Xavier Redon / Thomas Vantroys &lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
&lt;br /&gt;
====Présentation générale du projet====&lt;br /&gt;
Le projet réseau de capteurs temps réel consiste à développer et évaluer la possibilité de contrôler en temps réel un moteur par liaison sans fil. &lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
L&amp;#039;industrie 4.0 propose d&amp;#039;organiser les moyens de production de façon agile et autonome. Pour cela, on peut envisager de créer des ilots de travail interconnectés. Chaque ilot pourrait être déplacé pour optimiser soit l&amp;#039;utilisation des ressources soit la production.&lt;br /&gt;
Dans le cas d&amp;#039;ilots identiques, pour faciliter la mise à jour des systèmes et le contrôle des machines, il peut être intéressant de faire la régulation sur un système &amp;quot;serveur&amp;quot;. Les ilots deviennent alors les clients et envoient leurs données au serveur qui renvoie par la suite la commande. &lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
L&amp;#039;objectif du projet consiste à mettre en place un réseau radio multi-saut classique (temps réel). Pour cela il va falloir:&lt;br /&gt;
&lt;br /&gt;
 - Développer un réseau non temps réel basé sur des cartes STM32 et des radios à 868 MHz, embarquant un système d&amp;#039;exploitation Riot OS,&lt;br /&gt;
&lt;br /&gt;
 - Évaluer les temps de propagation de l&amp;#039;information en fonction de l&amp;#039;environnement (perturbations, distance, ...),&lt;br /&gt;
&lt;br /&gt;
 - Modifier la partie MAC de Riot OS pour garantir les temps de latence.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
Ce projet consiste à la mise en place d&amp;#039;un réseau sans fil de capteurs temps réel, afin de pouvoir envoyer/recevoir des commandes/informations d&amp;#039;un serveur vers la cible (un robot dans ce cas). Le réseau qu&amp;#039;on va mettre en place va devoir être capable d’effectuer le chemin le plus court vers le nœud cible dans le but de diminuer le temps de propagation de l&amp;#039;information. Comme montre la figure ci-après:    &lt;br /&gt;
[[Fichier:iot.png|800px|thumb|center|Architecture matérielle]]&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
#Faire des recherches bibliographiques: temps réel, MAC, RIOT OS...&lt;br /&gt;
#Prise en main de RIOT OS et de la carte STM32F4&lt;br /&gt;
#Mettre en Place un réseau non temps réel&lt;br /&gt;
#Étudier les caractéristiques de ce réseau non temps réel: le temps de latence, des éventuels erreurs lors de l&amp;#039;émission...&lt;br /&gt;
#Rendre le réseau non temps réel en réseau temps réel&lt;br /&gt;
#Mise en place d&amp;#039;une commande automatique en cas de défaut sur le réseau&lt;br /&gt;
&lt;br /&gt;
==Première semaine (18/09/17 : 24/09/17)==&lt;br /&gt;
*Premier Rendez-vous de présentation du projet avec les encadrants&lt;br /&gt;
*Analyse du besoin et élaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
==Deuxième semaine (25/09/17 : 01/10/17)==&lt;br /&gt;
*Élaboration de la page wiki (présentation du projet) &lt;br /&gt;
*Initiation à la recherche bibliographique (RIOT OS, Réseau temps réel, microcontrôleurs ARM (stm32), MAC protocol, RPL, etc.)&lt;br /&gt;
&lt;br /&gt;
====Calendrier prévisionnel====&lt;br /&gt;
[[Fichier:Previsionnel.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Travail réalisé==&lt;br /&gt;
====Récupération du code et installation des outils de compilation====&lt;br /&gt;
Avant de commencer à programmer une application, il faut tout d&amp;#039;abord cloner le code source de RIOT OS depuis GitHub:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/RIOT-OS/RIOT.git RIOT&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi installer les outils nécessaires à la compilation et au débogage de la famille de microcontrôleurs ARM:&lt;br /&gt;
 &lt;br /&gt;
 apt-get install build-essential g++-multilib gtkterm openocd&lt;br /&gt;
&lt;br /&gt;
Le paquetage g++-multilib est uniquement nécessaire si le système hôte est 64bits.&lt;br /&gt;
&lt;br /&gt;
Installation des compilateurs et ses outils associés:&lt;br /&gt;
&lt;br /&gt;
 apt install gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
====Prise en main de RIOT OS et STM32F4discovery====&lt;br /&gt;
&lt;br /&gt;
RIOT est un système d&amp;#039;exploitation construit autour d&amp;#039;un micro-noyau temps-réel, développé pour les besoins de l&amp;#039;Internet des objets et des réseaux sans fil. Initialement lancé en Europe par INRIA, Freie Universität Berlin, et l&amp;#039;Université de Hambourg en 2013, RIOT est actuellement développé par une large communauté du logiciel libre rassemblant des développeurs du monde entier.&lt;br /&gt;
&lt;br /&gt;
Pour prendre à main RIOT et la carte STM32, On a commencé par réaliser une application basé sur l&amp;#039;exemple &amp;quot;hello_world&amp;quot; de RIOT: cette simple application &amp;quot;gpio_to_serial&amp;quot; est capable d&amp;#039;allumer/éteindre une led dès qu&amp;#039;une interruptions est générée lors qu&amp;#039;on appuie sur le bouton &amp;quot;user&amp;quot; et affiche l&amp;#039;état de la led au terminal:&lt;br /&gt;
 &lt;br /&gt;
 2017-10-22 19:02:26,692 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:26,693 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:34,944 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:34,945 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:35,040 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:35,041 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:38,184 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,186 - INFO # Message received, LED is OFF&lt;br /&gt;
 2017-10-22 19:02:38,280 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:38,281 - INFO # Message received, LED is ON&lt;br /&gt;
 2017-10-22 19:02:40,578 - INFO # GPIO Callback&lt;br /&gt;
 2017-10-22 19:02:40,580 - INFO # Message received, LED is OFF&lt;br /&gt;
&lt;br /&gt;
Cette application m&amp;#039;a permit de comprendre comment fonctionne le système riot et de passer à la mise en place d&amp;#039;un premier réseau.&lt;br /&gt;
&lt;br /&gt;
====Mise en place d&amp;#039;un réseau statique====&lt;br /&gt;
&lt;br /&gt;
Maintenant On vais réaliser la mise en place d&amp;#039;un réseau multi-point avec 3 nœuds (2 sauts); Pour que cela soit possible chaque carte ayant un module radio doit avoir son adresse ipv6 global qui va permettre d&amp;#039;échanger des paquets entre elles. On a défini une adresse global du type &amp;#039;&amp;#039;&amp;#039;baad:a555::Hwaddr&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Le réseau statique à 3 nœuds se comporte comme un réseau linéaire avec un nœud central se chargeant uniquement de router les paquets vers la destination:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Static_network.png | center]]&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place cette structure réseau, RIOT OS dispose des nombreuses fonctions telles quelles: &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ifconfig&amp;#039;&amp;#039;&amp;#039;: permet configurer l&amp;#039;interface réseau.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;fibroute&amp;#039;&amp;#039;&amp;#039;: table dynamique qui lie les adresses MAC aux ports&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pingv6&amp;#039;&amp;#039;&amp;#039;: permet de tester l&amp;#039;accessibilité d&amp;#039;une autre machine à travers un réseau IP en envoyant de paquet ICMPv6&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039; udp&amp;#039;&amp;#039;&amp;#039;: permet de démarrer un serveur udp et d&amp;#039;envoyer des paquets via le protocole udp sur un port prédéfini&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;exemple &amp;#039;&amp;#039;&amp;#039;gnrc_networking&amp;#039;&amp;#039;&amp;#039; de RIOT, permet de mettre en place la pile réseau GNRC IPv6/6LoWPAN qui est dédié à l&amp;#039;internet des objets. Cet exemple agit comme un routeur et permet de définir des routes statiques ainsi que d&amp;#039;utiliser RPL. On va donc utiliser cet exemple afin de mettre en place le réseau, il suffira de rajouter le module &amp;#039;&amp;#039;&amp;#039;at86rf231&amp;#039;&amp;#039;&amp;#039; dans le Makefile. &lt;br /&gt;
&lt;br /&gt;
Le node1/client, enverra des paquets avec des ordres de commande vers le node3/serveur (qui correspond au robot avec des moteurs). Ces informations vont tout d&amp;#039;abord passer par le node2 qui est responsable au routage de ces paquets vers le node2. Le node2 va aussi pouvoir retourner des informations vers le node1, par exemple la vitesse de rotation des roues.&lt;br /&gt;
&lt;br /&gt;
====Test sur la communication réseau====&lt;br /&gt;
&lt;br /&gt;
Une fois le réseau mis en place, on a fait des tests afin de voir si les cartes arrivaient à communiquer entre-elles. Les résultats ont étés satisfaisants comme le montre les figures ci-dessous:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term1 1.png|thumb|center|700px|ping node1 vers node3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping term2 1.png|thumb|center|700px|ping node3 vers node1]]&lt;br /&gt;
&lt;br /&gt;
Après on a éteint node2 et on a essayé de faire un ping à nouveau afin de tester si les paquets ne passaient pas directement du node1 vers node3, sans passer par le deuxième. D&amp;#039;après l&amp;#039;image on voit bien qu&amp;#039;il maintenant impossible de faire un ping:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ping_fail.png|thumb|center|700px|ping node1 vers node3]]&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki/index.php?title=Fichier:Ping_fail.png&amp;diff=45933</id>
		<title>Fichier:Ping fail.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki/index.php?title=Fichier:Ping_fail.png&amp;diff=45933"/>
		<updated>2017-10-26T19:41:31Z</updated>

		<summary type="html">&lt;p&gt;Elopes : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Elopes</name></author>
	</entry>
</feed>