Irgendwie ist dieser Blog zu einer feuil­le­to­nis­tischen Kommentarspalte verkommen. Schluss damit! Hier eine Anleitung zu einem Thema, dass ich schon lange vor mir herschiebe, was mein Leben aber ungemein erleichtert: Stell dir vor, du besitzt mehrere OneDrive-Accounts und willst alle auf deinem System synchonisieren. Anwendungsfälle gibt es genug: Du vertwaltest einen Corporate/Business-Account und einen privaten oder du hast dir einen Backup-Account zugelegt. Und so weiter. Und so fort.

Die Antwort könnte lauten: Nutze doch den offiziellen GUI-Client von Microsoft! Der unterstützt mehrere Accounts!

Ja. Tut er. Auf dem Papier. In der Realität ist der Umgang damit… “schwierig”. Und bei der Analyse belassen wir es vorerst. Die einfachrere Lösung lautet nämlich: Docker!

Alles was du brauchst ist eine docker-compose.yml:

version: '3.8'
services:
  onedrive:
    image: driveone/onedrive:latest
    container_name: onedrive-cli
    volumes:
      - ./config:/onedrive/conf
      - ./data:/onedrive/data
    environment:
      - ONEDRIVE_UID=${UID}
      - ONEDRIVE_GID=${GID}
    command: >
      --confdir="/onedrive/conf"
      --syncdir="/onedrive/data"
      --monitor
    restart: unless-stopped

In einer .env Datei legst du deine aktuelle User/User-Group-ID ab:

echo "ONEDRIVE_UID=$(id -u)" > .env
echo "ONEDRIVE_GID=$(id -g)" >> .env

Du baust dir den Container zunächst mit docker compose build und startest diesen dann im interaktiven Modus:

docker run -it --rm \
  -v $(pwd)/config:/onedrive/conf \
  -v $(pwd)/data:/onedrive/data \
  driveone/onedrive:latest \
  --confdir="/onedrive/conf" \
  --syncdir="/onedrive/data" \
  --monitor

Die Konsole liefert dir nun eine URL, über die du den Client authentifizieren musst. Danach beginnt der initiale Sync. Du kannst den Container dann stoppen und mit docker compose up im nicht-interaktiven Modus - also im Hintergrund - starten.

Was ist daran jetzt bemerkenswert? Der Client - hier übrigens das Git-Repo - ist äußerst mächtig und stabil! So kannst du z.B. relativ simpel festlegen, welche Dateien synchronisiert werden - jaja, ich weiß, im Prinzip kann das auch der offizielle Client - aber lange nicht so komfortable und beliebig komplex. Eine Möglichkeit ist z.B. die Datei sync_list im Ordner config (bzg. conf als Mount-Ziel). Dort legst du fest, welche Dateien und Ordner ausschließlich berücksichtigt werden sollen.

Und natürlich kannst du so mehrere Docker-Container aufsetzen, die jeweils unterschiedliche Synchronisierungs-Aufträge erfüllen.

Eine sehr ausführliche Beschreibung, was wie möglich ist, findest du hier: https://github.com/abraunegg/onedrive/blob/master/docs/usage.md

Kudos aber auch an Microsoft. Ohne die öffentlich zugängliche OneDrive-API wäre solch eine Lösung nicht denkbar!