Raspberry als Firebird-Server für Delphi-Applikation vom Windows-Client aus anspreche

  • Nachdem ich einige Zeit und viele Suchen nach klieneren oder größeren Hilfestellungen benötigt habe, um den Raspberry als Firebird-Server inkl. Möglichekeiten zum Backup/Restore der Datenbank von einem Windows-PC aus nutzen zu können, möchte ich hier meine Erfahrungen dazu weitergeben.

    Voraussetzung:
    Die Grundinstallation mit Raspbian ist bereits erfolgt, dazu gibt es zahlreiche Anleitungen in diesem und anderen Foren.

    Wir starten mit der Installation des Firebird-Servers. Verwendet wurde die Version 2.5 in der Superserver-Ausführung.

    Code
    sudo apt-get install firebird2.5-super


    Ich gehe hier davon aus, dass bereits eine Datenbank als .fdb-Datei vorliegt, die nur noch übertragen werden muss. Die Erzeugung einer neuer Firebird-Datebank ist hinreichend in anderen Foren (Firebird) beschrieben und nicht Gegenstand dieser Anleitung.
    Wir erstellen nun ein Verzeichnis, in das die Datenbank kopiert werden kann. Ich habe es unterhalb des Home-Ordners des Users pi erstellt. Wer dazu gerne einen eigenen User verwenden möchte findet entsprechende Anleitungen zur Erstellung des Users und des Home-Verzeichnisses.
    Damit der Firebird-Server später darauf auch zugreifen kann, tragen wir als Gruppe pi und als Owner firebid ein und setzen entsprechende Berechtigungen (770).

    Code
    cd /home/pi
    mkdir firebird
    sudo chown firebird:firebird firebird
    sudo chmod 770 firebird

    Nun kopieren wir die Datenbank in diesen Ordner (z.B. mit Hilfe von WinSCP oder Filezilla) und ändern auch deren Gruppe/Owner und Rechte.


    Code
    sudo chown firebird:firebird ./firebird/testdb.fdb
    sudo chmod 660 ./firebird/testdb.fdb

    Da wir den Server von extern ansprechen wollen (keine auf dem Raspberry laufende PHP-Applikation sondern eine Windows-Applikation auf externen Clients) müssen wir dem Firebird-Service erlauben, nicht nur auf localhost zu lauschen.
    Wir ändern die Einstellung in \etc\firebird\2.5\firebird.conf. Dort suchen wir nach RemoteBindAddress und kommentieren diese Zeile durch ein vorangestelltes # aus (danach habe ich Stunden gesucht und schon Firewalls/Router im Verdacht gehabt, weil ich den Service einfach nicht von außen erreichen konnte - und dann war das sooo einfach :shy: :(

    Code
    sudo nano \etc\firebird\2.5\firebird.conf

    Alternativ kann hier auch angegeben werden, welche Clients zugreifen dürfen, hier öffnen wir den Port für alle Adressen von außen!
    ACHTUNG: das ist OK in einem begrenzten internen LAN, sollte für einen Raspi der ggf. auch vom Internet aus erreichbar ist aber nicht ganz so offen konfiguriert werden!

    Wenn wir schon dabei sind tragen wir unsere Datenbank auch gleich noch in der aliases.conf ein, damit wir von außen nicht wissen müssen, in welchem Ordner die DB liegt, sondern einfach den Alias testdb verwenden können.

    Code
    sudo nano \etc\firebird\2.5\aliases.conf
    Zitat

    testdb=/home/pi/firebird/testdb.fdb

    Jetzt ist ein erster Test sinnvoll, ob unsere DB zumindet vom Raspi aus angesprochen werden kann.

    Code
    isql-fb
    SQL> connect testdb user 'sysdba' password 'masterkey';

    Wenn alles funktioniert meldet sich firebird mit

    Zitat

    Database: testdb, user sysdba


    wir beenden den Test mit

    Code
    SQL> exit;

    Wer nur den Zugriff auf die Firebird-Datenbank von einem externen Client aus benötigt, ist damit schon fertig. Die Datenbank kann nun aus gängigen Tools wie z.B. IBExpert, Marathon oder (mein bevorzugtes Tool) der "Database Workbench Lite" wie jede andere Datenbank angesprochen werden.
    In der Konfiguration des jeweiligen DB-Tools gibt man nun folgende Daten ein:
    Host: hostname des Raspberry, also z.B. raspbian
    Protocol: TCP/IP
    In der Datenbankkonfiguration verwenden wir den Alias testdb und zunächst sysdba und masterkey für die Authentifikation.Empfehlenswert ist nun die Anlage eines zusätzlichen Datenbank-Users und die Vergabe von Rechten (Grant) an diesen User. Dies kann z.B. mit der kostenlosen "Database Workbench Lite" in deren Usermanager und Grant-Manager erfolgen (bietet z.B. die Option Grant ALL on ALL), notfalls auch per isql-fb für jedes einzelne Datenbak-Objekt.

    Die nächsten Schritte sind nur notwendig, wenn man zusätzliche Komfort-Funktionen für die Anwender der Windows-Datenbankapplikation bereitstellen möchte.
    Ich wollte gerne eine einfache Möglichkeit bieten, eine Datensicherung und ein Restore auf lokal am Windows-PC angeschlossene Speichermedien zu ermöglichen. Dies sollte aus der Windows-Applikation heraus möglich sein. Dazu habe ich zunächst geplant, die Dateiverwaltung über FTP oder SFTP zu realisieren, habe aber in Delphi dazu keine so richtig elegante Methode gefunden. Da es nur um eine einzige zu kopierende Datei geht (die als .FBK erzeugte Sicherheitskopie) habe ich mich schließlich dafür entschieden, auf dem Raspberry eine SAMBA-Freigabe einzurichten.
    Dabei gilt folgender einfacher Aufbau:

    • Die Datenbank liegt in /home/pi/firebird
    • Die Sicherheitskopie wird in /home/pi/firebird/backup erzeugt und von dort für ein Restore auch wieder gelesen.


    Den Ordner erstellen wir mit den gewünschten Rehcten (hier Vollzugriff für alle):

    Code
    mkdir /home/pi/firebird/backup
    chmod 777 /home/pi/firebird/backup

    Wir benötigen nun noch eine Freigabe für diesen einen Ordner und beginnen mit der Samba-Installation. Eine detaillierte Anleitung dazu findet Ihr z.B. unter http://jankarres.de/2013/11/raspbe…r-installieren/. Hier nur die notwendigsten Schritte daraus:

    Code
    sudo apt-get install samba samba-common-bin

    Danach fügen wir folgende Daten ein:

    Code
    sudo nano /etc/samba/smb.conf
    Zitat

    [FB_Backup]
    path = /home/pi/firebird/backup
    writable=yes
    guest ok=yes

    Danach den Samba-Service mit den neuen Einstellungen aktivieren

    Code
    sudo service smbd reload

    oder auch mal die EInstellungen prüfen

    Code
    testparm /etc/samba/smb.conf

    Nun sollte auf einem Windows-Client bereits die Freigabe auftauchen und wie gewohnt verwendet werden können. Der Rest des Artikels beschäftigt sich nun mit der Programmierung in Delphi.
    Ich verwende hier die Komponenten UIBBackup und UIBRestore nach folgendem Muster:
    Backup:

    • erzeuge ein Backup in /home/pi/firebird/backup
    • kopiere diese Datei über die SAMBA-Freigabe lokal auf den Windows-Client an einen vom Anwender ausgewählten Ort (z.B. einen USB-Stick, eine interne Festplatte, ein anderes Netzlaufwerk etc.)


    Restore:

    • kopiere eine vom Anwender ausgewählte Datensicherung über die SAMBA-Freigabe nach /home/pi/firebird/backup
    • lese die Datensicherung in die Firebird-Datenbank zurück.


    Die Zugangsdaten für die Datenbank stecken in entsprechenden Variablen:

    • servertype: embedded für eine Einzelplatzinstallation ohne Server, network für eine Installation mit Server (nur um die geht es hier)
    • Hostname: im Artikel verwende ich den Dafault raspbian
    • dbname: Name der Datenbank, hier wie im obigen Beispiel testdb
    • sharedir: Freigabe wie sie aus Sicht des Windows-Clients aus sichtbar ist


    Zunächst das Backup.
    Dazu habe ich im Datenmodul u.A. eine TStringlist angelegt, die von der Komponente gefüllt wird.

    Ganz ähnlich funktioiert das Restore:

    Die Auswahl der an die Procedures übergebenen Parameter wie Zielordner, Quellordner wird, soweit es die lokalen Ordner betrifft, vom Anwender vorher über die üblichen Dialog-Funktionen (selectDirctory) in Delphi durchgeführt.

    Soweit eine erste Fassung dieses Tutorials. Anmerkungen und Verbesserungsvorschläge sind gerne willkommen :) !

    Siegbert

  • Raspberry als Firebird-Server für Delphi-Applikation vom Windows-Client aus anspreche? Schau mal ob du hier fündig wirst!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!