Drücke „Enter”, um zum Inhalt zu springen.

OneDrive auf Linux Server als Speicherplatz einbinden

Manuel 8

Die letzten Tage war ich mit dem Thema beschäftigt, wie ich möglichst viel Speicherplatz für einen vernünftigen Preis bekomme und diesen unter Linux als Ablage für Backups usw. nutzen kann. Ich nutze schon seit einiger Zeit HiDrive von Strato, dennoch habe ich mal weiter geforscht und bin dabei auf Office365 gestoßen.

Office 365 hat man wohl eher auf dem Schirm, wenn es darum geht, stets aktuell mit dem heimischen Office zu bleiben. Es hat aber auch Speicherplatz inbegriffen und nicht gerade wenig: Pro Benutzer werden einem jeweils 1 TB an Speicherplatz angeboten.

Was sich in der Theorie ganz gut anhört, und in der Praxis unter Windows auch ganz gut ist, stellt eine Herausforderung unter Linux dar, zumindest wenn man von der Konsole aus arbeitet. Nach etwas Tüfteln und Ausprobieren bin ich aber auf eine Lösung gekommen, auch wenn mir noch Erfahrungswerte fehlen bei der Zuverlässigkeit.

Ich beschreibe mal die Wege, die Herausforderungen und meine Lösung:

Zugriff via davfs2

Kennt man sich etwas unter Linux aus und beschäftigt man sich mit Office365 OneDrive, liest man schnell, dass es die Möglichkeit gibt, über das WebDAV Protokoll auf die Dateien zuzugreifen. In der Regel funktioniert der Zugriff auf WebDAV unter Linux, wenn auch nicht immer performant oder ohne Komplikationen. Im Fall OneDrive haben wir es mit Komplikationen zu tun: Nutzt man das verbreitete FUSE Modul davfs2, erhält man beim Versuch die Freigabe einzuhängen, eine Fehlermeldung:

root@vmm-h01:/# mount -tdavfs,rw,_netdev -vv https://d.docs.live.net/xxxxxxxxx /media/cdrom
/sbin/mount.davfs: das Einhängen schlug fehl;
302 Found

Um es kurz zu machen: Auf diversen Seiten wird beschrieben, wie man den „persönlichen“ Pfad ermittelt um via WebDAV zugreifen zu können. Verwendet man den mit dem Modul, gibt es einen Redirect (HTTP Status Code 302), mit dem das Modul nicht umgehen kann.

Es gibt einige Bug Reports zu dem Thema auf der Internet-Seite von davfs2, aber keine wirklich einfachen Lösungen oder solche, die bereits eingeflossen wären in davfs2. Da das alles für mich nach zu viel Gefriemel ausgesehen hat, keine Lösung die ich weiterverfolgt habe.

Man liest, dass wohl das Einbinden unter Gnome oder KDE mit deren eigenen WebDAV Modulen wohl funktioniert, da ich aber den Zugriff „headless“ auf einem Server einrichten möchte, keine Option für mich.

Zugriff via RClone

Auf einer Internet-Seite bin ich auf eine Beschreibung gestoßen, wie sich OneDrive alternativ einrichten lässt, und zwar mit der Software RClone.

Die Einrichtung mit der Software ist tatsächlich auch recht einfach. Es empfiehlt sich, von der RClone die aktuellste Version herunterzuladen. Bei meinen Tests mit der bei mir in Debian 9 vorhandenen Version hatte ich Probleme, die mit der aktuellen Version nicht auftraten.

Dazu habe ich in meinem Fall die aktuelle Version 1.46 auf dem Server heruntergeladen und anschließend installiert mit

apt install /tmp/rclone-v1.46-linux-amd64.deb

und mit

rclone config

die Konfiguration gestartet. Es wird dann ein Menü angezeigt:

root@vmm-h01:/# rclone config
Current remotes:

Name Type
==== ====

n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/n/d/s/q>

Ruf dann den Punkt „New remote“ auf durch drücken der Taste n + ENTER. Anschließend werden ein paar Fragen gestellt, die man wie nachfolgend zu sehen beantwortet (in dem Beiespiel benenne ich die Verbindung „onedrive-laufwerk“):

e/n/d/s/q> n
name> onedrive-laufwerk
Type of storage to configure.
Choose a number from below, or type in your own value
1 / Amazon Drive
\ "amazon cloud drive"
2 / Amazon S3 (also Dreamhost, Ceph, Minio)
\ "s3"
3 / Backblaze B2
\ "b2"
4 / Dropbox
\ "dropbox"
5 / Encrypt/Decrypt a remote
\ "crypt"
6 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
7 / Google Drive
\ "drive"
8 / Hubic
\ "hubic"
9 / Local Disk
\ "local"
10 / Microsoft OneDrive
\ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
12 / Yandex Disk
\ "yandex"
Storage> onedrive
Microsoft App Client Id - leave blank normally.
client_id>
Microsoft App Client Secret - leave blank normally.
client_secret>
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code…

An dem Block folgt eine kleine aber keine wirklich große Herausforderung: RClone möchte, dass du eine URL aufrufst, die aber nur lokal auf dem Server (=127.0.0.1) erreichbar ist. Hierfür greifen wir auf Trick 17 zurück, wir tunneln via SSH einfach den Port auf den heimischen Rechner mit Internet-Browser und rufen dort die Adresse auf. Hierfür nutze ich im Beispiel PuTTY, das geht aber prinzipiell auch mit jedem anderen SSH Client, der das Tunneln von Ports erlaubt.

Auf folgendem Screenshot sieht man, wie in der SSH Verbindung noch ein Tunnel für die URL eingerichtet wird, die von RClone angezeigt wird. Wichtig ist hierbei der Port sowie die Adresse 127.0.0.1.

PuTTY Einstellungen

Hat man sich erfolgreich via SSH verbunden, kann man im lokalen Browser von dem Rechner von dem man sich aus verbunden hat, identisch die Adresse aufrufen, die RClone anzeigt. Hat man dort dann bestätigt dass man den Zugriff erlaubt, geht es auch schon weiter auf der Konsole:

Got code
2019/03/10 14:49:26 Failed to save new token in config file: section 'onedrive-laufwerk' not found
--------------------
[onedrive-laufwerk]
client_id =
client_secret =
token = {"access_token":".............","token_type":"bearer","refresh_token":".............","expiry":"2019-03-10T15:49:26.85383504+01:00"}

y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name Type
==== ====
onedrive-laufwerk onedrive

e) Edit existing remote
n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/n/d/s/q>

Das war es an der Stelle mit der Konfiguration, mit q kann man dann RClone verlassen. Jetzt kann man auch schon testen, ob alles wie gewünscht funktioniert. Dafür ruft man auf:

rclone mount onedrive-laufwerk: /mnt

Das bedeutet in dem Fall, dass die auf den Namen onedrive-laufwerk eingerichtete Verbindung auf das Verzeichnis /mnt eingehängt wird. In einem zweiten Shell-Fenster kann man dann auch mal auf /mnt zugreifen und sollte die Inhalte von OneDrive sehen können.

Mit CTRL+C kann man dann dann den Test abbrechen.

Jetzt fehlt eigentlich nur noch eine Sache: Automatisches Einbinden der Freigabe beim Systemstart.

Hierfür rufst du die Seite https://github.com/ncw/rclone/wiki/rclone-fstab-mount-helper-script auf und speicherst das Skript am Seitenanfang auf dem Zielrechner ab. Ich habe es bei mir mit dem Namen rclonefs unter /usr/local/bin abgelegt und anschließend natürlich noch die Datei mit chmod 755 ausführbar gemacht.

Jetzt kannst du in der Datei /etc/fstab einen Eintrag wie folgt hinzufügen:

rclonefs#onedrive-laufwerk:/  /mnt/onedrive-laufwerk  fuse config=/root/.rclone.conf,allow-other,default-permissions,max-read-ahead=16M 0 0

Zu beachten ist, dass unter /mnt das Verzeichnis onedrive-laufwerk angelegt wurde, in welches dann die OneDrive-Freigabe rein gemountet wird und der Pfad zur Konfigurationsdatei, hier /root/.rclone.conf angegeben wird.

Das war es dann auch soweit: Bei mir wird jetzt alles eingebunden und ich kann den Speicherplatz nutzen 🙂

  1. Andreas Fragnicht Andreas Fragnicht

    Vielen Dank, der Artikel war sehr hilfreich.
    Meine Distri hat allerdings etwas mehr Ordnung in den Konfigurationen deswegen lautet der Pfad für die fstab bei mir /root/.config/rclone/rclone.conf
    Nur für den Fall, dass jemand da Probleme hat.

  2. Sebastian Sebastian

    Vielen Dank für den Artikel! Hat mir geholfen das letzte Quäntchen meiner Backup Konfiguration fertigzustellen! 🙂

  3. Chris Chris

    Sehr interessanter Artikel, vielen Dank! Ich versuche das Ganze auf einem Raspberry Pi 3B. Das Aufsetzen und manuelle Mounten klappt auch prima, ist sogar noch etwas einfacher, da der Pi ja auch eine GUI hat und man den Browser aufrufen kann.
    Was jedoch nicht klappt, ist der Automount per /etc/fstab. Aus dem Syslog erkennt man leider die Ursache nicht, dort steht, dass /mnt/onedrive-laufwerk gemountet wurde…
    Irgendwelche Ideen?

    • Manuel Manuel

      Wichtig wäre, dass du das erwähnte Skript rclone-fstab-mount-helper-script angelegt und auf ausführbar gesetzt hast. Sollte das soweit passen, kannst du mal probieren, auf der Kommandozeile mit
      mount -a
      das Mounten der RDrive fstab Eintrages zu erwzeingen und dann kannst du schauen, was passiert. Fehlermeldungen solltest du möglicherweise mit
      dmesg
      oder
      tail -200 /var/log/syslog bzw tail -200 /var/log/messages
      finden können.

      • Chris Chris

        mount -a funktioniert. Ein Hinzufügen von

        @reboot (sleep 30; mount -a)&

        in die /etc/crontab führt dann auch dazu, dass nach Boot gemountet wird, Problem gelöst.

        Ich versuche das Ganze in Kombination mit rsync als Backup-Ziel eines Synology-NAS, da dessen Hyper Backup von Hause aus kein Onedrive unterstützt. Mit meinem Onedrive for Business Account funktioniert das aber leider nicht zuverlässig, weder auf dem Pi (dort gar nicht) noch auf einem Rootserver (dort extrem langsam). Möglicherweise hat rsync Probleme mit per rclone eingebundenen Verzeichnissen, habe leider noch keine Lösung.

  4. Stephan Stephan

    Via Webbrowser habe ich Einsicht (Leserechte) in ein OneDrive vom Verein. Dazu habe ich keine Login Credentials (weder vom Verein noh von O365/MS).

    Meine Frage ist nun: wie lautet die Anwendung von rclone, um auch ohne Credentials eine Einblendung in den Linux Dateisystembaum herzustellen? (RO, wie z.B. eine CD-ROM)

    —–
    Mein Workaround war, den Link „Download as Zip“ solange zu unteruchen bis ich ihn mit CURL einsetzen konnte. „war“, weil das OD-System nicht in der Lage ist „grosse“ Dateien rauszugeben: der Transfer der Zipdatei bricht cloudseitig einfach nach 4GB ab… 🙁

  5. Manfred Manfred

    Hallo,
    es ging alles super lt. der Beschreibung bis zu dem Befehl:
    Use auto config?
    *say y of not sure
    dies führte ich aus,
    dann folgte ein neues Fenster im Browser mit folgender Meldung:
    unautorized_client: The client dors not exist or is not enabled for consumers. If you are the application developer, configure a new application through the App registrations in the Azure portal at https://go.microsoft.com/fwlink/?linkid=2083908.

    Jetzt bräuchte ich weitere Hilfe um das Einbinden von OneDrive bzw. Office 365 personal abzuschließen, was muss ich tun?

    Vielen Dank für die Unterstützung im Voraus

  6. Alexander Alexander

    Sehr gute Anleitung. War mit webdav verzweifelt, rclone lief problemlos nach der Anleitung.

    Einzig Verzeichnisse, die mir von Dritten geteilt wurden sehe ich nach dem mounten nicht. Gibt es Tipps, wie man die angezeigt bekommt?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.