💻 TP : Découverte de l’infrastructure et des outils

1. Présentation et objectifs

Les travaux pratiques de ce cours peuvent avoir l’air un peu intimidants : beaucoup d’outils différents, beaucoup d’actions à réaliser dans un terminal Linux, des projets assez complexes à comprendre et à manipuler, etc.

Ce premier TP vise à vous rendre opérationnels quant à l’usage des outils de base, ainsi que l’usage des services fournis par l’infrastructure à notre disposition.

Les objectifs de ce TP sont donc de :

  • générer votre première clé SSH personnelle,

  • vous familiariser avec l’interaction avec le serveur de déploiement, avec :

    • une connexion à l’aide du protocole SSH,

    • l’envoi de fichiers avec scp,

    • modifier des fichiers texte à distance.

  • essayer quelques déploiements "à la main" dans un environnement limité (et sans conteneurisation), et constater certaines difficultés

Non seulement tout cela vous sera utile pour être à l’aise pour les TPs suivants, mais cela vous permettra également de prendre conscience des tâches manuelles habituellement nécessaires pour manipuler un serveur distant.

Avant de vous lancer sur le TP, il est fortement recommandé de lire à minima le début de la 🗒️ Notice : infrastructure et outils, et d’ouvrir dans un onglet l’autre notice (🗒️ Notice : environnement de déploiement) qui servira tout au long du TP. Gardez également ouvert le chapitre 📘 Déploiement de logiciel

2. Usages principaux du serveur de déploiement

Une part importante des TPs nécessite l’usage du serveur de déploiement mis à votre disposition. Apprenons à manipuler manuellement ce serveur.

2.1. Connexion SSH par mot de passe

  1. Ouvrez un terminal, puis suivez les instructions pour vous connecter par SSH à l’aide d’un mot de passe dans la 🗒️ Notice : environnement de déploiement.

  2. Si tout va bien, vous êtes désormais connecté au serveur ! Par défaut vous êtes dans votre répertoire utilisateur spécifique à ce serveur. Pour voir l’emplacement de ce répertoire sur le serveur, faites pwd. Ce répertoire est initialement vide, et ne contient pas les données de votre répertoire étudiant habituel. Pour le constater, faites la commande ls, et constatez que vous n’avez aucun retour (car il n’y a aucun fichier).

  3. Créez un nouveau répertoire appelé tp-decouverte-serveur à l’aide de la commande :

    [sur l’environnement de déploiement distant]
    $ mkdir tp-decouverte-serveur
  4. Rendez vous dans ce répertoire à l’aide de la commande :

    [sur l’environnement de déploiement distant]
    $ cd tp-decouverte-serveur
  5. Suivez les instructions pour créer et éditer un fichier depuis le terminal toujours dans la 🗒️ Notice : environnement de déploiement. Préparez un fichier avec pour nom hello.txt, et avec pour contenu "Hello world!". Une fois l’édition terminée, utilisez la commande cat hello.txt pour vérifier le contenu du fichier.

  6. Enfin, fermez votre connexion SSH à l’aide de la commande exit.

2.2. Générer sa clé SSH personnelle

  1. Ouvrez un terminal, puis suivez les instructions pour générer votre clé SSH personnelle dans la 🗒️ Notice : infrastructure et outils.

    Si vous faites ce TP en binôme, vous devez faire cette étape pour chaque membre du binôme, en se connectant à chaque fois sur la session du membre concerné !
  2. Pour vérifier que vous avez réussi cette étape, ouvrez un terminal et faites la commande :

    [sur votre poste de travail local]
    $ ls ~/.ssh

    Si vous voyez les fichiers id_ecdsa.pub et .ssh/id_ecdsa, c’est que tout est OK, et vous pouvez passer à la suite.

2.3. Connexion SSH avec clé SSH

2.4. Envoi de fichiers vers le serveur

Nous avons vu comment créer des fichiers directement depuis le serveur, cependant l’édition depuis le terminal n’est pas le plus pratique. Voyons désormais comment préparer des fichiers sur votre poste Linux, avant de les transférer par le réseau jusqu’au serveur.

  1. Sur votre poste Linux, préparez un nouveau répertoire appelé tp-decouverte-envoi.

  2. Dans ce répertoire, préparez :

    • un premier fichier appelé envoi1.txt avec pour contenu "Ceci est mon premier envoi"

    • un sous-répertoire appelé envoi2 et contenant :

      • un fichier appelé envoi2_a.txt avec pour texte "Ceci est le premier fichier de mon second envoi",

      • un fichier appelé envoi2_b.txt avec pour texte "Ceci est le second fichier de mon second envoi".

  3. Ouvrez un terminal, puis suivez les instructions pour envoyer un fichier toujours dans la 🗒️ Notice : environnement de déploiement. Vous devez transférer le fichier envoi1.txt, et le déposer dans le répertoire tp-decouverte-serveur situé sur le serveur de déploiement.

  4. Ouvrez un second terminal, et connectez vous par SSH sur le serveur, puis allez vérifier que votre fichier est bien présent dans le répertoire tp-decouverte-serveur. Utilisez la commande cat pour vérifier le contenu du fichier.

  5. Dans le premier terminal, faites un nouveau transfert afin de copier le répertoire envoi2 au sein du répertoire tp-decouverte-serveur situé sur le serveur de déploiement.

  6. Dans le second terminal, allez vérifier que l’envoi du répertoire a bien fonctionné. Utilisez la commande cat pour vérifier le contenu des deux fichiers qui étaient dans le répertoire envoyé.

3. Comprendre un peu l’environnement de déploiement

3.1. Carte d’identité de l’environnement

Il est utile de se renseigner sur l’environnement sur lequel on intervient, notamment connaître son système d’exploitation.

Une première façon de connaître le système d’exploitation d’un environnement Linux est de lire contenu du fichier standard /etc/os-release, par exemple avec la commande suivante :

[sur l’environnement de déploiement distant]
$ cat /etc/os-release
  • Exécutez cette commande sur l’environnement de déploiement étudié, et déterminez quel est le système d’exploitation et sa version en lisant les clés NAME et VERSION.

Une seconde façon de connaître le système d’exploitation, ainsi que d’autres informations utiles, est d’exécuter l’outil hostnamectl, souvent (mais pas toujours) disponible dans un environnement Linux :

[sur l’environnement de déploiement distant]
$ hostnamectl
  • Exécutez cette commande sur l’environnement de déploiement étudié, et déterminez quel est le système d’exploitation et sa version en lisant la clé Operating system. Observez également les autres clés disponibles, par exemple la clé Chassis qui décrit le type de machine (laptop pour un ordinateur portable, vm pour une machine virtuelle, etc).

3.2. Variables d’environnement

Dans le chapitre 📕 Logiciel et exécution, nous avons rappelé le méchanisme de variable d’environnement, qui permet de poser des variables dans un environnement notamment en vue de configurer un logiciel à déployer.

Pour jouer un peu avec ce méchanisme, dans l’environnement de déploiement :

  1. Exécutez la commande printenv et constatez qu’un ensemble important de variables sont définies par défaut dans l’environnement.

  2. Utilisez la commande export pour créer une nouvelle variable d’environnement MAVARIABLE avec la valeur "mavaleur", puis constatez que votre variable est bien affichée dans printenv.

  3. Utilisez la commande echo pour afficher le contenu de MAVARIABLE, en n’oubliant pas de préfixer le nom de la variable avec $.

3.3. Droits d’accès

Dans le chapitre 📕 Logiciel et exécution, nous avons rappelé le méchanisme de droit d’accès, qui permet de limiter dans un environnement quelles actions peuvent être réalisées par des utilisateurs et/ou des processus logiciels.

Pour observer grossièrement certains droits d’accès en place sur dans l’environnement de déploiement :

  1. Exécutez la commande touch ~/fichier_temporaire pour créer un nouveau fichier appelé fichier_temporaire dans votre répertoire utilisateur (dénoté par ~). Puis, utilisez la commande ls pour vérifier que ce fichier a bien été créé. Constatez que tout s’est bien passé (le fichier a été créé), puis supprimez le fichier avec rm. Cela confirme que vous avez tous les droits dans votre répertoire utilisateur.

  2. Exécutez la commande touch /etc/fichier_temporaire pour créer un nouveau fichier appelé fichier_temporaire dans le répertoire système /etc. Constatez que cette action n’est pas autorisée, car votre compte de possède pas les droits suffisants.

  3. Exécutez la commande apt install git pour installer un nouveau logiciel (à savoir git) dans les logiciels système de l’environnement de déploiement. Constatez à nouveau que cette commande échoue : en effet, apt cherche à installer le logiciel au sein des données sytème (répertoire /usr/bin notamment), or votre compte utilisateur ne possède pas le droit d’écrire dans les données systèmes.

En résumé, vos droits sur l’environnement de déploiement sont très limités ! En particulier, sans les droits root, il n’est pas facilement possible d’installer des logiciels ou des dépendances logicielles…

4. Quelques petits déploiements (sans conteneurs)

Dans cette dernière partie, tentons de déployer des petits programmes sur l’environnement de déploiement.

Les programmes peuvent être trouvés en visitant cette page web. Dans cette partie on ne s’intéresse qu’aux quatre premiers programmes (on ne traitera pas 5_economic_dispatch).

Ici le terme "déploiement" est légèrement exagéré, car il sera question de très petits logiciels jouets qui ne rendent peu ou pas de services concrets, et qui ne fonctionnent pas en service continu.

4.1. replace_string

Sur la page web avec les différents programmes, rendez-vous dans le répertoire 1_replace_string.

  1. Lisez bien le README qui vous est présenté, et qui affiche la documentation technique et utilisateur de l’outil.

  2. Téléchargez replace_string.py sur votre machine de TP, puis vous transférez ce fichier dans l’environnement de déploiement.

  3. Testez l’outil sur l’environnement de déploiement :

    1. Créez un nouveau fichier de votre choix, et mettez-y le contenu exemple proposé dans le README

    2. Exécutez l’outil pour remplacer le mot bottle par le mot de votre choix.

Tout fonctionne comme prévu ? Si oui, répondez aux questions suivantes :

  1. Quelle dépendance est requise pour faire fonctionner 1_replace_string ?

  2. Avez-vous vérifié que cette dépendance était présente dans l’environnement de déploiement avant de déployer ?

  3. Comment vérifier que cette dépendance est bien présente dans l’environnement de déploiement ?

La plupart des logiciels exécutables dans un terminal savent répondre à l’option --version, qui permet de juste vérifier que le logiciel existe est quelle version est installée.

4.2. compress_file

Sur la page web avec les différents programmes, rendez-vous dans le répertoire 2_compress_file.

Suivez le même principe que pour le programme précédent (replace_string) : lisez bien la documentation, puis déployez le logiciel sur l’environnement de déploiement, et enfin tentez de l’exécuter sur un exemple que vous aurez préparé.

  1. Que se passe-t-il à l’exécution ?

  2. Est-ce que la dépendance requise est bien présente comme souhaité ?

  3. Peut-on installer la dépendance requise ? Si non, pourquoi ?

La fonction zstd.compress a été ajoutée uniquement dans la version Python 3.14, et n’est pas disponible avec Python 3.13.

4.3. print_colored_string

Sur la page web avec les différents programmes, rendez-vous dans le répertoire 3_print_colored_string.

Suivez le même principe que pour les programmes précédents : lisez bien la documentation, puis déployez le logiciel sur l’environnement de déploiement, et enfin tentez de l’exécuter sur un exemple que vous aurez préparé.

  1. Que se passe-t-il à l’exécution ?

  2. Est-ce que les dépendances requises sont bien présentes comme souhaité ?

  3. Peut-on installer les dépendances requises ? Si non, pourquoi ?

4.4. TicTacToe

Sur la page web avec les différents programmes, rendez-vous dans le répertoire 4_tictactoe.

Suivez le même principe que pour les programmes précédents : lisez bien la documentation, puis déployez le logiciel sur l’environnement de déploiement, et enfin tentez de l’exécuter sur un exemple que vous aurez préparé.

  1. Que se passe-t-il à l’exécution ?

  2. Est-ce que la dépendance requise est bien présente comme souhaité ?

  3. Peut-on installer la dépendances requise ? Si non, pourquoi ?

4.5. Synthèse

Avec ces petits déploiements, vous avez pu commencer à découvrir les besoins que peut avoir un logiciel lorsqu’il faut le déployer, quelques exemples de problèmes de dépendances (mauvaise version, bibliothèque manquante, logiciel manquant, etc.) ainsi que les caractéristiques de l’environnement de déploiement (droits limités, logiciels pré-installés limités).

Le prochain TP vous montrera comment se libérer de ces contraintes en créant vos propres environnements sous la forme d’un conteneurs !