Firebird 2.5 Classic szerver Linuxon és egyéb finomságok


Szakmai szekció


Ismét feladat keletkezett egy ügyfelemnél, és mivel ismét sokat küzdöttem vele, ezért megosztom tapasztalataimat az ügyben, hogy másoknak ne kelljen végigküzdeni.


A feladat:


A szerveren:


- Firebird adatbáziskezelő telepítése firebird2.5-classic.
- Apache webserver
- PHP - firebird eléréssel
- Ez már csak az én továbblépésem: admin felület apache-on keresztül. De ez nem jött össze, lásd később.


Kliens oldalon:


- IBExpert Borland ingyenes adminisztrátor program elérésnek biztosítása úgy, hogy egy demo adatbázist lásson.
- Böngészőből elérhető webserver, ami a meglévő firebird adatbázisokat képes látni.
- Borland Delphiben készült rendszer futtatása Firebird adatbáziskapcsolat alatt.


A környezet - ahogy mi szoktuk - debian wheezy.


Kis bevezető nyafogás


A firebird installálása szép feladat, főleg olyan ember számára, aki a MySQL-hez van szokva. A dokumentáció bőséges és nagyon sokszor írja le ugyanazt, azonban értelmezési problémák vannak bőven. Biztos mindenki ismeri azokat a nagyon egyszerű kérdéseket, hogy tessék mondani a Rootdirectory direktívának ugyan hova kéne mutatnia? A leírásokban hivatkoznak rá és megjelenik az Installdir kifejezés is, aztán olyanok is, hogy az adatbázisok majd ezen könyvtár alkönyvtárai lesznek, ami természetesen nem igaz. Lehet úgy is, de józan ember nem tesz ilyet.

Szóval a nehézségeim abból adódtak, hogy megint sikerült olyan leírásokkal telerakni a netet és ez főleg a firebird gondja, hogy igazán nagyon jó, de sokszor hasznavehetetlen.
Évekkel ezelőtt volt szerencsém a Borland Delphi termékeihez, és ahogy sokan mások én is elszörnyülködtem az adatbázis kapcsolatok számához kötött liszenszdíjaktól és gyorsan kerestem olyan kiegészítőket, amelyek képesek voltak ingyenes megoldásokat támogatni. Azt gondoltam, hogy a fejlesztőrendszert kifizettem, a fejlesztést én hajtom végre, akkor a Borland ugyan miért akarja megkaszálni az ügyfeleimet, növelve az én áraimat, csökkentve a piaci lehetőségeimet? Így találtam meg még akkor a Zeos-t, ami MySQL adatbázis-kezelőhöz adott elérési lehetőséget Delphi alól. Azt hogy a MySQL-hez mit adnak gondolom a hasonszőrűeknek nem kell magyaráznom, nem csak a phpmyadmint, hanem mondjuk Windows és Linux alá igen fejlett adminisztrátori eszközöket, iszonyatos mennyiségű példát..., nem sorolom.

Valahogy ezt vártam a Firebird-től is elsősorban amiatt, mert akik használják, az egekbe dicsérik. Most már azt gondolom, hogy inkább arról van szó, hogy csak azt ismerik. A Borland a firebird-öt támogatja, ezért aki Delphiben elmerült, az követi ezt az utat. Felhívom szíves figyelmüket azonban, hogy van más út is.

És tegyünk hozzá valami nagyon fontosat: Egy rendszertől azért nem csak azt kell elvárni, hogy a saját területén (itt az adatbázis-kezelést értem) jól teljesítsen, hanem mondjuk azt is, hogy az installációhoz kapcsolódó tartalmakat ne olyan felületesen taglalja, hogy két nap netezés legyen szükséges ahhoz, hogy a leírt félinformációk alapján valahogy mégiscsak össze lehessen állítani. És itt gondolok olyanokra is, hogy a firebird saját leírásai nagyon sokszor elavultak. Ahogy én látom alapvetően a Windows felé fordulás az oka ezeknek a gyerekbetegségeknek. Az MS-nél találkozunk rengeteg adekvát válasszal, amivel nem lehet kezdeni semmit.

A Borland a másik gyöngyszem. A felhasználó itt azt kérte, hogy az Borland IBExpert legyen az adminisztrátori felület. Legyen. Letöltöttem. Hogy ugyan miért kell regisztrálni és aktiválni egy ingyenes rendszert, mert egyébként nem működik, nem értem, de oké. Gondolom a sok e-mail cím gyűjtés miatt, vagy talán önigazolásként, hogy lám, mennyien használják. Ezzel kapcsolatosan csak megjegyzem, hogy a jelen feladat megoldásához összesen majd háromszor kell letölteni és "aktiválni" a programot különböző gépekre, mire majd egyszer tényleg fog működni.



Csapjunk bele!


Az alaprendszer telepítését követően telepítsük a firebird2.5-classicot:


apt-get install firebird2.5-classic


A Firebird-nél a SYSDBA nevű felhasználó a főnök, az alap jelszó a masterkey
A következő paranccsal azonban ezt is módosíthatjuk:

dpkg-reconfigure firebird2.5-classic


Ekkor megkérdezi, hogy rendszerinduláskor elindítsa-e a firebird-öt, mondjunk igen, de ettől még nem fog történni semmi, lásd később, majd megkérdezi a SYSDBA jelszavát, amit nagyon okosan a /etc/firebird/2.5/SYSDBA.password fileban szövegesen tárol.


Ez követően a /etc/firebird/2.5/firebird.conf


A dolgunk itt elsősorban az, hogy a felajánlott default értékek elől a #-ot kivegyük és pár módosítást hajtsunk végre, röviden ezek:


A Rootdirectory nyugodtan maradhat # előtéttel.
A DatabaseAccess direktíva viszont fontos!
A Full opció végeredményben arról szól, hogy a teljes filerendszert elérhetővé tesszük.
A Restrict - korlátozó opció mellett megadhatjuk azokat a kijelölt könyvtárakat, ahol az adatbázisok lehetnek. Ezt javaslom.
A TempDirectories = /tmp - a szokásos hely
A RemoteServiceName = gds_db ez azért fontos, mert szolgáltatásnévként is lekezeli a inetd, de erről majd később
A RemoteServicePort = 3050 meg a hallgatózási portot
A RemoteBindAddress. Ide kéne megadni annak az interface-nek az IP címét, amin várja majd kedves Firebird a hívásokat, nos Linux alatt az inetd indítja a firebird-öt, tehát nyugodtan hagyhatjuk a #--ot.
Figyelem!
Két szekció jön majd, az egyik kifejezetten Windowsra szól. Tehát ott ne tegyünk semmit, úgy sem történik semmi. A Linux-os egy direktíva pedig értelemszerű.
Ezzel a firebird.conf-nak vége.


Érdemes még belepillantani a /etc/init.d/firebird/2.5/aliases.conf file-ba!
Valahogy így néz ki:

# ------------------------------
# List of known database aliases
# ------------------------------

#
# Example Database:
#
employee.fdb = /usr/share/doc/firebird2.5-common-doc/examples/empbuild/employee.fdb
employee = /usr/share/doc/firebird2.5-common-doc/examples/empbuild/employee.fdb

antal = /server/firebird/antal.fdb
#
# Live Databases:
#


Jómagam kísérletezés kedvéért letöltöttem még a példa adatbázisokat is, de ez nem szükséges. Ami fontosabb az

antal = /server/firebird/antal.fdb sor, amit már én hoztam létre. Ez az alias névhez, hozzárendeli az elérési útvonalat. Elvileg - azért mondom, hogy elvileg, mert nem minden admin felületből működik - ez arra jó, hogy ne kelljen a teljes elérési úttal hivatkozni az adatbázisra.


Ahogy már a szövegből kiderült, a firebird-öt nem lehet daemonként indítani a /etc/init.d/firebird2.5-classic start-tal. Illetve lehet, de nem fog futni, az init script csak lefuttat egy ellenőrző scriptet és kész. Nem indítja el a firebird-öt!!! A firebird-öt az inetd indítja.
Ehhez az /etc/xinet.d/firebird25 file-ba kell betekinteni:


Ime:

service gds_db
{
disable = no
flags = REUSE NODELAY
socket_type = stream
wait = no
user = firebird
# These lines cause problems with Windows XP SP2 clients
# using default firewall configuration (SF#1065511)
#log_on_success+= USERID
#log_on_failure+= USERID
server = /usr/sbin/fb_inet_server
}


Eredetileg a disable = yes van. Kéretik módosítani.

aztán:

update-inetd --enable gds_db


Ekkor a /etc/inetd.conf fileban a megfelelő helyen a következőknek kellene lennie:


swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat
gds_db stream tcp nowait irebird /usr/sbin/tcpd /usr/sbin/fb_inet_server


Az első sor nálam a samba miatt van. (Ugyan nem használom a swat-et.)


A /etc/init.d/services file-ban pedig a megfelelő helyen valahogy így:


gds-db 3050/tcp gds_db # InterBase server
gds-db 3050/udp gds_db


Természetesen még kell egy:


/etc/init.d/openbsdinetd restart


Ezt követően /etc/init.d/firebird2.5-classic restart


Aztán érdemes létrehozni egy könyvtárat, ahol majd az adatbázisainkat tároljuk. Figyeljünk oda, hogy elsősorban olyan könyvtárat hozzunk létre, amihez a firebird felhasználó teljes joggal hozzáfér.


Az isql-fb parancssori ügyeivel itt nem foglalkozom, arról szép számmal van leírás és azon túl, hogy az emberfia létrehoz egy adatbázist, más dolga - mint rendszergazdának nincs. A kliens oldalon végeredményben ennek az elérése a cél. Az isql-fb a leírástól eltérően nem lép ki sem a QUIT sem az EXIT paranccsal, de ez legyen a legnagyobb problémája.


Még egy fontos dolgunk van ahhoz, hogy a firebird-öt el tudjuk érni kliensről: tessék a 3050 portot nyitva hagyni iptables alatt, már ha azt állítottuk be.


Most áttérünk a kliens oldalra. Ahogy említettem a IBExpert Borland termék volt az igény, ami http://ibexpert.net/ibe/ címről tölthető le. Készüljünk fel regisztrációra, e-mail aktivációra, aztán már megy is.
De azért pár szót szólnék erről is a bosszúságok elkerülése végett!


Az IBExperttel az adatbázis kapcsolatot tesztelni tudjuk a Services/Communication Diagnostics alatt. Érdemes először a TCP/IP-vel kezdeni, mert itt nem használ kliens programot - lásd később. Tesztelhetjük portra és szolgáltatásnévre is 3050 vagy gds_db.

Ha itt megy, és a szerveren létrehoztunk valahol egy adatbázist, ezt az isql-fb-vel tehetjük meg, leírás innen letölthető: http://www.firebirdsql.org/pdfmanual/Firebird-isql.pdf


Tessék figyelni, mert a leírás szerinti isql programot a debian alatt isql-fb-nek hívják!!!


És ekkor jön a bosszúság! Az emberfia már azt hinné, hogy minden oké, de nem.
Nos a turpisság ott van alásva, hogy az IBExpert a localhostos és a remote serveres eléréshez más dll-t használ. Erről azonban lazán megfeledkeznek a leírásokban, mert hát ugye ez annyira egyértelmű. Tehát, ha a Diagnostic ablakban mindent beállítottunk, kb. ahogy a képen látszik, akkor elvileg a tesztnek jó eredménnyel le kell futnia. Tehát a Client Library File-nál az fbclient.dll-t kell betallózni!!! Jótanács! Ha nem találjuk a felajánlott könyvtárban - ne essünk kétségbe - keresgéljünk nyugodtan az IBExpert könyvtárakban, ott lesz az valahol. Az már csak furcsa és túlságosan is hedonisztikus dolog lenne, ha azt a könyvtárat ajánlaná fel, ahol a kliensek vannak.
Fontos!!!

Amikor majd az IBExperten belül a bal oldali ablakban kapcsolódni akarunk az adatbázisunkhoz erre ott is figyeljünk, mert alapvetően gds32.dll-t hozza, amivel nem fog működni!!!


Még egy érdekesség: Mikor már minden rendben megy, és netán új adatbázist szeretnénk létrehozni, jön az új meglepetés az IBExpertben. Az előbb említett dll betallózás az aktuális userhez tartozó application mappában bogarász, ahelyett, hogy a Program Files könyvtárban tenné. Tehát kéretik itt is figyelni, mert ha nem megy, akkor az emiatt van!!!


Most térjünk vissza a szerverhez, hiszen volt még egy felhasználói kérés, mégpedig az, hogy a firebird apache-on keresztül is elérhető legyen php alapon.
Ehhez a következőket kell csak tenni, a debian ebben nagyon korrekt:


apt-get install apache2
apt-get install php5
apt-get install php5-interbase


Ezekre már csak nekem volt szükségem, más alkalmazások miatt:


apt-get install php5-gd
apt-get install php5-curl
apt-get install php5-intl
apt-get install php5-mcrypt


Meg kell jegyeznem itt, hogy kerestem a phpmyadminhoz hasonló webadmin felületet a firebirdhöz. Találtam is, azonban egyik sem működött korrekt módon, mert régebbi php verziókban készült, fejlesztésük kb. 2008 felé abbamaradt. Ugyan "szóra" tudtam őket bírni, de mivel nem volt feladat egy ilyen felület működtetése, ezért feladtam a kódfoltozást. Arra azonban jó volt a kísérlet, hogy láthatóvá vált, hogy web oldalról a firebird elérhető.