# Montages Rclone Sasnexte et Kdrive

## Architecture

```
NAS Sasnexte (Synology)
    └── rclone sync (WebDAV) ──► kDrive Infomaniak
                                      └── rclone mount (FUSE) ──► VPS Jux
                                                                     └── containers Docker

```

Le NAS pousse les médias vers kDrive une fois par jour via le planificateur DSM. Le VPS monte kDrive en FUSE en permanence — les containers accèdent aux fichiers en lecture.

---

## Remote rclone (NAS sasnexte)

Fichier : `/volume1/homes/SAS_NEXTE/.config/rclone/rclone.conf`

```ini
[kdrive_music]
type = webdav
url = https://591617.connect.kdrive.infomaniak.com
vendor = other
user = julien.bertrand@nexte.fr
pass = [obfusqué rclone]

```

**Note** : le remote s'appelle `kdrive_music` mais sert à synchroniser tous les contenus (musique, photos, audiobooks, Komga). Nom historique à ne pas confondre avec un remote dédié musique.

**Mot de passe WebDAV** : régénéré le 2026-06-23 (compte `julien.bertrand@nexte.fr`, espace kDrive 591617). Mise à jour via `rclone config update kdrive_music pass $(rclone obscure NOUVEAU_MDP)`.

---

## Script unifié (NAS sasnexte)

Emplacement : `/volume1/homes/SAS_NEXTE/scripts/sync_kdrive_complete.sh`  
Planificateur DSM : tâche déclenchée quotidiennement — commande : `/volume1/homes/SAS_NEXTE/scripts/sync_kdrive_complete.sh`

**Note sudo** : le script contient `sudo -u SAS_NEXTE rclone ...`. Si la tâche DSM est configurée pour tourner en tant que SAS\_NEXTE, retirer le `sudo -u SAS_NEXTE` (inutile et peut bloquer). Si elle tourne en root, le garder.

**Le script n'est plus recopie ici : il est versionne dans l'arbre Syncthing**, seule source de verite — `Jux-scripts/NAS-Sync/sync_kdrive_complete.sh`, deploye sur le NAS dans `/volume1/homes/SAS_NEXTE/scripts/`. La version en ligne ci-dessous datait du 2026-06-23 et n'avait aucune protection ; elle a ete remplacee le 2026-08-28 par la version durcie decrite plus bas. Sauvegarde de l'ancienne sur le NAS : `sync_kdrive_complete.sh.bak-260828`.

**Déploiement** : écrire via `vi` depuis SSH — le heredoc et les éditeurs Windows introduisent des CRLF qui cassent bash. Après édition : `sed -i 's/\r//' script.sh` pour vérifier.

---

## Syncs actifs

<table id="bkmrk-nom-source-nas-desti"><thead><tr><th>Nom</th><th>Source NAS</th><th>Destination kDrive</th><th>Notes</th></tr></thead><tbody><tr><td>audiobooks</td><td>`/volume1/audiobooks`</td><td>`SYNC-pour_VPS/Sync-SASNEXTE/audiobooks`</td><td> </td></tr><tr><td>music</td><td>`/volume1/music`</td><td>`SYNC-pour_VPS/Sync-SASNEXTE/music`</td><td> </td></tr><tr><td>photo</td><td>`/volume1/photo/2026`</td><td>`SYNC-pour_VPS/Sync-SASNEXTE/photo/2026`</td><td>Année courante seulement</td></tr><tr><td>komga</td><td>`/volume1/Komga`</td><td>`SYNC-pour_VPS/Sync-SASNEXTE/Komga`</td><td> </td></tr></tbody></table>

**Non géré ici :**

- **Romans** : abandonné
- **Foxy** : sur NAS Maison (pas sasnexte)

---

## Options rclone — justifications

<table id="bkmrk-option-r%C3%B4le---delete"><thead><tr><th>Option</th><th>Rôle</th></tr></thead><tbody><tr><td>`--delete-excluded`</td><td>Supprime sur kDrive les fichiers exclus qui auraient pu y être uploadés</td></tr><tr><td>`--ignore-errors`</td><td>Poursuit la sync si un fichier est inaccessible (NAS Synology parfois occupé)</td></tr><tr><td>`--delete-during`</td><td>Supprime les fichiers obsolètes au fil du scan, pas en fin de run</td></tr><tr><td>`--fast-list`</td><td>Réduit les appels API WebDAV (un seul listing récursif)</td></tr><tr><td>`@eaDir/**`</td><td>Dossiers de métadonnées Synology (miniatures)</td></tr><tr><td>`#recycle/**`</td><td>Corbeille Synology</td></tr><tr><td>`@__thumb/**`</td><td>Miniatures Synology</td></tr><tr><td>`*.@SynoResource` / `*.@SynoEAStream`</td><td>Flux de ressources étendues Synology</td></tr><tr><td>`--transfers=4`</td><td>4 fichiers en parallèle — équilibre entre perf et charge WebDAV</td></tr><tr><td>`--checkers=8`</td><td>8 vérifications de hash en parallèle</td></tr><tr><td>`--timeout=5m`</td><td>Timeout par opération I/O</td></tr><tr><td>`--contimeout=2m`</td><td>Timeout de connexion initiale</td></tr></tbody></table>

---

## Côté VPS — montages FUSE correspondants

Les services systemd sur le VPS montent les dossiers kDrive en FUSE :

<table id="bkmrk-service-systemd-poin"><thead><tr><th>Service systemd</th><th>Point de montage</th><th>Source kDrive</th></tr></thead><tbody><tr><td>`rclone-audiobookshelf.service`</td><td>`/home/debian/audiobookshelf/audiobooks`</td><td>`SYNC-pour_VPS/Sync-SASNEXTE/audiobooks`</td></tr><tr><td>`kdrive-music.service`</td><td>`/home/debian/music`</td><td>`SYNC-pour_VPS/Sync-SASNEXTE/music`</td></tr><tr><td>`rclone-photo.service`</td><td>`/home/debian/photo`</td><td>`SYNC-pour_VPS/Sync-SASNEXTE/photo`</td></tr><tr><td>`kdrive-komga.service`</td><td>`/home/debian/komga`</td><td>`SYNC-pour_VPS/Sync-SASNEXTE/Komga`</td></tr></tbody></table>

Remote VPS : `kdrive:` — remote natif Infomaniak (`@infomaniak/mcp-server-kdrive`), compte `julien.bertrand@live.fr`, kDrive ID `591617`.

---

## Logs

- Un fichier de log par sync par run : `/volume1/homes/SAS_NEXTE/logs/sync_{nom}_{date}.log`
- Bilan global : `/volume1/homes/SAS_NEXTE/logs/sync_{date}.log`
- Commande de suivi : `tail -f /volume1/homes/SAS_NEXTE/logs/sync_music_*.log`

---

## Panne du 2026-08-28 — les 4 syncs a l'arret, cause : rclone.conf deplace

**Symptome** : les photos de l'ete 2026 deposees la veille sur le NAS ne remontaient pas sur kDrive. Ni par la tache planifiee, ni par un lancement manuel du script — ce qui excluait d'emblee un probleme de reseau ou de quota.

**Message dans le journal du jour** (`/volume1/homes/SAS_NEXTE/logs/sync_photo_AAAAMMJJ_*.log`) :

```
NOTICE: Config file "/var/services/homes/SAS_NEXTE/.config/rclone/rclone.conf" not found - using defaults
CRITICAL: Failed to create file system for "kdrive_music:...": didn't find section in config file ("kdrive_music")
```

**Cause** : le 2026-08-27 a 10:16, le dossier `.config` du home a ete range dans `/volume1/homes/SAS_NEXTE/Fichiers techniques/`. Le script ne passait pas `--config` : rclone cherchait donc `$HOME/.config/rclone/rclone.conf` et ne trouvait plus le remote. **Les quatre syncs sont mortes d'un coup** (photo, music, komga, audiobooks), des le run suivant.

**Correction** : fichier recopie a sa place (`chmod 600`) ; une copie subsiste dans `Fichiers techniques` et sert desormais de secours automatique (voir plus bas).

### Ce que cet incident apprend

- **Devant un `didn't find section in config file`, verifier l'emplacement du `rclone.conf` avant tout le reste.** Un simple rangement par SMB ou File Station suffit a tout casser, sans que rien ne soit "casse" au sens habituel.
- **L'echec etait totalement silencieux** : aucune alerte, aucun mail, l'ancien script retournait toujours 0. Seul le journal du jour le disait. C'est le vrai defaut, plus encore que le fichier deplace.
- **Piege d'analyse au moment de reparer** : le dossier avait ete renomme cote NAS (`2026_Eté UK` → `2026_Eté UK et Italia`), ce qui faisait voir a rclone 308 suppressions et 351 copies. En miroir `--delete-during` c'est correct, mais **toujours faire un `--dry-run` puis comparer les listes avant de relancer une sync apres un incident** : ```
    rclone lsf -R --files-only kdrive_music:.../photo/2026/ANCIEN_NOM | sort > /tmp/k.txt
    (cd /volume1/photo/2026/NOUVEAU_NOM && ls -p | grep -v /) | sort > /tmp/n.txt
    comm -23 /tmp/k.txt /tmp/n.txt   # doit etre vide : rien sur kDrive qui manque au NAS
    ```
- **Trou du 20 au 24/08 dans tous les journaux** : NAS eteint (coupures secteur / orages), sans rapport avec cette panne.

---

## Durcissement du script (2026-08-28)

Source de verite : `Jux-scripts/NAS-Sync/sync_kdrive_complete.sh` (arbre Syncthing, disponible sur toutes les machines). Le comportement nominal est inchange — memes 4 syncs, memes options rclone, meme emplacement, la tache DSM n'a pas besoin d'etre modifiee.

<table id="bkmrk-protectionce-qu%27elle"><thead><tr><th>Protection</th><th>Ce qu'elle evite</th></tr></thead><tbody><tr><td>`--config` en chemin absolu</td><td>La panne ci-dessus : le script ne depend plus de `$HOME` ni de l'utilisateur qui le lance</td></tr><tr><td>Restauration automatique de la config depuis `Fichiers techniques/.config/rclone/rclone.conf`</td><td>Un nouveau deplacement du fichier ne coupe plus la synchro ; l'evenement est journalise</td></tr><tr><td>Controles prealables : rclone present, section `[kdrive_music]` presente, remote reellement joignable</td><td>Partir en synchro avec un mot de passe WebDAV revoque ou kDrive injoignable</td></tr><tr><td>Refus de synchroniser une source **absente ou vide**</td><td>**Le scenario catastrophe** : un volume non monte ou un dossier vide, qui en mode miroir viderait la destination kDrive</td></tr><tr><td>`--max-delete` par service (photo 500, les autres 1000)</td><td>Une suppression de masse imprevue : la sync s'interrompt et attend un oeil humain</td></tr><tr><td>Ligne `=== BILAN: X/4 OK ===` et fichier d'etat `logs/etat_sync.txt`</td><td>Avoir a lire quatre journaux pour savoir si la nuit s'est bien passee</td></tr><tr><td>Code de sortie non nul en cas d'echec + entree dans le journal systeme DSM</td><td>L'echec silencieux</td></tr><tr><td>Purge des journaux de plus de 90 jours</td><td>L'accumulation dans `logs/`</td></tr></tbody></table>

### Mode d'emploi

```
S=/volume1/homes/SAS_NEXTE/scripts/sync_kdrive_complete.sh
$S                                  # les 4 syncs (ce que lance la tache DSM)
DRY_RUN=1 $S                        # essai a blanc, rien n'est ecrit sur kDrive
SERVICES="photo music" $S           # un sous-ensemble seulement
SERVICES="photo" FORCE_MAX_DELETE=1 $S   # apres verification, lever le garde-fou

cat /volume1/homes/SAS_NEXTE/logs/etat_sync.txt   # resultat du dernier run
```

### Canari — savoir en une commande si la nuit s'est bien passee

```
cat /volume1/homes/SAS_NEXTE/logs/etat_sync.txt
grep -l CRITICAL /volume1/homes/SAS_NEXTE/logs/sync_*_$(date +%Y%m%d)*.log
```

### Notifications — pourquoi pas synodsmnotify

Sur **DSM 7.4, `synodsmnotify` n'accepte pas de titre libre** : tout libelle est rejete par `title: '...' is neither mail string key nor i18n format`, y compris les formes `i18n:...` essayees. Le script utilise donc `synologset1 sys err 0x11100000`, qui ecrit dans le journal systeme DSM (Centre de journalisation).

**Action restante cote DSM (a faire par Julien, compte admin)** : dans *Planificateur de taches* → tache de synchronisation → *Parametres*, cocher **« Envoyer les details d'execution par e-mail »** et **« uniquement lorsque le script se termine anormalement »**. C'est maintenant efficace : l'ancien script retournait toujours 0, la version durcie retourne 1 des qu'un service echoue.

### Tests de validation passes le 2026-08-28

- Marche nominale en essai a blanc : `BILAN: 1/1 OK`, code retour 0
- Panne rejouee (config deplacee) : restauration automatique, puis sync normale — code retour 0
- Source vide : sync **non lancee**, `ECHEC photo (source-vide)`, code retour 1
- Seuil de suppressions depasse : sync interrompue, `ECHEC photo (seuil-suppressions)`, code retour 1, avec la commande de reprise affichee

---

## REX déploiement 2026-06-23

- **Problème 1** : CRLF dans le script (édition Windows) → `bash -x` montrait `\r` comme commande inconnue. Fix : réécrire via `vi` sur le NAS.
- **Problème 2** : mot de passe WebDAV périmé (401 Unauthorized) → régénéré le 2026-06-09 côté VPS mais pas mis à jour sur le NAS. Fix : `rclone config update kdrive_music pass $(rclone obscure MDP)`.
- **SSH bloqué** : pare-feu NAS + 2FA rendent le SSH depuis l'extérieur inaccessible. Passer par une session SSH locale ou DSM.
- **Résultat** : 4 syncs validés — audiobooks 48.9 GiB / 23 min, music 1 GiB / 45s, photo et komga déjà à jour.