Author |
Message
|
smdavies99 |
Posted: Tue Jul 24, 2007 10:34 pm Post subject: MirrorQ Exit on Solaris with WMQ 6.0.2.1 |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
There have been a number of posts about compilng exits and I have tried their suggestions in building an exit (specifically in this case mirrorq) for Solaris WMQ 6.0.2.1 (64Bit)
There was even a doc update that gave revised instructions for building the exit yet it seems no matter what I do, the exit fails to load.
Code: |
bash-3.00# dspmqver
Name: WebSphere MQ
Version: 6.0.2.1
CMVC level: p600-201-070307
BuildType: IKAP - (Production)
bash-3.00#
bash-3.00# uname -a
SunOS trident150 5.10 Generic_118833-33 sun4u sparc SUNW,Sun-Blade-1000
bash-3.00#
qm.ini
ExitPath:
ExitsDefaultPath=/var/mqm/exits/
ExitsDefaultPath64=/var/mqm/exits64/
#* *#
#* *#
Log:
LogPrimaryFiles=3
LogSecondaryFiles=2
LogFilePages=1024
LogType=CIRCULAR
LogBufferPages=0
LogPath=/var/mqm/log/QM1/
LogWriteIntegrity=TripleWrite
Service:
Name=AuthorizationService
EntryPoints=13
ServiceComponent:
Service=AuthorizationService
Name=MQSeries.UNIX.auth.service
Module=/opt/mqm/lib64/amqzfu
ComponentDataSize=0
ApiExitLocal:
Name=mirrorq
Function=EntryPoint
Module=mirrorq
Data=mirrorq
Sequence=100
|
Code: |
bash-3.00# strmqm QM1
WebSphere MQ queue manager 'QM1' starting.
AMQ7214: The module for API Exit 'mirrorq' could not be loaded.
bash-3.00#
AMQERR01.LOG output for above command
----- amqzxmpa.c : 420 --------------------------------------------------------
07/25/07 07:05:43 - Process(1149.1) User(root) Program(amqzxma0_nd)
AMQ6175: The system could not dynamically load the shared library
'/var/mqm/exits64//mirrorq'. The system returned error message 'ld.so.1:
amqzxma0_nd: fatal: relocation error: file /var/mqm/exits64//mirrorq: symbol
MQXEP: referenced symbol not found'. The queue manager will continue without
this module.
EXPLANATION:
This message applies to UNIX systems. The shared library
'/var/mqm/exits64//mirrorq' failed to load correctly due to a problem with the
library.
ACTION:
Check the file access permissions and that the file has not been corrupted.
----- amqxufnx.c : 1158 -------------------------------------------------------
07/25/07 07:05:43 - Process(1149.1) User(root) Program(amqzxma0_nd)
AMQ7214: The module for API Exit 'mirrorq' could not be loaded.
EXPLANATION:
The module 'mirrorq' for API Exit 'mirrorq' could not be loaded for reason
xecU_S_LOAD_FAILED.
ACTION:
Correct the problem with the API Exit module 'mirrorq'.
----- amqzxmpa.c : 420 --------------------------------------------------------
Script to build the exit ( as per latest WMQ System Admin Guide)
cc -V -xarch=v9 -xcode=abs64 -mt -G -o mirrorq mirrorq.c -I/opt/mqm/inc -L/opt/m
qm/lib64 -R/opt/mqm/lib64 -R/usr/lib/64 -lmqm -lmqmcs -lmqmzse -lsocket -lnsl -l
dl -DUNIX -DSOLARIS -D_REENTRANT -DHNLUP
output from compile
cc: Sun C 5.8 2005/10/13
cc: Warning: a -xcode value producing position independent code should be specif
ied when producing dynamic objects by passing -G to the linker.
acomp: Sun C 5.8 2005/10/13
ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.482
|
finally looking at the binary produced,
[code]
-bash-3.00$ ldd mirrorq
libmqm.so => /opt/mqm/lib64/libmqm.so
libmqmcs.so => /opt/mqm/lib64/libmqmcs.so
libmqmzse.so => /opt/mqm/lib64/libmqmzse.so
libsocket.so.1 => /usr/lib/64/libsocket.so.1
libnsl.so.1 => /usr/lib/64/libnsl.so.1
libdl.so.1 => /usr/lib/64/libdl.so.1
libthread.so.1 => /lib/64/libthread.so.1
librt.so.1 => /lib/64/librt.so.1
libc.so.1 => /lib/64/libc.so.1
libmqz.so => /opt/mqm/lib64/libmqz.so
libmp.so.2 => /lib/64/libmp.so.2
libmd5.so.1 => /lib/64/libmd5.so.1
libscf.so.1 => /lib/64/libscf.so.1
libaio.so.1 => /lib/64/libaio.so.1
libdoor.so.1 => /lib/64/libdoor.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libm.so.2 => /lib/64/libm.so.2
/platform/SUNW,Sun-Blade-1000/lib/sparcv9/libc_psr.so.1
/platform/SUNW,Sun-Blade-1000/lib/sparcv9/libmd5_psr.so.1
-bash-3.00$ file mirrorq
mirrorq: ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked
, not stripped
-bash-3.00$
[/lcode]
I get exactly the same results with the sample exit supplied with WMQ.
Any hints/tip about where to go next would be much appreciated.
TIA
 _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
smdavies99 |
Posted: Tue Jul 24, 2007 10:42 pm Post subject: Minor correction |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
I included the wrong compiler script in my original post.
It should be
cc -V -xarch=v9 -KPIC -mt -G -o mirrorq mirrorq.c -I/opt/mqm/inc -L/opt/mqm/lib64 -R/opt/mqm/lib64 -R/usr/lib/64 -lmqm -lmqmcs -lmqmzse -lsocket -lnsl -ldl -DUNIX -DSOLARIS -D_REENTRANT -DHNLUP _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
fjb_saper |
Posted: Wed Jul 25, 2007 2:18 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Looks like you have a few things to correct.
A) you say you compiled with 64 bits but you placed the exit in the 32 bit part of the exit directory??
B) you need to compile for both 32 bits AND 64 bits and place the executable into its respective directory
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
smdavies99 |
Posted: Wed Jul 25, 2007 2:48 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
The exit as compiled for 64bit is in the exits64 directory
There is also a version of the exit in the exits. This is compiled for 32bit.
Code: |
bash-3.00# ldd mirrorq
libmqm.so => /usr/lib/libmqm.so
libmqmzf.so => /usr/lib/libmqmzf.so
libmqmcs.so => /opt/mqm/lib/libmqmcs.so
libmqmzse.so => /opt/mqm/lib/libmqmzse.so
libthread.so.1 => /usr/lib/libthread.so.1
libsocket.so.1 => /usr/lib/libsocket.so.1
librt.so.1 => /usr/lib/librt.so.1
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libmqz.so => /opt/mqm/lib/libmqz.so
libnsl.so.1 => /lib/libnsl.so.1
libaio.so.1 => /lib/libaio.so.1
libmd5.so.1 => /lib/libmd5.so.1
libmp.so.2 => /lib/libmp.so.2
libscf.so.1 => /lib/libscf.so.1
libdoor.so.1 => /lib/libdoor.so.1
libuutil.so.1 => /lib/libuutil.so.1
libm.so.2 => /lib/libm.so.2
/platform/SUNW,Sun-Blade-1000/lib/libc_psr.so.1
/platform/SUNW,Sun-Blade-1000/lib/libmd5_psr.so.1
bash-3.00# file *
mirrorq: ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked,
not stripped
bash-3.00# pwd
/var/mqm/exits
bash-3.00#
bash-3.00# cd ../exits64
bash-3.00# pwd
/var/mqm/exits64
bash-3.00# file *
mirrorq: ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked
, not stripped
bash-3.00#
|
The files are as follows:-
Code: |
bash-3.00# ls -l exits
total 58
-rwxr-xr-x 1 mqm mqm 29344 Jul 25 11:24 mirrorq
bash-3.00# ls -l exits64
total 74
-rwxr-xr-x 1 mqm mqm 37256 Jul 25 07:23 mirrorq
bash-3.00#
|
When I try to start the QMGR the output is as follows:-
bash-3.00# strmqm QM1
WebSphere MQ queue manager 'QM1' starting.
AMQ7214: The module for API Exit 'mirrorq' could not be loaded.
bash-3.00#
The log show the same as before
Code: |
----- amqzxmpa.c : 420 --------------------------------------------------------
07/25/07 11:30:05 - Process(1304.1) User(root) Program(amqzxma0_nd)
AMQ6175: The system could not dynamically load the shared library
'/var/mqm/exits64//mirrorq'. The system returned error message 'ld.so.1:
amqzxma0_nd: fatal: relocation error: file /var/mqm/exits64//mirrorq: symbol
MQXEP: referenced symbol not found'. The queue manager will continue without
this module.
EXPLANATION:
This message applies to UNIX systems. The shared library
'/var/mqm/exits64//mirrorq' failed to load correctly due to a problem with the
library.
ACTION:
Check the file access permissions and that the file has not been corrupted.
----- amqxufnx.c : 1158 -------------------------------------------------------
07/25/07 11:30:05 - Process(1304.1) User(root) Program(amqzxma0_nd)
AMQ7214: The module for API Exit 'mirrorq' could not be loaded.
EXPLANATION:
The module 'mirrorq' for API Exit 'mirrorq' could not be loaded for reason
xecU_S_LOAD_FAILED.
ACTION:
Correct the problem with the API Exit module 'mirrorq'.
----- amqzxmpa.c : 420 --------------------------------------------------------
|
Puzzled? _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
fjb_saper |
Posted: Wed Jul 25, 2007 3:09 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Looks like a linking problem. Verify what kind of lib is in /usr/lib/(32/64bit)...
Make sure each of the libraries (32 bit/64bit) links to its respective 32/64 bit counterpart....
Last but not least is the user root supposed to be running this stuff?
See the qmgr log where it says user root.
I would start the qmgr as mqm... maybe you'll get a different result...
Have fun...  _________________ MQ & Broker admin |
|
Back to top |
|
 |
smdavies99 |
Posted: Wed Jul 25, 2007 4:10 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
One of the things I do on Unix/Linux is to put root into the MQM group.
This allows root to start/stop queue managers. I think its in the docs somewhere...
Anyway, I tried to start the QMGR as another user and there is no change to the messages in AMQERR01.LOG
I did an LDD -v on BOTH 32 & 64 bit exits binaries.
there seems to be no conflict here. The 64bit references the 64 bit versions of libraries
For Example:-
Code: |
-bash-3.00$ ldd -v mirrorq
find object=libmqm.so; required by ./mirrorq
libmqm.so => /opt/mqm/lib64/libmqm.so
find object=libmqmcs.so; required by ./mirrorq
libmqmcs.so => /opt/mqm/lib64/libmqmcs.so
find object=libmqmzse.so; required by ./mirrorq
libmqmzse.so => /opt/mqm/lib64/libmqmzse.so
find object=libsocket.so.1; required by ./mirrorq
libsocket.so.1 => /usr/lib/64/libsocket.so.1
find object=libnsl.so.1; required by ./mirrorq
libnsl.so.1 => /usr/lib/64/libnsl.so.1
find object=libdl.so.1; required by ./mirrorq
libdl.so.1 => /usr/lib/64/libdl.so.1
find object=libmqmcs.so; required by /opt/mqm/lib64/libmqm.so
find object=libmqmzse.so; required by /opt/mqm/lib64/libmqm.so
find object=libthread.so.1; required by /opt/mqm/lib64/libmqm.so
libthread.so.1 => /lib/64/libthread.so.1
find version=libthread.so.1
libthread.so.1 (SUNW_0.9) => /lib/64/libthread.so.1
find object=libsocket.so.1; required by /opt/mqm/lib64/libmqm.so
find object=librt.so.1; required by /opt/mqm/lib64/libmqm.so
librt.so.1 => /lib/64/librt.so.1
find object=libc.so.1; required by /opt/mqm/lib64/libmqm.so
libc.so.1 => /lib/64/libc.so.1
find version=libc.so.1
libc.so.1 (SUNW_0.7) => /lib/64/libc.so.1
|
and for the 32bit
Code: |
-bash-3.00$ ldd -v mirrorq
find object=libmqm.so; required by ./mirrorq
libmqm.so => /usr/lib/libmqm.so
find object=libmqmzf.so; required by ./mirrorq
libmqmzf.so => /usr/lib/libmqmzf.so
find object=libmqmcs.so; required by /usr/lib/libmqm.so
libmqmcs.so => /opt/mqm/lib/libmqmcs.so
find object=libmqmzse.so; required by /usr/lib/libmqm.so
libmqmzse.so => /opt/mqm/lib/libmqmzse.so
find object=libthread.so.1; required by /usr/lib/libmqm.so
libthread.so.1 => /usr/lib/libthread.so.1
find version=libthread.so.1
libthread.so.1 (SUNW_0.9) => /usr/lib/libthread.so.1
find object=libsocket.so.1; required by /usr/lib/libmqm.so
libsocket.so.1 => /usr/lib/libsocket.so.1
find object=librt.so.1; required by /usr/lib/libmqm.so
librt.so.1 => /usr/lib/librt.so.1
find object=libc.so.1; required by /usr/lib/libmqm.so
libc.so.1 => /usr/lib/libc.so.1
find version=libc.so.1
libc.so.1 (SYSVABI_1.3) => /usr/lib/libc.so.1
find object=libdl.so.1; required by /usr/lib/libmqm.so
libdl.so.1 => /usr/lib/libdl.so.1
find object=libmqz.so; required by /usr/lib/libmqm.so
libmqz.so => /opt/mqm/lib/libmqz.so
find object=libmqmcs.so; required by /usr/lib/libmqmzf.so
find object=libthread.so.1; required by /usr/lib/libmqmzf.so
find version=libthread.so.1
libthread.so.1 (SISCD_2.3a) => /usr/lib/libthread.so.1
find object=libsocket.so.1; required by /usr/lib/libmqmzf.so
find object=librt.so.1; required by /usr/lib/libmqmzf.so
find object=libc.so.1; required by /usr/lib/libmqmzf.so
|
So, as far as I can see, everything is in the right place and linked correctly.
Any other thoughts most welcome
/S _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
jefflowrey |
Posted: Wed Jul 25, 2007 4:22 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
|
Back to top |
|
 |
smdavies99 |
Posted: Wed Jul 25, 2007 5:43 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
Thanks for the suggestions. I had already tried the compiler commands based upon the API guide.
Anyway, I rebuilt both 32 & 64 bit versions of the exit again and put them in place.
The result when trying to start the QMGR is the same as before.
Code: |
----- amqzxmpa.c : 420 --------------------------------------------------------
07/25/07 14:24:14 - Process(1465.1) User(sdavi) Program(amqzxma0_nd)
AMQ6175: The system could not dynamically load the shared library
'/var/mqm/exits64//mirrorq'. The system returned error message 'ld.so.1:
amqzxma0_nd: fatal: relocation error: file /var/mqm/exits64//mirrorq: symbol
MQXEP: referenced symbol not found'. The queue manager will continue without
this module.
EXPLANATION:
This message applies to UNIX systems. The shared library
'/var/mqm/exits64//mirrorq' failed to load correctly due to a problem with the
library.
ACTION:
Check the file access permissions and that the file has not been corrupted.
----- amqxufnx.c : 1158 -------------------------------------------------------
07/25/07 14:24:14 - Process(1465.1) User(sdavi) Program(amqzxma0_nd)
AMQ7214: The module for API Exit 'mirrorq' could not be loaded.
EXPLANATION:
The module 'mirrorq' for API Exit 'mirrorq' could not be loaded for reason
xecU_S_LOAD_FAILED.
ACTION:
Correct the problem with the API Exit module 'mirrorq'.
----- amqzxmpa.c : 420 --------------------------------------------------------
#
|
Now where is that brick wall...
/S _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
jefflowrey |
Posted: Wed Jul 25, 2007 5:48 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
You've still got a trailing slash in ExitsDefaultPath and ExitsDefaultPath64.
I'm really not kidding when I say to try this, and it's not ... entirely ... a random suggestion.
What lib file is supposed to export MQXEP? _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
smdavies99 |
Posted: Wed Jul 25, 2007 6:18 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
Jeff,
The trailing '/' are put in the qm.ini by WMQ when it creates the QMGR....
Anyway, I tried it without them and there was no difference apart from the path not showing the double //.
Code: |
07/25/07 14:54:05 - Process(1479.1) User(sdavi) Program(amqzxma0_nd)
AMQ6175: The system could not dynamically load the shared library
'/var/mqm/exits64/mirrorq'. The system returned error message 'ld.so.1:
amqzxma0_nd: fatal: relocation error: file /var/mqm/exits64/mirrorq: symbol
MQXEP: referenced symbol not found'. The queue manager will continue without
this module.
EXPLANATION:
This message applies to UNIX systems. The shared library
'/var/mqm/exits64/mirrorq' failed to load correctly due to a problem with the
library.
ACTION:
Check the file access permissions and that the file has not been corrupted.
----- amqxufnx.c : 1158 -------------------------------------------------------
07/25/07 14:54:05 - Process(1479.1) User(sdavi) Program(amqzxma0_nd)
AMQ7214: The module for API Exit 'mirrorq' could not be loaded.
EXPLANATION:
The module 'mirrorq' for API Exit 'mirrorq' could not be loaded for reason
xecU_S_LOAD_FAILED.
ACTION:
Correct the problem with the API Exit module 'mirrorq'.
|
Regarding the MQXEP. I did a grep of mirrorq.c and found
Code: |
-bash-3.00$ grep -i mqxep *.c
MQXEP(pExitParms->Hconfig, MQXR_BEFORE, MQXF_CLOSE, (PMQFUNC) CloseBefore,
MQXEP(pExitParms->Hconfig, MQXR_AFTER, MQXF_CONN, (PMQFUNC)ConnAfter,
MQXEP(pExitParms->Hconfig, MQXR_AFTER, MQXF_CONNX, (PMQFUNC)ConnxAfter,
MQXEP(pExitParms->Hconfig, MQXR_BEFORE, MQXF_DISC, (PMQFUNC)DiscBefore,
MQXEP(pExitParms->Hconfig, MQXR_AFTER, MQXF_OPEN, (PMQFUNC)OpenAfter,
MQXEP(pExitParms->Hconfig, MQXR_AFTER, MQXF_PUT, (PMQFUNC)PutAfter,
MQXEP(pExitParms->Hconfig, MQXR_AFTER, MQXF_PUT1, (PMQFUNC)Put1After,
MQXEP(pExitParms->Hconfig, MQXR_CONNECTION, MQXF_TERM, (PMQFUNC)Terminate,
-bash-3.00$
|
MQXEP is defined in cmqcx.h which is an include in the .c file.
the output from the 'ldd' command shows no undefined references so AFAICG (As far as I can guestimate) it is a compile/link issue. But quite what it is I am at a bit of a loss.
/S _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
jefflowrey |
Posted: Wed Jul 25, 2007 6:25 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
|
Back to top |
|
 |
smdavies99 |
Posted: Wed Jul 25, 2007 6:39 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
Jeff,
(You must have big pockets for a complete wall eh?)
I've run into the problem with unsupported C compilers before (with Broker 2.1 and gcc when sun couldn't sell us a c compiler) so I have a supported compiler.(AFAIK)
Viz
cc -V
cc: Sun C 5.8 2005/10/13
This is from a SunStudio install.
Any more suggestions welcome. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
Vitor |
Posted: Wed Jul 25, 2007 6:44 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
jefflowrey wrote: |
I keep a brick wall in my pocket for just such situations.
|
And I thought you were just pleased to see us.....  _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
jefflowrey |
Posted: Wed Jul 25, 2007 6:45 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
The secret is to use very small bricks...
The other thing to check is that you have UNSET Lib and LD_LIBRARY_PATH, per "implications of a 64bit queue manager" (Solaris Quick beginnings manual). _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
smdavies99 |
Posted: Wed Jul 25, 2007 6:59 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
Jeff,
Thanks again for the suggestion about the paths etc.
The user who is doing the compilations does not have any the offending directories set in the paths
so there is nothing to remove.
/S
{sigh.} _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
|