Freitag, 4. August 2023

Remote Cloud - die Cloud direkt in Linux mounten

Wenn man die Suche bemüht findet man primär jede Menge Tools, meist speziell ein Tool für eine Cloud. Die Technologien sind bei jedem Anbieter ein wenig anders. Die Technologie ändert sich von Zeit zu Zeit, so sind viele Tools nach kurzer Zeit veraltet.

Es gibt aber ein gut gepflegtes Tool, das erledigt diesen Job für so ziemlich alle Cloud Anbieter: rclone 

Setup

Ich habe die Scriptinstallation von hier gewählt, damit erhält man die aktuellste Version.

sudo -v ; curl https://rclone.org/install.sh | sudo bash

Damit der mount Befehl später ohne Fehler funktioniert, musste ich noch fuse3 nach installieren.

sudo apt install fuse3


Konfiguration

Die config datei wird mit rclone in einem interaktiven setup erzeugt. Die Konfiguration kann man immer wieder durchlaufen und die Datei damit ergänzen. Bei Google Drive und Onedrive sind dabei weitere Schritte in einem Browser notwendig. Man ist gut beraten, die Konfiguration auf einem Linux Desktop System vorzunehmen und diese später auf das Zielsystem zu übertragen. Mit einigen Tricks kann man auch einen Remote Browser nutzen siehe z.B: hier.

rclone config

Dabei entsteht eine Datei .config/rclone/rclone.conf im aktuellen user Verzeichnis. Um alles zu testen kann man schnell mal den Zugriff testen (config Beispiel Google Photos):

rclone ls gphoto:media
rclone lsd gphoto:

rclone ist ein umfangreiches Tool und kann ähnlich wie rsync auch zum kopieren / synchronisieren von Strukturen verwendetet werden.

Will man später die Konfiguration mit einem anderen User verwenden, z.B. die Cloud als root beim Systemstart einbinden, muss man diese nach kompletter Konfiguration kopieren und dem rclone Aufruf mitgeben.  

sudo cp .config/rclone/rclone.conf /etc/

Achtung: in dieser Datei befinden sich sensible Zugangsdaten für die Cloud! Bitte auf Sicherheit achten!

Will man später das mounten mit der option --allow-other zulassen, muss man das vorbereiten. Durch den sed Befehl wird das Kommentarzeichen entfernt.

sudo sed -i 's/^#user_allow_other/user_allow_other/' /etc/fuse.conf


Cloud mounten

Jetzt kann man den Zugriff auf die Cloud einmal testen. Das Verzeichnis für den mount muss existieren und leer sein! Beispiel für onedrive, da ich faul bin habe ich den Namen in eine Variable geschrieben. Dieser Code setzt voraus, dass der config Abschnitt und der Pfad gleich heißen. 

cloud=onedrive
mkdir /mnt/${cloud}
rclone mount ${cloud}: /mnt/${cloud}

Um die Cloud beim Systemstart einzubinden, kann man einen "Parameter" Service erzeugen. 

Ich mache das gerne als Heredoc und bemühe den systemd editor. Der erledigt am Ende nämlich daemon-reload. Diesen Block kann man also komplett kopieren und in das Terminal fallen lassen. Er erzeugt die notwendige unit Datei am richtigen Ort.

cat <<EOISERV |sudo SYSTEMD_EDITOR=tee systemctl edit --full --force rclone-mount@.service
[Unit]
# Idee von hier https://gist.github.com/gmag11
Description=rclone FUSE mount for %i
Documentation=http://rclone.org/docs/
After=network-online.target
# externo.mount # This is only needed if you use an external USB hard drive in order to wait for it to be mounted
# Mount point in my system is on a USB drive, don't ask why :))), that's why I have to wait for it to get mounted
# Requires=externo.mount

[Service]
Type=notify
# --vfs-cache-mode full activates cache for writting and reading. Check RClone documentation
ExecStart=/usr/bin/rclone mount %i: /mnt/%i --config=/etc/rclone.conf --vfs-cache-mode full -v --allow-other
ExecStop=/bin/fusermount -uz /mnt/%i
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOISERV

Jetzt kann man die Dienste ausprobieren und aktivieren. Hat man mehrere geht das in einer kurzen Schleife:

array=( onedrive gdrive gphoto )
cmd=start # start, enable, disable usw.
for drive in ${array[*]} ; do
    sudo systemctl ${cmd} rclone-mount@${drive}.service
done


ToDo ?


Code Block


Keine Kommentare:

Kommentar veröffentlichen