Apache+PHP+pluginok 64-biten (AIX)

Az első, ami feltűnik, hogy 7.x-en és 5.x-en látszólag megy, 6.x-en meg nem. A múltkoriak fényében azt mondanám, hogy a '-brtllib' hiánya okozhat ilyesféle gondokat, de látszólag megadtam ezt az opciót (egyébként 32-biten ennek feltűnő jele van: megjelenik librtl.a(shr.o) mint függőség; 64-biten nincs ilyen.

Van például egy ilyen üzenetem:


httpd: Syntax error on line 48 of /usr/local/etc/apache2/httpd.conf: 
Cannot load libexec64/apache2/mod_access_compat.so into server:
rtld: 0712-001 Symbol access_compat_module was referenced
from module /usr/local/libexec64/apache2/mod_access_compat.so
but a runtime definition of the symbol was not found.

20150610.1756: kezd egy olyan érzésem lenni, hogy javulna a helyzet, ha nem lenne nekem /usr/local/lib64/libiconv.a fájlom (libconv-1.14 által generált static library). Mégpedig azért, mert az AIX-nek is van /usr/lib/libiconv.a fájlja, amiben shared libek laknak:


$ ar -X32_64 tv libiconv.a 
rwxr-x---   300/300   117250 Jul 24 03:19 2013 shr4.o
rwxr-x---   300/300   117500 Jul 24 03:19 2013 shr.o
rwxr-x---   300/300   159410 Jul 24 03:19 2013 shr4_64.o

Namostan ezeket a derék elemeket ügyes szervezéssel átmásoltuk a saját librarynkba (sigh!), hogy egy dlopen/kload adott esetben jól beránthassa (a /usr/lib/libi18n.a(shr_64.a) dependál a libiconv.a(shr4_64.o)-ra (path-nélkül persze ('majcsak meglesz valahol' alapon), ami eccerűbb esetekben működni is látszik, bonyolultabbaknak viszont lehet hogy nem... például kicsit zsonglőrködünk a LIBPATH-tal, és esetleg máris kétszer van ilyenünk:


(gdb) info sh
From                To                  Syms Read   Shared Object Library
0x09fffffff0000240  0x09fffffff000e1da  Yes (*)     /usr/ccs/bin/usla64
0x090000000c088200  0x090000000c0a17df  Yes         /usr/local/lib64/libiconv.a(shr4_64.o)
0x0900000000451600  0x090000000045fa76  Yes (*)     /usr/lib/libi18n.a(shr_64.o)
0x09000000004435a0  0x0900000000443e93  Yes (*)     /usr/lib/libcrypt.a(shr_64.o)
0x0900000000000c00  0x090000000041d16a  Yes (*)     /usr/lib/libc.a(shr_64.o)
0x0900000000460980  0x0900000000479f5f  No          /usr/lib/libiconv.a(shr4_64.o)

20150610.1910: Az is okozhat némi kavart, hogy van egy /usr/local/sbin/envvars, aki LIBPATH-t akar beállítani, de még a 32-bites időkből maradt ránk...

20150610.1930: Programozósan eljárva telerakjuk debug-kiíratásokkal, és a következőt véljük látjuk:
1. Apache minden modult betölt
2. Apache minden modult kitakarít
3. Apache minden modult betölt.
Na ez az utóbbi nem sikerül, de csak akkor (legalábbis most úgy tűnik), ha a modulok között ott volt a php, és az még extension-t is betöltött. Már csak folytatni kell a nyomozást, hogy igazoljuk ezt a teóriát, azután kitalálni, hogy mi is a különbség a 32-bithez képest (aztán a végén még megoldás is kellene).

20150610.2045: Azt kellene megnézni, hogy esetleg az Apache és PHP közül az egyik a libdl-ből veszi a dlopen-t és társait, a másik meg a libc-ből (most ne firtassuk, hogy miért van ez meg két helyen is, nyilván ez is az 'elsőre jó ötletnek tűnt' kategória).

20150611.1045: Ellenőrzés:


$ dump -X64 -Tv /usr/local/sbin/httpd | grep dlopen -- nincs találat
$ dump -X64 -Tv /usr/local/lib64/libapr-1.so | grep dlopen
[119]   0x00000000    undef      IMP     DS EXTref /usr/lib/libc.a(shr_64.o) dlopen
$ dump -X64 -Tv /usr/local/libexec64/apache2/libphp5.so | grep dlopen
[554]   0x00000000    undef      IMP     DS EXTref /usr/lib/libdl.a(shr_64.o) dlopen
$ dump -X64 -Tv /usr/local/bin/php | grep dlopen
[560]   0x00000000    undef      IMP     DS EXTref /usr/lib/libdl.a(shr_64.o) dlopen

Asszem indián testvéremet fogom megkérni, hogy használja ő is a libdl-t, hátha segít valamit...

Hozzászólások

És nem akarja...
Az 'apachectl start' ezt írja a terminálra:


dso.c: dlopen(/usr/local/libexec64/apache2/mod_access_compat.so,10002) returned 3
dso.c: dlopen(/usr/local/libexec64/apache2/mod_alias.so,10002) returned 4
dso.c: dlopen(/usr/local/libexec64/apache2/mod_auth_basic.so,10002) returned 5
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authn_core.so,10002) returned 6
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authz_core.so,10002) returned 7
dso.c: dlopen(/usr/local/libexec64/apache2/mod_autoindex.so,10002) returned 8
dso.c: dlopen(/usr/local/libexec64/apache2/mod_cgid.so,10002) returned 9
dso.c: dlopen(/usr/local/libexec64/apache2/mod_dir.so,10002) returned a
dso.c: dlopen(/usr/local/libexec64/apache2/mod_env.so,10002) returned b
dso.c: dlopen(/usr/local/libexec64/apache2/mod_log_config.so,10002) returned c
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime_magic.so,10002) returned d
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime.so,10002) returned e
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mpm_prefork.so,10002) returned f
dso.c: dlopen(/usr/local/libexec64/apache2/mod_negotiation.so,10002) returned 10
dso.c: dlopen(/usr/local/libexec64/apache2/mod_setenvif.so,10002) returned 11
dso.c: dlopen(/usr/local/libexec64/apache2/mod_status.so,10002) returned 12
dso.c: dlopen(/usr/local/libexec64/apache2/mod_suexec.so,10002) returned 13
dso.c: dlopen(/usr/local/libexec64/apache2/mod_unixd.so,10002) returned 14
dso.c: dlopen(/usr/local/libexec64/apache2/mod_userdir.so,10002) returned 15
dso.c: dlopen(/usr/local/libexec64/apache2/libphp5.so,10002) returned 16

ezt meg az error.log-ba:


dso.c: dlclose(16) returned 0 errno=0: Error 0
dso.c: dlclose(15) returned 0 errno=0: Error 0
dso.c: dlclose(14) returned 0 errno=0: Error 0
dso.c: dlclose(13) returned 0 errno=0: Error 0
dso.c: dlclose(12) returned 0 errno=0: Error 0
dso.c: dlclose(11) returned 0 errno=0: Error 0
dso.c: dlclose(10) returned 0 errno=0: Error 0
dso.c: dlclose(f) returned 0 errno=0: Error 0
dso.c: dlclose(e) returned 0 errno=0: Error 0
dso.c: dlclose(d) returned 0 errno=0: Error 0
dso.c: dlclose(c) returned 0 errno=0: Error 0
dso.c: dlclose(b) returned 0 errno=0: Error 0
dso.c: dlclose(a) returned 0 errno=0: Error 0
dso.c: dlclose(9) returned 0 errno=0: Error 0
dso.c: dlclose(8) returned 0 errno=0: Error 0
dso.c: dlclose(7) returned 0 errno=0: Error 0
dso.c: dlclose(6) returned 0 errno=0: Error 0
dso.c: dlclose(5) returned 0 errno=0: Error 0
dso.c: dlclose(4) returned 0 errno=0: Error 0
dso.c: dlclose(3) returned 0 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_access_compat.so,10002) returned 0
httpd: Syntax error on line 48 of /usr/local/etc/apache2/httpd.conf:
Cannot load /usr/local/libexec64/apache2/mod_access_compat.so into server:
rtld: 0712-001 Symbol access_compat_module was referenced
from module /usr/local/libexec64/apache2/mod_access_compat.so(),
but a runtime definition
of the symbol was not found.\nrtld: 0712-002 fatal error: exiting.

Szóval a helyzet változatlan; de ha kiszedem a PHP-t, akkor megy. Egy további gond, hogy a PHP-ból is kellene hibaüzenetek lássak.

Sőt, ha a standalone PHP-t elindítom, akkor ezt látom:


php/ext/standard: Ne éljek, nem sikerült a DL_LOAD(/usr/local/lib64/20131226-zts/imagick.so)

Nos, akkor vissza a rajzasztalhoz.

20150611.1127: Na jó, ez a hiba nem hiba, csak még nem fordítottam le ezen a gépen az ImageMagic+imagick párost... mivel a másik gépen, ahol tök jól elszórakoztam, kérték vissza az Apache-t, még PHP-nélkül is, én átmenekültem egy másik gépre, ahol persze mindent előről kezdtem...

20150611.1131: Közben legalább a debugüzenet fejlődött:


php/ext/standard/dl.c:php_load_extension:
 DL_LOAD(/usr/local/lib64/20131226-zts/imagick.so) returned 0
 errno=2: No such file or directory
php/ext/standard/dl.c:php_load_extension:
 DL_LOAD(/home/projects/lib64/libGlobusPni.so) returned 3
 errno=0: Error 0

Nyilván semmi köze semmihez, de van még pár komponens (openssl, sqlite), ami a 'libdl' helyett a 'libc'-ből veszi a dlopen-t... Esetleg újrafordítom őket, de kezdem azt hinni, hogy nem ez a fő baj...

Most éppen mindig rossz. A napló kedvvért újracsinálom PHP nélkül:


dso.c: dlopen(/usr/local/libexec64/apache2/mod_access_compat.so,10002) returned 3
dso.c: dlopen(/usr/local/libexec64/apache2/mod_alias.so,10002) returned 4
dso.c: dlopen(/usr/local/libexec64/apache2/mod_auth_basic.so,10002) returned 5
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authn_core.so,10002) returned 6
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authz_core.so,10002) returned 7
dso.c: dlopen(/usr/local/libexec64/apache2/mod_autoindex.so,10002) returned 8
dso.c: dlopen(/usr/local/libexec64/apache2/mod_cgid.so,10002) returned 9
dso.c: dlopen(/usr/local/libexec64/apache2/mod_dir.so,10002) returned a
dso.c: dlopen(/usr/local/libexec64/apache2/mod_env.so,10002) returned b
dso.c: dlopen(/usr/local/libexec64/apache2/mod_log_config.so,10002) returned c
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime_magic.so,10002) returned d
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime.so,10002) returned e
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mpm_prefork.so,10002) returned f
dso.c: dlopen(/usr/local/libexec64/apache2/mod_negotiation.so,10002) returned 10
dso.c: dlopen(/usr/local/libexec64/apache2/mod_setenvif.so,10002) returned 11
dso.c: dlopen(/usr/local/libexec64/apache2/mod_status.so,10002) returned 12
dso.c: dlopen(/usr/local/libexec64/apache2/mod_suexec.so,10002) returned 13
dso.c: dlopen(/usr/local/libexec64/apache2/mod_unixd.so,10002) returned 14
dso.c: dlopen(/usr/local/libexec64/apache2/mod_userdir.so,10002) returned 15
dso.c: dlclose(15) returned 0 errno=0: Error 0
dso.c: dlclose(14) returned 0 errno=0: Error 0
dso.c: dlclose(13) returned 0 errno=0: Error 0
dso.c: dlclose(12) returned 0 errno=0: Error 0
dso.c: dlclose(11) returned 0 errno=0: Error 0
dso.c: dlclose(10) returned 0 errno=0: Error 0
dso.c: dlclose(f) returned 0 errno=0: Error 0
dso.c: dlclose(e) returned 0 errno=0: Error 0
dso.c: dlclose(d) returned 0 errno=0: Error 0
dso.c: dlclose(c) returned 0 errno=0: Error 0
dso.c: dlclose(b) returned 0 errno=0: Error 0
dso.c: dlclose(a) returned 0 errno=0: Error 0
dso.c: dlclose(9) returned 0 errno=0: Error 0
dso.c: dlclose(8) returned 0 errno=0: Error 0
dso.c: dlclose(7) returned 0 errno=0: Error 0
dso.c: dlclose(6) returned 0 errno=0: Error 0
dso.c: dlclose(5) returned 0 errno=0: Error 0
dso.c: dlclose(4) returned 0 errno=0: Error 0
dso.c: dlclose(3) returned 0 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_access_compat.so,10002) returned 3
dso.c: dlopen(/usr/local/libexec64/apache2/mod_alias.so,10002) returned 4
dso.c: dlopen(/usr/local/libexec64/apache2/mod_auth_basic.so,10002) returned 5
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authn_core.so,10002) returned 6
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authz_core.so,10002) returned 7
dso.c: dlopen(/usr/local/libexec64/apache2/mod_autoindex.so,10002) returned 8
dso.c: dlopen(/usr/local/libexec64/apache2/mod_cgid.so,10002) returned 9
dso.c: dlopen(/usr/local/libexec64/apache2/mod_dir.so,10002) returned a
dso.c: dlopen(/usr/local/libexec64/apache2/mod_env.so,10002) returned b
dso.c: dlopen(/usr/local/libexec64/apache2/mod_log_config.so,10002) returned c
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime_magic.so,10002) returned d
dso.c: dlopen(/usr/local/libexec64/apache2/mod_access_compat.so,10002) returned 3
dso.c: dlopen(/usr/local/libexec64/apache2/mod_alias.so,10002) returned 4
dso.c: dlopen(/usr/local/libexec64/apache2/mod_auth_basic.so,10002) returned 5
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authn_core.so,10002) returned 6
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authz_core.so,10002) returned 7
dso.c: dlopen(/usr/local/libexec64/apache2/mod_autoindex.so,10002) returned 8
dso.c: dlopen(/usr/local/libexec64/apache2/mod_cgid.so,10002) returned 9
dso.c: dlopen(/usr/local/libexec64/apache2/mod_dir.so,10002) returned a
dso.c: dlopen(/usr/local/libexec64/apache2/mod_env.so,10002) returned b
dso.c: dlopen(/usr/local/libexec64/apache2/mod_log_config.so,10002) returned c
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime_magic.so,10002) returned d
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime.so,10002) returned e
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mpm_prefork.so,10002) returned f
dso.c: dlopen(/usr/local/libexec64/apache2/mod_negotiation.so,10002) returned 10
dso.c: dlopen(/usr/local/libexec64/apache2/mod_setenvif.so,10002) returned 11
dso.c: dlopen(/usr/local/libexec64/apache2/mod_status.so,10002) returned 12
dso.c: dlopen(/usr/local/libexec64/apache2/mod_suexec.so,10002) returned 13
dso.c: dlopen(/usr/local/libexec64/apache2/mod_unixd.so,10002) returned 14
dso.c: dlopen(/usr/local/libexec64/apache2/mod_userdir.so,10002) returned 15

Szóval így működik a load-unload-load sorozat...

Esetleg a PHP valamiféleképpen összeakaszkodik az Apache szimbóleumaival?
Talán a PHP unloadja magával ránt más komponenseket is (vö: Dugonics Titusz)?

Note to self: bbigtoc-nak tessék utánanézni.
http://www.ibm.com/developerworks/rational/library/overview-toc-aix/

The IBM® PowerPC® architecture uses an instruction with a signed 16-bit offset for indirect address calculations. As shown in the previous example, this limits the size of the TOC to 64k bytes. Therefore, a maximum of 16k entries can be located in the TOC in 32-bit mode (addresses are 4 bytes) and 8k in 64-bit mode (addresses are 8 bytes). If a program contains more TOC entries than the TOC can hold, the linker will abort and report TOC overflow. In this case, an alternative mechanism must be used.

20150611.1634: Namostan a -Wl,-bbigtoc a httpd linkelésénél jó eséllyel segítene (vagy legalábbis változtatna) valamit, de akkor már azt a -qpic=large dolgot is meg kellene oldani, hogy a linkernek kevesebbet kelljen haxolnia a programon (benne van a linkelt cikkben, hogy mit csinál, nem érdemes étkezés után olvasni).

Egyes leírások olyasmit sugallnak, hogy a -fPIC vagy -fPIE ilyen hatású, szemben a -fpic vagy -fpie opciókkal, amik kicsike toc-hoz ajánlottak.

Azt is megmondhatná valaki, hogy a /usr/local/sbin/envvars című fájlban mit akar kifejezni ez a rész:


LDR_CNTRL="MAXDATA=0x80000000" ; export LDR_CNTRL ; AIXTHREAD_SCOPE=S ; export A
IXTHREAD_SCOPE ; AIXTHREAD_MUTEX_DEBUG=OFF ; export AIXTHREAD_MUTEX_DEBUG ; AIXT
HREAD_RWLOCK_DEBUG=OFF ; export AIXTHREAD_RWLOCK_DEBUG ; AIXTHREAD_COND_DEBUG=OF
F ; export AIXTHREAD_COND_DEBUG ; SPINLOOPTIME=1000 ; export SPINLOOPTIME ; YIEL
DLOOPTIME=8 ; export YIELDLOOPTIME ; MALLOCMULTIHEAP=considersize,heaps:8 ; expo
rt MALLOCMULTIHEAP

20150611.2047 itt az írják, hogy

For example, use the following command to run the a.out program with 8 segments reserved for the data area:

LDR_CNTRL=MAXDATA=0x80000000 a.out

Ebben a mesében a 'szegmens' 256 MB memóriatartományt jelent, 16 szegmens alkotja a 4GB címtartományt. Mármint 32 biten.

Még meg van a derék probléma, -fPIC és -bbigtoc oda se neki.
Egyelőre félreteszem, csak még egy nyomoznivaló: mit jelent itt a dlopen második paramétere:


dso.c: dlopen(/usr/local/libexec64/apache2/libphp5.so,10002) returned 16

dlfcn.h:


#define RTLD_NOW    0x00000002 /* Load object and dependents now. */
#define RTLD_GLOBAL 0x00010000 /* Make symbols in this module
                                  visible to other dlopens. */

Mondjuk ebben nem látok semmi rosszat...

Fokoztam a debug-kiírást, ez lett a jutalmam:


dso.c: dlopen(/usr/local/libexec64/apache2/libphp5.so,0x10002) returned 16
errno=12: Not enough space

szóval már az első betöltés során volt egy kis gond, de az még megoldódott, hiszen a return value nemnulla

a másodiknál pedig:


dso.c: dlopen(/usr/local/libexec64/apache2/mod_access_compat.so,0x10002) returned 0
errno=8: Exec format error

Note to self: a debug-kiíratásokkal terhelt dso.c-t át kellene lőni arra az 5.2-es gépre, ahol megy a 64-bites... már csak önbosszantásból is;p

NTS: loadquery szubrutint meg kellene nézni, azzal lehetne tájékozódni betöltött komponensekről...

Meg a svmon programot kipróbálni...

És ha jópofizni akarok: export LDR_CNTRL="$LDR_CNTRL"@IGNOREUNLOAD

Meg mondjuk az a MAXDATA, ami 32-biten 'bazinagy' volt, az 64-bites lehet, hogy kevés...

Azt írja az újság, hogy 32-biten az összes sharedlib kódja a 'D' szegmensben lesz, az adatterületek meg a 'F'-ben.

64-biten viszont terabyte-ok állnak rendelkezésre (legalábbis címtartományban), tehát sose lesz ENOMEM. Kivéve most, a libphp5.so betöltésekor. Vajon az ulimit valamelyik adata kapcsolatban van ezzel?

+1: slibclean-t esetleg ki kellene próbálni, szinte biztos, hogy való valamire...

a működő állapot (5.3.0.0):


dso.c: dlopen(/usr/local/libexec64/apache2/mod_access_compat.so,0x10002) returned 4 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_alias.so,0x10002) returned 5 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_auth_basic.so,0x10002) returned 6 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authn_core.so,0x10002) returned 7 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authz_core.so,0x10002) returned 8 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_autoindex.so,0x10002) returned 9 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_cgid.so,0x10002) returned a errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_dir.so,0x10002) returned b errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_env.so,0x10002) returned c errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_log_config.so,0x10002) returned d errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime_magic.so,0x10002) returned e errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime.so,0x10002) returned f errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mpm_prefork.so,0x10002) returned 10 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_negotiation.so,0x10002) returned 11 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_setenvif.so,0x10002) returned 12 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_status.so,0x10002) returned 13 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_suexec.so,0x10002) returned 14 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_unixd.so,0x10002) returned 15 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_userdir.so,0x10002) returned 16 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/libphp5.so,0x10002) returned 17 errno=12: Not enough space
---innentől a /var/log/apache2/error_log-ba ---
dso.c: dlclose(17) returned 0 errno=0: Error 0
dso.c: dlclose(16) returned 0 errno=0: Error 0
dso.c: dlclose(15) returned 0 errno=0: Error 0
dso.c: dlclose(14) returned 0 errno=0: Error 0
dso.c: dlclose(13) returned 0 errno=0: Error 0
dso.c: dlclose(12) returned 0 errno=0: Error 0
dso.c: dlclose(11) returned 0 errno=0: Error 0
dso.c: dlclose(10) returned 0 errno=0: Error 0
dso.c: dlclose(f) returned 0 errno=0: Error 0
dso.c: dlclose(e) returned 0 errno=0: Error 0
dso.c: dlclose(d) returned 0 errno=0: Error 0
dso.c: dlclose(c) returned 0 errno=0: Error 0
dso.c: dlclose(b) returned 0 errno=0: Error 0
dso.c: dlclose(a) returned 0 errno=0: Error 0
dso.c: dlclose(9) returned 0 errno=0: Error 0
dso.c: dlclose(8) returned 0 errno=0: Error 0
dso.c: dlclose(7) returned 0 errno=0: Error 0
dso.c: dlclose(6) returned 0 errno=0: Error 0
dso.c: dlclose(5) returned 0 errno=0: Error 0
dso.c: dlclose(4) returned 0 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_access_compat.so,0x10002) returned 4 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_alias.so,0x10002) returned 5 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_auth_basic.so,0x10002) returned 6 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authn_core.so,0x10002) returned 7 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_authz_core.so,0x10002) returned 8 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_autoindex.so,0x10002) returned 9 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_cgid.so,0x10002) returned a errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_dir.so,0x10002) returned b errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_env.so,0x10002) returned c errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_log_config.so,0x10002) returned d errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime_magic.so,0x10002) returned e errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mime.so,0x10002) returned f errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_mpm_prefork.so,0x10002) returned 10 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_negotiation.so,0x10002) returned 11 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_setenvif.so,0x10002) returned 12 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_status.so,0x10002) returned 13 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_suexec.so,0x10002) returned 14 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_unixd.so,0x10002) returned 15 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/mod_userdir.so,0x10002) returned 16 errno=0: Error 0
dso.c: dlopen(/usr/local/libexec64/apache2/libphp5.so,0x10002) returned 17 errno=0: Error 0
[Fri Jun 12 10:39:41.147667 2015] [mpm_prefork:notice] [pid 282758] AH00163: Apache/2.4.7 (Unix) PHP/5.6.4 configured -- resuming normal operations
[Fri Jun 12 10:39:41.147810 2015] [core:notice] [pid 282758] AH00094: Command line: '/usr/local/sbin/httpd'

7.1-en is hasonló; bár a legvégén, a php másodszori betöltésénél van ugyan egy kis érdekesség:


dso.c: dlopen(/home/user/libexec64/apache2/mod_alias.so,0x10002)
returned 1b errno=0
: Error 0
dso.c: dlopen(/home/user/libexec64/apache2/libphp5.so,0x10002)
returned 1c errno=8: Exec format error
[Fri Jun 12 12:33:06.185831 2015] [mpm_prefork:notice] [pid 10092698] AH00163: Apache/2.
4.7 (Unix) PHP/5.6.4 configured -- resuming normal operations
[Fri Jun 12 12:33:06.185929 2015] [core:notice] [pid 10092698] AH00094: Command line: '/
home/user/bin/httpd'

Valószínűleg semmi köze semmihez, de mi az a fc_softc, amit a libphp az egyik gépen exportál (6.x), a másikon meg nem (5.x)?


/* net/if_arp.h */
struct  fc_softc {
        struct arpcom   fc_ac;              /* FCS common part             */
        struct ndd    *nddp;                /* returned from NS            */
        int(*efcnet_arp_fct)
             (struct ndd *, struct mbuf *); /* efcnet_arp function address */
} *fc_softc;

Esetleg hiányoztak a programozóiskolából, amikor az 'extern' kulcsszót tanították?

Szerk: A gcc-s srácok szerint 'typedef' kell az elejére (lásd az include-fixed környvtárban).

Kezdem azt hinni, hogy ez a probléma egy OS-patch/verzióváltás során fog megszűnni, addig megoldom suttyógyerek módjára...

'configure' és 'make' közé a 'do.64' scriptbe:


### AIX6-on jópofa kínlódást látunk a dlopen(libphp5.so-nál)
PHPMOD=/usr/local/libexec64/apache2/libphp5.so
if [ $(uname -v) = 6 -a -f "$PHPMOD" ]; then
    sed_repl 's;$(PROGRAM_LDADD)$;$(PROGRAM_LDADD) '"$PHPMOD"';' build/program.mk
fi

Így persze 'a rest háromszor fárad' alapelv fog érvényesülni: build apache, build php, build apache