[JDEV] Trouble compiling Jabberd v1.4.2 under recent versions of Cygwin
Frank Seesink
frank at mail.wvnet.edu
Mon Jun 16 20:26:52 CDT 2003
______________________________________________________________________
SHORT VERSION:
I am not new to Jabberd. I am looking for help to track down the
source of a problem I am experiencing. I believe the issue lies either
in Jabberd, the GNU pth, or Cygwin itself, but I need outside confirmation.
After getting Jabberd to compile under Cygwin (see LONG VERSION for
more details), attempts to fire it up using the command from the Jabberd
home directory with the debug flag:
./jabberd/jabberd.exe -D -c /usr/local/jabber/jabber.xml
result in the following error message, which I've never gotten before:
____________________________________________________________
Mon Jun 16 20:41:45 2003 mio.c:578 MIO is starting up
Mon Jun 16 20:41:45 2003 mio.c:607 mio while loop top
**Pth** STACK OVERFLOW: thread pid_t=0xa0405c0, name="unknown"
Segmentation fault
____________________________________________________________
If anyone has been able to compile from source and RUN Jabberd 1.4.2
using the latest Cygwin files (I have v1.3.22-1 of the DLL installed,
and all the latest files) and either the included GNU pth 1.4.0 files
(or the latest 2.0.0 files for that matter), I would really like to hear
from you.
And if anyone is familiar with the error above, any advice would be
appreciated. Turns out the **Pth** line is generated by a function in
within pth, located in the pth_sched.c file. My question is whether the
goof is due to pth, jabberd, or some change in Cygwin since I last did
this successfully about 4-5 months ago.
______________________________________________________________________
LONG VERSION:
Starting around the beginning of the year, I began playing with Jabberd
v.1.4.2 for internal use at our office. Our departmental server is a
Windows box, hence the need to make Jabberd work under Cygwin. After
dealing with the usual compilation headaches, I was able to get the
following working (tested using Rhymbox 1.5 from various clients):
* basic Jabberd functionality (registration, rosters, etc.)
* JUD v0.4 (for User Directory support)
* MU-conference v0.3 (for groupchat)
* SSL support
Details on this later, but suffice it to say that the basic procedure I
could follow for a clean Cygwin Jabberd install (where pth was not yet
installed) went something like this:
1. Decompress Jabberd files to /usr/local/jabber
2. cd /usr/local/jabber/jabberd/pth-1.4.0
3. make; make test; make install
4. cd /usr/local/jabber
5. ./configure
As you likely know, this step obliterates various Makefile's all
over the source tree, completely overwrites /usr/local/jabber/dnsrv,
and in general is not the most elegant solution, though I applaud
whoever did it, because it DOES (or at least DID) work, and that's
key.
6. cd /usr/local/jabber/jabberd
7. Edit Makefile so that the 'ld' link lines have $(LDFLAGS) tacked
onto the ends of them. [Not sure why this was omitted in the
distro.]
8. cd /usr/local/jabber
9. make
10. cp /usr/local/jabber/dnsrv/jabadns.exe /usr/local/bin/
[This last step illudes many people. Took me awhile to figure this
one out, but yes, it helps to have jabadns.exe in your PATH.]
Though I know all the pain others have gone through, making 'ln -s'
links in /usr/lib, etc., for the various pth files, this was not really
necessary. GNU pth installs itself into /usr/local/.., and as long as
the linker knows where to look, that was all that really was needed.
And copying javadns.exe to /usr/local/bin just made it more accessible
to jabberd.exe when you fired it up.
Anyway, this all worked fine and dandy in the past for BASIC
compilation of Jabberd (and still does). That is, no JUD, no
MU-conference, no SSL. Just vanilla Jabberd.
However, NOW I get the error message listed above in the SHORT VERSION.
Apparently just firing up Jabberd is causing a stack overflow. After
Googling around a bit, it seems that one of the many limitations under
Cygwin/Windows is that sigstack is not really supported, so there's a
hack. More importantly, the pth stack appears to be static, not able to
grow if necessary with dynamic calls for more memory.
Anyway, my point is this: This used to work just fine. Now the
Jabberd server compiles just fine, but it dies when you fire it up. No
changes in the install process. The only changes since I did this 4-5
months ago are that Cygwin is at a much newer version now, gcc has
changed, the various libraries have been updated, various Windows
updates have been applied, blah blah blah. So I have no clue where the
problem lies. And I would really like to track this down.
Please note that I have been working on adjusting the various config
files in the standard Jabberd v1.4.2 distribution so as that, if dropped
in place, users could compile Jabberd under Cygwin just as they do under
most *nixes. At this point I can cleanly build Jabberd, JUD v0.4,
MU-conference v0.5.2, xdb_sql v1.3, and though I haven't got OpenLDAP
installed, I believe my modified Makefile for xdb_ldap will build that
as well.
Not only that, but I can build all of these with or without the
--enable-ssl flag, and yes, in the past when Jabberd was running, I had
full SSL support working. And all this without changing a single line
of source code. All I have been doing is making changes to ./configure
and various 'Makefile' in the distribution.
My end goal--beyond just getting Jabberd to work of course :-) --is
that I would like to submit my changes to the Jabberd maintainers,
possibly for inclusion in the distribution or maybe just an external
piece for those so inclined, and ultimately I would like to build either
a Cygwin package and/or a Windows installer with all this packaged
together so as to make the world of JABBER just a little more
accessible. At the very least, I will make these modified files
available to anyone/everyone who would like them, just as soon as I can
be sure they are working properly...which is hard to do when the .EXE
dies on startup. :-/
Please note I have tried many things, including but not limited to the
following:
* Prior to any compilation, I have reset Cygwin so that pth is not
installed, etc.
* I have tried my new Makefile/config files to build jabberd/etc. and
they build fine. Commands like
./jabberd/jabberd.exe -v
kick back version information as they should, but any attempt to fire
up jabberd results in the error message above.
* I have tried compiling jabberd after installing pth-1.4.0 cleanly,
and I have also tried doing so after installing pth-2.0.0 cleanly
(note I always do a 'make uninstall' to remove pth before starting
over again doing a clean install)
* I have tried the above using both the original Jabberd 1.4.2
distribution files (making the one change to ./jabberd/jabberd.h
mentioned earlier) and using my modified Makefile setup. In all
cases the DLLs and .EXEs built fine. And getting jabberd.exe to
run to give me version information works fine. But the moment I try
to bring the server online, that's it.
I would really like to resolve this issue, both because I would like to
use this compilation myself (with Jabberd hooking into PostgreSQL via
xdb_sql), and so I can verify my config file changes and get them out
for others to use if they help at all.
So any help you can offer to track down this error would be greatly
appreciated. Thanks in advance for any and all help.
More information about the JDev
mailing list