Changes between Version 4 and Version 5 of IOC20_T06


Ignore:
Timestamp:
Mar 27, 2020, 1:20:29 PM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IOC20_T06

    v4 v5  
    1414[[Image(htdocs:png/IOC6_plateforme_TP.png,nolink,600px)]]
    1515
    16 Le browser web (p.ex. firefox) sera sur votre PC local, il devra communiquer avec votre serveur HTTP sur votre PC du réseau enseignement. Nous allons devoir faire quelques manipulations pour rendre cela possible. En effet, nous avons deux obstacles. Le premier est que les machines du réseau enseignement ne sont pas directement accessibles, elles sont derrière une machine ''proxy'' (''durian''), le second est que le port d'écoute standard des serveurs web est 80 et que celui-ci est déjà utilisé par un serveur préinstallé (''apache''), nous devrons donc utiliser un autre port. Nous allons utiliser un tunnel ssh et de la redirection de port.
     16Le browser web (p.ex. firefox) sera sur votre PC local, il devra communiquer avec un serveur HTTP sur votre PC du réseau enseignement. Nous allons devoir faire quelques manipulations pour rendre cela possible. En effet, nous avons deux obstacles. Le premier est que les machines du réseau enseignement ne sont pas directement accessibles, elles sont derrière une machine ''proxy'' (''durian''), le second est que le port d'écoute standard des serveurs web est 80 et que celui-ci est déjà utilisé par un serveur préinstallé (''apache''), nous devrons donc utiliser un autre port. Nous allons utiliser un tunnel ssh et de la redirection de port.
    1717
    1818== création du tunnel ssh ==
    1919
    20 Je vais supposer que vous êtes sur une machine Unix (Linux ou MacOS). Je sais que certains d'entrevous sont sur Windows et ce que je vous demande de faire est possible, mais, en l'état, je ne sais pas le faire. Je pourrai essayer si nécessaire en utilisant une machine virtuelle et un Windows10.
     20Je vais supposer que vous êtes sur une machine Unix (Linux ou MacOS). Je sais que certains d'entrevous sont sur Windows et ce que je vous demande de faire est possible sur Windows, mais, en l'état, je ne sais pas le faire. Je pourrai essayer si nécessaire en utilisant une machine virtuelle et un Windows10.
    2121
    2222Sur le schéma ci-dessous :
     
    2424* `durian`: c'est la machine passerelle par laquelle vous devez passer pour entrer dans le réseau enseignement.
    2525* `musicien`: c'est le nom d'une machine des salles 305-307, par exemple `mozart`
    26 * 8022, 2280, 22 et 8000 : sont des ports d'écoute utilisés par le serveur ssh et le serveur HTTP.
     26* 2222, 8080, 22 et 8000 : sont des ports d'écoute utilisés par le serveur ssh et le serveur HTTP.
    2727
    2828  [[Image(htdocs:png/IOC6_tunnel-ssh.png,nolink,600px)]]
    2929
    30 1. Commençons par renseigner durian de votre clé publique ssh, afin que vous n'ayez pas à taper votre mot de passe à chaque fois. Vous avez déjà fait ça pour l'accès aux !RaspberryPi 1. Ce sera à faire une seule fois. Sur votre PC chez vous:
     301. Commençons par renseigner durian de votre clé publique ssh, afin que vous n'ayez pas à taper votre mot de passe à chaque fois que vous vous connectez sur `durian`. Vous avez déjà fait ça pour l'accès aux !RaspberryPi 1. Ce sera à faire une seule fois. Sur votre PC chez vous:
    3131{{{#!bash
    3232ssh-keygen -t rsa
    3333ssh-copy-id -i $HOME/.ssh/id_rsa.pub loginname@durian.lip6.fr
    34 ssh loginname@durian.lip6.fr
    3534}}}
    3635  * Remplacer `loginname` par votre nom de login.
    3736  * Pour la première commande, vous devez taper 3 fois sur la touche entrée pour choisir les valeurs par défaut.
    3837  * Pour la deuxième commande,  vous tapez votre mot de passe d'accès à la passerelle (ce sera la dernière fois).
    39   * La troisième est là pour vérifier que vous n'avez plus besoin du mot de passe.
    4038
    41392. Création des tunnels. Nous allons en créer deux pour traverser la passerelle. Malheureusement, ces opérations devront être réalisés à chaque fois.[[BR]].
     
    4745  * Sur l'autre terminal, que vous n'aviez pas encore utilisé, vous tapez:
    4846{{{#!bash
    49 ssh -p 2280 localhost -L 8080:musicien:8000
    50 }}}
    51    Vous faites un ssh sur `localhost` au port 8080 et grâce au premier tunnel, vos paquets vont être reçus par le serveur ssh de la machine `musicien` en passant à travers le proxy `durian`. Grâce à cette seconde commande, vous construisez un tunnel sur `musicien`, dont l'entrée est `localhost:8080` et la sortie est `musicien:8000`.[[BR]].
    52   * On aurait pu choisir d'autres numéros de port à la place de 2222 et 8080. J'ai choisi des numéros en rapport avec les numéros standard. Pour le port 8000, vous aurez peut-être à changer ce numéro, si vous êtes deux sur la même machine du réseau enseignement.
    53 
     47ssh -p 2222 localhost -L 8080:musicien:8000
     48}}}
     49   Vous faites un ssh sur `localhost` au port 2222 et grâce au premier tunnel, vos paquets vont être reçus par le serveur ssh de la machine `musicien` en passant à travers le proxy `durian`. Grâce à cette seconde commande, vous construisez un tunnel sur `musicien`, dont l'entrée est `localhost:8080` et la sortie est `musicien:8000`. Nous allons, par la suite, brancher un serveur web sur le port 8000 et pour lui envoyer vos requêtes vous aurez à mettre dans la case de l'URL `localhost:8080`, les requêtes arriveront sur le serveur en ayant transervées 2 tunnels.[[BR]].
     50  * On aurait pu choisir d'autres numéros de port à la place de 2222 et 8080. J'ai choisi des numéros en rapport avec les numéros standard (22 pour ssh et 80 pour le serveur HTTP). Pour le port 8000, vous aurez peut-être à changer ce numéro, si vous êtes plusieurs sur la même machine du réseau enseignement.
    5451
    5552== Plan de la séance ==
    5653
    57 Ce serveur web est écrit en Python, à la réception des requêtes du client, il exécute des scripts CGI (Common Gateway Interface) écrit également en Python pour produire des pages HTML dynamiques. Les scripts CGI devront communiquer avec le programme écrit en C contrôlant les LEDs. La communication entre les scripts et l'application se fera par fifo UNIX. Le programme en C sera : soit la version permettant le contrôle depuis une application utilisateur (avec les droits de **root**), soit par une application utilisateur qui communique avec un driver. Je ne demande pas cette seconde possibilité parce que vous allez devoir insérer un module dans le noyau et c'est une difficulté supplémentaire qui n'apporte rien vis-à-vis de ce que vous allez voir aujourd'hui, mais je ne vous interdis pas de le faire.
    58 
    59 Pour ce faire, nous allons procéder en deux temps.
     54Ce serveur web est écrit en Python, à la réception des requêtes du client, il exécute des scripts CGI (Common Gateway Interface) écrit également en Python pour produire des pages HTML dynamiques. Les scripts CGI devront communiquer avec le programme écrit en C. La communication entre les scripts et l'application se fera par fifo UNIX.
     55
     56Nous allons procéder en deux temps.
    60571. Nous allons faire communiquer un programme python avec un programme C par FIFO.
    61582. Nous allons créer un serveur local sur le PC de développement et le faire communiquer avec le programme C.
    62 3. Nous allons mettre le serveur sur une raspberry PI et communiquer avec le programme C
    63 4. Nous allons remplacer le programme C par le programme de contrôle des LEDs.
    6459
    6560== 1. Communication par FIFO ==