1. Objectifs du Projet

Ce projet vise à fournir un outil simple, robuste et pédagogique pour optimiser la gestion de la mémoire sur les systèmes Linux, en particulier pour les configurations type Raspberry Pi 5.

Fonctionnalités Clés

  • Gestion du Swapfile : Création, redimensionnement et sécurisation d’un fichier d’échange.
  • Support Zram : Installation et configuration transparente de la compression RAM (zram-tools).
  • Réglage Swappiness : Ajustement de la priorité d’utilisation du swap.
  • Sécurité : Sauvegardes automatiques des fichiers système, mode simulation (--dry-run), et restauration facile.
  • Accessibilité :
    • Interface en ligne de commande (CLI) pour l’automatisation.
    • Interface graphique (GUI) en mode sombre avec explications pédagogiques pour les débutants.

2. Architecture et Fichiers

Le projet est composé de deux scripts principaux Python :

A. config_swap.py (Backend & CLI)

C’est le cœur du système. Il contient la classe SystemConfigurator qui gère toute la logique métier.

  • Rôle : Exécuter les commandes système (mkswap, swapon, apt, sysctl), gérer les fichiers de configuration (/etc/fstab, /etc/sysctl.conf) et assurer les sauvegardes.
  • Dépendances : os, sys, argparse, subprocess, shutil, logging.

B. swap_gui.py (Frontend)

Interface graphique utilisateur basée sur Tkinter.

  • Rôle : Offrir une interface visuelle, afficher le monitoring, et lancer les opérations du backend dans des threads séparés pour ne pas geler l’interface.
  • Fonctionnalités :
    • Thème sombre personnalisé.
    • Persistance de la position de la fenêtre (window_config.json).
    • Module d’aide intégré.
    • Redirection des logs vers la fenêtre.

C. Fichiers Générés

  • window_config.json : Sauvegarde automatique de la géométrie de la fenêtre GUI.
  • *.bak : Copies de sauvegarde des fichiers système modifiés (ex: /etc/fstab.bak).

3. Dépendances et Pré-requis

Système

  • OS : Linux (Testé sur Debian/Raspberry Pi OS).
  • Droits Root : Nécessaires pour appliquer les changements (sudo).

Outils Système Requis

Le script vérifie la présence de ces outils au démarrage :

  • fallocate : Allocation d’espace disque.
  • mkswap, swapon, swapoff : Gestion du swap.
  • sysctl : Configuration du noyau.
  • systemctl : Gestion des services.
  • apt : Gestionnaire de paquets (pour installer zram-tools).

Bibliothèques Python

  • Standard Library (Aucune installation pip requise) : tkinter, argparse, logging, subprocess, json, shutil.
  • Note : Sur certains systèmes Linux minimaux, Tkinter doit être installé via sudo apt install python3-tk.

4. Mode Opératoire

Utilisation via l’Interface Graphique (Recommandé)

Lancez l’interface avec les droits d’administration :

sudo python3 swap_gui.py
  1. Réglage : Utilisez les curseurs pour définir la taille du swap, le pourcentage de Zram et la Swappiness.
  2. Compréhension : Cliquez sur le bouton « ? » pour lire le guide pédagogique.
  3. Application : Cliquez sur « APPLIQUER LA CONFIGURATION ». Suivez le journal d’opérations en bas de la fenêtre.
  4. Annulation : Utilisez « Restaurer Défaut » pour revenir à la configuration précédente (via les backups) ou « Désinstaller Tout » pour nettoyer le système.

Utilisation via la Ligne de Commande (CLI)

Idéal pour les scripts de déploiement ou l’administration à distance.

Aide et Options :

python3 config_swap.py --help

Exemple d’installation automatique :

sudo python3 config_swap.py --swap-size 8 --zram-percent 50 --swappiness 10 --yes

Mode Simulation (Dry-Run) :
Visualiser les actions sans rien modifier :

python3 config_swap.py --dry-run

Maintenance et Nettoyage :

  • Restaurer les fichiers de config : sudo python3 config_swap.py --restore
  • Tout désinstaller : sudo python3 config_swap.py --uninstall

5. Maintenance et Dépannage

Logs

Le script utilise le module logging.

  • En CLI : Les logs sont affichés dans la console.
  • En GUI : Les logs sont redirigés vers la zone de texte en bas de la fenêtre.

Gestion des Erreurs

  • Fichiers Lock : Si apt est verrouillé, le script échouera lors de l’installation de zram. Vérifiez qu’aucune mise à jour n’est en cours.
  • Permissions : Le script vérifie geteuid() == 0. Sans sudo, il passe en mode lecture seule (ou échoue pour les actions critiques).

Procédure de Restauration Manuelle

En cas de problème grave empêchant le script de fonctionner :

  1. Les sauvegardes sont situées à côté des fichiers originaux avec l’extension .bak.
  2. Copiez /etc/fstab.bak vers /etc/fstab.
  3. Copiez /etc/sysctl.conf.bak vers /etc/sysctl.conf (ou supprimez /etc/sysctl.d/99-swappiness.conf).
  4. Redémarrez.

6. Améliorations Possibles

Pour faire évoluer le projet, voici quelques pistes :

  1. Compatibilité Multi-Distro : Remplacer apt par une abstraction supportant dnf, pacman, etc. pour Fedora/Arch.
  2. Service Systemd : Créer un service one-shot qui vérifie et réapplique la configuration au démarrage (bien que fstab et sysctl soient persistants, cela assurerait l’intégrité).
  3. Packaging : Créer un paquet .deb pour une installation facile via dpkg -i.
  4. Monitoring Avancé : Ajouter un graphique historique de l’utilisation RAM/Swap dans le GUI (avec matplotlib par exemple, mais cela ajouterait une dépendance lourde).
  5. Internationalisation (i18n) : Sortir les textes (français) dans des fichiers de langue pour supporter l’anglais.

SOURCE