[Qgis-developer] QGIS Server Build Notes for Mac OS X

Larry Shaffer larrys at dakotacarto.com
Sun Jan 22 18:32:19 EST 2012


Hi Devs,

I have compiled QGIS and Server from the github 'master' branch on
Snow Leopard and Lion and have a couple of suggestions for the
step-by-step build instructions and noticed one possible bug. I have
also tested the Server successfully with the QGIS Web Client on both
OS.

Concerning the QGIS Server build (-D WITH_MAPSERVER=TRUE in section
5.5), the current notes state that fastcgi support has been dropped in
Lion and that adding that support is not recommended for the average
user. However, I think adding this support back in is straightforward
and not any harder than the rest of the build steps.

Here is my suggestion for the build steps to add Server build support
on Snow Leopard and Lion (not tested on older OS):

1) Download fastcgi library [1] and install (necessary for building
qgis_mapserv.fcgi):

cd <fastcgi-src-dir>
./configure --prefix=/usr/local
make && sudo make install

2) Download Apache's mod_fcgid [2] and install (not included with
Apache distribution by default):

cd <mod-fcgid-src-dir>
APXS=/usr/sbin/apxs ./configure.apxs
make && sudo make install

This automatically adds the 'LoadModule fcgid_module ...' line to
/etc/apache2/httpd.conf file. In Snow Leopard, commenting out the old
'LoadModule fastcgi_module' line is advised.

Both PostgreSQL server and mod_fcgid use the Mac's shared memory for
spawned processes. The default settings for shared memory are too low
to accommodate both programs; and trying to launch Apache now will
cause it to terminate when mod_fcgid can not allocate shared memory
that a running postgres process has already used up. The solution is
to up the values of these shared memory settings. A good explanation
of this is in the README included with PostgreSQL-for-Mac installer by
Enterprise DB [3].

3) Add the file /etc/sysctl.conf with the following contents (as per
PostgreSQL-for-Mac README):

kern.sysv.shmmax=1610612736
kern.sysv.shmall=393216
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8

4) Add an Apache virtual host config to support the
~/Applications/QGIS.app build (default fcgid settings work for
testing/non-production server).

Add /etc/apache2/other/qgis-mapserver-fcgid.conf  (replace
/Users/<user> with where QGIS was built, unless built to
/Applications):

<IfModule fcgid_module>
  # on Mac install, not in logs/
  FcgidIPCDir /var/run/fcgidsock
  FcgidProcessTableFile /var/run/fcgid_shm
	
  # fcgid settings for qgis_mapserv.fcgi, initially set to defaults
  # see: http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html
  # add InitialEnv name[=value] 1 or more times to pass env variables
  FcgidCmdOptions
/Users/<user>/Applications/QGIS.app/Contents/MacOS/fcgi-bin/qgis_mapserv.fcgi
\
    ConnectTimeout 3 \
    IdleTimeout 300 \
    IOTimeout 40 \
    MaxProcesses 100 \
    MaxProcessLifeTime 3600 \
    MaxRequestsPerProcess 0 \
    MinProcesses 3
		
  AddHandler fcgid-script .fcgi

  Alias /fcgi-bin/ /Users/<user>/Applications/QGIS.app/Contents/MacOS/fcgi-bin/

  <Directory /Users/<user>/Applications/QGIS.app/Contents/MacOS/fcgi-bin/>
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
  </Directory>

</IfModule>

5) Restart Mac for sysctl settings to take affect (though they can be
added dynamically with sysctl program). If not running, start Apache
via the Web Sharing control under System Preferences/Sharing. The log
/var/log/apache2/error_log should show something like:

Apache/2.2.20 (Unix) ...other modules... mod_fcgid/2.3.6 configured --
resuming normal operations

Apple's decision to drop support for fastcgi_module seems to be
appropriate as it is not being developed upon. While mod_fcgid is
currently a supplemental Apache-supported module, an investigation of
the Apache 2.3/4 documentation shows it is still not included by
default. Although, mod_proxy_fcgi [4] looks like it will be included
in the next distribution (same as current third party module? [5]).
Using an fcgi process spawner like fcgistarter [6], then using Apache
as a reverse proxy, appears to be a better, and more versatile
solution in the future. I actually prefer to use spawn_fcgi [7] and
Nginx as a reverse proxy on the Mac (via MacPorts) and on Ubuntu,
instead of Apache, for running my QGIS Server.

*Possible bug*
I was not able to get QGIS Server to GetMap with image/jpeg, only
image/png. It always returned a server error. I believe this may be a
bug in the source, or when building using Mr. Kyngesburye's
frameworks, as this also occurred in the last QGIS he distributed with
a built Server (1.7.0) [8]. Anyone else notice this?


[1] http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz  OR
http://www.fastcgi.com/dist/fcgi-current.tar.gz
[2] http://httpd.apache.org/download.cgi#mod_fcgid
[3] http://www.enterprisedb.com/resources-community/pginst-guide#macosx AND
     their http://www.enterprisedb.com/products-services-training/pgdownload#osx
installer README
[4] http://httpd.apache.org/docs/2.3/mod/mod_proxy_fcgi.html
[5] http://mproxyfcgi.sourceforge.net/
[6] http://httpd.apache.org/docs/2.3/programs/fcgistarter.html
[7] http://redmine.lighttpd.net/projects/spawn-fcgi
[8] http://www.kyngchaos.com/files/software/qgis/Qgis-1.7.0-3-Snow.dmg


Best Regards,

Larry Shaffer
Dakota Cartography
Black Hills, South Dakota


More information about the Qgis-developer mailing list