Ceci est une ancienne révision du document !
Table des matières
Migration Baïkal → Nextcloud (calendriers & contacts)
Migration d'un serveur Baïkal (CalDAV/CardDAV) vers une instance Nextcloud existante, avec reconfiguration des clients Android via DAVx⁵.
1. Export depuis Baïkal
Le script exporte le calendrier default (via l'endpoint ?export de sabre/dav) et le carnet d'adresses default.
Le script
Copier le contenu ci-dessous dans un fichier baikal-export-user.sh (sur n'importe quelle machine Linux/macOS disposant de curl et d'un accès HTTPS au serveur Baïkal) :
- baikal-export-user.sh
#!/usr/bin/env bash # Export Baïkal (calendrier + contacts) pour UN utilisateur. # Usage : ./baikal-export-user.sh # Sortie : ./baikal-export/<user>/cal-default.ics et contacts-default.vcf set -u BASE="https://dav.beafrancois.fr/dav/html" # <-- adapter au serveur Baïkal OUT="./baikal-export" read -r -p "Nom d'utilisateur Baïkal : " USER read -r -s -p "Mot de passe pour $USER : " PASS; echo DIR="$OUT/$USER"; mkdir -p "$DIR" AUTH=(--digest -u "$USER:$PASS") ## --- CALENDRIER (default) --- F="$DIR/cal-default.ics" curl -s "${AUTH[@]}" "$BASE/cal.php/calendars/$USER/default/?export" -o "$F" if head -1 "$F" | grep -q BEGIN:VCALENDAR; then N=$(grep -c BEGIN:VEVENT "$F") echo "[OK] Calendrier : $N événements -> $F" else echo "[!] Calendrier : export invalide (mauvais mot de passe ?) -> $F" fi ## --- CONTACTS (default) --- F="$DIR/contacts-default.vcf" : > "$F" EXPECTED=0 while read -r P; do [ -z "$P" ] && continue EXPECTED=$((EXPECTED+1)) curl -s "${AUTH[@]}" "https://dav.beafrancois.fr$P" >> "$F" echo "" >> "$F" done < <(curl -s "${AUTH[@]}" -X PROPFIND -H "Depth: 1" \ "$BASE/card.php/addressbooks/$USER/default" \ | tr -d '\r' \ | grep -o "/dav/html/card.php/addressbooks/$USER/default/[^<]*vcf") GOT=$(grep -c BEGIN:VCARD "$F") if [ "$GOT" -eq "$EXPECTED" ] && [ "$GOT" -gt 0 ]; then echo "[OK] Contacts : $GOT/$EXPECTED -> $F" else echo "[!] Contacts : $GOT récupérés sur $EXPECTED listés -> $F" fi
BASE (et le domaine dans la boucle contacts) à l'URL du serveur Baïkal. Le chemin /dav/html/cal.php et card.php correspond à une installation Baïkal ancienne (0.9.x) ; les versions récentes utilisent /dav.php.
Exécution
Lancer le script une fois par utilisateur :
chmod +x baikal-export-user.sh ./baikal-export-user.sh
Le script demande le nom d'utilisateur puis le mot de passe (saisie masquée). Sortie :
baikal-export/<utilisateur>/cal-default.ics baikal-export/<utilisateur>/contacts-default.vcf
Le script affiche le nombre d'événements et de contacts récupérés. Noter ces chiffres pour vérification après import.
Si la sortie affiche [!], l'export a échoué (mot de passe erroné en général). Ne pas continuer avec un fichier invalide.
2. Import dans Nextcloud
Pour l'utilisateur, connecté avec son compte Nextcloud :
- Calendrier : application Calendar →
Paramètres(en bas à gauche) →Importer un calendrier→ sélectionnercal-default.ics→ cible : calendrier « Personnel » ou un nouveau calendrier - Contacts : application Contacts →
Paramètres→Importer des contacts→ sélectionnercontacts-default.vcf
Vérifier que les compteurs correspondent aux chiffres notés à l'export.
3. Configuration Android (DAVx⁵)
Mot de passe d'application (si 2FA)
Si la double authentification est active sur Nextcloud, le mot de passe du compte ne fonctionne pas pour DAVx⁵. Créer un mot de passe d'application :
- Nextcloud (web) →
Paramètres→Sécurité→ section « Appareils & sessions » - Saisir un nom (ex: « DAVx5 téléphone francois ») →
Créer un mot de passe d'application - Noter le mot de passe affiché (visible une seule fois)
Un mot de passe d'application couvre calendriers et contacts. Un par appareil (révocation ciblée possible).
Suppression de l'ancien compte Baïkal
Dans DAVx⁵ → ouvrir le compte Baïkal → menu ⋮ → Supprimer le compte.
Ajout du compte Nextcloud
- DAVx⁵ →
+→Connexion avec une URL et un nom d'utilisateur - URL :
https://NEXTCLOUD(lewell-knownfait la découverte) - Identifiant : le login Nextcloud
- Mot de passe : le mot de passe d'application (ou celui du compte si pas de 2FA)
- Sélectionner les calendriers (y compris les calendriers partagés, détectés automatiquement) et le carnet d'adresses à synchroniser
- Lancer une synchronisation manuelle et vérifier dans les applis Agenda et Contacts du téléphone
4. Bascule finale
- Laisser tourner quelques jours en vérifiant la synchro sur tous les appareils
- Sauvegarde finale de Baïkal :
tar czf baikal-final-backup.tar.gz /chemin/vers/baikal/Specific/
(
Specific/contient la base et la config) - Conserver aussi les exports
.ics/.vcf - Arrêter le service Baïkal
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
NotAuthenticated / erreur XML à l'export | Baïkal en auth Digest, client en Basic | Le script utilise déjà –digest ; vérifier le mot de passe |
| Contacts : X récupérés sur Y listés | vCards avec href sans . avant vcf | Le script gère ce cas (pattern large) ; sinon comparer les listes |
| DAVx⁵ ne trouve pas les services | well-known absent | Ajouter les redirections /.well-known/caldav et carddav vers /remote.php/dav/ dans le serveur web |
| Connexion DAVx⁵ refusée avec le bon mot de passe | 2FA active | Utiliser un mot de passe d'application |
| Doublons sur le téléphone | Ancien compte Baïkal pas supprimé | Supprimer les deux comptes, resynchroniser depuis Nextcloud seul |
