Dépannage et debugging

Introduction

Pour conclure, nous vous proposons ce chapitre afin de vous aider à débloquer votre serveur dans certaines situations. Il a notamment été élaboré à partir des problèmes rencontrés par l’auteur, parfois au cours de la rédaction.

Pour dépanner efficacement, lisez attentivement les éventuels messages d’erreur : ils vous apporteront parfois directement la solution au problème.

Il existe de nombreuses autres pannes possibles que celles présentées dans ce chapitre. Si vous souhaitez éviter de faire appel à un professionnel, vous devrez effectuer des recherches approfondies lorsque vous rencontrerez un problème. Les forums de discussion anglophones, tels que stackoverflow.com, unix.stackexchange.com ou linuxquestions.org, constitueront des ressources précieuses.

Mises à jour

1. Update bloqué

Problème rencontré

Il est impossible d’effectuer une mise à jour, car l’erreur suivante se produit :

E: The repository 'http://deb.debian.org/debian bullseye-backports Release' no longer has a Release file  

Situation dans laquelle cela se produit

sudo apt update  

Signification

Le dépôt de mises à jour concerné a été déplacé vers archive.debian.org.

Résolution

Il faut donc modifier l’entrée correspondante dans le fichier /etc/apt/sources.list.

deb http://archive.debian.org/debian bullseye-backports main contrib non-free  

2. Upgrade bloqué

Problème rencontré

Il peut arriver que la mise à niveau d’un paquet donné échoue :

file:///tmp/apt-dpkg-install-CV5dw9/<paquet>.deb%20E:%20Sub-
process%20/usr/bin/dpkg%20returned%20an%20error%20code%20(1)  

Situation dans laquelle cela se produit

sudo apt upgrade  

Signification

La mise à niveau d’un paquet a échoué. Le paquet est normalement inutilisable.

Résolution

Il faut réparer la mise à niveau en suivant les étapes ci-dessous :

Étape 1 :

Reconfigurer dpkg

sudo dpkg --configure -a  

Étape 2 :

Réparer la mise à niveau en échec si des erreurs persistent

sudo apt install -f  

Services généraux

1. Le service a échoué

Problème rencontré

Lors de l’administration de votre serveur, vous avez peut-être constaté l’échec de l’un de vos services, soit en consultant la liste des services démarrés, soit en remarquant qu’une tâche planifiée ne s’exécute pas ou plus.

Illustrons cette situation par un exemple réel de service personnalisé en échec.

Situation dans laquelle cela se produit

Un service personnalisé chargé de la rotation des archives ne s’exécute pas. Un nombre important d’archives (542) est en effet visible dans leur répertoire de stockage, ce qui occupe également un espace disque non négligeable :

alex@mysrv:~$ ls -lh /home/alex/backup/old/ | wc -l 
542 
alex@mysrv:~$ ls -lh backup/old/ 
total 182M 
[...]  

Sans intervention rapide, plusieurs gigaoctets d’espace disque pourraient être occupés inutilement au bout de quelques mois.

Si nous ne nous souvenons pas du nom du service concerné, il suffit de répertorier l’ensemble des services, quel que soit leur état :

alex@mysrv:~$ systemctl list-units --type=service --all  

Nous trouvons alors le service qui nous intéresse, à condition de lui avoir attribué un nom et une description explicites :

UNIT                         LOAD    ACTIVE  SUB       
custom_backup_rotation.service   loaded  failed  failed  

Examinons-le plus en détail :

alex@mysrv:~$ systemctl status custom_backup_rotation.service 
× custom_backup_rotation.service 
     Loaded: loaded (/etc/systemd/system/custom_backup_rotation.service; static) 
     Active: failed (Result: exit-code) since Tue 2025-09-16 21:10:03 CEST; 22h ago 
   Duration: 6ms 
TriggeredBy: ● custom_backup_rotation.timer 
   Main PID: 2445464 (code=exited, status=127) 
        CPU: 4ms  

Consultons le fichier qui définit ce service :

alex@mysrv:~$ sudo systemctl cat custom_backup_rotation.service ...

Services liés au web

1. PHP

Problème rencontré

L’un de nos sites s’affiche avec des erreurs ou présente du contenu manquant.

Situation dans laquelle cela se produit

Le problème est visible dans le navigateur du client. Le serveur peut également renvoyer un code HTTP 500.

Signification

Nous savons que le site concerné, qui utilise PHP, est relativement ancien. Il a initialement été développé avec PHP 7.3, tandis que le serveur utilise PHP 8.2. Il est donc probable que certaines fonctions employées ne soient plus compatibles avec cette version.

Le détail des erreurs peut être consulté dans les fichiers journaux du site :

tail -3 /var/www/site1/logs/error.log 
[...] 
PHP Warning:  preg_match_all(): Compilation failed: invalid range in character class at offset 4 in /var/www/site1/html/contents/simple_html_dom.php on line 690, 
[...] 

Résolution

Plusieurs solutions sont possibles. Elles sont présentées ci-dessous par ordre de préférence :

Adapter le code afin qu’il fonctionne avec PHP 8.2. Si la quantité de code source à modifier est limitée, cette solution est à privilégier.

Remplacer PHP 8.2 par PHP 7.3, au risque de rendre incompatibles les autres sites, plus récents.

Installer PHP 7.3 en parallèle de PHP 8.2. Cette solution, plus simple à mettre en œuvre à court terme, n’est pas détaillée dans cet ouvrage.

Déplacer le site concerné vers un serveur dédié à cet usage. Cette solution implique toutefois de maintenir un deuxième serveur.

Les solutions qui maintiennent PHP 7.3 sont à éviter : cette version n’est plus prise en charge depuis le 6 décembre 2021 et expose le serveur à des risques de sécurité. La première solution est donc la seule recommandée.

2. Apache - 1

Problème...

SSH

1. Cas 1

Problème rencontré

SSH n’accepte pas notre clé publique.

Situation dans laquelle cela se produit

Même après avoir copié la clé publique sur le serveur, celui-ci ne l’accepte pas. Nous devons alors nous authentifier avec le mot de passe du compte distant :

alex@y510p:~$ ssh alex@srvtest 
alex@srvtest's password:  

Sur le serveur, suivons en temps réel le journal du service SSH, puis tentons simultanément une nouvelle connexion depuis le client :

alex@srvtest:~$ sudo journalctl -u ssh.service --since today -f 
[...] 
Oct 03 19:00:32 srvtest sshd[1308]: Authentication refused: 
bad ownership or modes for directory /home/alex  

Signification

Le message indique que l’authentification est refusée en raison d’un problème sur les droits d’accès au répertoire personnel de l’utilisateur alex.

Vérifions les droits d’accès sur ce répertoire :

alex@srvtest:~$ ls -lhd 
drwxrwx--- 4 alex sambashare 4.0K Oct  3 18:59 .  

On remarque que le groupe propriétaire n’est pas le groupe principal de alex comme le montre la commande suivante et que les droits du groupe sont peut-être un peu trop élevés :

alex@srvtest:~$ groups 
alex cdrom floppy sudo audio dip video plugdev users netdev 
bluetooth sambashare  

Résolution

Méthode 1 :

Attribuer...

Perte du mot de passe administrateur

Cette solution peut également être utilisée lorsque nous avons oublié les mots de passe, mais que nous disposons encore d’un accès direct à la machine. Elle s’applique aussi si le compte root est désactivé : il faudra alors le réactiver à l’aide de la commande chage au cours de la procédure (voir chapitre Les usages avancés, sections Gestion des utilisateurs - Modifier un compte utilisateur).

Cette procédure n’est cependant pas adaptée aux serveurs VPS. Pour ces derniers, les fournisseurs proposent généralement une fonction de réinitialisation du mot de passe root dans l’interface web de gestion du serveur.

Elle suppose de plus que le menu GRUB soit accessible et non protégé, et que le disque contenant le système ne soit pas chiffré.

Problème rencontré

Il est impossible de s’authentifier sur le serveur.

Situation dans laquelle cela se produit

Après l’installation du serveur, nous ne parvenons à ouvrir aucune session, ni avec le compte utilisateur créé ni avec le compte root.

images/11RI07.png

Signification

Les mots de passe saisis lors de l’installation pour le compte utilisateur et pour le compte root ont peut-être été oubliés, ce qui empêche toute authentification locale.

Résolution...

Dépanner certbot

1. Erreur lors de la création ou du renouvellement du certificat TLS

Problème rencontré

Certbot ne parvient pas à créer ou à renouveler un certificat TLS.

Situation dans laquelle cela se produit

Vous utilisez certbot pour obtenir un certificat TLS, mais la commande renvoie une erreur :

images/11RI11.png

Signification

Le nom d’hôte www.test2.fosslab.fr ne semble pas être résolu par le DNS.

Dans le navigateur, saisissons www.test2.fosslab.fr. Une erreur s’affiche à la place du site :

images/11RI12.png

En revanche, l’accès au site avec le nom d’hôte test2.fosslab.fr fonctionne correctement.

Le problème concerne donc uniquement le nom d’hôte www.test2.fosslab.fr.

Résolution

Si ce nom d’hôte ne doit pas être utilisé, retirez www.test2.fosslab.fr de la configuration de l’hôte virtuel (VHOST) et de la demande de certificat. S’il doit être conservé, créez auparavant l’enregistrement DNS correspondant et vérifiez qu’il pointe vers le serveur.

Après cette correction, certbot ne renvoie plus d’erreur :

images/11RI13.png

2. Erreur lors du renouvellement automatique

Problème rencontré

Le renouvellement automatique d’un certificat TLS échoue.

Situation dans laquelle cela se produit

Le service chargé du renouvellement automatique des certificats est en échec...

Grande quantité de ressources matérielles consommées

Le cas présenté repose sur une configuration personnalisée du stockage des logs des sites web gérés par Apache et sur leur rotation à l’aide du programme rotatelogs. Cette configuration n’est pas recommandée. Si vous souhaitez néanmoins la tester, ne reproduisez pas la configuration erronée présentée ici.

Problème rencontré

La consommation des ressources matérielles est anormalement élevée.

Situation dans laquelle cela se produit

En consultant le moniteur de ressources, soit dans le terminal avec top, soit dans l’interface graphique du fournisseur de VPS, nous constatons une utilisation importante du processeur, de la mémoire vive, de l’espace disque ou de plusieurs de ces ressources. L’interface du fournisseur de VPS affiche les valeurs suivantes :

images/11RI18.png

Examinons la consommation antérieure :

images/11RI19.png

Avant le 24 novembre 2025, la consommation des ressources du serveur était approximativement la suivante :

  • CPU : ~ 1 %

  • RAM : ~ 1.2 Go

  • Espace disque : 4 Go

Au moment de la rédaction, elle est approximativement la suivante :

  • CPU : environ 35 % (avec des variations comprises entre 25 % et 45 %) ;

  • RAM : autour de 2 Go

  • Espace disque : autour de 5 Go

L’augmentation de la consommation du processeur est particulièrement préoccupante.

Consultons...

Récupération de données perdues

Même après une suppression de fichiers ou un formatage rapide, certaines données peuvent subsister sur le support tant qu’elles n’ont pas été écrasées. Leur récupération reste toutefois incertaine et dépend notamment du type de support, du système de fichiers et des opérations effectuées depuis la perte.

Prenons le cas d’une suppression accidentelle de données sur un serveur, sans instantané ni sauvegarde récente. Si vous avez appliqué les recommandations présentées au chapitre précédent cette situation devrait rester exceptionnelle. Les outils dd et PhotoRec peuvent alors contribuer à la récupération des données.

Cette procédure vise la récupération de données sur un disque sain. Pour les disques défaillants, l’outil ddrescue sera plus adapté.

1. Préalable

Branchez au serveur un second disque disposant d’un espace libre au moins égal à la taille totale du disque contenant les données perdues. Ce second support accueillera l’image du disque à analyser.

Travaillez de préférence à froid : n’amorcez pas le système installé sur le disque à récupérer. Utilisez un système live démarré depuis une clé USB ou connectez le disque concerné à une autre machine disposant de la capacité de stockage nécessaire ou reliée au second disque.

Dans la suite de la procédure, le disque contenant les données à récupérer est appelé disque 1 ; le support destiné à recevoir son image est appelé disque 2.

2. Création d’une image du disque à récupérer

Nous allons créer sur le disque 2 une copie du disque 1. Cette image, enregistrée dans un fichier, reproduira l’ensemble du disque source. Pour réaliser cette opération, nous utiliserons la commande dd, déjà présentée dans cet ouvrage.

Cette copie permet d’effectuer les opérations de récupération sur l’image plutôt que directement sur le disque 1. Nous limitons ainsi les accès...

Autres problèmes possibles

Quelques autres problèmes possibles, accompagnés de solutions moins détaillées :

  • Sur l’un de nos sites web, le champ de date d’un formulaire refuse de sélectionner la date du jour, au motif qu’elle se situerait dans le futur : la date ou l’heure du serveur est probablement incorrecte. Nous pouvons redémarrer le serveur, régler sa date et son heure ou changer de serveur NTP (Network Time Protocol). Ce cas reste toutefois assez rare.

  • Après plusieurs échecs d’affichage de pages du site (erreurs 404 provoquées par la saisie accidentelle de plusieurs sous-URL inexistantes), le retour à la page d’index produit également une erreur 404, alors que celle-ci était accessible peu auparavant. L’adresse IP du client a peut-être été bloquée par une règle fail2ban ; le cas échéant, il suffit de la débloquer.

  • Nous ne parvenons plus à accéder à notre site hébergé sur un VPS (par exemple, le navigateur affiche une erreur 404 depuis plusieurs réseaux) ni à nous connecter au serveur. Une opération de maintenance menée par l’hébergeur est possible. Pour le vérifier, connectez-vous à votre espace client : si une maintenance est en cours, le fournisseur devrait l’indiquer explicitement....