Diplôme inter-universitaire "Enseigner l'Informatique au Lycée" (DIU-EIL) Polycopié d'exercices - Système

 
Diplôme inter-universitaire "Enseigner l'Informatique au Lycée" (DIU-EIL) Polycopié d'exercices - Système
Diplôme inter-universitaire “Enseigner
  l’Informatique au Lycée” (DIU-EIL)

     Polycopié d’exercices - Système
Diplôme inter-universitaire "Enseigner l'Informatique au Lycée" (DIU-EIL) Polycopié d'exercices - Système
Table des matières

1 Linux ligne de commande, Arborescence                                                                                                                                                   4
  1.1 Le manuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                   4
  1.2 Arborescence de fichiers : chemins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                      5

2 Linux : autres commandes utiles                                                                                                                                                         7
  2.1 Commandes . . . . . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
      2.1.1 Afficher du texte . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
      2.1.2 Commandes pour fouiller le texte . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
      2.1.3 Éditer/modifier un fichier . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
      2.1.4 Chercher des fichiers dans un répertoire             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
      2.1.5 Archiver/compresser . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8

3 Ordonnancement et contrainte                                                                                                                                                           10
  3.1 Section critique et deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                   10
  3.2 Ordonnancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                     11
      3.2.1 À priorités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                  11

4 Algorithmes d’ordonnancement statique, tests d’ordonnançabilité                                                       12
  4.1 Un bout de cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  4.2 Ordonnancement à priorité fixe avec affection de priorité RM . . . . . . . . . . . . . . . . . . . . . 12
  4.3 Earliest deadline first (EDF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

5 Utilisation du système Linux                                                                                                                                                           14
  5.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
       5.1.1 Les Raspberrys . . . . . . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
       5.1.2 Premières connexions . . . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
       5.1.3 Choix de la sortie pour l’affichage graphique               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
  5.2 Installer un logiciel . . . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  5.3 Naviguer dans les répertoires . . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  5.4 Serveur média . . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
       5.4.1 Premières manipulations . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
       5.4.2 Génération de la liste des films . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
       5.4.3 Plus avancé . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
       5.4.4 Très avancé, hackez le serveur ! . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
  5.5 Et la suite. . . . . . . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
       5.5.1 Nettoyez votre Pi . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
       5.5.2 Utilisation éventuelle de ce TP . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
       5.5.3 Et en Python . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                                                                                                      2/21
Résumé

Ce cahier Ce cahier d’exercices a été réalisé pour l’enseignement “Bloc 3” du DIU “Enseigner l’Informatique
au Lycée”, proposé par l’université Lyon1 en collaboration avec d’autres partenaires (Lyon2, ENSL, ENSSIB . . . )
   Il peut être librement distribué (License CC-BY-SA 4.0).

Intervenants Les personnes suivantes ont été impliquées dans l’écriture de ces exercices et des supports
associés, et l’enseignement correspondant au sein du Bloc 3 :
  — 2018/2019 : Jean-Patrick Gelas, Laure Gonnord, Nicolas Louvet, Fabien Rico.

                                    https://diu-eil.univ-lyon1.fr/

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                             3/21
TD 1
              Linux ligne de commande, Arborescence

1.1 Le manuel
   man (pour manual) est une commande disponible sur les systèmes d’exploitation de type Unix. Elle permet
d’obtenir de l’aide sur la plupart des programmes disponibles sur le système, mais aussi sur les fonctions du
langage C, et de certaines bibliothèques. Pour l’invoquer, la commande est :
man nom_de_la_commande
Par exemple,
man du
permet d’obtenir le manuel de la commande du.
   Une fois que la page manuel est affichée, les touches de déplacement permettent de naviquer dedans. Pour
quitter (revenir à la ligne de commande), il suffit de taper Q . Il y a beaucoup de subtilités que l’on passe ici
sous silence, mais vous pouvez maintenant faire man man pour en apprendre plus sur man !

E XERCICE #1 Ï Man

   Voici ci-dessous un extrait de la page de manuel de la commande ls.
NAME
       ls - list directory contents

SYNOPSIS
    ls [OPTION]... [FILE]...

DESCRIPTION
    List information about the FILEs (the current directory by default). Sort entries
    alphabetically if none of -cftuvSUX nor --sort is specified.

       Mandatory arguments to long options are mandatory for short options too.

       -c     with -lt: sort by, and show, ctime (time of last modification of file
            status
              information); with -l: show ctime and sort by name; otherwise: sort by
                  ctime,
              newest first

       -h, --human-readable
             with -l and/or -s, print human readable sizes (e.g., 1K 234M 2G)

       --si    likewise, but use powers of 1000 not 1024

       -l      use a long listing format

       -r, --reverse
             reverse order while sorting

       -R, --recursive
             list subdirectories recursively

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                             4/21
Informatique, Formation des enseignants                                             DIU-EIL Exercices #1 – 2019

     -s, --size
           print the allocated size of each file, in blocks

     -S      sort by file size, largest first

     -t      sort by modification time, newest first

     -u     with -lt: sort by, and show, access time; with -l: show access time and
          sort
            by name; otherwise: sort by access time, newest first

  — Quelles options de ls utiliser pour lister le contenu du répertoire courant dans l’ordre inverse de l’ordre
    alphabétique ?
  — Quelles options utiliser pour lister le contenu du répertoire par ordre de date de dernière modification,
    avec les fichiers modifiés le plus récemment à la fin ?
  — Quelles options pour ranger les fichiers par ordre de taille décroissante ?

1.2 Arborescence de fichiers : chemins

                               F IGURE 1.1 – Arborescence et chemin sous Linux

   La figure 1.1 résume les concepts à retenir.
  — Chemin absolu d’un fichier : c’est le nom "complet" du fichier, donné par son chemin d’accès depuis la
    racine. Exemple, sous Unix : /rep/fic1.c.
  — Répertoire de travail (répertoire courant) : répertoire sur lequel un utilisateur est positionné à un mo-
    ment donné. Ce répertoire est nommé “.”
  — Chemin relatif d’un fichier : référence d’un fichier à partir du répertoire de travail.
  — Répertoire personnel (sous Unix) : répertoire sur lequel est positionné un utilisateur suite à son authenti-
    fication. Ce répertoire est nommé “˜” (tilde). On parle aussi de “home utilisateur” ou de “racine person-
    nelle”. Sous Unix c’est souvent un sous-répertoire de /home.

E XERCICE #2 Ï Chemins (TD)
La figure 5.1 représente l’arborescence présente dans un ordinateur sous Unix :
    (Les fichiers sont en grisé, les autres noeuds sont des répertoires). Supposons que vous êtes l’utilisateur
alan. Donner des commandes sucessives pour :
  — Vous placer dans votre répertoire d’accueil

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                            5/21
Informatique, Formation des enseignants                                              DIU-EIL Exercices #1 – 2019

  — Y créer un répertoire nommé TP.
  — Faire une copie du fichier hosts.conf dans le répertoire TP. Puis la renommer myhosts.conf.

                                                                        / (racine)
            /

                etc                                                                  tmp
                                                          home            etc
                       passwd

                       shadow                                           dpkg
                                                          moi
                       hosts.conf
                home                                             Algo
                                                Systeme
                        alan
                        denis                         TP2
                                          TP1

      F IGURE 1.2 – Arborescence 1           F IGURE 1.3 – Arborescence à réaliser

E XERCICE #3 Ï Navigation relative et absolue - TD ou TP
Donner les commandes ou réaliser les manipulations suivantes :
   1. Réaliser la hiérarchie de répertoires et de fichiers décrite dans la figure 1.3
      Si ce n’est pas le cas, effectuer les modifications nécessaires (à l’aide des commandes mv et mkdir ?)
   2. Se placer dans le répertoire TP2. Pour copier un fichier vers le répertoire TP1, vous pouvez au choix
      (réaliser chacune de ces manipulations) :
       — utiliser le chemin relatif (du répertoire TP1 par rapport à où je suis, ie TP2) : cp nomfichier
           ../TP1/
       — utiliser le chemin absolu du répertoire TP1 : cp nomfichier /home/moi/Systeme/TP1/
       — utiliser le raccourci de votre home : cp nomfichier ˜/Systeme/TP1/
   3. Se placer à la racine de votre répertoire personnel. Sans se déplacer, et en s’inspirant des manipulations
      précédentes :
       — copier un des fichiers du répertoire /etc/dpkg dans le répertoire TP2.
       — lister le contenu du répertoire TP1.
       — déplacer les fichiers qui n’ont rien à faire de TP1 vers /tmp.

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                            6/21
TD 2
                     Linux : autres commandes utiles

Contenu
    Cette section vous propose des exercices à réaliser avec vos élèves de classe de Terminale. Elle ne sera pas
réalisée en séance.

2.1 Commandes

2.1.1 Afficher du texte
   Utilisation des commandes cat, less, more.

E XERCICE #1 Ï cat, etc.
Pour tester ces commandes on va manipuler les fichiers qui se trouvent dans /etc/dictionaries-common.
Placez-vous dans ce répertoire.
   1. Tapez :
      ls -l
      cat words
      cat words words
      Que fait la commande cat ? Peut-on visualiser de gros fichiers ?
   2. Utilisation de less :
      less   words
      puis
       — tapez sur la touche "espace"
       — tapez sur la touche "espace"
       — tapez sur la touche "espace"
       — tapez sur la touche "b"
       — tapez sur la touche "b"
       — tapez sur la touche "flèche du haut"
       — tapez /foo puis la touche entrée ou saut de ligne)
       — tapez /z puis (la touche entrée ou saut de ligne)
       — tapez sur la touche "flèche du haut"
       — tapez sur la touche "h" (regardez 30 secondes et continuez)
       — tapez sur la touche "q" (pour sortir de help)
       — tapez sur la touche "q" (pour sortir de less)
      Que fait less quand on tape "/quelquechose" ?
   3. Comparez less et more.

2.1.2 Commandes pour fouiller le texte
E XERCICE #2 Ï Utilisation simple de wc et grep
Toujours dans le répertoire /etc/dictionaries-common :
   1. Que fait la commande wc , et ses options -l et -w ?
   2. Que fait la commande grep :
      grep house words
      grep maison words

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                            7/21
Informatique, Formation des enseignants                                                DIU-EIL Exercices #2 – 2019

2.1.3 Éditer/modifier un fichier
   Il existe des commandes pour modifier un fichier à la ligne de commmande, mais ici nous allons faire plus
simple.

E XERCICE #3 Ï Fichier
Créer un fichier texte dans le répertoire courant en utilisant un éditeur de texte :

gedit monjolifichiertexte.txt &
(on verra ce que signifie & plus tard)
   1. Écrire vos noms et prénoms, sauver, et quitter l’éditeur.
   2. Vérifier à l’aide de less que ce fichier contient bien ce que vous y avez écrit.
   3. Quelle taille a ce fichier ?

E XERCICE #4 Ï Commande diff
À l’aide d’un éditeur de texte, dans le répertoire /Systeme/TP2
    1. Créez un fichier1.txt avec 3 lignes différentes.
    2. Créez un fichier2.txt qui est égal au fichier1.txt avec une ligne en moins.
    3. Créez un fichier3.txt qui est égal au fichier1.txt avec en plus une ligne avec une phrase.
    4. Créez un fichier4.txt qui est égal au fichier1.txt sauf que la deuxième ligne contient autre chose.
    5. Faites diff entre les différents fichiers.
    6. (Bonus pour les personnes en avance). Jouer avec la commande patch pour reconstruire le fichier2.txt
       à partir du fichier1.txt et de la sortie de diff.
    On se contentera de retenir que diff n’imprime rien si deux fichiers sont identiques, et sinon donne des
informations sur les différences entre les deux.

2.1.4 Chercher des fichiers dans un répertoire
   Un petit exo pour découvrir la puissance de la commande find :

E XERCICE #5 Ï Découverte de find
Exécuter :
   1. man find
   2. puis :
        find /etc
        find /etc -name "*.d"
        find /etc -name "*.cfg" -ls
        ls -R /etc
   3.   Que veut dire l’étoile ici ?
   4.   À quoi sert l’option -name ?
   5.   Commenter la différence entre ls -R et find.
   6.   Essayer la commande find /etc -exec wc ’{}’ + puis la commande
      find /etc -name "*.cfg" -exec wc                       ’{}’ +
      Que fait l’option -exec ?
   7. Que fait l’option -iname ?
Noter qu’on parlera des caractères d’échappement plus tard .

2.1.5 Archiver/compresser
E XERCICE #6 Ï Commandes gzip, tar
Dans cet exercice, on va commencer par mettre en pratique les connaissances du TP1.
   1. À l’intérieur d’un répertoire Systeme/TP2/, créer un répertoire nommé toto contenant deux fichiers
      texte, titi (contenant le seul mot titi) et tata, (contenant le seul mot tata)
   2. Vérifier avec ls et less.
   3. Créer une archive du répertoire toto et de son contenu : 1
  1. les dièses sont des commentaires, ils ne sont pas à recopier

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                              8/21
Informatique, Formation des enseignants                                         DIU-EIL Exercices #2 – 2019

     tar -cvf toto.tar toto # crée l’archive
     ls -l toto.tar
     cat toto.tar
     tar -tvf toto.tar # donne le listing (le contenu)
  4. Créer un autre répertoire (Systeme/TP2/testtar, par exemple), y-mettre l’archive et la désarchiver à
     cet endroit (tar -xf). Supprimer ensuite le répertoire Systeme/TP2/toto.
  5. Compresser l’archive tar à l’aide de gzip (option -9 ou -l). Vérifier que l’archive compressée est moins
     grosse que l’archive initiale.
   Remarque : tar peut lui-meme faire appel à gzip (compression/décompression) en ajoutant l’option -z :
tar -cvzf toto.tgz toto pour compresser, par exemple.

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                         9/21
TD 3
                           Ordonnancement et contrainte

     3.1 Section critique et deadlock

     E XERCICE #1 Ï Problème d’accès concurrent
     Deux agences d’une banque veulent mettre à jour le même compte bancaire. Pour cela, l’agence de Nancy
     effectue :
         1. courant = get_account(1867A)
         2. nouveau = courant + 1000
         3. update_account(1867A, nouveau)
     et l’agence de Karlsruhe :
         A. aktuelles = get_account(1867A)
         B. neue = aktuelles -1000
         C. update_account(1867A, neue)

        1. En supposant que l’agence de Nancy commence en premier, quel sera le montant à l’issue des transac-
           tions ?

     E XERCICE #2 Ï dead-lock (interblocage en français) 1
     Toujours dans le cadre bancaire, nous allons utiliser deux nouvelles fonctions :
       — bloque(num_compte)
       — debloque(num_compte)
     la fonction bloque réserve le compte passé en argument. Si ce dernier est déjà réservé, elle bloque le pro-
     gramme appelant jusqu’à ce que le compte soit libéré par la fonction debloque.
         Votre programmeur vous propose d’implémenter le transfert d’argent comme cela :
 1   function transfert(from, to, montant):
 2      bloque(from)
 3      bloque(to)
 4
 5       cour = get_account(from)
 6       cour = cour -montant
 7       set_account(from, cour)
 8
 9       cour = get_account(to)
10       cour = cour + montant
11       set_account(to, cour)
12
13       debloque(to)
14       debloque(from)
        Lors des essais, vous constatez que certaines transactions restent irrémédiablement bloquées.
        1. Expliquez ce qu’il peut se passer.
        2. Donnez une correction.
       1. Merci à https://stackoverflow.com/questions/1385843/simple-deadlock-examples

     DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                      10/21
Informatique, Formation des enseignants                                                               DIU-EIL Exercices #3 – 2019

3.2 Ordonnancement

3.2.1 À priorités
E XERCICE #3 Ï Préemptif avec priorités
Nous utilisons un ordonnancement préemptif avec priorité 2 . Nous allons utiliser un jeu de tâches qui mélange
des tâches périodiques et des tâches ponctuelles.
        Tâche       Date(s) d’arrivée(s)          Priorité      Durée          Remarque
          A         0, 6, 12, 18, 24, 30 ...         10           1            Périodique
          B            0, 10, 20, 30 ...              8           4            Périodique
          C                    21                     9           6            Ponctuelle
          D                     0                     1           7            Ponctuelle
   1. Faire l’ordonnancement de ces tâches sur 32 unités de temps.
   2. Quel est le temps de réponse de chaque tâche ?
E XERCICE #4 Ï Ordonnancement collaboratif
Le système n’interrompt jamais une tâche, il ne reprend la main que si la tâche se termine ou fait une opération
bloquante. Supposons le jeu de tâches suivant :
        Tâche        Date(s) d’arrivée(s)         Priorité      Durée          Remarque
          A                   0                      4            5            au bout de 3 unités de calculs, la tâche
                                                                               laisse la main (yield) elle est immédiate-
                                                                               ment prête
            B                    1                    8            4           au bout de 2 unités de calculs, la tâche fait
                                                                               un read bloquant qui dure au moins 3 UC
           C                    10                    9            3
           D                     1                    5            4
   1. Faire l’ordonnancement sur 16 unités de temps.
E XERCICE #5 Ï Ordonnancement avec liste de priorité

  — Le système gère des listes de priorités.
  — On se place en mode préemptif c’est à dire que lorsqu’une tâche plus prioritaire arrive, le système lui
    donne immédiatement accès au processeur.
  — Pour des tâches de même priorité, le système utilise le Round Robin avec un quantum de 2.
        Tâche        Date(s) d’arrivée(s)         Priorité      Durée          Remarque
          A                   0                      4            5
          B                   1                      4            4
          C                   3                      8            6
   1. Faire l’ordonnancement sur 15 unités de temps.
E XERCICE #6 Ï Ordonnancement collaboratif
Le système n’interrompt jamais une tâche, il ne reprend la main que si la tâche se termine ou fait une opération
bloquante. Supposons le jeu de tâches suivant :
        Tâche        Date(s) d’arrivée(s)         Priorité      Durée          Remarque
          A                   0                      6            5            au bout de 3 unités de calculs, la tâche
                                                                               laisse la main (yield) elle est immédiate-
                                                                               ment prête
            B                    1                    8            4           au bout de 2 unités de calculs, la tâche fait
                                                                               un read bloquant qui dure au moins 3 UC
           C                    10                    9            3
           D                     1                    5            4
   1. Faire l’ordonnancement sur 16 unités de temps.
  2. Plus la valeur de priorité est importante plus la tâche est prioritaire

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                                                11/21
TD 4
     Algorithmes d’ordonnancement statique, tests
                  d’ordonnançabilité

Contexte Dans le cadre des systèmes temps-réel, il est important de produire des ordonnancements sta-
tiques, sur une période d’exécution. Les tâches se reproduiront ensuite de manière identique dans les périodes
suivantes. Les algorithmes qui suivent (RM, EDF) suivent le même schéma de choix, il s’agira de les exécuter
symboliquement sur la période en question. Pour la culture, ces algorithmes viennent aussi avec des CN, CS
ou CNS d’ordonnançabilité, qui permettent de conclure quelquefois dans faire les calculs.
    Ces exercices sont inspirés d’une feuille de TD de F. Singhoff, univ Brest, avec l’aimable autorisation de l’au-
teur. Ils ne seront pas effectués dans la semaine du bloc3, mais on vous les fournit gracieusement, pour aller plus
loin.

4.1 Un bout de cours
   Les deux algorithmes RM et EDF sont des algorithmes qui traitent le cas de tâches périodiques avec cha-
cune une période (Ti ou P i ), avec une échéance souvent égale à la période, et elles peuvent être réveillées au
début de leur période.
   L’algorithme d’ordonnancement est le suivant :

runnable = [false;...;false] ; cpt = [0;...;0]

(* faire avancer le temps d’un pas *)
forall i
   if cpt(i) = 0 then
      if runnable(i) then Stop(SchedulingError)
   else
        runnable(i)
Informatique, Formation des enseignants                                                     DIU-EIL Exercices #4 – 2019

                                                              Pn     Ci
   1. Test sur le taux d’utilisation avec ∀i : D i = P i :      i =1 P i   ≤ n(2(1/n) − 1) condition suffisante mais non
      nécessaire.
   2. Utilisation de la période d’étude : ordonnancement à comportement cyclique (propriété du modèle pé-
      riodique). Période d’étude = [0, P PC M (P i )] (si ∀i : S i = 0).
   3. Test sur le temps de réponse de la tâche i (noté r i ), avec D i = P i :

                                                                     ri
                                                                    » ¼
                                                             X
                                               ri = Ci +                 Cj
                                                          j ∈hp(i )  P j

      . On calcule itérativement ce test en utilisant cet algorithme :
                                  l wn m
        — w in+1 = C i + j ∈hp(i ) P i C j .
                         P
                                      j

        — Init : avec w i0 = C i .
        — Conditions d’arrêt : échec si w in > P i , réussite si w in+1 = w in .

Exercice 1 : ordonnancement à priorité fixe + Rate Monotonic
E XERCICE #1 Ï S
oient trois tâches périodiques T1, T2 et T3 définies par les paramètres suivants : S 1 = S 2 = S 3 = 0, P 1 = 29,C 1 =
7, P 2 = 5,C 2 = 1, P 3 = 10,C 3 = 2. On suppose un ordonnancement à priorité fixe avec une affection Rate Mono-
tonic des priorités. Les délais critiques sont égaux aux périodes (ie ∀ i : D i = P i ).
   1. Calculez le taux d’utilisation pour RM. Le jeu de tâches est il ordonnançable ?
   2. Dessinez, sur les 30 premières unités de temps, l’ordonnancement généré par RM, d’abord avec la ver-
      sion préemptive, puis, avec la version non préemptive (vous commencerez à la date zéro). Que constatez
      vous ?

4.3 Earliest deadline first (EDF)
Principe Le calcul de priorité consiste à déterminer une échéance. L’échéance D i (t ) d’une tâche i à l’instant
t est égale à la somme de la date de début de l’activation courante à l’instant t et du délai critique D i .
   La phase d’élection consiste à élire la tâche de plus proche échéance.

Test d’ordonnançabilité
   1. Test sur le taux d’utilisation :
                                     C
        — Cas ∀i : D i = P i : ni=1 P i ≤ 1 condition nécessaire et suffisante.
                               P
                                       i
                                         C                                        C
        — Cas ∃i : D i < P i : ni=1 Di ≤ 1 condition suffisante seulement, ni=1 P i ≤ 1 condition nécessaire
                                 P                                              P
                                           i                                        i
            uniquement.

   2. Utilisation de la période d’étude (propriété du modèle périodique).

E XERCICE #2 Ï EDF
Soient trois tâches périodiques T1, T2 et T3 définies par les paramètres suivants : S 1 = S 2 = S 3 = 0, P 1 = 12,C 1 =
5, P 2 = 6,C 2 = 2, P 3 = 24,C 3 = 5. Les délais critiques sont égaux aux périodes (soient ∀ i : D i = P i ).
   1. Calculez le taux d’utilisation du processeur. Concluez sur l’ordonnançabilité du jeu de tâches.
   2. Déterminer le nombre d’unités de temps libre sur la période d’étude (le ppcm des périodes, ie 24) (sans
      dessiner d’ordonnancement). On trouvera une formule liant ce nb à la période d’étude et le taux d’utili-
      sation.
   3. Confirmez les points précédents en dessinant, sur la période d’étude, l’ordonnancement généré par EDF,
      d’abord avec la version préemptive, puis, avec la version non préemptive.

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                                   13/21
TP 5
                            Utilisation du système Linux

5.1 Préambule
   Pour ce TP vous allez travailler sur 2 machines :
  — Votre PC ou un des PC de l’université ;
  — Un Raspberry Pi que vous emporterez à la fin du TP.
   Pour le PC, vous pouvez utiliser les PCs de l’université avec le système Linux. Si vous utilisez votre PC, vous
devez installer des logiciels :
  — Sous Windows le client ssh mobaXterm https://mobaxterm.mobatek.net/, sous Linux ou MacOS, le
    client ssh doit déjà être installé par défaut.
  — Sous MacOS, installer le serveur XQuartz https://www.xquartz.org/.
  — Le client vnc RealVnc Viewer : attention, c’est le seul qui fonctionne avec le Pi (à notre connaissance).
    Vous le trouverez ici : https://www.realvnc.com/fr/connect/download/viewer/.
   La plupart des commandes sont à faire via la connexion ssh, le client vnc utilise trop de réseau et sera peu
agréable dans notre situation. Vous ne l’utiliserez que lorsque cela sera précisé.

5.1.1 Les Raspberrys
   Les Pis que vous allez utiliser sont déjà installés avec une lègère modification par rapport au système
Raspbian (une distribution Linux bien adaptée pour les Pis, voir https://www.raspbian.org/) de base.
  — Nous avons changé le mot de passe de l’utilisateur par défaut pi ; demander à votre encadrant le nou-
    veau mot de passe (s’il ne le retrouve pas, dites lui que c’est « la réponse »).
  — Nous avons activé le serveur ssh et le serveur vnc : ils vont permettront de vous connecter sur votre Pi.
  — Nous avons ajouté un serveur de lecture de fichier multimédia, ce serveur est seulement partiellement
    fonctionnel, le but de ce TP est entre autres de le rendre fonctionnel.
  — Nous avons activé le wifi pour le TP. Votre Pi a un identifiant écrit dessus (entier entre 1 et 80). À partir de
    cet identifiant, vous obtiendrez son adresse IP sur le serveur en consultant le liste visible à cette adresse
    http://192.168.76.47/ (entrez cette adresse dans un navigateur web).

5.1.2 Premières connexions
    Pour travailler sur votre Pi depuis votre PC, vous allez utiliser des connexions ssh 1 : une telle connexion
permet d’ouvrir un terminal (essentiellement en mode texte), depuis un ordinateur vers une autre.
    L’un des buts du TP va être de « télécommander » votre Raspberry Pi comme un lecteur multimédia. Vous
devez imaginer que le Pi est branché à un écran qui affiche un lecteur multimédia (vlc). En l’occurrence, vous
ne disposez pas (tous) d’un écran connecté directement au Pi ; nous vous proposons donc l’astuce suivante :
vous allez mettre en place une connexion VNC 2 depuis votre PC vers le Pi. Cette connexion vous permettra
d’afficher dans une fenêtre « normale » ce qui s’afficherait sur un moniteur qui serait connecter au Pi.
    Dans cette partie, nous détaillons comment vous devez procéder pour vous connecter avec ssh et vnc sur
votre Raspberry Pi.

E XERCICE #1 Ï SSH/VNC
En premier lieu, vous devez brancher votre Pi, et obtenir son adresse IP sur le serveur d’adresses http://192.
168.76.47/ (l’adresse IP de votre Pi doit ressembler à 192.168.119.XXX). Pour vous connecter via ssh sur le
Pi :
  1. Pour Secure Shell
  2. Pour Virtual Network Computing ; c’est un protocole de contrôle de l’environnement de bureau d’un ordinateur distant.

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                                              14/21
Informatique, Formation des enseignants                                                               DIU-EIL Exercices #5 – 2019

   1. Sous Linux, ouvrez un terminal sur le PC et lancez la commande :
             ssh -XC pi@192.168.119.XXX
       où il faut que 192.168.119.XXX soit l’adresse de votre Pi. Pour la première connexion, le client ssh doit
       vous dire que le serveur est inconnu et vous demander s’il faut accepter la clef : c’est normal, tapez yes.
       Entrez ensuite le mot de passe.
   2. Sous Windows lancez mobaXterm, cliquez sur le bouton session, puis ssh et entrez :
         — 192.168.119.XXX commme serveur (en remplaçant XXX par la bonne valeur) ;
         — pi comme utilisateur ;
         — ne changez pas les autres options.
Vous avez maintenant un terminal texte connecté sur le Pi : les commandes que vous y entrez sont exécutées
dessus.
   Pour vous connecter au Raspberry Pi avec vncviewer, et ainsi obtenir une fenêtre correspondant à un
mini-écran du Raspberry Pi 3 :
   1. Lancez le logiciel vncviewer, fermez la fenêtre qui propose d’explorer le réseau et dans la fenêtre res-
      tante, entrez directement l’adresse de votre Pi.
   2. Le logiciel doit aussi mentionner que le serveur est inconnu et vous demander de le valider ce qu’il faut
      accepter.
   3. Entrez ensuite le login pi et le mot de passe dans la fenetre de login.
    Dans la suite du TP, vous aurez donc deux façons de vous connecter au Raspberry :
   — Le ou les terminaux ssh qui sont une méthode de connexion à distance essentiellement en mode texte.
   — La fenêtre VNC du Pi qui est l’équivalent virtuel de l’écran sur lequel vous pourriez brancher votre Rasp-
     berry si nous avions des adaptateurs disponibles pour ce TP.
Ce TP pourrait bien sûr être fait sans VNC en branchant simplement le Raspberry sur un écran, un clavier et
une souris disponible.

5.1.3 Choix de la sortie pour l’affichage graphique
    Nous vous proposons une petite expérience pour illustrer le fait qu’il est possible de choisir le terminal
(écran + clavier + souris) de sortie pour les fenêtres graphiques.

E XERCICE #2 Ï Terminal
Dans la fenêtre VNC connectée à votre Pi, cherchez dans le bandeau en haut le “Terminal”. Ouvrez un terminal
à partir de ce raccourci. Vous devez aussi disposer d’une connexion via ssh sur le Pi.

Première expérience :          Lancez le lecteur multimédia vlc en tapant dans le terminal de l’écran VNC :
vlc &
(on tape la commande, et on appuie sur Enter ). Sur le terminal ssh, tapez la même commande. Deux fenêtres
vlc ont dû apparaître : où s’affiche la fenêtre vlc dans chacun des cas ?

Seconde expérience : Regardez les variables d’environnement de chacun des terminaux (commande env)
notamment la variable DISPLAY (commande echo $DISPLAY) :
   1. Quelles différences voyez-vous ?
   2. Relancez le logiciel en inversant les valeurs :
         — DISPLAY=:10 vlc sur le terminal VNC du Pi. Où s’affiche la fenêtre ?
         — DISPLAY=:0 vlc sur le terminal ssh. Où s’affiche la fenêtre ?
   3. Comment cela fonctionne-t-il ? Qui décide de l’endroit où s’affiche les fenêtres ?
   3. La résolution est très faible car le Pi a été démarré sans écran, elle serait meilleure si nous avions pensé à commander des adapta-
teurs HDMI/USB, ce que nous avons oublié de faire (nous en sommes désolés)

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                                                   15/21
Informatique, Formation des enseignants                                             DIU-EIL Exercices #5 – 2019

5.2 Installer un logiciel
    Le raspberry est basé sur un système Debian dont le gestionnaire de paquet est apt. Nous allons l’utiliser
pour faire une simple installation.
    Particularité du réseau de l’université À l’université, sur le réseau dédié aux Pi, ces derniers n’ont pas
d’accès à internet (en référence à mardi dernier, ils sont sur un réseau privé sans NAT).
    Pour faire une installation, on doit utiliser un proxy web. La configuration normale est persistante et puisque
vous garderez ensuite le Pi, nous préférons éviter de l’utiliser. C’est pourquoi nous allons passer par une va-
riable d’environnement.
    Dans un shell ssh du Pi, tapez :
  export http_proxy=http://proxy.univ-lyon1.fr:3128
    Vous ferez toutes les commandes de cette partie depuis ce shell. De plus, les commandes sudo devront
utiliser l’option -E.

E XERCICE #3 Ï Installation de gedit

   1. Mettez d’abord à jour la base de données des logiciels disponibles :
             sudo -E apt update
      Le logiciel apt doit immédiatement se mettre à télécharger, s’il n’y parvient pas, c’est qu’il y a un pro-
      blème avec le proxy.
   2. Cherchez les paquets en rapport avec gedit
             # pas besoin d'être administrateur pour une recherche
             apt search gedit

   3. Installez le ou les paquets qui vous intéressent
             sudo -E apt install NOMDUPAQUET

5.3 Naviguer dans les répertoires

E XERCICE #4 Ï Expérimentations
Les manipulations suivantes vont vous permettre de créer une hiérarchie de répertoires, et de vous y-déplacer.
Vous ne devez utiliser que le terminal ssh.
   1. Vous venez de vous connecter/de lancer un terminal, dans quel répertoire vous trouvez-vous ?
   2. Faites les manipulations suivantes :
      cd
      pwd
      cd /tmp
      pwd
      cd ~
      pwd
   3. Regardez le résultat. A quel répertoire le ~ (tilde) correspond-il ?
      On peut toujours aller dans son répertoire principal / répertoire personnel / son “home” (en jargon
      système) en faisant simplement cd.
   4. Créez le répertoire diub3 dans votre répertoire principal :
      mkdir ~/diub3
      cd ~/diub3
      ou de façon équivalente avec :
      cd
      mkdir diub3
      cd diub3
   5. Affichez le contenu du répertoire avec ls (vous devez vous trouver dans diub3).

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                             16/21
Informatique, Formation des enseignants                                               DIU-EIL Exercices #5 – 2019

   6. Créez un fichier vide (dans le répertoire diub3) nommé foo.txt en tapant la commande :
      touch foo.txt
      Réaffichez le contenu du répertoire.
   7. ls peut également être utilisé comme cela :
      cd /tmp
      ls ~/diub3
   8. Faites cd ~/diub3 pour vous assurer que vous êtes dans le répertoire diub3 avant de continuer. . .
  9. Quel est le contenu de ce répertoire ?
 10. Créez un répertoire "toto", puis ré-affichez le contenu (pas du répertoire toto, mais du répertoire où
     vous vous trouvez, c.à.d. ~/diub3)
 11. Effacez le répertoire "toto", puis ré-affichez son contenu.
 12. Essayez d’effacer le répertoire "toto" à nouveau, que passe-t-il ?
 13. Faites la manipulation suivante :
      cd /tmp
      ls
      ls -a
      ls -l
     vous pouvez saisir également :
     ls -a -l ce qui est équivalent à ls -al
 14. Quelle est la différence d’affichage ? À quoi servent les options -l et -a ? (faire man ls pour lire la docu-
     mentation en ligne de ls).
 15. Supprimez le répertoire diub3 avec son contenu :
      cd ~
      rm -Rf diub3
      Regardez la doc de rm et dire pourquoi cette dernière commande est dangereuse.

E XERCICE #5 Ï Reproduction
En utilisant les commandes apprises précédemment :
   1. À la ligne de commande, créer la hiérarchie de la figure 5.1. Attention, les “/” ne sont là que pour signifier
                                                        ~

                                              Algo/         algo/   tmp/

                                           TP1/          TP1/   TP2/

                                        F IGURE 5.1 – Hiérarchie à réaliser.

      que ce sont des répertoires.
   2. Se placer dans le répertoire algo/TP1/ et y créer un fichier nommé tp1.py vide.
   3. Supprimer le fichier tp1.py et tout nettoyer.

5.4 Serveur média
     Sur le Raspberry Pi que nous vous avons fourni, nous avons déjà installé un serveur web écrit en Py-
thon, appelé serveurmedia. Vous pouvez déjà vous y connecter en entrant l’url http://192.168.119.XXX/
(adresse IP de votre Pi) dans votre navigateur web, sur votre machine locale : logiquement, un site web doit se
charger. Dans la suite du TP, vous allez modifier quelques lignes du serveur web, de façon à pouvoir comman-
der le lecteur multimédia vlc à distance, via ce site web.
     Le principe est le suivant : sur certaines actions, le serveur lance des commandes shell qui se trouvent dans
le fichier Python
/opt/TPMedia/commandes.py

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                              17/21
Informatique, Formation des enseignants                                                                  DIU-EIL Exercices #5 – 2019

Vous allez devoir modifier ce fichier pour le serveur commande vlc. L’idée de la série d’exercices qui suit est
de trouver les commandes à faire exécuter à notre site pour que votre Pi se transforme en serveur capable de
lire des fichiers vidéo et d’être piloté par le site web.

Remarque personnelle des formateurs. C’est une très mauvaise idée de faire comme cela, tout d’abord car
un serveur qui lance des commandes présente forcément des failles de sécurité. Si vous avez besoin de faire
ce genre de logiciel, sachez que python peut très bien effectuer l’ensemble du travail grâce à ses nombreuses
bibliothèques. Ce serait non seulement meilleur du point de vue de la sécurité mais aussi beaucoup plus fiable
et portable.
    Le programme du DIU vous demande d’enseigner la ligne de commande, cela ne sera sans doute jamais
utile à vos élèves, mais c’est le programme. C’est la seule raison pour laquelle nous faisons ce type de serveur
bancal aujourd’hui.
    Mais revenons à nos moutons. . .

5.4.1 Premières manipulations
E XERCICE #6 Ï Préparation
Ouvrez 3 terminaux ssh sur le Pi 4 .
   — Dans le premier terminal, tapez la commande :
             sudo journalctl -fu serveurmedia
       C’est un moyen de lire les logs (journaux) du service serveurmedia. Elle vous permettra de voir ce qui
       est affiché par le serveur.
   — Dans le deuxième terminal, vous pouvez tester vos commandes avant de les écrire dans le fichier commandes.py.
   — Dans le dernier, vous pourrez éventuellement relancer le service serveurmedia en cas de plantage où si
     vous supposez qu’il ne prend pas en compte vos modifications. Pour relancer le serveur, vous taperez :
             sudo systemctl stop serveurmedia
             sudo systemctl start serveurmedia

E XERCICE #7 Ï Lecture du film
Connectez-vous au serveur web, en entrant sur votre machine locale l’url http://192.168.119.XXX/ (tou-
jours remplacer XXX par votre adresse de Pi) dans votre navigateur web. La page qui s’affiche comporte nor-
malement un seul film 5 .
    Si vous cliquez sur le film, ce dernier est censé lancer la lecture du film sur l’écran du Pi (VNC) mais ce
n’est pour l’instant pas le cas. La commande utilisée est la commande com_lecture_list dans le fichier
/opt/TPMedia/commandes.py.
   1. Ouvrez ce fichier avec l’éditeur geany.
   2. Que fait la commande com_lecture_list ?
   3. Essayez de cliquer sur le film et regarder le résultat dans les logs du service.
   4. Essayez de lancer la lecture du film sur votre terminal ssh de façon à ce qu’il s’affiche sur l’écran vnc.
   5. Quand cela est au point, modifier la commande com_lecture_list et testez son fonctionnement. At-
      tention, n’utilisez pas l’option fullscreen de vlc dans cette configuration, cela rend l’écran vnc in-
      stable. Vous pourrez le faire lorsque votre Pi sera branché à un vrai écran.

E XERCICE #8 Ï Signaux
Votre serveur va devoir se comporter comme une télécommande pour vlc : l’utilisateur ne pourra pas cliquer
directement sur les boutons de la fenêtre vlc pour arrêter, stopper ou redémarrer la lecture. Il faut donc trouver
un moyen de commander vlc sans passer par les boutons de la fenêtre.
    Pendant que vlc tourne, regardons les processus en cours sur le Pi :
    4. Les personnes plus expérimentées et à l’aise pourront consulter le manuel de la commande screen, après avoir installé le paquet.
    5. Ce n’est peut-être pas le cas, l’installation des premiers pis ayant été un peu chaotique. Si ce n’est pas le cas, vous devriez pouvoir
cliquer sur le bouton “mise a jour” pour corriger le problème

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                                                       18/21
Informatique, Formation des enseignants                                               DIU-EIL Exercices #5 – 2019

   1. utilisez la commande
              ps auxf
      pour afficher l’arborescence des processus en cours. Et retrouvez le processus vlc.
   2. Quel processus est son père ? Et au démarrage qui a lancé ce programme ?
   3. Dans la 2ème colonne affichée par la commande se trouve l’identifiant pid du processus. Grâce à cet
      identifiant vous pouvez :
        — consulter les informations sur le processus dans le répertoire /proc/PID/
        — envoyer des signaux au processus grâce à la commande kill.
        — essayer d’envoyer les signaux SIGSTOP, SIGCONT ou SIGKILL au processus vlc ; pour cela il faut
          utiliser la commande :
                       kill -s NOMSIGNAL PID

        — Que se passe-t-il sur l’écran vnc ?
        — SIGKILL provoque la fin du processus, mais un ps nous montre qu’il est toujours existant avec la
          mention . Qu’est-ce que cela signifie ?
        — Reproduisez le comportement dans les commandes com_stop_vlc, com_pause_vlc et com_cont_vlc
          . La difficulté est de retrouver le numéro du signal. Les plus aventureux d’entre-vous pourront
          utiliser un mélange des commande shell ps, grep, sed et xargs. Les gens raisonnables pourront
          consulter le man de la commande killall.

5.4.2 Génération de la liste des films
E XERCICE #9 Ï Trouver des fichiers selon leur type avec un pipe
Pour le moment, il n’y a qu’un seul film possible. Vous devriez pouvoir explorer le système de fichiers pour
chercher les films disponibles.
    Tout d’abord on va préparer plusieurs films en « copiant » le film de départ sous plusieurs noms 6 . Copiez
coller les commandes suivantes dans un terminal du pi.
ln -s /mnt/Films/SamuelBeckett_En-attendant-Godot1989.france.TV.mp4 /mnt/Films/test1.avi
# Un premier fichier
ln -s /mnt/Films/SamuelBeckett_En-attendant-Godot1989.france.TV.mp4 /mnt/Films/test2.Avi
ln -s /mnt/Films/SamuelBeckett_En-attendant-Godot1989.france.TV.mp4 /mnt/Films/test3.ogg
ln -s /mnt/Films/SamuelBeckett_En-attendant-Godot1989.france.TV.mp4 /mnt/Films/test4.MP4
# et un dernier pour la route
ln -s /mnt/Films/SamuelBeckett_En-attendant-Godot1989.france.TV.mp4 /mnt/Films/test5.OGG

    La base de cet exercice est la commande find. Elle permet de trouver à partir d’un répertoire tous les
fichiers ayant un nom particulier (option iname).
  — Utilisez cette commande pour lister tous les fichiers dont le nom se termine par .mp4 et qui se trouvent
    dans un sous répertoire de /mnt
   La commande peut servir de point de départ à une autre (via un pipe).
  — Avec un pipe entre grep et find, utilisez la commande pour lister tous les films terminant par mp4, avi,
    ogg (sans tenir compte de la casse).
  — Modifiez la commande com_files_list du fichier commandes.py en conséquence.
  — Vérifiez que le serveur affiche désormais la liste de tous les fichiers disponibles. Pour cela copiez le fichier
    disponible sous d’autres noms et regénérez la liste.
  6. Ici, on utilise un lien symbolique ou raccourci sous windows

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                              19/21
Informatique, Formation des enseignants                                               DIU-EIL Exercices #5 – 2019

5.4.3 Plus avancé
E XERCICE #10 Ï Un peu de réseau
vlc est un logiciel déjà prévu pour être piloté à distance. Pour cela il est possible de le lancer avec un mini
serveur tcp qui reçoit des commande de pilotage.
    Changez la commande de lancement par
    com_lecture_list = "DISPLAY=:0.0 vlc -I rc --rc-host 0.0.0.0:8081 {}"
   Après avoir lancé le film, essayez de vous connecter sur l’interface de commande grâce à :
    nc localhost 8081
depuis un terminal ssh du pi.
   1. Retrouvez le moyen d’augmenter ou de diminuer le son de manière interactive.
   2. Trouvez une commande shell qui fait cette opération sans être interactive. Il faut
        — envoyer l’ordre via nc ;
        — sans que nc ne lise le résultat retourné par le serveur ;
        — de manière à ce que nc coupe immédiatement la connexion.
      Tout est expliqué dans man nc.
   3. Modifiez les commandes com_soundup_vlc et com_sounddown_vlc du fichier commandes.py pour que
      cela fonctionne sur le site de pilotage.

5.4.4 Très avancé, hackez le serveur !
   Le serveur proposé est particulièrement instable et vulnérable. En fait, les commandes proposées sont
exécutées via la ligne de commande Python :
  proc = sub.Popen(com, shell=True, stdout=sub.PIPE, stderr=sub.PIPE)
L’option shell=True est fortement déconseillée car elle exécute la commande directement dans un shell. De
plus, la commande de lancement de vlc (com_lecture_list) intègre une partie issue de l’utilisateur sans
aucune protection.

E XERCICE #11 Ï Aie !
Sachant que lorsque vous tapez :
    com1; com2
dans un shell les deux commandes sont exécutées à la suite.
   Sachant de plus que le serveur est lancé avec l’identité de l’utilisateur pi qui a le droit de faire sudo :
   1. Trouvez un nom de fichier capable de modifier le système, par exemple en créant un utilisateur pirate
      membre du groupe sudo.
   2. Comment corriger ce type de problème ?

5.5 Et la suite. . .

5.5.1 Nettoyez votre Pi
   Puisque vous ramenez le Pi chez vous il est raisonnable de supprimer quelques installations :
  — Supprimez la ligne qui demande au Pi de s’enregistrer sur le site d’adresse au démarrage dans le fichier
      /etc/rc.local
           /usr/local/bin/declare_ip.sh wlan0 66 http://192.168.76.47/rec

  — Supprimez les clefs ssh publiques de vos encadrants dans les fichiers /home/pi/.ssh/authorised_keys
    et /root/.ssh/authorized_keys.
  — Supprimez le compte autosave

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                                  20/21
Informatique, Formation des enseignants                                                          DIU-EIL Exercices #5 – 2019

   — Changez le mot de passe du compte pi
   — Ne démarrez plus les services nginx et serveurmedia automatiquement :
            sudo systemctl disable nginx
            sudo systemctl disable serveurmedia

5.5.2 Utilisation éventuelle de ce TP
    Vous pouvez bien sûr nous demander les sources de ce TP pour l’adapter et le faire à vos élèves. Nous vous
serons reconnaissants dans ce cas de nous envoyer les améliorations éventuelles.
    Nous tenons à votre disposition :
   — les scripts d’installations du pi (un a faire sur la carte SD avant le boot du pi, un autre a faire via ssh)
   — le site web serveurmedia qui est un simple site django avec 5 vues. À part l’apprentissage de Django (cf
     https://tutorial.djangogirls.org/fr/) il n’y a pas grand chose de compliqué. Tout est effective-
     ment fait dans les commandes bash 7 .
   — le site du serveur d’adresse lui encore en Django.

5.5.3 Et en Python
   Un certain nombre de commandes système ont une interface Python : on peut évidemment utiliser avec
pincettes la méthode system du module os.

import os
os.system('ls -l')

On préférera cependant d’autres fonctions du même module :
   — par exemple os.walk pour se promener dans des répertoires :

       import os
       folder_path = "../"
       for path, dirs, files in os.walk(folder_path):
          for filename in files:
              print(filename)

       imprime tous les fichiers du répertoire parent.
   — chdir, . . . (regarder https://docs.python.org/fr/3.5/library/os.html#os-file-dir) pour réa-
     liser les changements de répertoire.
    et plein d’autres fonctions encore, souvent valables indifféremment sur Windows ou Linux. Pour réaliser
les recherches avec expressions régulières, le module glob fait souvent le café :

import glob
print(glob.glob("../*.png"))

    imprime la liste des fichiers d’extension png du répertoire parent. Et encore https://docs.python.org/
3/library/pathlib.html#operators
   Finissons en citant la librairie signal https://docs.python.org/3/library/signal.html et les so-
ckets https://python-django.dev/page-reseaux-sockets-python-port.

   7. Ajoutons cependant que la suppression des processus zombi par une requete récurente traitée intégralement en python est assez
technique. Mais elle n’est pas essentielle ici.

DIU-EIL Lyon1 - bloc 3 (Système) https://diu-eil.univ-lyon1.fr/                                                             21/21
Vous pouvez aussi lire
DIAPOSITIVES SUIVANTES ... Annuler