# Une manipulation désastreuse sur un serveur Linux

**Niveau avancé**

Un serveur Linux est un environnement où la stabilité est très importante. Ceci s'observe notamment avec l'utilisation de distributions qui ont un cycle de développement et de test beaucoup plus long que celles qui sont employées pour la bureautique. Par exemple, Canonical, l'entreprise qui développe [Ubuntu](https://ubuntu.com/), offre maintenant une période de support de 10 ans.

Cette stabilité vient souvent avec des versions de logiciels qui plus anciennes, mais éprouvées. Il peut alors être tentant de mettre à jour certaines composantes d'un système afin de profiter des dernières nouveautés.

Cependant, dans un environnement de production, ce comportement met à risque le bon fonctionnement de l'ensemble des applications. De plus, la modification de fichiers importants peut mener à des erreurs difficiles à expliquer et même à la corruption du serveur. Dans ce cas-ci, il devient irrécupérable.

## Comment éviter cette histoire d'horreur?

Voici quelques astuces pour prévenir la corruption d'un serveur ou pour en faciliter la reprise.

### Apprendre les bases du fonctionnement d'un système Linux

Les distributions de GNU/Linux sont le fruit de plusieurs décennies, avant même la création du noyau Linux par Linux Torvalds. La [philosophie Unix](https://fr.wikipedia.org/wiki/Philosophie_d%27Unix), le mouvement du [logiciel libre](https://www.gnu.org/philosophy/free-sw.fr.html) et les impératifs de stabilité en production ont dicté plusieurs normes. Celles-ci sont aujourd'hui centrales au bon fonctionnement des systèmes d'exploitation et de l'Internet, qui fonctionne principalement grâce à Linux.

C'est un domaine d'expertise beaucoup trop vaste pour en discuter en détail dans un livre électronique, mais, au moins, voici quelques thèmes importants à explorer!

- Le rôle du noyau Linux
- Le gestionnaire de paquetages
- Les fichiers de configuration
- Les services système et réseau

Le guide d'administration de Debian est disponible dans plusieurs langues et plusieurs formats. Il permet de couvrir l'ensemble de ces sujets, et bien plus!

- [Debian Buster from Discovery to Mastery](https://debian-handbook.info/get/now/)

### Bien comprendre le rôle de super utilisateur

Le rôle de super utilisateur sur Linux possède beaucoup plus de privilèges que sur un système Windows. Il peut vraiment tout faire! Nous comprendrons par là qu'il peut supprimer ou écraser n'importe quel fichier, sans avertissement.

Lorsque nous souhaitons expérimenter avec une nouveauté, c'est fortement déconseillé de le faire en tant que super utilisateur. Il vaut mieux créer un rôle spécifique pour effectuer des tests.

### Installation d'une compilation manuelle dans un répertoire alternatif

![](images/lin.png)

L'installation manuelle de librairies se fait généralement en utilisant la séquence de commandes suivantes :

```bash
./configure
make
sudo make install
```

Si nous ne souhaitons pas briser l'organisation effectuée par le gestionnaire de paquetages, nous pouvons alors utiliser un répertoire d'installation différent de celui par défaut. Pour la configuration qui précède la compilation avec `make`, définissons un préfixe :

```bash
./configure --prefix=/répertoire/non/système/
```

L'utilisation de ce préfixe indiquera aux deux étapes suivantes de ne pas écrire dans les répertoires par défaut du système. Elles prendront plutôt celui qui a été spécifié. Ceci permettra d'éviter de nombreux conflits de versions.

### Librairies associées à un langage de programmation

![](images/winlinmac.png)

Dans le cas de librairies associées à un langage de programmation en particulier, tel que Python, il est conseillé d'installer les versions qui ne sont pas déjà empaquetées par la distribution avec un rôle utilisateur régulier.

Pour simplifier, évitez l'utilisation de la première commande et privilégier la seconde le plus possible. 

```bash
# à éviter
sudo pip install quelque chose
# à privilégier
pip install quelque chose
``` 
Ceci peut aussi se faire au sein d'un environnement virtuel tel que virtualenv.

### Utiliser les environnements virtuels tels que Docker

![](images/lin.png)

La virtualisation permet de partager des ressources entre les systèmes d'exploitation hôte et client, tout en conservant un niveau d'isolation élevé au niveau de la sécurité et du système de fichiers.

Le logiciel [Docker](https://docs.docker.com/get-docker/) crée des environnements d'exécution qui sont isolés, à l'exception du noyau, du processeur et de la mémoire. Il est possible de partager certaines ressources additionnelles, dont certains répertoires et le réseau informatique.

Il est idéal pour expérimenter et pour faciliter l'agilité dans le développement. Donc, c'est un outil tout indiqué pour tester de nouvelles idées sans mettre en péril la stabilité de son système.

![](images/winmac.png)

Docker fonctionne maintenant sur Windows et macOS, mais il était à l'origine disponible uniquement pour le noyau Linux. Cependant, la prise en charge peut nécessiter des outils additionnels.

### Utiliser des captures incrémentales des fichiers système

![](images/lin.png)

Timeshift est une application Linux qui permet de faire des points de restauration. Elle tourne de la même manière que la fonctionnalité de Windows que nous avons présentée à la fin du chapitre précédent. À la différence d'une prise en charge complète des fichiers de la machine, cette application se concentre sur ceux du système d'exploitation uniquement.

Elle est simple à utiliser en mode graphique. Lors de son ouverture, elle demandera de sélectionner une méthode de sauvegarde, un disque où l'effectuer et la fréquence désirée. Enfin, il sera possible de créer le premier instantané, qui est le plus long à exécuter.

![](images/chapitre-02-restauration-timeshift.png)

Sur un serveur, nous ne disposons habituellement pas d'une interface graphique. Nous utiliserons un terminal pour appeler l'application. Nous spécifions le disque de sauvegarde par son identifiant système.

```bash
sudo timeshift \
--create \
--comments "instantané initial" \
--tags D \
--snapshot-device/dev/sda1
```

## Trop tard... et maintenant?

Une fois que le mal est fait, vous vous demanderez de quelles options vous disposez pour réparer un serveur corrompu. Malheureusement, si vous n'êtes pas préparés à cette situation, ça sera difficile. Voici deux possibilités. 

Dans le premier cas, vous restaurez le paquetage brisé. Vous ne devez pas redémarrer avant la réinstallation du paquetage.

Dans le deuxième cas, vous devez envisager de ne plus pouvoir démarrer le système si la restauration échoue.

### Purger et réinstaller un paquetage système

Si le fichier corrompu peut être identifié et est relié à un paquetage de la distribution, en le purgeant et en le réinstallant, nous avons de bonnes chances de résoudre le problème. Cependant, s'il y a des dépendances, ça peut s'avérer un travail de recherche complexe. De plus, si le gestionnaire de paquetages utilise ce fichier, alors il ne sera pas possible de poursuivre.

### Restaurer une capture incrémentale antérieure

![](images/lin.png)

L'avantage de la méthode de la capture incrémentale, c'est qu'elle facilite grandement la restauration. Pour le faire avec Timeshift, il suffit d'exécuter cette commande :

```bash
sudo timeshift --restore
```

Le logiciel demandera quel instantané restaurer, puis proposera de mettre à jour le gestionnaire de démarrage GRUB, au besoin. En cas d'échec, il reste alors une seule solution, si vous avez accès physiquement au serveur, que nous verrons maintenant.

### La restauration depuis un système de secours

Les distributions Linux incluent souvent une image à télécharger de type "live session" qui permet d'en démarrer une version complète sur son poste de travail et de l'essayer. Et ce, sans avoir à changer quoi que ce soit avant de faire l'installation. Celles-ci donnent aussi l'occasion aux utilisatrices et utilisateurs expérimentés de modifier un système d'exploitation existant sur un ordinateur, par la technique du changement de racine avec l'outil `chroot`. 

Vous pouvez consulter un exemple pratique sur notre blog: [
Manjaro avec pilotes NVIDIA
](https://jevalide.ca/2021/01/09/je-suis-reste-pris-dans-mon-ordi-manjaro-nvidia-mise-a-jour/).
