Itt az idő... php8.2: Oracle Client libraries < 11.2 are not supported

Hát, akkor nincs más hátra, mint előre... Lehet, hogy egészen 12.2-ig előrerohanok.

Hozzászólások

Azét a "fontolva haladás"-t nem kéne ennyire erőltetni... :-)

Szerkesztve: 2023. 01. 10., k – 12:02

Na jó, hát azért kisebb gondok akadhatnak, a libociei újralinkelésénél akadtam meg:


ld: 0711-317 ERROR: Undefined symbol: OCISharedLibInit
ld: 0711-344 See the loadmap file libociei_64.loadmap for more information.

Szerk: csak bénáztam. Esetleg egy ilyen:

ld: 0711-101 FATAL ERROR: Allocation of 14832864 bytes failed
        in routine init_symtab_info. There is not enough memory available.
        Please check your ulimit or paging space
        or use local problem reporting procedures.

Szerk: az ulimit -d nevű csoda segített rajta. Következő próbálkozásom:

ld: 0711-317 ERROR: Undefined symbol: p_xargc
ld: 0711-317 ERROR: Undefined symbol: p_xargv
ld: 0711-317 ERROR: Undefined symbol: p_xrcfg
ld: 0711-317 ERROR: Undefined symbol: p_xrc

Én magam szedtem ki belőle ezt a szimbóleumot, még arra kellene visszaemlékezni, hogy miért (vagyis melyik gyári library-ból kellene venni).


DONT_EXPORT_LIST := ^(__itab|__tab|_dist_code|_length_code|acos|adler32|asin|atan|atan2|\
        bcopy|ceil|compressBound|copysign|cos|cosh|crc32|\
        end|exp|expm1|exp__E|feclearexcept|\
        fetestexcept|finite|floor|fmod|fres|fsav|guesses|isnan|ldexp|log|log10|logb|\
        memcpy|memmove|memset|modf|\
        pow|p_xargc|p_xargv|p_xrc|p_xrcfg|remainder|\
        scalb|siglongjmp|sigsetjmp|sin|sinh|strcat|strcmp|strcpy|strncat|strncpy|sqrt|\
        tan|tanh|tantab|unordered|\
        z_errmsg|zcalloc|zcfree)$$
DONT_EXPORT_LIST := $(subst ${SPACE},,${DONT_EXPORT_LIST})

Szerk: Nem shared lib, hanem pl: /usr/lib/crt0_64.o

Szerkesztve: 2023. 01. 10., k – 21:36

Persze a PHP is valamiféle ügyes heurisztikával állapítja meg a verziószámot, most például ez jött ki neki:

checking Oracle ORACLE_HOME install directory... /orabin/OraHome_Current
checking ORACLE_HOME library validity... lib
checking Oracle library version compatibility... 8.1
configure: error: Oracle Client libraries < 11.2 are not supported

Később:

checking for oci.h... configure: error: I'm too dumb to figure out where the include dir is in your Instant Client install

Hát ha esetleg, talán, de tényleg csak úgy extrém ötletként felvetve, ha mondjuk lenne olyan opció, ahol én megadnám, akkor nem a csodás heurisztikának kellene találgatnia.

Babonából csináltam egy ilyen fájlt, hátha jó karmát adományoz.

cat orainst/unix.rgs
"ocommon"  . . . . v18

Azt nem tudom, mondtam-e, hogy az IOCP nevű feature is kell hozzá a kernelbe, amit csak reboot útján lehet engedélyezni. Szóval az éles gépeken ilyen most nem lesz.

Most vettem a fáradságot, és rendesen utánagoogle-ztam: a pontos információ az, hogy a mkdev -l iocp azonnal hat, a chdev -l iocp0 -P -a autoconfig='available' pedig a perzisztáláshoz kell.

Csakhát egyes leírások úgy gondolják, hogy ó hát egy reboot nem lehet tétel, nem is kell részletezni a dolgot.

Nekem ennél sokkal -mondjuk úgy- érdekesebb "bootolj újra" visszajelzésem volt: AIX 4.3, F50-en, Lotus Notes kliens. Ha elszállt (és elszállt, mert az egy olyan állatfaj volt...), akkor semelyik user nem tudta elindítani a klienst. Javaslat: indítsd újra a gépet. Ja. Egy szervert, mi? Kolléga addig nézegette, míg kiderült, hogy néhány IPC-s szemét marad bent ilyenkor, és az nem engedi elindulni újra a dögöt... Picit körbe kellett scriptelni, de utána nem volt gond (azon kívül, hogy amikor elszállt, vagy megmaradt, amit addig csinált az emberfia, vagy sem...)

Perl-DBD-Oracle kedvéért haxoltam egy ilyen fájlt, tisztán try-and-fault módszerrel:

# rdbms/lib/oracle.mk
# Perl-DBD-Oracle wishes to use this file

ORACLE_HOME=/orabin/instantclient_18_4
OCISHAREDLIBS=/opt/lib64/libclntsh.so
INCLUDE=$(ORACLE_HOME)/rdbms/public
CCINCLUDES=$(ORACLE_HOME)/rdbms/public

test:
        @echo '$$ORACLE_HOME=${ORACLE_HOME}'
        @echo '$$INCLUDE=${INCLUDE}'
        @echo '$$CCINCLUDES=${CCINCLUDES}'

Nohát, ez a hiba új a 18.4-ben (Pro*C). Eddig sosem szólt emiatt.


Error at line 229, column 31 in file rlrpar.pc
int rlr_prechkpt (RLRpar *par __attribute__((unused)),
..............................1
PCC-S-02201, Encountered the symbol "__attribute__" when expecting one of the fo

Ez lenne a korrekt:

#ifndef ORA_PROC
   __attribute__ ((weak))
#endif
;

De inkább kiszedem, ugyanis ez még a shared library előtt időből maradt meg, egyfajta takarékosság jegyében: egy-egy object modul kihagyásával is lehessen linkelni [ha azok a funkciók épp nem kellenek az alkalmazásba], és kisebb lesz az executable.

Szerkesztve: 2023. 01. 24., k – 14:58

Ez most súlyosabb lesz... úgy érzi, hogy ő jobban érti a type-cast-ot, mint a C-fordító.

Syntax error at line 915, column 20, file bujioproc01.pc:
Error at line 915, column 20 in file bujioproc01.pc
            valgazon    = va_arg (ap, char (*)[9+1]);
...................1
PCC-S-02201, Encountered the symbol "*" when expecting one of the following:

   ( ) [

Szerk: ki fogtok nevetni: csak annyi volt, hogy nem másoltam át a pcscfg.cfg-t a korábbi verzióból, különös tekintettel a házi header-ek használatára, hogy pl.:


/* stdarg.h */

#ifndef STDARG_H
#define STDARG_H

/* Figyelem, ez a file _nem_ eles hasznalatra valo,
   hanem arra, hogy az olyan artatlan es naiv programokat,
   amilyen peldaul az Oracle Pro*C vagy a SonarScanner
   megkimelje attol a rettenettol, amit a gcc eload
   stdarg.h neven.
 */

typedef void *va_list;

#define va_arg(ap,type) ((type)0)
#define va_start(ap,lastpar) ((void)(lastpar), ap= NULL)
#define va_end(ap)

#endif

Olyan jól sikerült az egész, hogy az már csak apróság, hogy folyik el a memória. Pl.:


20230126.203039.238 Debug at inpdb=40
============== 2023-01-26 20:30:39 ==================
Total non-mmapped bytes (arena):       44,191,424
# of free chunks (ordblks):                10,478
# of free fastbin blocks (smblks):              0
# of mapped regions (hblks):                    0
Bytes in mapped regions (hblkhd):               0
Max. total allocated space (usmblks):           0
Free bytes held in fastbins (fsmblks):          0
Total allocated space (uordblks):      43,782,608
Total free space (fordblks):              241,184
Topmost releasable block (keepcost):            0
20230126.203039.238 
                    Maximum value of MAXOPENCURSORS:       10
                    Maximum open cursors required:          8
                    Current number of open cursors:         9
                    Number of cache reassignments:          0
                    Number of SQL statement parses:         8
                    Number of SQL statement executions:   277
-----------------
20230126.203039.743 Debug at inpdb=41
============== 2023-01-26 20:30:39 ==================
Total non-mmapped bytes (arena):       45,174,944
# of free chunks (ordblks):                10,689
# of free fastbin blocks (smblks):              0
# of mapped regions (hblks):                    0
Bytes in mapped regions (hblkhd):               0
Max. total allocated space (usmblks):           0
Free bytes held in fastbins (fsmblks):          0
Total allocated space (uordblks):      44,776,800
Total free space (fordblks):              227,136
Topmost releasable block (keepcost):            0
20230126.203039.743 
                    Maximum value of MAXOPENCURSORS:       10
                    Maximum open cursors required:          8
                    Current number of open cursors:         9
                    Number of cache reassignments:          0
                    Number of SQL statement parses:         8
                    Number of SQL statement executions:   284

Az uordblks a releváns, az az összes foglalt. Visszabombáztam 12.1-re:


20230126.212145.841 Debug at inpdb=40
============== 2023-01-26 21:21:45 ==================
Total non-mmapped bytes (arena):        5,244,160
# of free chunks (ordblks):                 2,432
# of free fastbin blocks (smblks):              0
# of mapped regions (hblks):                    0
Bytes in mapped regions (hblkhd):               0
Max. total allocated space (usmblks):           0
Free bytes held in fastbins (fsmblks):          0
Total allocated space (uordblks):       5,095,440
Total free space (fordblks):              109,824
Topmost releasable block (keepcost):            0
20230126.212145.841 
                    Maximum value of MAXOPENCURSORS:       10
                    Maximum open cursors required:          8
                    Current number of open cursors:         9
                    Number of cache reassignments:          0
                    Number of SQL statement parses:         8
                    Number of SQL statement executions:   277
-------------------------
20230126.212146.276 Debug at inpdb=41

============== 2023-01-26 21:21:46 ==================
Total non-mmapped bytes (arena):        5,244,160
# of free chunks (ordblks):                 2,432
# of free fastbin blocks (smblks):              0
# of mapped regions (hblks):                    0
Bytes in mapped regions (hblkhd):               0
Max. total allocated space (usmblks):           0
Free bytes held in fastbins (fsmblks):          0
Total allocated space (uordblks):       5,095,440
Total free space (fordblks):              109,824
Topmost releasable block (keepcost):            0
20230126.212146.276 
                    Maximum value of MAXOPENCURSORS:       10
                    Maximum open cursors required:          8
                    Current number of open cursors:         9
                    Number of cache reassignments:          0
                    Number of SQL statement parses:         8
                    Number of SQL statement executions:   284
Szerkesztve: 2023. 01. 30., h – 09:30

Szóra sem érdemes, business as usual:

 .bcopy                    {/orabin/OraHome_Current/lib/libclntsh.a[shr.o]}
    ** Duplicate **        moveeq.s(/usr/lib/libc.a[moveeq_64.o])
Szerkesztve: 2023. 03. 17., p – 08:36

Ez például az PHP version-detect-hez lehet jó:

cd $ORACLE_HOME/lib
ln -s libclntsh.so.19.18 libclntsh.so.19.1

Jó hír viszont, hogy találtam egy 11.2-es instantclientet a fiókban, amiben Java5-höz való ojdbc.jar van. Ez még jól jöhet, ha mondjuk 19-es szerverhez kell kapcsolódni, és azt a 10.2-es ojdbc.jar már nem viszi.