Difference between revisions of "WCS Wrapper Installation LinuxOP"

From Earth Science Information Partners (ESIP)
Line 49: Line 49:
 
     # sh setuptools-0.6c11-py2.6.egg
 
     # sh setuptools-0.6c11-py2.6.egg
  
== Know the basic C installation tools. ==  
+
== Get the Datafed WCS Wrapper ==
 
 
'''AutoConf'''
 
 
 
Different posix-like operating systems, like Linux, contain subtle differences which makes creating a portable C based library difficult. This problem is often addressed by [http://www.gnu.org/software/autoconf/ autoconf]. When you type command:
 
  
    # ./configure
+
A good place to install is /usr/local/OWS but any other is OK.
 
 
autoconf finds out important properties of your system, and creates the [http://www.gnu.org/software/make/manual/make.html makefile] that actually compiles your library.
 
 
 
'''Make'''
 
 
 
The traditional build tool is make, which contains rules for compiling and usually also for installing. By typing:
 
 
 
    # make; make install
 
 
 
you will build the project and install it. See the individual project instructions to determine installation directory.
 
 
 
== Get the Datafed WCS Wrapper ==
 
  
 
If you have modified the default '''OWS/web/static/index.html'', make sure '''not to overwrite''' it. Keep the main copy elsewhere and copy it back.
 
If you have modified the default '''OWS/web/static/index.html'', make sure '''not to overwrite''' it. Keep the main copy elsewhere and copy it back.
Line 77: Line 61:
 
     ows-point-1.3.1.zip = (linux-ows-1.3.1.zip) - (netcdf support) + (sample point provider)
 
     ows-point-1.3.1.zip = (linux-ows-1.3.1.zip) - (netcdf support) + (sample point provider)
  
Unzip it/both into your installation folder '''OWS'''. You can install to other folders, this is just used as an example.
+
Issue command
 +
 
 +
    unzip linux-ows-1.3.1.zip
 +
 
 +
Move the contents of the directory linux-ows-1.3.1 to '''OWS'''. You can install to other directories, this is just used as an example.
  
 
You will to have directories '''OWS/datafed''' and '''OWS/web'''
 
You will to have directories '''OWS/datafed''' and '''OWS/web'''
  
The folder datafed contains ''datafed'' package, which contains tools for ISO 8601 time
+
The directory datafed contains ''datafed'' package, which contains tools for ISO 8601 time
 
parsing and some other utilities. ''Web'' is the WCS framework.
 
parsing and some other utilities. ''Web'' is the WCS framework.
  
Line 127: Line 115:
 
     cd numpy-1.5.1
 
     cd numpy-1.5.1
 
     python setup.py install
 
     python setup.py install
 +
 +
If you don't have a fortran compiler installed, for example ''gfortran'' on Debian, you will get warnings. You can ignore them, since fortran is not used.
  
 
=== PyNIO ===
 
=== PyNIO ===
Line 152: Line 142:
 
This has been fixed in 4.1.2 beta 1. If you need to process very large files, you need to compile PyNIO yourself using [ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.1.2-beta1.tar.gz netcdf-4.1.2-beta1] or later.
 
This has been fixed in 4.1.2 beta 1. If you need to process very large files, you need to compile PyNIO yourself using [ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.1.2-beta1.tar.gz netcdf-4.1.2-beta1] or later.
  
== install and start OWS server ==
+
== Install and Start the OWS Server ==
* get the [http://htap.icg.fz-juelich.de/downloads/ows_linux.tar OWS code package for Linux]
+
 
* unpack to your desired working directory, the contents of the archive will end up in ''./ows''
+
* unpack to your desired working directory. Y
** these instructions assume that your working directory is ''/usr/local/'', so the package contents would end up in ''/usr/local/ows''
+
** these instructions assume that your working directory is ''/usr/local/'', so the package contents would end up in ''/usr/local/OWS''.
* add the path of the extracted ''ows'' directory to your ''PYTHONPATH'' environment variable
+
* add the path of the extracted ''OWS'' directory to your ''PYTHONPATH'' environment variable.
** if you followed the above example, ''PYTHONPATH'' should contain ''/usr/local/ows''
+
** if you followed the above example, ''PYTHONPATH'' should contain ''/usr/local/OWS''.
* cd to ''ows/web'' and execute ''python ows.py''
+
* cd to ''OWS/web'' and execute ''python ows.py'' and a server should be running on http://localhost:8080/ now.
* a server should be running on http://localhost:8080/ now
+
** a different port can be passed to the server as an argument.
** a different port can be passed to the server as an argument
+
** you will have to create the log directory ''/var/log/OWS'' before running the server for the first time.
** you will have to create the log directory ''/var/log/ows'' before running the server for the first time
+
*** if the server is not being run as root, the user that runs it needs write access to the log dir
**** if the server is not being run as root, the user that runs it needs write access to the log dir
 
 
* you can stop the server by pressing ctrl-c in the console window
 
* you can stop the server by pressing ctrl-c in the console window
 
* to make the server available automatically at boot time, you can use an init script
 
* to make the server available automatically at boot time, you can use an init script
 
** an example script that starts the OWS server in a screen session as another user is available [http://htap.icg.fz-juelich.de/downloads/ows.sh here]
 
** an example script that starts the OWS server in a screen session as another user is available [http://htap.icg.fz-juelich.de/downloads/ows.sh here]
  
== example installations ==
 
 
=== Debian ===
 
=== Debian ===
 +
 
* typescript of installation on fresh and minimal [http://debian.org Debian] stable: http://htap.icg.fz-juelich.de/downloads/debian_typescript.txt
 
* typescript of installation on fresh and minimal [http://debian.org Debian] stable: http://htap.icg.fz-juelich.de/downloads/debian_typescript.txt
  
= Creating Metadata =
+
== Creating Metadata ==
  
 
The metadata queries of WCS, '''GetCoverage''' and '''DescribeCoverage''' need to be precompiled.
 
The metadata queries of WCS, '''GetCoverage''' and '''DescribeCoverage''' need to be precompiled.
Line 183: Line 172:
 
-o is for optimize, -a prepares every provider
 
-o is for optimize, -a prepares every provider
  
it will create file '''/usr/local/ows/web/static/testprovider/metadata.dat'''.
+
it will create file '''/usr/local/OWS/web/static/testprovider/metadata.dat'''.
  
 
Try now test queries [http://localhost:8080/testprovider?service=WCS&version=1.1.0&Request=GetCapabilities GetCapabilities] and [http://localhost:8080/testprovider?service=WCS&version=1.1.0&Request=DescribeCoverage&identifier=CubeA DescribeCoverage CubeA]
 
Try now test queries [http://localhost:8080/testprovider?service=WCS&version=1.1.0&Request=GetCapabilities GetCapabilities] and [http://localhost:8080/testprovider?service=WCS&version=1.1.0&Request=DescribeCoverage&identifier=CubeA DescribeCoverage CubeA]
  
 
Press ctrl+C to terminate the server. Although this server is intended for development and debugging only, you can use it to server data from your own workstation just fine. For high load sites, look [http://webpy.org/install webpy.org/install] documentation how to set up a high load site.
 
Press ctrl+C to terminate the server. Although this server is intended for development and debugging only, you can use it to server data from your own workstation just fine. For high load sites, look [http://webpy.org/install webpy.org/install] documentation how to set up a high load site.
 
Notice: WCS core functions are written in C/C++, enabling large amount of data delivery. Python is used only for query parsing, making minimal impact in speed.
 
 
The server returns a short XML document, which contains a link into the query result,
 
you can download it by copying the url to your browser.
 
 
== index.html Pages ==
 
 
If no query is present, the server gives a default page '''index.html'''. You should provide pages for your server and for all the providers.
 
 
The server is at '''/usr/local/ows/web/static/index.html''', which will be displayed from url [http://localhost:8080/ http://localhost:8080/]
 
 
Every provider can have an own index.html like  '''/usr/local/ows/web/static/testprovider/index.html''' which will be displayed from [http://localhost:8080/testprovider http://localhost:8080/testprovider]
 
 
If you modify the default index.html, make sure not to overwrite it next time you upgrade the WCS Wrapper package. Keep the main copy elsewhere and copy it back.
 
 
'''Important!''' web.py development server requires, that text files have Unix-style end of line marker, plain '''LF''' and not the Windows convention '''CR-LF'''. The '''owsadmin.py''' script can be used to fix this:
 
 
:: python /usr/local/OWS/web/owsadmin.py unix_nl "/usr/local/OWS/web/static/testprovider/index.html"
 
 
Use your html editing tool support if possible.
 

Revision as of 15:11, December 14, 2010

Back to WCS Wrapper

Project on SourceForge

Questions and comments should go to sourceforge discussions, bug reports to sourceforge tickets. Urgent issues can be asked from Kari Hoijarvi 314-935-6099(w) or 314-843-6436(h)

Last updated 2010-12-13

Things to Consider About Security

The web.py framework and WCS service code has been written with security in mind, and there are no known security bugs. There is little code that writes on the disk, so running this service should not put your computer in danger.

To maximize the security of your computer, consider the following.

  • Every file in every directory you put under OWS/web/static becomes readable by anybody. This is by design, since the whole framework is meant to publish public data. Do not put confidential information under OWS folder!
  • Don't run the process as root. Create a low-rights account like WCS_RUNNER and use that.

Do you want to install as public or private?

The place to install is usually by default:

   /usr/local

Installing to this directory, you will make the software packages available for everyone in that computer. It will also overwrite older versions, which is usually desirable but contains risks, or overwrite newer versions, which is usually not desirable. To install a shared package requires root privileges.

Anyway, overwriting anything may break some other software, so in that case it is recommended to install somewhere else and not make the package automatically public. In that case, you don't need root privileges.

Get Python 2.6.6

Python-logo.gif

We recommend latest python 2.6.6 from ActiveState Python download page or ActiveState Direct Download or you can download from official site.

Since python is usually installed in posix-like systems, this step may be skipped. Other versions of python 2.x may work, but python 3.x won't yet.

Nobody has installed OWS as 64 bit system yet, so we recommend to get the 32 bit version even if you have a 64 bit machine. Creating a 64 bit version is certainly possible. Especially precompiled PyNIO is a 32 bit library.

Install with command

   # ./install.sh -I /usr/local

Warning: This will overwrite your existing python. It may or may not be OK to upgrade, but hardly good to downgrade. You can install several versions of python in the same machine and then edit your environment variables to use the desired version.

Get easy_install for python

Follow instructions at easy_install. In this case download was setuptools-0.6c11-py2.6.egg and the next command installed it:

   # sh setuptools-0.6c11-py2.6.egg

Get the Datafed WCS Wrapper

A good place to install is /usr/local/OWS but any other is OK.

If you have modified the default OWS/web/static/index.html, make sure not to overwrite' it. Keep the main copy elsewhere and copy it back.

Open the download page in another tab.

If you are serving cubes from NetCDF files, get linux-ows-1.3.1.zip or later. This distribution contains point data support also. If you are serving only point data, you can just download ows-point-1.3.1.zip.

   ows-point-1.3.1.zip = (linux-ows-1.3.1.zip) - (netcdf support) + (sample point provider)

Issue command

   unzip linux-ows-1.3.1.zip

Move the contents of the directory linux-ows-1.3.1 to OWS. You can install to other directories, this is just used as an example.

You will to have directories OWS/datafed and OWS/web

The directory datafed contains datafed package, which contains tools for ISO 8601 time parsing and some other utilities. Web is the WCS framework.

Notice:

Using C based libraries enables delivering large amounts of data efficiently. Python is used only for query parsing, making minimal impact in speed.

Although the built-in webserver is intended mainly for development, you can use it to serve data from your own workstation just fine. For high load sites, look webpy.org/install documentation how to integrate webpy with apache server etc.

Get 3rd Party Components

WebPy

  • Webpy.png

Install webpy 0.34 or newer.

   easy_install web.py

More detailed instructions are at webpy download.

lxml

  • Tagpython.png

Install lxml 2.2.8 or 2.3.x


   easy_install lxml

In this case, Red Hat 4.1.1-52, the command installed 2.3.beta1

More detailed instructions are at lxml installation instructions.

NumPy

  • Numpy logo.png

Install numpy 1.5.1 from Numpy Files. Currently there is no easy_install.

Linux testing is done with 1.5.1, but if you have 1.4.1 installed, it should work. The commands issued were:

   wget http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/numpy-1.5.1.tar.gz/download
   tar xvf  numpy-1.5.1.tar.gz
   cd numpy-1.5.1
   python setup.py install

If you don't have a fortran compiler installed, for example gfortran on Debian, you will get warnings. You can ignore them, since fortran is not used.

PyNIO

PyNIO Home page

Choose your operating system from list of PyNIO binaries, write down the file name you want to download.

Start at download and follow the instructions. You need to request an account. Then you need to go to [1] and click on

NCL download.png

Then download PyNIO Version 1.4.0, Choose PyNIO Version 1.4.0 precompiled binaries, OPeNDAP-enabled. Click on Download files for this collection and Accept license. You'll get a list of different supported systems,

This version of PyNIO is compiled with 4.1.1 which has a known bug which occurs if all of the following conditions are true:

  • writing a variable of any type with more than 2**32 values
  • the variable must have 2 or more dimensions
  • the platform on which the file is written must be 32-bit
  • the file can be either classic format or 64-bit offset format
  • the values to be written must begin beyond the first 2**32 values

In this case, a file offset is computed for writing using 32-bit arithmetic for a multiply, but it should be using 64-bit arithmetic. This results in an undetected integer overflow and can overwrite data earlier in the file, without an error or warning.

This has been fixed in 4.1.2 beta 1. If you need to process very large files, you need to compile PyNIO yourself using netcdf-4.1.2-beta1 or later.

Install and Start the OWS Server

  • unpack to your desired working directory. Y
    • these instructions assume that your working directory is /usr/local/, so the package contents would end up in /usr/local/OWS.
  • add the path of the extracted OWS directory to your PYTHONPATH environment variable.
    • if you followed the above example, PYTHONPATH should contain /usr/local/OWS.
  • cd to OWS/web and execute python ows.py and a server should be running on http://localhost:8080/ now.
    • a different port can be passed to the server as an argument.
    • you will have to create the log directory /var/log/OWS before running the server for the first time.
      • if the server is not being run as root, the user that runs it needs write access to the log dir
  • you can stop the server by pressing ctrl-c in the console window
  • to make the server available automatically at boot time, you can use an init script
    • an example script that starts the OWS server in a screen session as another user is available here

Debian

Creating Metadata

The metadata queries of WCS, GetCoverage and DescribeCoverage need to be precompiled.

Run the following commands:

cd /usr/local/OWS/web
python owsadmin.py wcs_prepare -o testprovider
or for all:
python owsadmin.py wcs_prepare -ao

-o is for optimize, -a prepares every provider

it will create file /usr/local/OWS/web/static/testprovider/metadata.dat.

Try now test queries GetCapabilities and DescribeCoverage CubeA

Press ctrl+C to terminate the server. Although this server is intended for development and debugging only, you can use it to server data from your own workstation just fine. For high load sites, look webpy.org/install documentation how to set up a high load site.