Raspberry Pi 2 - Anwendungen

Thema: Raspberry Pi 2 - Anwendung 'Seafile'
Termin: 13. Februar 2016
Referent: Werner Büchli, HB9CZV

Inhalt

An diesem Workshop installieren und betreiben wir eine eigene Cloud, die Version Seafile mit umfangreichen Funktionen

Installation von Seafile
auf dem Raspberry Pi als Server
Option: Installation von Dropbox

Netzwerk-Konfiguration
Zugriff von aussen (weltweit)

Inbetriebnahme
Einloggen via Browser und mobile Geräte

Arbeiten mit Seafile
Manipulation von Bibliotheken, Ordnern und Dateien als Admin und als Client
Organisation, Speicherzuordnung, Freigaben, Mitteilungen, ... als Admin


Prinzipschema


Komponenten

Seafile Komponenten


Seafile Server besteht aus folgenden Komponenten:
Seahub - Webinterface (hier mit FastCGI als Applikation von Apache Webserver*)
Seafile server - Daten Upload/Download/Synchronisation
Ccnet server - erlaubt die Kommunikation zwischen den Modulen

* Prinzip CGI siehe auch Workshop 2015 (TX-Steuerung). In diesem Workshop installieren wir die direkte, einfachere Variante


Einige Tipps vorneweg:
- Das Arbeiten als Admin im Browser geht am schnellsten mittels PC/Laptop (tightvncserver auf Pi und VNC Viewer auf dem Client, bzw. mit einem Browser auf dem PC/Laptop). Es geht natürlich auch mit Maus und Tastatur direkt am Raspberry Pi, dauert jedoch bedeutend länger.

- Man kann beliebige Ordnern auf dem Client PC synchronisieren. Zudem kann man den ganzen Desktop synchronisieren und hat damit ein 'live' Back-up der aktuellen Arbeiten.

- Wer bereits mit Dropbox arbeitet, kann einzelne wichtige Ordner der Dropbox mit Seafile synchronisieren. Doppelt genäht, hält besser !

-
Die Bibliotheken können im Seafile Client (zusätzlich) verschlüsselt werden und sind so absolut sicher gegen Hackerangriffe, umso mehr als der Server auf dem Raspberry Pi privat zuhause installiert ist (Voraussetzung sind natürlich gute Passwörter für den Server-Zugriff und die Verschlüsselung der Bibliothek).

- Sehr praktisch ist der direkte Upload von der Smartphone-Kamera (wie auch in Dropbox realisiert).

Seafile Installation

Ich empfehle, die stabile Version Raspian Wheezy als Operating System zu verwenden.

Schritt 1

Zuerst sollte man (wie vor jeder Installation) ein Update durchführen- Dazu öffnen wir ein Terminal und geben folgende Befehle (mit copy/past) ein:

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
(bei Raspbian Jessie via Desktop - Preferencies - Add/Remove Software - Option)

Seafile benötigt noch einige Pakete:

pi@raspberrypi ~ $ sudo apt-get install python2.7 python-setuptools python-simplejson python-imaging sqlite3

Mit 'y' bestätigen. Die Pakete werden installiert.


Schritt 2
Da Seafile als Service im Hintergrund ausgeführt wird, ist es vorteilhaft einen neuen Benutzer 'Seafile' zu erzeugen, unter welchem dann das Programm 'Seafile' konfiguriert und gestartet werden kann.

pi@raspberrypi ~ $ sudo adduser seafile

Anschliessend wechseln wir zu diesem Benutzer und mit cd ins Basisverzeichnis 'Seafile':

pi@raspberrypi ~ $ sudo su seafile (su = switch user)
seafile@raspberrypi /home/pi $ cd
seafile@raspberrypi ~ $

Anmerkung: Mit dem File Manager (grafische Oberfläche) kann der Inhalt des Verzeichnisses 'Seafile' verfolgt werden.


Schritt 3
Wir erstellen nun einen neuen Ordner 'Seafile', in welchem das zu ladende Seafile-Programm (zipp) gespeichert werden kann

seafile@raspberrypi ~ $ mkdir seafile (make directory)

Die aktuelle Version von Seafile findet man unter:
https://www.seafile.com/en/download/

Anmerkung: Zurzeit steht dort nur 'Latest Version'.
'Latest Version' anklicken und bei 'Downloads' mit der rechten Maustasze die Adresse des Links 'seafile@raspberrypi /home/pi $' kopieren z.B. in der aktuellen Version wir folgender Link in der Zwischenablage gespeichert:
zur Zeit: https://github.com/haiwen/seafile-rpi/releases/download/v5.0.4/seafile-server_stable_5.0.4_pi.tar.gz
Bei einer neueren Version, müssen alle Befehle auch dahingehend verändert werden z.B anstatt 5.0.4 muss z.B. 5.0.5 eingesetzt werden.


Server für den Raspberry Pi

Adresse des Links kopieren (rechte Maustaste)



Schritt 4
Wir laden nun das gezippte Seafile Programm in den eben neu erstellten Ordner 'Seafile' (wget plus den kopierten Link)

seafile@raspberrypi ~ $ wget https://github.com/haiwen/seafile-rpi/releases/download/v5.0.4/seafile-server_stable_5.0.4_pi.tar.gz

und entzippen es in ein weiteres neue Verzeichnis 'seafile-server-5.0.4' mit dem Befehl:

seafile@raspberrypi ~ $ tar -xvf seafile-server_stable_5.0.4_pi.tar.gz

tar (entzippen)
'- ' (Bestätigung notwendig)
xfv (x = extract, f = file, v = verbose/vollständig)

Optional kann das gezippte File wieder gelöscht werden:
seafile@raspberrypi ~ $ rm seafile-server_stable_5.0.4_pi.tar.gz

Beispiel: Add user und su seafile


Schritt 5
Wir springen nun in das eben erstellte Verzeichnis 'seafile-server-5.0.4' wo sich das entzippte Programm Seafile befindet ...

seafile@raspberrypi ~ $ cd seafile-server-5.0.4

.. und starten die Konfiguration-Prozedur:

seafile@raspberrypi ~/seafile-server-5.0.4 $ ./setup-seafile.sh

Hier führt uns ein Assistent durch die verschiedenen Abfragen:
Name: z.B MeineCloud oder Seafile
Am besten lässt man alle Ports auf 'default' ausser man benötigt eines dieser Ports für andere Programme.
Pfad des Speicherorts: 'default', falls wir keinen externen Speicher wie z.B einen USB-Stick oder eine Festplatte verwenden wollen

Danach muss man noch eine Mailadresse und ein Passwort für den späteren Login im Webclient wählen.

Set-up Prozedur (teilweise)

Bestätigung der Konfiguration


Start von Seafile

Schritt 6
Nun starten wir Seafile (File synchronization service) und Seahub (Web Interface):

seafile@raspberrypi ~/seafile-server-5.0.4 $ ./seafile.sh start
seafile@raspberrypi ~/seafile-server-5.0.4 $ ./seahub.sh start

Start Seafile und Seahub

Abschluss der Konfiguration


Automatischer Start bei Reboot

Nach einem Neustart oder nach einem Stromausfall soll das Programm automatisch starten:

_________________________ ev. weglassen __________________________

Eingabe: seafile@raspberrypi ~ $ sudo crontab -e

Dies startet den Cron-Daemon. Er dient der zeitbasierten Ausführung von Prozessen (griechisch chronos = Zeit). Die 2 auszuführenden Jobs werden in eine Tabelle ganz unten eingefügt:


@reboot /home/seafile/seafile-server-5.0.4/seafile.sh start
@reboot /home/seafile/seafile-server-5.0.4/seahub.sh start


(Achtung: Die Version 5.0.4 kann ändern ! )

_________________________ ev. weglassen __________________________

Wir melden uns nun als 'root' an und geben crontab -e ein und setzen die folgende Zeile ganz unten ein:

@reboot /home/seafile/seafile-server-5.0.4/seahub.sh start
@reboot /home/seafile/seafile-server-5.0.4/seahub.sh start

Achtung: Die Version 5.0.4 kann ändern !

Crontab Eingabe


Das Konfigurations-File kann auch mittels eines FTP-Programms modifiziert werden:

Konfigurations-File mit WinSCP


Option (falls der Pi nicht automatisch mounten sollte):
USB-Stick und USB-Festplatte einbinden

_______________________________________________________
Das primäre Speichermedium des Raspberry Pis ist eine SD- bzw. microSD-Karte beim Pi 2. Manchmal reicht die Kapazität dieser SD-Karte nicht aus und man möchte einen USB-Stick oder eine externe Festplatte mittels USB einbinden. Dies kann der Fall sein wenn man Pi als Cloudserver für OwnCloud oder wie in unserem Fall für Seafile nutzen möchte. Ein USB-Stick ist geräuschlos ist und kommt ohne externe Stromversorgung aus.

Wir installieren Treiber, damit NTFS und HFS+ Speichermedien eingebunden werden können.

sudo apt-get -y install ntfs-3g hfsutils hfsprogs exfat-fuse

Wir legen nun einen Ordner im Verzeichnis /media an, in den das USB-Speichermedium später eingebunden wird (Mountpoint genannt). Der Ordner kann z.B. 'usbstick' benannt werden.

sudo mkdir /media/usbstick

Nun führen wir folgenden Befehl in der Konsole aus und stecken anschließend das USB-Medium an (Stick). Daraufhin sollte in der Konsole eine Ausgabe aller angeschlossenen Speichermedien erscheinen. USB-Sticks heißen meist (hier sda1) sda und externe Festplatten hd, ggf. mit anhängender Nummer. Uns interessiert die erste und letzte Spalte des richtigen Gerätes mit dessen device Pfad und UUID (Universally Unique Identifier).

sudo blkid -o list -w /dev/null

Nachdem wir nun den device Pfad des USB-Speichermediums kennen und einen Mountpoint erstellt haben, können wir den USB-Stick (oder die USB-Festplatte) mit folgendem Kommando einbinden. Dabei muss man je nach Dateisystem ein anderes Kommando verwenden, sda1 durch den Namen des USB-Speichermediums und /media/usbstick/ durch den Mountpoint ersetzt werden. Die zwei pi Angaben müssen, sofern ein anderer Benutzer als pi auf das USB-Speichermedium zugreifen soll, durch dessen Namen ersetzt werden.





In unserem Fall für ext4

sudo mount -t ext4 -o defaults /dev/sda1 /media/usbstick

______________________ optional _________________________

Um das Speichermedium wieder zu dismounten/auszuwerfen, wenden wir folgenden Befehl an, wobei wir wieder den Mountpoint anpassen müssen.

sudo umount /media/usbstick
_______________________________________________________


Dropbox
(in Arbeit)

Wer bereits einen Dropbox-Account hat, möchte einen Client auf dem Raspberry Pi einrichtem.
(Anmerkung: Dropbox kann auch mit einem Browser bedient werden)

1. Wir benötigen erst mal einen 'Dropbox Uploader'
Wir öffnen ein Terminal und geben cd ein, damit wir sicher im Pfad /home/pi sind.

Dann geben wir folgenden Befehl ein:
git clone https://github.com/andreafabrizi/Dropbox-Uploader.git

(Falls dies nicht funktioniert, muss man git installieren:
sudo apt-get install git-core)

Nun listen wir die Files mit: ls
Wir sehen nun eine 'Dropbox-Uploader' Directory und wechseln in diese mit:

cd Dropbox-Uploader
nun wieder :

ls

Jetzt sollten wir drei Files sehen,wovon eines mit 'dropbox_loader.sh' bezeichnet ist


2. Jetzt noch etwas 'Sicherheit' mit dem API key
(Application programming interface key)

Nun führen wir folgendes Script aus:

./dropbox_uploader.sh

und sollten das folgende sehe:




App Key


Nun müssen wir die Website https://www.dropbox.com/developers/apps besuchen und in die Dropbox einloggen. Weiter müssen wir eine App generieren durch Drücken des Buttons 'create app'

Dann wählen wir “Dropbox API app”, “Files and Datastores” und beantworten die letzte Frage “Can your app be limited to its own, private folder?” mit OK, entsprechend den Bedürfnissen.

Schliesslich müssen wir unserer App noch einen eindeutigen Namen geben.


Nachdem wir unseren Schlüssel eingegeben haben, beantworten wir noch die Frage “app” or “full”. Der Pi fordert einen 'authorisation token' an und gibt eine URL zur Aktivierung

Falls alles richtig durchgefühtt wurde, folgendes Bild wird im Browser präsenziert:


Dropbox auf dem Raspberry Pi installiert

Seafile von aussen zugänglich machen

Damit unser Seafile-Server von ausserhalb unseres Heimnetzwerkes erreicht werden kann sind folgende Voraussetzungen notwendig:
1. Die (externe) IP-Adresse unseres Seafile-Servers muss bekannt sein
2. Der Firewall unseres Routers muss überwunden werden

3. Eine sichere Verbindung vom Client zu unserem Server muss aufgebaut werden
4. Option: Innerhalb des Tunnels Aufbau einer VNC-Verbindung (VNC=Virtual Network Computing)

Zugriff auf Pi von extern


1. IP-Adresse des Seafile-Servers

Die (externe) IP-Adresse unseres Seafile-Servers muss bekannt sein

1a) Durch eine fixe IP-Adresse
Diese kann bei der Swisscom gegen eine monatliche Gebühr von zurzeit Fr. 10.-- gemietet werden.

1b) Durch die Verwendung eines Dynamischen DNS-Servers (Domain Name System)
Dieser Service ist gratis. Man muss allerdings meist die aktive Benutzung monatlich per Email bestätigen.

Die Konfiguration erfolgt im Router unter Angabe von:
- DDNS Anbieter (www.DynDNS.org, no-ip, ...)
- Hostname (z.B. hb9czv.does-it.net)
- Benutzername
- Passwort





2. Router-Konfiguration

Eine Portweiterleitung (port forwarding) ist die Weiterleitung einer Verbindung (hier z.B. vom Client) auf einen bestimmten Port zu einem anderen Computer (hier unser Pi als Server)


Beispiel Portweiterleitung auf dem Router


SSH/VNC-Verbindung mit Linux
(z.B. Mint)

Unterlagen: http://www.penguintutor.com/linux/tightvnc

_____________________________________________________________

Ungesicherte SSH/VNC Verbindung mit Linux

Login mit:
pi@raspberrypi ~ $ xtightvncviewer 192.168.1.30:1
(Einsetzen der entsprechenden eigenen IP Adresse)

Eingabe des Passwortes für den xtightvncserver
(Das Passwort muss nicht unbedingt sicher sein, da eine lokale Verbindung besteht)
_____________________________________________________________

Gesicherte SSH/VNC Verbindung mit Linux
Arbeitet man von extern, ist eine sichere Verbindung durch einen 'SSH Tunnel' (secure shell) unbedingt zu empfehlen.
Der Aufbau der gesicherten Verbindung erfolgt in 2 Schritten. Zuerst bauen wir einen Tunnel auf. Man kann sich das z.B. so vorstellen wie wenn wir durch einen Sumpf (Internet) eine von mehreren möglichen Röhren (SSH-Tunnels) für Trinkwasser verlegen.


_______________ einmalige Vorbereitung _________________

In einem ersten Schritt beschränken wir TightVNC auf den lokalen PC beschränken. Dies geschieht einmalig, indem wir die
Option -localhost beim Start des tightvncservers aktivieren:
Pfad: /etc/systemd/system/tightvncserver.service file
Editiere Linie 7: ExecStart=/usr/bin/tightvncserver -localhost :1

Jetzt den Server neu starten mit: tightvncserver

_______________ einmalige Vorbereitung _________________


Login des Client-PC zum Aufbau eines SSH-Tunnels (unsere 'Wasserröhre' Nr. 1):

pi@raspberrypi ~ $ ssh pi@hb9czv.does-it.net -L 5901:localhost:5901

(hb9czv.does-it.net oder 192.168.1.30 muss entsprechend angepasst werden;
lokal auch: pi@raspberrypi ~ $ ssh pi@192.168.1.30 -L 5901:localhost:5901)

Die Option -L kreiert den SSH-Tunnel vom vom Client (port 5901) zum Host-Computer (Server Pi als localhost). Port 5901 ist das Default-Port für Display 1; Port 5902 dasjenige für Display 2, etc.

Eingabe des Passwortes für den Pi (sicheres Passwort !)

Nun können wir bereits mit dem entfernten Pi (Server) auf Basis von Befehlszeilen arbeiten,
Um eine grafischen Oberfläche des entfernten PC's (Server) zu erhalten, müssen wir den tightvncviewer in einem zweiten Terminal starten, mit dem Befehl:

xtightvncviewer 127.0.0.1:1

Eingabe des Passwortes für den xtightvncserver

(Dieses Passwort muss nicht unbedingt sicher sein, da ja eine geschützte SSH-Verbindung besteht)

SSH-Verbindung


SSH/VNC-Verbindung mit Windows

Download and start PuTTY:

SSH mit Windows - Eingabe vor Add


Nach Aufbau der Verbindung starten wir auf dem Windows-Client den TightvncViewer

SSH mit Windows - Eingabe VNC Passwort


.. und wir bekommen die grafische Oberfläche des Seafile.Servers

VNC/SSH mit Windows

Inbetriebnahme von Seafile


Direkt im Browser eines PC's (als Admin oder Client)
Nun kann man sich über das Webinterface einloggen. Dieses finden wir unter unserer IP und unserem bei der Installation angegebenen Port
z.B. 192.168.x.x:8000 in die Adresszeile des Browsers eingeben. Port: 8000 (default)

Es erscheint nun ein Anmeldungsfenster:

Seafile Anmeldefenster


Wir können nun direkt im Seahub des Servers (Raspberry Pi) Bibliotheken, Files und Ordner erstellen/ändern und löschen.


Anmeldung mit Windows Client
Dazu laden wir mit Windows, Android oder Mac den entsprechenden Seafile Client.


Dateien mit dem Seafile Client synchronisieren

Nachdem wir den Seafile Client installiert haben, schauen wir uns jetzt an, wie wir Bibliotheken damit synchronisieren können. Es gibt zwei verschiedene Arten, wie das möglich ist. Wir können Bibliotheken vom Seafile Server zum PC synchronisieren oder lokale Dateien in den Seafile Server hoch sychnronisieren.
Vollständige Bedienungsanleitung


Mobile Seafile Client

Beispiel Anmeldung mit Android Seafile Client

Arbeiten mit Seafile

Eine ausführliche Anleitung in deutscher Sprache befindet sich hier

In Seahub werden alle Dateien und Ordnern in Bibliotheken organisiert. Jede Bibliothek kann verschiedene Ordner, Unterordner und Dateien enthalten. Sie können Ihre Dateien direkt im Seafile Webinterface (Seahub) organisieren. Dort können Sie auch gleich neue Bibliotheken anlegen.

Sie können in Ihren Bibliotheken Dateien und Ordner erstellen, umbenennen und löschen oder in andere Bibliotheken verschieben. Jede Bibliothek kann auf beliebig viele, unterschiedliche Geräte synchronisiert werden.

Dateien können innerhalb jeder Bibliothek hochgeladen, runtergeladen, gelöscht oder umbenannt werden.

Gruppen helfen Ihnen dabei, Benutzer innerhalb eines Seafile Servers besser zu organisieren. Sie können Benutzer z.B. in Abteilungen, Projektgruppen oder Teams aufteilen. In jeder Gruppe können die Benutzer dann „unter sich“ Dateien teilen, Gruppenbibliotheken führen und vieles mehr.

Seafile hat eine integrierte Kontakteverwaltung – quasi ein internes Adressbuch. Damit können Sie Benutzer innerhalb des gleichen Seafile Servers zu Ihren Kontakten hinzufügen. Kontakte können darüber hinzugefügt, bearbeitet und auch wieder gelöscht werden. Sobald ein anderer Seafile Benutzer zu Ihren Kontakten hinzugefügt ist, können Sie ihm eine private Freigabe schicken, ohne immer seine Emailadresse eingeben zu müssen. Das funktioniert auch mit privaten Nachrichten so.

Jedes Mal wenn Sie eine Benachrichtigung erhalten, ein anderer Benutzer eine Datei für Sie freigibt oder wenn es einen neuen Eintrag bei einer Gruppendiskussion gibt, wird Seafile Ihnen darüber einen Benachrichtigung schicken.

Alles weitere befindet sich in der Anleitung.


Uebungen

  • Erstellen/Löschen von Bibliotheken
  • Upload/Download von Files
  • Foto upload vom Smartphone
  • Freigeben von Files
  • Mitglieder/Gruppen verwalten
  • Import/Export von Mitgliederlisten
  • Angeschlossene Geräte
  • Dropbox mit Seafile synchronisieren
  • etc.

Seahub: Bibliotheken


Seahub: Angeschlossene Geräte


Mitteilungen


Freigaben: Hier geladen vom Smartphone


Excel Import/Export von Adressen


Dienstag, 8. März 2016
crontab (Ergaenzung)

Der crontab bei Seafile funktioniert nicht richtig, obschon er scheinbar richtig eingegeben ist.
Abfrage unter User 'Seafile': crontab -l (List/klein L)

Aenderung mit: crontab -e (Edit)
Dann erscheint der Editor 'nano'. Ganz unten den 'crontab' eintragen und mit Ctrl/o schreiben und mit Return abschliessen.
Ctrl/x beendet den Editor

Dienstag, 8. März 2016

Mittwoch, 10. Februar 2016
Notizen

Anmelden

Zugriffe heute: 1 - gesamt: 1146.