🐧 Edge Linux Debian · diagnostic & exploitation

Chapitre 01
Contexte edge & poste d'ingénierie

Objectifs du chapitre

1. Qu'est-ce qu'un edge device ?

Un edge device (ou edge gateway) est un petit ordinateur industriel placé au plus près de la machine — dans l'armoire électrique, sur le réseau OT — dont le rôle est de faire le pont entre le monde de l'automate et le monde informatique. Concrètement, sur notre cellule il fait trois choses :

Matériellement, c'est souvent un PC industriel fanless (type IPC Siemens, Advantech, ou un Raspberry Pi durci) sous Debian ou une Debian dérivée. Peu de RAM, un disque SSD ou une carte industrielle, pas d'écran : on l'administre uniquement à distance.

Historian / MQTT côté IT / supervision Pare-feu IT/OT Edge Debian edge-cell12 Docker · chrony · sshd données → Laptop ingénierie ssh 🔑 ssh Switch OT (anneau MRP) CPU S7-1500 ET 200SP ↑ OPC-UA 4840 · NTP 123 ↑
Figure 1.1. L'edge (contour bleu) est au carrefour : côté OT il parle à l'automate (OPC-UA) et lui sert l'heure (NTP) ; côté IT il remonte les données à travers le pare-feu. Le laptop d'ingénierie (contour ambre) s'y connecte en ssh — c'est notre unique porte d'entrée pour tout le cours.

2. Le socle logiciel qu'on va manipuler

Inutile de tout connaître d'un coup ; voici la carte des briques et le chapitre qui les traite.

BriqueRôle sur l'edgeChapitre
sshdserveur SSH — l'accès distant depuis le laptop2
systemdgestionnaire de services (démarrage, redémarrage, dépendances)3
journaldjournalisation centralisée de tout le système4
chronyclient & serveur NTP — l'horloge de la cellule5
Dockerexécution du service applicatif en conteneurs6–7
tar/rsync/timerssauvegarde & restauration8

Le fil conducteur du cours est un service edge conteneurisé — appelons-le edge-gateway — décrit par un fichier docker-compose.yml et lancé au boot par une unité systemd. Autour de lui gravitent l'horloge (chrony), les journaux (journald) et l'accès (sshd). Quand « le service edge ne répond plus », le coupable est presque toujours l'une de ces briques : le cours t'apprend à les inspecter dans l'ordre.

3. Pourquoi Debian + systemd + Docker ?

Trois choix omniprésents sur les edges industriels, qu'il vaut la peine de comprendre :

4. Se connecter la première fois

Depuis le laptop, on ouvre une session SSH vers l'edge. On détaille SSH au chapitre 2 ; ici, la version minimale pour arriver au shell :

laptop:~$ ssh maint@192.168.0.10
The authenticity of host '192.168.0.10' can't be established.
ED25519 key fingerprint is SHA256:9r0c...k8Qe.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
maint@192.168.0.10's password: (saisie masquée)
Linux edge-cell12 6.1.0-18-amd64 #1 SMP Debian 6.1.76-1 x86_64
Last login: Tue Jul  1 08:12:03 2026 from 192.168.0.50
maint@edge-cell12:~$

Trois choses à noter sur ce premier contact :

Attention à tu tapes tes commandes. Une erreur classique : lancer un reboot ou un docker compose down en croyant être sur le laptop alors qu'on est dans la session SSH sur l'edge. Regarde toujours l'invite. Un bon réflexe : personnaliser le prompt de l'edge (couleur, hostname en évidence) pour qu'aucune confusion ne soit possible.

5. Prendre ses repères sur une machine inconnue

Tu hérites souvent d'un edge que quelqu'un d'autre a installé. Avant toute action, on fait le tour du propriétaire. Ces commandes sont en lecture seule : aucun risque.

Qui suis-je, quelle machine, quel OS ?

maint@edge-cell12:~$ hostnamectl
 Static hostname: edge-cell12
       Icon name: computer-embedded
     Machine ID: 4f6c9d2b1a...e3
        Boot ID: 7a1e...9c
Operating System: Debian GNU/Linux 12 (bookworm)
          Kernel: Linux 6.1.0-18-amd64
    Architecture: x86-64

Depuis combien de temps tourne-t-elle, et est-elle chargée ?

maint@edge-cell12:~$ uptime
 08:20:14 up 87 days,  3:41,  1 user,  load average: 0.18, 0.22, 0.20

87 jours d'uptime : la machine est stable. Le load average (0.18 sur 1 minute) est faible — un edge n'est pas censé être très chargé ; s'il l'est, c'est déjà un signal.

Reste-t-il de la place disque ? (le tueur silencieux nº 1)

maint@edge-cell12:~$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        58G   19G   36G  35% /

Sur un edge, la panne la plus fréquente n'est pas exotique : c'est le disque plein. Des logs qui gonflent, des images Docker qui s'accumulent, une sauvegarde oubliée sur place… et à 100 % d'occupation, les conteneurs ne redémarrent plus, la base locale se corrompt, le journal cesse d'écrire. Le tout premier réflexe de diagnostic, avant même de regarder le service, c'est df -h. On y reviendra aux chapitres 4, 6 et 8.

Que tourne-t-il déjà ? (aperçu)

maint@edge-cell12:~$ systemctl --failed
  UNIT  LOAD  ACTIVE  SUB  DESCRIPTION
0 loaded units listed.
# Aucun service en échec : bon signe. On détaille systemctl au chapitre 3.

maint@edge-cell12:~$ docker ps --format 'table {{.Names}}\t{{.Status}}'
NAMES              STATUS
edge-gateway       Up 87 days (healthy)
edge-mqtt          Up 87 days
# Le service applicatif et son broker tournent. Détails au chapitre 6.

Un tour de reconnaissance en quatre commandes, à faire à chaque prise en main : hostnamectl (quelle machine), uptime (depuis quand / charge), df -h (place disque), systemctl --failed + docker ps (état des services). En moins d'une minute, tu sais si tu arrives sur une machine saine ou sur un incident en cours.

6. La règle d'or : observer avant d'agir

Un edge en marche remonte les données d'une ligne en production. Le redémarrer, arrêter un conteneur, changer une config réseau : tout cela a des conséquences visibles côté exploitation. La discipline, identique à celle du cours réseau, tient en une phrase : on lit l'état (journaux, systemctl status, docker logs) avant de toucher quoi que ce soit, et on ne redémarre qu'en connaissance de cause.

Deux gestes qui coupent l'accès distant — donc à proscrire à l'aveugle : (1) reconfigurer le réseau ou sshd sans filet (chapitre 2 montre comment garder une porte de secours) ; (2) un reboot « pour voir » sur une machine à laquelle tu n'as que l'accès SSH : si elle ne remonte pas, tu es aveugle et il faut envoyer quelqu'un sur site. Sur un edge, le redémarrage est un acte réfléchi, pas un réflexe.

Récapitulatif

Exercices

Exercice 1 — Le tour de reconnaissance

Tu prends la main sur un edge inconnu. Écris la suite de commandes qui te dit, en moins d'une minute : quel OS, depuis quand il tourne, combien de place disque il reste, et quels services sont en échec.

Voir la solution
$ hostnamectl | head -3      # hostname + OS
$ uptime                      # uptime + charge
$ df -h /                     # place disque sur la racine
$ systemctl --failed          # services en échec

On peut tout enchaîner d'un coup : hostnamectl; uptime; df -h /; systemctl --failed. L'ordre n'a pas d'importance puisque ces commandes ne modifient rien. Le seul chiffre qui doit déclencher une alarme immédiate : une colonne Use% proche de 100 % sur /.

Exercice 2 — Laptop ou edge ?

Tu as deux terminaux ouverts et tu ne sais plus lequel est la session SSH sur l'edge. Quelle commande unique tranche à coup sûr, sans rien risquer ?

Voir la solution
$ hostname
edge-cell12          # → c'est la session sur l'edge
# vs sur le laptop :
$ hostname
eng-laptop

hostname (ou hostnamectl) est imparable. Encore mieux à long terme : configurer le prompt de l'edge pour qu'il affiche le hostname en couleur — la confusion devient alors impossible d'un simple coup d'œil, sans taper de commande.

Exercice 3 — Pourquoi pas un reboot ?

Un collègue propose : « le service déconne, on reboote l'edge, ça repartira ». Cite deux raisons de ne pas le faire tout de suite, et ce que tu regardes d'abord.

Voir la solution

Deux raisons : (1) si la machine ne remonte pas (config au boot cassée, disque plein, service enabled qui échoue), tu perds ton unique accès distant et il faut se déplacer physiquement ; (2) un reboot efface l'état courant — les journaux en RAM, les conteneurs en train de logger l'erreur — donc tu détruis les preuves avant d'avoir compris la panne.

Ce qu'on regarde d'abord : df -h (disque plein ?), systemctl status edge-gateway et docker logs (que dit le service ?), journalctl -p err -b (erreurs depuis le boot). Neuf fois sur dix, la cause se lit dans les logs et un simple restart ciblé suffit — sans reboot. On construit cette démarche complète au chapitre 9.