ADAGUC is a WMS-based implementation, made by KNMI. Its distinct feature is to serve time-enabled raster data, from NetCDF file or OPeNDAP server, to (web) clients using the WMS protocol.
For more information on ADAGUC and its features please visit KNMI's ADAGUC pages http://dev.knmi.nl/projects/adaguc
ADAGUC consists of
- a server part
- a client/viewer part
This Tech Note describes how to setup ADAGUC on CentOS 6.4 Linux. This was performed on a local Virtual Machine as an exercise before setting up a production machine for ADAGUC.
ADAGUC Server setup
CentOS (http://www.centos.org) is based on the same sources as Red Hat Enterprise Linux.
KNMI describes installation on Red Hat Linux here: http://dev.knmi.nl/projects/adagucserver/wiki/Installation
This recipe has been followed. In short it is repeated here.
Note: unless otherwise stated, the commands are (Bash) shell commands.
Verify yum configuration for EPEL repository:
[mylocalhost]# yum repolist
Install from EPEL repository (compiling netcdf and hdf5 is not needed in this case):
[mylocalhost]# yum install gcc gcc-c++ mercurial libpng-devel zlib-devel libxml2-devel gd-devel netcdf-devel hdf5-devel proj-devel postgresql-devel udunits2-devel gdal-devel cairo-devel httpd postgresql-server libsqlite3x-devel
Note: somehow this install was not completed successfully because later on the compiler complained about missing dependencies. I just re-executed this yum install (with all packges listed) and after that all worked fine.
Compile ADAGUC server
Setup a directory structure for ADAGUC in /opt:
stores ADAGUC client/viewer related files and components
stores ADAGUC server runtime related configuration, logs and optionally data
tree with ADAGUC server source files; should not be present on a production environment
CentOS has a default Apache installation and this will be used for ADAGUC. Hence ownership of all files and directories involved is assigned explicitly to OS-user apache and OS-group apache (apache:apache).
get ADAGUC server source components from KNMI's Mercurial repository:
[mylocalhost]# hg clone/opt/adaguc/software
start compile by executing compile.sh from /opt/adaguc/software directory. It could be necessary to set the executbale flag first:
[mylocalhost]# chmod +x compile.sh
The compilation results in a binary in the /opt/ADAGUC/software/adagucserverEC directory.
ADAGUC server requires a Web Sever. The ADAGUC server operates as a CGI-bin executable, triggered by the Web Server. CentOS has the Apache Web Server installed by default.
The ADAGUC viewer uses some PHP scripts. For this the Apache mod_php is needed. This is not installed by default on CentOS. To install:
[mylocalhost]# yum install mod_php
This yum installation suffices; Apache on CentOS is set up in such a way that there is no need for explicit changes to configuration in order to enable this new module. An Apache restart is required afterwards.
The Apache configuration needs some adaption. On CentOS the Apache configuration definition can be found in /etc/httpd/conf/httpd.conf. Adaptions/changes were made in the VirtualHost-section:
Some explaination: ADAGUC server is a CGI-bin executable. The executable is called from a bash-script. SELinux constraints demand that CGI-scripts are executed from /var/www/cgi-bin.
For now the scripts are to be located in /opt/adaguc/services/cgi-bin; however this could be revised.
User and Group ownsership of scripts is set to apache:apache
ADAGUC server requires a PostgreSQL RDBMS. PostgreSQL is not installed by default on CentOS. It should have been installed by the Setup prerequisites actions. I'm not sure why I (re)installed PostgreSQL here.
[mylocalhost]# yum install postgresql.x86_64
(PostgreSQL data directory : /var/lib/pgsql/data)
[mylocalhost]# service postgresql initdb
If necessary change connection constraints in /var/lib/pgsql/data/pg_hba.conf.
After making changes, perform:
[mylocalhost]# service postgresql reload
Enable PostgreSQL service startup at boot time
[mylocalhost]# chkconfig postgresql on
Create ADAGUC database
[mylocalhost]# su - postgres
Start psql client:
and execute these SQL statements:
In essence the ADAGUC server is now ready to use. http://dev.knmi.nl/projects/adagucserver/wiki/Tutorials shows by examples how to setup and configure WMS with ADAGUC.
It was the initial idea to setup ADAGUC in a directory structure under /opt. Then here you will have the WMS configurations, the related CGI-script and optionally local data files close together. By means of file system privileges it is possible to allow non-root users to add, configure ADAGUC WMS.
However SELinux does not allow for Apache to execute CGI-bin scripts that are outside of /var/www/cgi-bin. The use of symbolic links in /var/www/cgi-bin does not change this.
On top of that it is also not allowed to call executables from CGI-bin scripts that are located outside of this path.
These SELinux constraints are configurable. However this has not been changes yet. A shortcut was followed in slacking the SELinux constraints from enforcing to permissive in /etc/sysconfig/selinux:
So for the ADAGUC setup a neat solution should be thought of which:
- fully enables SELinux security
- allow non-root users to setup ADAGUC WMS services
This is still to be done before a production environment for ADAGUC could be deployed.
get ADAGUC viewer components from KNMI's Mercurial repository:
[mylocalhost]# hg clone/opt/adaguc
- Apache's mod_php should be installed and functional. This is already described in de ADAGUC Server setup previously.
- Apache configuration
The DocumentRoot setting in de VirtualHost section in /etc/httpd/conf/httpd.conf is directed to /opt/adaguc/adagucviewer/
If this is setup then the ADAGUC viewer will load in the web browser when it is pointed to the web server.