Appendix: Deploying Metacat as a Member Node
==================================
About
~~~~~
The :term:`Metacat` Server supports the `DataONE Member Node API`_ and can be used as a general data and metadata repository. The installation instructions below are fairly specific to a DataONE installation in that configurations are tailored to DataONE systems. However, it also provides a fairly bare-bones recipe that can adapted for any installation. Detailed Metacat installation instructions are available at the `KNB site`_. These instructions are oriented toward an Ubuntu 10.04 LTS installation.
Installation
~~~~~~~~~~~~
1. Update the base system software
----------------------------------
::
$ sudo apt-get update
$ sudo apt-get dist-upgrade
2. Install prerequisite software
--------------------------------
2.1 Install Java from the DataONE repo
--------------------------------------
Java can also be installed (perhaps preferentially) from the Oracle site, but this provides a Debian package.
::
$ sudo vim /etc/apt/sources.list
(add the following lines)
# Java repository from DataONE
deb http://dev-testing.dataone.org/ubuntu-java lucid universe
$ sudo apt-get update
$ sudo apt-get install --no-install-recommends sun-java6-jdk
2.2 Install Ant, Apache2, Tomcat, PostgreSQL
--------------------------------------------
::
$ sudo apt-get install --no-install-recommends ant apache2 libapache2-mod-jk \
tomcat6 postgresql-8.4 postgresql-client-8.4
$ sudo update-alternatives --config java
2.3 Install Metacat
-------------------
This can be replaced by a tagged release version of the Metacat software if desired.
::
$ mkdir -p /usr/share/metacat_build/
$ cd /usr/share/metacat_build/
$ sudo svn co https://code.ecoinformatics.org/code/metacat/branches/METACAT_2_0_5_BRANCH/
$ sudo ln -s METACAT_2_0_5_BRANCH/ metacat
$ sudo ant clean distbin
$ sudo cp /usr/share/metacat_build/metacat/dist/knb.war /var/lib/tomcat6/webapps/
$ sudo chown -R tomcat6:tomcat6 /var/lib/tomcat6
Configuration
~~~~~~~~~~~~~
3.1 Configure UFW
-----------------
::
$ sudo ufw allow ssh
$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw enable
3.2 Configure Apache and server-side SSL
----------------------------------------
::
$ sudo /etc/init.d/apache2 stop
$ cd /etc/ssl/certs
$ sudo curl -O https://repository.dataone.org/software/tools/trunk/ca/DataONECAChain.crt
$ sudo scp username@cn-orc|ucsb|unm-1.dataone.org:geotrust_intermediate.crt .
$ sudo scp username@cn-orc|ucsb|unm-1.dataone.org:_.dataone.org.crt .
$ sudo c_rehash # not really needed, but good practice
$ sudo su
$ cd ../private
# scp username@cn-orc|ucsb|unm-1.dataone.org:dataone_org.key .
# chgrp ssl-cert dataone_org.key
# exit
$ cd /etc/apache2/sites-available/
$ sudo vim knb
Add:
NameVirtualHost *:80
ServerAdmin coredev@dataone.org
ServerName ${hostname}.dataone.org # change this
DocumentRoot /var/lib/tomcat6/webapps/knb
Options FollowSymLinks
AllowOverride None
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
JkMount /knb ajp13
JkMount /knb/* ajp13
JkMount /knb/metacat ajp13
JkMount /*.jsp ajp13
JkUnMount /knb/cgi-bin/* ajp13
$ sudo cp knb knb-ssl
$ sudo vim knb-ssl
Add:
NameVirtualHost *:443
ServerAdmin coredev@dataone.org
ServerName ${hostname}.dataone.org # change this
DocumentRoot /var/lib/tomcat6/webapps/knb
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
JkMount /knb ajp13
JkMount /knb/* ajp13
JkMount /knb/metacat ajp13
JkMount /*.jsp ajp13
JkUnMount /knb/cgi-bin/* ajp13
JkOptions +ForwardURICompatUnparsed
AllowEncodedSlashes On
AcceptPathInfo On
SSLEngine on
SSLOptions +StrictRequire +StdEnvVars +ExportCertData
SSLVerifyClient optional
SSLVerifyDepth 10
SSLCertificateFile /etc/ssl/certs/_.dataone.org.crt
SSLCertificateKeyFile /etc/ssl/private/dataone_org.key
SSLCertificateChainFile /etc/ssl/certs/geotrust_intermediate.crt
SSLCACertificateFile /etc/ssl/certs/DataONECAChain.crt
$ sudo a2enmod ssl
$ sudo a2enmod deflate
$ sudo a2ensite knb
$ sudo a2ensite knb-ssl
$ sudo a2dissite default
$ sudo a2dissite default-ssl
3.3 Configure the JK Apache to Tomcat connector
-----------------------------------------------
::
$ cd /etc/apache2
$ sudo cp /usr/share/metacat_build/metacat/src/scripts/debian/jk.conf mods-available
$ sudo cp /usr/share/metacat_build/metacat/src/scripts/debian/workers.properties .
$ vim workers.properties
Set:
workers.tomcat_home=/var/lib/tomcat6
workers.java_home=/usr/lib/jvm/java-6-sun
$ vim mods-available/jk.conf
Ensure properties are correct
$ sudo a2enmod jk
$ cd /var/lib/tomcat6/conf
$ sudo vim server.xml
Uncomment the port 8009 Connector
$ sudo /etc/init.d/apache2 restart
3.4 Configure Tomcat
--------------------
::
$ sudo vim /etc/tomcat6/catalina.properties
Add:
# DataONE-specific properties
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true
$ sudo /etc/init.d/tomcat6 restart
3.5 Configure PostgreSQL
------------------------
::
$ sudo su - postgres
$ psql metacat
# CREATE USER metacat UNENCRYPTED PASSWORD 'metacat'; # or a secure password for production
# \q
$ createdb -O metacat metacat
$ vim /etc/postgresql/8.4/main/pg_hba.conf
Add: "host metacat metacat 127.0.0.1/32 password"
$ exit
$ sudo /etc/init.d/postgresql-8.4 restart
$ psql -U metacat -W -h localhost metacat # test it
=> \q
3.6 Configure Metacat
---------------------
::
$ cd /var/lib/tomcat6/webapps/
Note: for non-production environments, unpack the war into the knb folder, and edit
knb/WEB-INF/metacat.properties and set D1Client.CN_URL to a value other than
https://cn.dataone.org/cn (like cn-dev, cn-sandbox, cn-stage ...)
$ sudo mkdir -p /var/metacat/{certs,documents,data,inline-data,temporary,expanded-archives}
$ sudo mv ~/urn\:node\:mn${CAMPUS}1.{key|pem} /var/metacat/certs # get D1 certs from Dave/Matt
$ cd /var/metacat/certs
$ sudo cat urn*key >> urn*pem # concatenate the key into the pem file
$ sudo chown -R tomcat6:tomcat6 /var/metacat
$ sudo chown -R tomcat6:ssl-cert *key *pem
$ sudo chmod o-rwx *key *pem # remove world perms for private key files
$ sudo /etc/init.d/tomcat6 restart
Go to http://${hostname}.dataone.org/knb/admin to configure Metacat. Once configured:
$ vim /var/lib/tomcat6/webapps/knb/WEB-INF/metacat.properties
Set the spatial cache regeneration and spatial option to false.
Set the D1Client.CN_URL=https://cn-${env}.test.dataone.org for the specific test environment
unless you're configuring a production Meber Node
$ sudo /etc/init.d/tomcat6 restart
Operation
~~~~~~~~~
TODO
.. _KNB site: http://knb.ecoinformatics.org/knb/docs/index.html
.. _DataONE Member Node API: mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html