Metacat UNIX Installation Instructions
KNB Home Data People Informatics Biocomplexity Education Software

***Disclaimer***

These installation instructions are meant for a systems administrator/DBA or someone who is an advanced computer user. They are NOT meant for the average computer user. Please realize that by executing these instructions, you may have to trouble shoot many advanced issues yourself.

Pre-Installation

Minimum Requirements

Installing Metacat requires a server running an SQL92 compliant database (Oracle 8i recommended) with at least 128MB RAM, and a Pentium III class processor or higher. The amount of disk space required depends on the size of your RDBMS tablespace (which should be at least 10 MB, however Metacat itself requires only about 1 MB of free space after installation. These instructions assume a Linux environment but may work on other UNIX type environments, however this has not been tested.

Additional Required Software

The server on which you wish to install Metacat must have the following software installed and running correctly before attempting to install Metacat.

  • Oracle 8i (or another SQL92 compliant RDBMS like Postgres)
  • Apache Jakarta-Ant
  • Apache Jakarta-Tomcat

    Note: For a more robust web serving environment, Apache web server should be installed along with Tomcat and the two should be integrated as described on the Apache web site.

Aditional Software Setup

Oracle 8i

The Oracle RDBMS must be installed and running as a daemon on the system. In addition the JDBC listener must be enabled. You can enable it by logging in as your Oracle user and typing the following:

lsnrctl start
Your instance should have a table space of at least 5 MB (10 MB or higher recommended). You should also have a username specific to Metacat created and enabled. This user must have most normal permissions including CREATE SESSION, CREATE TABLE, CREATE INDEX, CREATE TRIGGER, EXECUTE PROCEDURE, EXECUTE TYPE, etc. If an action is unexplainably rejected by Metacat it is probably because the user permissions are not correctly set.

Ant

Ant is a Java based build application similar to Make on UNIX systems. It takes in installation parameters from a file in the root installation directory named "build.xml". The Metacat CVS module contains a default build.xml file that may require some modification upon installation. Ant should be installed on the system and the "ant" executable shell script should be available in the users path.

Tomcat

Install tomcat into the directory of your choice. The directory in which you install Tomcat itself will be referred to as the "$TOMCAT_HOME". This install assumes Tomcat version 3.1. The Tomcat configuration will be slightly different depending on what version of Tomcat you are running.

You must now set up your servlet context. Change to the $TOMCAT_HOME/conf. Edit the tomcat.conf file. Find a line that looks like:

ApJServMount /examples /root
Add the following line below the aforementioned text:
ApJServMount /metadata /root
Save tomcat.conf.

Edit the server.xml file. Go to the bottom of the file. Find the line that says:

<Context path="/examples" docbase="/webapps/examples" debug="0" reloadable="true" >
   </Context>
Directly below these lines enter the following:
<Context path="/metadata" docbase="/opt/tomcat/webapps/metadata" debug="0" reloadable="true" >
   </Context>
Save server.xml.
Note that capital "C" on "Context". This MUST be a capital "C". Also note that "metadata" is an arbitrary servlet name. You may pick whatever servlet name you wish. Also note that the path to the servlet context will depend on where you install the tomcat webapps directory.

After setting up Tomcat, you must make a slight modification to the startup script. Tomcat needs to know about special protocol handlers that Metacat uses for its URLs. Find the line in the tomcat.sh file that says

    if [ "$TOMCAT_OPTS" = "" ] ; then
     TOMCAT_OPTS=""
    fi
   
It should be on about line 65. You need to comment out the TOMCAT_OPTS entry that is there and add the following:
    TOMCAT_OPTS="-Djava.protocol.handler.pkgs=edu.ucsb.nceas.protocols"
   
When you are done the if statement should look like:
    if [ "$TOMCAT_OPTS" = "" ] ; then
     #TOMCAT_OPTS=""
     TOMCAT_OPTS="-Djava.protocol.handler.pkgs=edu.ucsb.nceas.protocols"
    fi
   
You must also complete the protocol.jar step below for this to be completely setup. Also, make sure that this startup script is always used to start tomcat or the parameter will not be set correctly and some features of Metacat will not work.

Your servlet context should now be setup. The next step is giving Tomcat something to run in that context (i.e. Metacat).

Configuring the Server for Metacat

Once all of the prerequisite software is installed as described above, the installation of Metacat can begin. First you must have a current version of the source distribution of Metacat. You can get it two ways. Authorized users can check it out of the NCEAS CVS system under the module name xmltodb. The command is as follows:

cvs checkout -P xmltodb
Or you can download a gzipped tar file from this site.

Once you have either checked out or unzipped and untarred the source distribution, you can begin the installation process. Change into the xmltodb directory and edit the file called "build.xml". You will need to change a number of configuration properties to match the setup on your system. If you are using oracle, you'll need to customize the properties in the "oracle" target. If you are using Postgres, you'll need to customize the properties inthe "postgres" target. All users will need to customize the properties in the "config" target.

The properties that you need to change will include jdbc-connect, dbDriver, dbAdapter, oracle_home, jdbc, tomcat, webapps, context, user, password, server, web-base-url, and default-style. Each is described in detail below. You should also verify that the jar file properties mentioned in the remainder of the config target are accessible at the paths listed -- the defaults will usually work.

Properties you will likely need to change:
  • The jdbc-connect parameter is the JDBC connection string needed to connect to your database.
  • The dbDriver parameter is the name of the JDBC driver class to use for connections to your database. If you are not using Oracle, you will also need to change the name of the database adapter class in the dbAdapter property in the metacat.properties file.
  • The dbAdapter parameter is the name of the Metacat adapter class to be used to communicate with a particular database. If you are not using Oracle, you will need to change this. There are currently adapters for Oracle, Postgres, and MS SQL Server.
  • The oracle_home parameter is the location that oracle is installed on your system.
  • The jdbc parameter is the location of your jdbc driver jar file.
  • The tomcat parameter is the location in which tomcat is installed.
  • The webapps parameter is the location in which your tomcat servlet contexts are installed. This is typically "$TOMCAT_HOME/webapps".
  • The context parameter is the name of the servlet context in which you want metacat to be installed. This will determine the installation directory for the servlet and many of the urls that are used to access the installed Metacat server.
  • Web-base-url is the URL from which you want to load any stylesheets or supplementary images.
  • The server is the http address on which Metacat is running.
  • The user and password parmaters are the database user name that you set up to use Metacat, for example an Oracle username and password.
  • The default-style parameter defines the "style-set" that is to be used by default when the qformat parameter is missing or set to "html" during a query. It is set to "knb", which is the only style that ships with the default metacat distribution. If you create your own stylesheets for displaying metacat output, you may want to create a new config file in the config-dir (e.g., mystyle.xml) and then change the default-style to use your custom style (e.g., "mystyle").
Other properties that you can but generaly need not change:
  • The installdir parameter is the directory that you want Ant to install the servlet to. It is your "servlet context path" that was defined above.
  • Replication path is the relative path to the replication servlet. This should be the name of your servlet followed by "/servlet/replication".
  • The servlet path is the relative path to your servlet as viewed by the Tomcat or Apache web server. Under Tomcat, the form is usually
    /<servlet-context-name>/servlet/<servlet-name>
    In the example above "metadata" is the name of the servlet context and "metacat" is the name of the servlet.
  • The html-path is usually the first directory of the servlet-path. The only reason it wouldn't be is if you are doing something with your web server and you want the html served from a different location than where the servlet is located.
  • The image-path is where you want the Metacat image files stored. It should be a directory that is accessible by the web server.
  • Replication-log is the location at which you want Metacat to place any replication log files. The user that starts Tomcat must have permission to write to this directory.
  • The config-dir parameter specifies the location of the configuration files for the "style-sets" feature. It is set by default to the installation directory and generally does not need to be changed.
  • The eml-module, eml-version, eml-tag parameters control the installation behavior with respect to EML. You should not need to change these paramters.
  • The cvsrootparameter is used when building the distribution and you should not need to change it.

Note: DO NOT add a slash [/] to the end of these paths. Metacat will not function correctly if you do so.

Stylesheet Scripts

You now need to set up the table structure in your database. Change to the xmltodb/src directory. Then run you RDBMS's SQL utility. In Oracle it is SQLPlus. This tutorial assumes an Oracle database so this example is for SQLPlus. Login as the oracle user that was set up for use with Metacat. At the SQLPlus prompt type the following:

@src/xmltables.sql;
You should see a bunch of output showing the creation of the Metacat table space. The first time you run this script you will get several errors at the beginning saying that you cannot drop a table/index/trigger because it does not exist. This is normal. Any other errors besides this need to be resolved before continuing.

If the script has run correctly you should be able to type

describe xml_documents
and it should tell you
    Name            Null?         Type
    --------------  ------------  ---------------- 
     DOCID          NOT NULL      VARCHAR2(250)
     ROOTNODEID                   NUMBER(20)
     DOCNAME                      VARCHAR2(100)
     DOCTYPE                      VARCHAR2(100)
     DOCTITLE                     VARCHAR2(1000)
     USER_OWNER                   VARCHAR2(100)
     USER_UPDATED                 VARCHAR2(100)
     SERVER_LOCATION              NUMBER(20)
     REV                          NUMBER(10)
     DATE_CREATED                 DATE
     DATE_UPDATED                 DATE
     PUBLIC_ACCESS                NUMBER(1)
     UPDATED                      NUMBER(1)
   

Compilation and Installation

Now we are ready to finish setting up Tomcat by creating the protocol.jar file. To do this, change into the xmltodb directory and type

ant protocol
When it is done and says "BUILD SUCCESSFUL", change into the 'build' directory. There will be a file there called 'protocol.jar'. Now, copy that file to $TOMCAT_HOME/lib/protocol.jar. In our case:
cp protocol.jar /usr/local/devtools/jakarta-tomcat/lib/.
Note that once you have installed the protocol handlers you do not need to install them again. You can recompile Metacat and install it without having to go through this process again.

Once the protocol.jar file is compiled and copied, you are ready to compile and install Metacat. Ant allows compilation and installation to be done in one step. Change into the xmltodb directory and type:

ant install
You should see a bunch of messages telling you the progress of compilation and installation. When it is done you should see the message BUILD SUCCESSFUL and you should be returned to a UNIX command prompt. If you do not see the message BUILD SUCCESSFUL then there was an error that you need to resolve. This may come up if you are logged in as a user that does not have write access to one or more of the directories that are listed in the build.xml file, or if any of the paths to files are not configured correctly in the "config" target.

Once metacat itself is installed, you should also register the Ecological Metadata Language (EML) DTDs. This process is done most easily by running "ant dtdsql" which registers the DTDs with the metacat server. Your database username and password have to be set correctly for this to work.

Once you have successfully installed Metacat, there is one more step. Tomcat (and Apache if you have Tomcat integrated with it) must be restarted. To do this, login as the user that runs your tomcat server (ofter "tomcat"), go to $TOMCAT_HOME/bin and type:

   ./tomcat.sh stop
   ./tomcat.sh start
   
In the Tomcat startup messages you should see something like:
    MetacatServlet Initialize
    Context log path="/metadata" :Metacat: init
    MetacatServlet Initialize
   
If you see that message Tomcat is successfully loading the Metacat servlet. Next, try to run your new servlet. Go to a web browser and type:
http://yourserver.yourdomain.com/yourcontext/
You should substitute your context name for "yourcontext" in the url above. If everything is working correctly, you should see a query page followed by an empty result set. Note that if you do not have Tomcat integrated with Apache you will probably have to type
http://yourserver.yourdomain.com:8080/yourcontext/