Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Portierung Firebird von Win auf Linux: UDF Lib Fehler (https://www.delphipraxis.net/212894-portierung-firebird-von-win-auf-linux-udf-lib-fehler.html)

ZOD 20. Apr 2023 09:34

Datenbank: Firebird • Version: 2.5 • Zugriff über: dbexpress

Portierung Firebird von Win auf Linux: UDF Lib Fehler
 
Hallo zusammen,

wir arbeiten derzeit daran, unseren FB Server auf Linux zu migrieren, unter Win verwenden wir derzeit FB2.5 (daher habe ich FB2.5 als ergänzende Angabe für den Thread hinterlegt).

Da ich selbst leider nahezu keine Erfahrung mit Linux habe, haben wir uns dafür Unterstützung geholt.
Die Installation der Virtualisierung auf dem Host, der VM und von FB hat gut geklappt, der FB Server läuft, Datenbanken können aus der Sicherung vom aktuellen FB2.5 Server (erzeugt mit dem FB CL Befehl "gback") importiert werden und angesprochen werden.

Leider bekommen wir eine notwendige UDF Library nicht zum laufen (FreeAdhocUDF (http://freeadhocudf.org) ), wir bekommen den Fehler

Use of UDF/BLOB-filter module at location FreeAdhocUDF is not allowed by server configuration.

Zuerst haben wir es mit FB3 versucht und sind an Fehlern beim UDF aufruf z.B. in selects gescheitert. Dann haben wir es mit FB4 versucht und sind ebenfalls gescheitert.
Uns ist nicht klar, welche Server Konfiguration (darauf verweist die Fehlermeldung) wir falsch eingestellt haben.

Kann mir jemand dazu Hilfe bzw. Tipps beben? Das wäre klasse. Dazu sind natürlich weitere Infos nötig, im Folgenden versuche ich die Details so gut wie möglich zu beschreiben.

Vorher noch eine Anmerkung zum Thema UDF Ablösung:
sicher werden in Zukunft auch bei uns die UDF durch aktuelle Konzepte ersetzt, derzeit möchten wir das aber aus pragmatischen Gründen (viele Abfragen müssen dafür geändert werden) derzeit noch nicht angehen .. wenn möglich.

Unten nun die Detais zu unserem Problem.

Danke und Gruß
Markus

Was wir aktuell erledigt haben:
  1. Aufbau Linux Host (HP DL380 Gen9) -> erledigt
  2. Installation Virtualisierung Proxmox 7.4.3 -> erledigt
  3. Aufsetzen einer Linux VM (Debian 11) -> erledigt
  4. Installation Firebird 4.0 -> erledigt

Hier die Eckdaten der VM für den FB Server:
  • Debian 11 64bit
  • uname -a sagt: Linux RMVM18 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64 GNU/Linux

Firebird haben wir sowohl über apt installiert...
firebird3.0-common 3.0.7.33374.ds
firebird3.0-server 3.0.7.33374.ds
firebird3.0-server-core q3.0.7.33374.ds
firebird3.0-utils q3.0.7.33374.ds

... als auch alternativ direkt mit den Installations-Paketen von
https://firebirdsql.org/en/firebird-3-0/#Linux_AMD64:

https://github.com/FirebirdSQL/fireb...0.amd64.tar.gz

Am Ende haben wir es dann noch mit der 4er-Version probiert:

https://github.com/FirebirdSQL/fireb...0.amd64.tar.gz

Die Abhängigkeiten von den zusätzlich zu installierenden lib-Dateien
haben wir erfolgreich geprüft mit...

ldd FreeAdhocUDF.so

Ergebnis:
cd.1 (0x00007fff557da000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fae5a559000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fae5a384000)
libib_util.so => /lib/x86_64-linux-gnu/libib_util.so (0x00007fae5a37f000)
libicudataFAU.so.44 => /lib/x86_64-linux-gnu/libicudataFAU.so.44
(0x00007fae5933f000)
libicui18nFAU.so.44 => /lib/x86_64-linux-gnu/libicui18nFAU.so.44
(0x00007fae58f65000)
libicuucFAU.so.44 => /lib/x86_64-linux-gnu/libicuucFAU.so.44
(0x00007fae58c12000)
libfbclient.so.2 => /lib/x86_64-linux-gnu/libfbclient.so.2
(0x00007fae58a6e000)
/lib64/ld-linux-x86-64.so.2 (0x00007fae5a8d3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
(0x00007fae58a4c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fae58a46000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fae58879000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fae5885f000)
libtommath.so.1 => /lib/x86_64-linux-gnu/libtommath.so.1
(0x00007fae5883d000)

Einstellung in der firebird.conf:

UdfAccess = Restrict (mit/ohne Pfadangaben, alle möglichen Pfade probiert, auch Full)

Das Ergebnis ist leider aber identisch: die Einbindung von FreeAdhocUDF gelingt NICHT, es kommt beim Aufruf

Code:
Select f_abs(-1) from rdb$database;
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Use of UDF/BLOB-filter module at location FreeAdhocUDF is not
allowed by server configuration.
-------------------------------------------------------------------------------------------------------------
SQLCODE: -902
SQLSTATE: 28000
GDSCODE: 335544831

Delphi.Narium 20. Apr 2023 10:55

AW: Portierung Firebird von Win auf Linux: UDF Lib Fehler
 
Hilft Dir eventuell ein Blick in die Firebird-2.1-ErrorCodes weiter?

Dort steht zum angegebenen Fehlercode: -902 335544831 conf_access_denied Access to @1 "@2" is denied by server administrator

SQLSTATE: 28000 bedeutet: Invalid authorization specification

Eventuell ein Rechteproblem?

Keine Ahnung, ob das nun eine Rechteproblem auf Datenbank- oder auf Betriebssystemebene sein könnte.

ZOD 20. Apr 2023 11:42

AW: Portierung Firebird von Win auf Linux: UDF Lib Fehler
 
Hi, danke für den Tipp.

mhm .. dann müsste im Bereich des FB Server nach dieser Meldung

"..Invalid authorization specification"

eingestellt werden? Aber wo nur? Ich habe dazu nichts gefunden.

Auf OS Ebene sind die Rechte alle da (lesen, schreiben, ausführen)

Markus

Delphi.Narium 20. Apr 2023 12:13

AW: Portierung Firebird von Win auf Linux: UDF Lib Fehler
 
Mit welcher Software setzt Du denn das
SQL-Code:
Select f_abs(-1) from rdb$database;
ab?

ISQL, FlameRobin, eigene Software?

Gibt es in den neuen Datenbanken die gleichen User mit identischen Passwörtern, wie im "Original"?
Sind irgendwelche Rollen vergeben, stimmen die überein?

Funktioniert der Aufbau einer Verbindung zur Datenbank?

Funktioniert ein
SQL-Code:
Select * from rdb$database;
Sprich: Scheitert "nur" der Aufruf der Funktion f_abs(), aber andere Abfragen funktionieren?

Mal die firebird.confs miteinander verglichen?

Hilft die FAQ 203 weiter?

lowmax_5 20. Apr 2023 13:02

AW: Portierung Firebird von Win auf Linux: UDF Lib Fehler
 
Ggf. ist es möglich, dass unter Linux die UDFLib noch spezielle Rechte des Firebird Dienstes benötigt, damit dieser darauf zugreifen kann. Dieses mal prüfen und schauen unter welchem User der fbserver läuft.
Nach dem Kopieren hat die UDFLib definitiv nicht die benötigen Rechte (Linux ;-) )

IBExpert 20. Apr 2023 20:01

AW: Portierung Firebird von Win auf Linux: UDF Lib Fehler
 
mit fb25 haben wir die freeadhoc udf bei einigen Kunden auch mit linux am laufen, mit fb30
haben wir das nicht mehr ernsthaft weiterprobiert, weil die compilate von der freeadhoc
mit irgendwelchen libs von linux laufen müssen, die aber per default nicht von fb3 benutzt
werden und teilweise kompliziert in neuere Linux versionen eingebaut werden müssen.

Es kann tausend gründe haben, die extrem versions abhängig sind oder ganz banal
fehlende chmod auf relevanten files. Wie schon woanders angedeutet, ich würde mir bei fb3
mit linux aber auch mit windows freeadhoc sowieso nicht mehr freiwillig antun, weil die so
schlecht programmiert ist, das man mit diversen befehlen und unpassenden parametern
den kompletten firebird server dienst für alle user zum absturz bringen kann.

Die alternative die wir dafür bei Kunden nutzen, ist die ibexpert function lib, in der fast
alles drin ist was sinnvoll ist und man braucht dafür auch nix neues im sql anpassen, weil
die gleichen Funktionen (mit ausnahme von zB F_ROSENMONTAG oder ähnlicher unsinn, die sind
zwar drin aber nicht 100% sinnvoll implementiert, ca 95% der Funktionen sind aber komplett und natürlich
erweiterbar, weil wir das produkt als Firebird stored function Quellcode ausliefern) genau
so aufgerufen werden könne, aber mit source als stored function implementiert sind.

Um das in der datenbank umzustellen, würde man mit ibexpert tools-extract metadata mit daten
in seperate files machen und dann vor dem einspielen den teil in der ibe$start.sql , in dem
die bisherigen udfs deklariert sind, durch das neue stored function script ersetzen. Danach
ist eure db auf jeder windows oder linux fb3/fb4/fb5 benutzbar ohne irgendwelche dll/so
basteleien und auch ab fb4 brauchst du nicht die dann eh erst mal per conf deaktivierten
UDFs reaktivieren. Und wenn du das bei dutzenden oder hunderten oder ... Kunden automatisiert
mahen musst, geht auch das mit ibeblock und ibec_extractmetadata in unsere ibescript
script engine auch per batch laufen kann.

Muss aber ja jeder selbst wissen, womit er seine Zeit verbringt ...

ZOD 24. Apr 2023 06:21

AW: Portierung Firebird von Win auf Linux: UDF Lib Fehler
 
Guten Morgen zusammen!

wir haben das Problem lösen können:

Wir arbeiteten mit symbolischen Links an allen denkbaren
Stellen (das ist die übliche Strategie), aber am Ende mußten wir die
FreeAdhocUDF_FB2x_amd64.so nach FreeAdhocUDF.so explizit KOPIEREN, dann
funktionierte es plötzlich!

Weitere Info: wir verwendeten das Verzeichnis /UDF/ als Speicherort für
die UDF und hatten
UdfAccess=Restrict /UDF in der firebird.conf eingetragen.

Nochmals Dank an alle für die Antworten.

Markus


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz