Irgendwie ist dieser Blog zu einer feuilletonistischen 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!