MapServer / MapServer-import

3 stars 2 forks source link

Curved Labels cause MapScript crash on RedHat 7.2 #2042

Open tbonfort opened 12 years ago

tbonfort commented 12 years ago

Reporter: j.martel@g2c.fr Date: 2007/02/27 - 17:39

Activating curved labels on RedHat 7.2 seems to cause a MapScript crash (blank
map). Installed dependencies are PHP 4.4.4, GDAL 1.3.2, Geos 2.2.3, GD 2.0.33,
Freetype 2.2.1, Curl 7.15.4 and Proj 4.4.9. PHP is installed as an Apache
module, not CGI. 

/var/log/messages reports an apache crash though httpd is still alive :

kernel: grsec: From 217.xxx.xxx.xxx: signal 11 sent to
/usr/local/apache/bin/httpd[httpd:29737] uid/euid:510/510 gid/egid:100/100,
parent /usr/local/apache/bin/httpd[httpd:8507] uid/euid:0/0 gid/egid:0/0

here is a sample map that causes such a problem :

LAYER
 NAME "Canalisations_etiquette"
 GROUP "Eau Potable"
 METADATA
   "REQUETEUR" "0"
   "CONTOUR" "0"
   "ETIQUETTE" "1"
   "TEXTEFIXE" "0"
 END #MetaData
 TYPE LINE
 STATUS ON
 DATA "AEP_CANA_etiquette"
 LABELITEM "DIAMMAT"
 LABELMAXSCALE 30000
 CLASS
   NAME "Class_Canalisations_Etiquette"
   LABEL
     COLOR 0 0 0
     FONT "Arial"
     FORCE True
     OFFSET 0 0
     POSITION UC
     ANGLE FOLLOW
     TYPE TRUETYPE
     SIZE 4.88
   END #Label
 END #Class
 SYMBOLSCALE 2000
 MAXSCALE 20000
 MINSCALE 0
END #LayerEtiquette

MapScript was build with no errors using the following configuration :

./configure --with-proj --with-wmsclient --with-ogr --with-libwww --with-gdal
--enable-runpath --enable-debug --without-tiff --with-gd=/usr/local
--with-freetype=/usr --with-threads
--with-curl-config=/usr/local/bin/curl-config --with-wfs --with-wcs
--with-wmsclient -with-wfsclient --with-php=/usr/local
--with-geos=/usr/local/bin/geos-config --with-mapscript

Using the same mapfile and project (and same options for building MapScript) on
a different linux distribution like Debian or even MS Windows works perfectly. 
I reproduced the same error in a RH7 virtual machine using php4.4.2, geos
3.0.0rc2 and libgd 2.0.29, so the problem seems linked to the RedHat 7
distribution to me. I didn't find any useful information searching the different
mapserver related forums.

I hope I've been clear enough despite of my poor english.
tbonfort commented 12 years ago

Author: sdlime Date: 2007/02/27 - 18:12

A blank map isn't necessarily a crash. I ran into the same problem here and it 
was caused by multiple versions of GD on the system. Is that a possibility? I 
know Redhat comes with GD (a lousy version) installed by default in /usr.

Steve
tbonfort commented 12 years ago

Author: j.martel@g2c.fr Date: 2007/02/28 - 17:30

Hi Steve,

I searched for a libgd installed somewhere else on my system (and I found some)
as you suggested :

#rpm -e gd-devel
#rpm -e gd 
#locate gd.h  (found in /usr/include and /usr/local/include)
#cd /usr/local/include
#rm -f gd.h gd_io.h gdcache.h gdfont*.h
#cd /usr/include
#rm -f gd.h gd_io.h gdcache.h gdfont*.h

At this point, I guess GD was totally cleaned out from the system, so I rebuilt
and installed it again :

#cd /usr/src/gd-2.0.33
#./configure && make clean && make && make install
#ldconfig

Then I rebuilt MapScript but unfortunately the blank page still occurs when I
activate the layer containing curved labels... Any idea ?
tbonfort commented 12 years ago

Author: sdlime Date: 2007/02/28 - 19:19

Might have to rebuild PHP too.

Steve
tbonfort commented 12 years ago

Author: j.martel@g2c.fr Date: 2007/03/01 - 15:45

I just rebuilt PHP, and compiled MapScript again but it still doesn't work... I
just don't understand what's wrong... 
tbonfort commented 12 years ago

Author: sdlime Date: 2007/03/01 - 16:05

There must still be some other GD on the system, that's the only thing I can 
think of. Doesn't PHP come with it's own version?

If you use shp2img on your mapfile does that crash?

Steve
tbonfort commented 12 years ago

Author: j.martel@g2c.fr Date: 2007/03/01 - 17:48

You are right, PHP comes with its own version of GD so I disabled it by using :
#./configure --without-gd
I built and installed PHP again. 
I cleaned GD again from my system as I did before, plus I uninstalled it from
sources :
#cd /usr/src/gd-2.0.33
#make uninstall
#ldconfig
#./configure && make clean && make && make install
#ldconfig

Then rebuilt MapScript, restarted Apache, but that still doesn't work...

About shp2img (I'm not that familiar to shp2img so excuse me if I made errors) :

#shp2img -m /www/htdocs/demo/htdocs/demo.map -o output
=>generates a file in which I can see my map, full zoom out, but I don't see the
 layer containing curved labels as the zoom level is too low.

#shp2img -m /www/htdocs/demo/htdocs/demo.map -o output -l "Canalisations_etiquette"
=>generates a blank image just as it does when using PHP/MapScript...

If I still have an old GD version installed somewhere, I really wonder where it
is because #locate gd.h only shows me the GD install I made from sources. Damn
RedHat...
tbonfort commented 12 years ago

Author: j.martel@g2c.fr Date: 2007/03/01 - 17:59

Just forgot to mention what I made to ensure GD was totally cleaned out :

#locate libgd
#rm -f libgd.* //from everywhere locate found it

Then re-installed GD from sources...
tbonfort commented 12 years ago

Author: sdlime Date: 2007/03/01 - 18:18

What do you get if you do a "ldd shp2img"? Note that it is definitely worth 
upgrading to gd 2.0.34 (see www.libgd.org)...

Steve
tbonfort commented 12 years ago

Author: j.martel@g2c.fr Date: 2007/03/05 - 10:59

[root@localhost mapserver-4.10.0]# ldd shp2img
        libgd.so.2 => /usr/local//lib/libgd.so.2 (0x40018000)
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40074000)
        libfreetype.so.6 => /usr/local//lib/libfreetype.so.6 (0x40093000)
        libpng.so.3 => /usr/local//lib/libpng.so.3 (0x4010a000)
        libproj.so.0 => /usr/local//lib/libproj.so.0 (0x40138000)
        libgdal.so.1 => /usr/local//lib/libgdal.so.1 (0x4016c000)
        libcurl.so.4 => /usr/local//lib/libcurl.so.4 (0x40567000)
        libssl.so.2 => /lib/libssl.so.2 (0x405a8000)
        libcrypto.so.2 => /lib/libcrypto.so.2 (0x405d5000)
        libdl.so.2 => /lib/libdl.so.2 (0x40698000)
        libgeos_c.so.1 => /usr/local//lib/libgeos_c.so.1 (0x4069c000)
        libpthread.so.0 => /lib/i686/libpthread.so.0 (0x406aa000)
        libstdc++.so.6 => /usr/local//lib/libstdc++.so.6 (0x406bf000)
        libm.so.6 => /lib/i686/libm.so.6 (0x4079f000)
        libc.so.6 => /lib/i686/libc.so.6 (0x407c2000)
        libgcc_s.so.1 => /usr/local//lib/libgcc_s.so.1 (0x408fd000)
        libfontconfig.so.1 => /usr/local//lib/libfontconfig.so.1 (0x40906000)
        libpng12.so.0 => /usr/local//lib/libpng12.so.0 (0x40939000)
        libgeos.so.2 => /usr/local//lib/libgeos.so.2 (0x40967000)
        librt.so.1 => /lib/librt.so.1 (0x40a6e000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
        libexpat.so.0 => /usr/lib/libexpat.so.0 (0x40a81000)

I just tried installing GD 2.0.34 but it still doesn't work. 
tbonfort commented 12 years ago

Author: sdlime Date: 2007/03/05 - 21:03

Why the //'s in the paths for libraries in /usr/local/? This is tough to debug 
because you're not getting a core dump or anything correct? 

Might have to take this one to the user list too.

Steve
tbonfort commented 12 years ago

Author: j.martel@g2c.fr Date: 2007/03/06 - 15:17

I don't understand where those "//" are coming from... ld.conf.so doesn't show
such double slashes... Should I update binutils ??

What do you mean by "core dump" ?

I just installed a whole new RedHat 7.2 into a virtual machine. I carefully
prevented RedHat from installing its own version of GD and change several
parameters regarding to our production server (PHP as a CGI instead of Apache
module, GCC 4.0 instead of 3.4 and so on...) I'll keep you informed when I'll
finish compiling everything.
tbonfort commented 12 years ago

Author: j.martel@g2c.fr Date: 2007/03/06 - 18:11

OK, as I was telling you, I just installed everything again into a virtual
machine and everything is working perfectly. I guess you were right when
thinking about a GD version conflict. Unfortunately the problem with curved
labels occurs on our dedicated server and I just can't install RedHat again
because we also have a web site running on that machine.
Any help on how to definately clear off that Redhat's GD would be greatly
appreciated. Could this have something to do with ldconfig ??