Code source wiki de Reconstruction
Modifié par john le 2026/09/20 18:24
Afficher les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
| 1 | Ordre des opérations pour remonter le Raspberry Pi sur une carte SD neuve. Les données du SSD (dépôt de sauvegarde, médias Jellyfin) ne sont pas concernées : le SSD se remonte tel quel. | ||
| 2 | |||
| 3 | == Sauvegarde de la configuration == | ||
| 4 | |||
| 5 | Le Pi n'est pas sauvegardé par Plakar (il héberge le dépôt). Une archive hebdomadaire de sa configuration est déposée sur son propre SSD : elle couvre la perte de la carte SD, pas celle de la machine entière. | ||
| 6 | |||
| 7 | |=Élément|=Valeur | ||
| 8 | |Script|##/usr/local/sbin/backup-config.sh## | ||
| 9 | |Destination|##<POINT_MONTAGE>/config-matrix/## | ||
| 10 | |Planification|##/etc/cron.d/backup-config##, dimanche à 2 h | ||
| 11 | |Rétention|7 archives | ||
| 12 | |Taille|Environ 325 Mo par archive | ||
| 13 | |Droits|Réservé à root : l'archive contient ##/etc## | ||
| 14 | |||
| 15 | Contenu : ##/etc##, ##/var/lib/jellyfin## (sans ##metadata## ni ##transcodes##, retéléchargés), les préférences Meshtastic (##/var/lib/meshtasticd/.portduino##), la configuration d'AdGuard Home, le script led-anim. | ||
| 16 | |||
| 17 | {{code language="bash"}} | ||
| 18 | sudo /usr/local/sbin/backup-config.sh # lancer à la main | ||
| 19 | sudo ls -lh <POINT_MONTAGE>/config-matrix/ # lister les archives | ||
| 20 | sudo tar tzf <ARCHIVE> | head # vérifier le contenu | ||
| 21 | {{/code}} | ||
| 22 | |||
| 23 | Restauration après réinstallation : extraire l'archive dans un dossier temporaire, puis replacer les fichiers un par un, en suivant les étapes ci-dessous. Ne pas écraser ##/etc## en bloc sur un système neuf. | ||
| 24 | |||
| 25 | === Sans archive récente === | ||
| 26 | |||
| 27 | |=Élément|=Conséquence|=Comment le recréer | ||
| 28 | |Configuration d'AdGuard Home|Réécritures DNS et listes perdues|Page [[AdGuard Home>>Wiki Batcave John.Infrastructure.RaspberryPi.AdGuard Home.WebHome]] | ||
| 29 | |Identité du nœud Meshtastic|Nouveau nœud, nouvelles clés|Réimporter un export de configuration | ||
| 30 | |Base de Jellyfin|Bibliothèques, utilisateurs, historique perdus|Réajouter les bibliothèques ; nouvelle clé d'API pour Jellystat | ||
| 31 | |Clé autorisée pour Plakar|Sauvegardes bloquées|Recopier la clé publique du serveur principal | ||
| 32 | |||
| 33 | == 1. Système == | ||
| 34 | |||
| 35 | Raspberry Pi Imager, image **Raspberry Pi OS Lite (64 bits)**, avec dans les réglages : nom d'hôte, utilisateur, clé SSH publique (sans mot de passe), Wi-Fi et pays ##FR##. | ||
| 36 | |||
| 37 | {{code language="bash"}} | ||
| 38 | sudo apt update && sudo apt full-upgrade | ||
| 39 | sudo apt install rsyslog fail2ban smartmontools chkrootkit lynis pipx uhubctl | ||
| 40 | {{/code}} | ||
| 41 | |||
| 42 | SSH par clé uniquement : ##PasswordAuthentication no## et ##KbdInteractiveAuthentication no## dans ##/etc/ssh/sshd_config.d/##. | ||
| 43 | |||
| 44 | == 2. Démarrage == | ||
| 45 | |||
| 46 | Ajouts à ##/boot/firmware/config.txt## : | ||
| 47 | |||
| 48 | {{code language="ini"}} | ||
| 49 | dtparam=i2c_arm=on | ||
| 50 | dtparam=spi=on | ||
| 51 | dtoverlay=spi0-0cs | ||
| 52 | dtparam=audio=off | ||
| 53 | dtoverlay=gpio-fan,gpiopin=14,temp=50000 | ||
| 54 | {{/code}} | ||
| 55 | |||
| 56 | |=Ligne|=Pour | ||
| 57 | |##i2c_arm##|Écran OLED du boîtier | ||
| 58 | |##spi## et ##spi0-0cs##|Module LoRa (Meshtastic) | ||
| 59 | |##audio=off##|Libère le PWM de la broche 18 pour le bandeau LED | ||
| 60 | |##gpio-fan##|Ventilateur du boîtier piloté par la broche 14, démarrage à 50 °C | ||
| 61 | |||
| 62 | Ne pas ajouter ##gpu_mem## (le Pi n'affiche rien) ni ##enable_uart## (la broche 14 sert au ventilateur). | ||
| 63 | |||
| 64 | Ajouts à la ligne unique de ##/boot/firmware/cmdline.txt## : | ||
| 65 | |||
| 66 | {{code}} | ||
| 67 | usb-storage.quirks=174c:55aa:u cgroup_enable=memory cgroup_memory=1 apparmor=1 security=apparmor cfg80211.ieee80211_regdom=FR | ||
| 68 | {{/code}} | ||
| 69 | |||
| 70 | |=Paramètre|=Pour | ||
| 71 | |##usb-storage.quirks##|Pont USB du SSD en mode usb-storage | ||
| 72 | |##cgroup_enable=memory cgroup_memory=1##|Limites de mémoire des conteneurs Docker | ||
| 73 | |##apparmor=1 security=apparmor##|AppArmor | ||
| 74 | |##cfg80211.ieee80211_regdom=FR##|Réglementation Wi-Fi française | ||
| 75 | |||
| 76 | Redémarrer, puis contrôler : | ||
| 77 | |||
| 78 | {{code language="bash"}} | ||
| 79 | ls /dev/spidev0.0 /dev/i2c-1 | ||
| 80 | cat /sys/class/thermal/cooling_device0/type # gpio-fan | ||
| 81 | {{/code}} | ||
| 82 | |||
| 83 | == 3. SSD et Wi-Fi == | ||
| 84 | |||
| 85 | * Montage, point de montage immuable, smartmontools : page [[SSD de stockage>>Wiki Batcave John.Infrastructure.RaspberryPi.SSD.WebHome]]. | ||
| 86 | * Économie d'énergie Wi-Fi désactivée : page [[Raspberry Pi>>Wiki Batcave John.Infrastructure.RaspberryPi.WebHome]]. | ||
| 87 | |||
| 88 | == 4. Dépôt de sauvegarde == | ||
| 89 | |||
| 90 | Utilisateur ##plakar##, limitation SFTP, clé du serveur principal : section « Mise en place du dépôt » de la page [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]]. Le dépôt lui-même est déjà sur le SSD. | ||
| 91 | |||
| 92 | Tester depuis le serveur principal : | ||
| 93 | |||
| 94 | {{code language="bash"}} | ||
| 95 | sudo plakar -keyfile /root/.plakar-pass at "<REPO>" ls | tail -n 3 | ||
| 96 | {{/code}} | ||
| 97 | |||
| 98 | == 5. Docker == | ||
| 99 | |||
| 100 | Dépôt officiel de Docker, puis : | ||
| 101 | |||
| 102 | * [[Portainer>>Wiki Batcave John.Infrastructure.Portainer.WebHome]] : agent seulement, piloté par l'instance centrale. | ||
| 103 | * Watchtower : stack de la page [[Serveur principal>>Wiki Batcave John.Infrastructure.ServeurPrincipal.WebHome]]. | ||
| 104 | * [[AdGuard Home>>Wiki Batcave John.Infrastructure.RaspberryPi.AdGuard Home.WebHome]]. | ||
| 105 | * [[OLED Stats>>Wiki Batcave John.Infrastructure.RaspberryPi.OLEDStats.WebHome]] : | ||
| 106 | |||
| 107 | {{code language="bash"}} | ||
| 108 | docker run -d --name OLED_Stats --restart unless-stopped \ | ||
| 109 | --privileged --network host \ | ||
| 110 | --device /dev/i2c-1 --device /dev/gpiomem \ | ||
| 111 | -e TZ=Europe/Paris -e OLED_ROTATION=1 \ | ||
| 112 | mklements/oled_stats:latest status.py | ||
| 113 | {{/code}} | ||
| 114 | |||
| 115 | == 6. Services natifs == | ||
| 116 | |||
| 117 | * [[Meshtastic>>Wiki Batcave John.Infrastructure.RaspberryPi.Meshtastic.WebHome]] : dépôt, fichiers de ##config.d##, puis réimport de la configuration exportée : | ||
| 118 | |||
| 119 | {{code language="bash"}} | ||
| 120 | meshtastic --host localhost --configure meshtastic-config.yaml | ||
| 121 | {{/code}} | ||
| 122 | |||
| 123 | * [[Jellyfin>>Wiki Batcave John.Infrastructure.RaspberryPi.Jellyfin.WebHome]] : dépôt Jellyfin, bibliothèques sur le SSD, Batman en proxy de confiance (##KnownProxies##), nouvelle clé d'API à reporter dans Jellystat. | ||
| 124 | * [[led-anim>>Wiki Batcave John.Infrastructure.RaspberryPi.led-anim.WebHome]] : venv, script, service. | ||
| 125 | * [[fail2ban>>Wiki Batcave John.Infrastructure.RaspberryPi.fail2ban.WebHome]], [[chkrootkit>>Wiki Batcave John.Infrastructure.RaspberryPi.chkrootkit.WebHome]], [[Lynis>>Wiki Batcave John.Infrastructure.Lynis.WebHome]]. | ||
| 126 | * Outils ##meshtastic## et ##yt-dlp## : ##pipx install##. | ||
| 127 | |||
| 128 | == 7. Contrôles finaux == | ||
| 129 | |||
| 130 | {{code language="bash"}} | ||
| 131 | systemctl is-active meshtasticd led-anim jellyfin docker fail2ban smartmontools | ||
| 132 | docker ps --format '{{.Names}} {{.Status}}' | ||
| 133 | meshtastic --host localhost --info | grep -m1 Owner | ||
| 134 | {{/code}} | ||
| 135 | |||
| 136 | Depuis un poste du réseau : résolution DNS par le Pi, puis attendre le ✅ de la sauvegarde suivante. | ||
| 137 | Remettre en place le script de sauvegarde de la configuration et sa tâche cron (section en tête de page), puis le lancer une fois. |