Metacat 2.3.0 セットアップ手順 (基本機能)

OS の設定

Metacat 用の特別な設定は必要ない。

ここでは、OS のクリーンインストール後、 作業の便のために bash と vim と curl をインストールした。

# pkg
# pkg install bash
# pkg install vim
# pkg install curl

ミドルウェア等

必要なものは、

  • Apache httpd 2.4 (2.2 でも良い)
  • Java 6
  • Tomcat 6 (7 だと何故か動作がおかしい)
  • PostgreSQL 9
  • OpenLDAP
  • 順次インストールする。

    • Apache httpd 2.4

      # pkg install apache24
      
    • Java 6

      # pkg install openjdk6
      
      /etc/fstab に以下を追加
      fdesc   /dev/fd     fdescfs     rw  0   0
      proc    /proc       procfs      rw  0   0
      
      # mount -a
      
    • Tomcat 6

      # pkg install tomcat
      
    • PostgreSQL 9

      # pkg install postgresql93-server
      
    • OpenLDAP

      # pkg instal openldap24-server
      
  • /etc/rc.conf に以下を追加。

    apache24_enable="YES"
    postgresql_enable="YES"
    tomcat60_enable="YES"
    slapd_enable="YES"
    slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
    slapd_sockets="/var/run/openldap/ldapi"
    
  • デフォルトの Java VM 設定では tomcat がメモリエラーを吐くことがある。 /usr/local/apache-tomcat-6.0/logs/stdout.log に、

    java.lang.OutOfMemoryError: PermGen space
    

    が出現するようであれば、 Java VM のメモリ設定を明示的に指定する。 /etc/rc.conf に下記を追加。

    tomcat60_java_opts="-Xmx256m -XX:MaxPermSize=128m"
    

postgres の設定

  • 取り敢えず起動。

    # service postgresql initdb
    # service postgresql start
    
  • データベースとユーザ(ロール)を作成する。ここでは、

    DB名 metacat
    ユーザ名 mcpguser
    パスワード mcpgpass

    とする。

    # su pgsql
    $ psql postgres
    postgres=# create database metacat;
    postgres=# create role mcpguser with login unencrypted password 'mcpgpass';
    postgres=# grant all on database metacat to mcpguser;
    

    バスワードを囲む引用符はシングルクォート記号を用いること。 ダブルクォート記号を用いると syntax error が出る。 私もよく間違えるので、念のため。

  • ここでは localhost 内限定のアクセスのため pg_hba.conf は修正する必要はない。

ldap

あらかじめ、LDAP の基本ドメインと管理者、Metacat 管理者の DN を決めておく。 ここでは仮に

基本ドメイン dc=mydomain,dc=tld
LDAP 管理者 DN cn=Manager,dc=mydomain,dc=tld
LDAP 管理者 パスワード ldapadminpass
Metacat 管理者 uid=mcadmin,dc=mydomain,dc=tld

とする。

  • 起動の前に設定ファイル /usr/local/etc/openldap/slapd.conf を修正する。

    --- slapd.conf.default  2014-02-06 16:28:09.000000000 +0900
    +++ slapd.conf  2014-02-14 16:21:38.000000000 +0900
    @@ -3,6 +3,8 @@
     # This file should NOT be world readable.
     #
     include        /usr/local/etc/openldap/schema/core.schema
    +include         /usr/local/etc/openldap/schema/cosine.schema
    +include         /usr/local/etc/openldap/schema/inetorgperson.schema
    
     # Define global ACLs to disable default read access.
    
    @@ -51,12 +53,12 @@
     #######################################################################
    
     database   bdb
    -suffix     "dc=my-domain,dc=com"
    -rootdn     "cn=Manager,dc=my-domain,dc=com"
    +suffix     "dc=mydomain,dc=tld"
    +rootdn     "cn=Manager,dc=mydomain,dc=tld"
     # Cleartext passwords, especially for the rootdn, should
     # be avoid.  See slappasswd(8) and slapd.conf(5) for details.
     # Use of strong authentication encouraged.
    -rootpw     secret
    +rootpw     ldapadminpass
     # The database directory MUST exist prior to running slapd AND
     # should only be accessible by the slapd and slap tools.
     # Mode 700 recommended.
    
  • 起動する。

    # service slapd start
    
  • 下記の LDIF データを含むファイルを作成する。 そのファイル名はここでは mcadmin.ldif とする。

    dn: dc=mydomain,dc=tld
    objectClass: dcObject
    objectClass: organization
    dc: mydomain
    o: mydomain.tld
    
    dn: uid=mcadmin, dc=mydomain, dc=tld
    objectClass: inetOrgPerson
    uid: metacat-manager
    cn: Metacat Manager
    sn: Manager
    title: Manager account for Metacat
    
  • LDIF データを投入する。

    # ldapadd -h localhost -D "cn=Manager,dc=mydomain,dc=tld" -W -f mcadmin.ldif
    (LDAP 管理者パスワードを入力する)
    
  • Metacat 管理者にパスワードを発行する。

    # ldappasswd -h localhost -D "cn=Manager,dc=mydomain,dc=tld" -W "uid=mcadmin,dc=mydomain,dc=tld"
    (LDAP 管理者パスワードを入力する)
    (Metacat 管理者アカウントにバスワードが自動発行される。
        画面に出力されたパスワードをメモしておくこと。)
    

Apache httpd の設定

Tomcat 用リバースプロキシを設定する。

  • 必要なモジュールを有効化する。

    /usr/local/etc/apache24/httpd.conf 内の

    • mod_proxy
    • mod_proxy_ajp

    の LoadModule 行のコメントを外す。

  • リバースプロキシ用設定ファイルを作成する。ここでは

    /usr/local/etc/apache24/Includes/metacat.conf
    

    とする。そのファイルに下記の内容を設定する。

    ProxyPass /metacat ajp://localhost:8009/metacat
    ProxyPassReverse /metacat ajp://localhost:8009/metacat
    ProxyPass /geoserver ajp://localhost:8009/geoserver
    ProxyPassReverse /geoserver ajp://localhost:8009/geoserver
    
  • apache24 を起動する。

    # service apache24 start
    

Tomcat6 の設定

最近のバージョンでは setCharacterEncodingFilter が使用可能。 日本語のメタデータを検索する場合はこのフィルタを使用する必要がある (Metacat はデフォルトでは検索文字列をすべて Latin-1 だと解釈してしまうので、 Metacat 内部で日本語検索文字列が文字化けする)。

このフィルタはデフォルトでコメントアウトされているので、 /usr/local/apache-tomcat-6.0/conf/web.xml のコメントを外す。

--- web.xml.sample  2014-02-14 16:09:24.000000000 +0900
+++ web.xml 2014-02-14 16:11:16.000000000 +0900
@@ -424,7 +424,6 @@

   <!-- A filter that sets character encoding that is used to decode -->
   <!-- parameters in a POST request -->
-<!--
     <filter>
         <filter-name>setCharacterEncodingFilter</filter-name>
         <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
@@ -433,7 +432,6 @@
             <param-value>UTF-8</param-value>
         </init-param>
     </filter>
--->


   <!-- A filter that triggers request parameters parsing and rejects the    -->

Metacat をデプロイする

  • Metacat の作業領域を作成する。

    # mkdir /var/metacat
    # chown www:www /var/metacat
    
  • Metacat の配布ファイルを取得して、内容物を Tomcat に配備する。

    # curl -O http://knb.ecoinformatics.org/software/dist/metacat-bin-2.3.0.tar.gz
    # tar xzf metacat-bin-2.3.0.tar.gz
    # cp metacat.war /usr/local/apache-tomcat-6.0/webapps
    # cp geoserver.war /usr/local/apache-tomcat-6.0/webapps
    
  • Tomcat 起動。

    # service tomcat6 start
    

Metacat 設定

http://hostname/metacat/ にアクセスすると自動的に 設定ページが表示される。

  • Backup Directory Configuration ページ

    /var/metacat が正しく作成されていれば、このページはスキップされる かも知れない。

    もし表示された場合は、/var/metacat の書き込み権限等を確認して、 フォームの入力欄に “/var/metacat” と入力して、 Save をクリックする。

  • Authentication Configuration ページ

    以下の項目を設定する。他の項目はそのままにする。

    項目 設定
    Authentication URL ldap://localhost:389/
    Authentication Secure URL ldap://localhost:389/
    Authentication Base dc=mydomain,dc=tld
    Metacat Administrators uid=mcadmin,dc=mydomain,dc=tld
  • Administrator Login ページ

    ldappasswd コマンド実行時に表示されたパスワードを入力する。

  • Metacat Configuration ページ

    “unconfigured” と赤字で表示されている項目を設定して行く。

    右端の列の “Configure Now” を上から順番にクリックする。

    各リンク先のページの設定は以下の通り。

    • Metacat Properties Configuration ページ

      以下の項目を設定する。他の項目はそのままで良い。

      項目 設定
      Database Username ここでは mcpguser
      Database Password ここでは mcpgpass
      Server Name OSのネットワーク設定に基づき適切に設定する
    • Database Install/Upgrade Utility ページ

      “Continue” をクリック

    • Geoserver Configuration

      何も変更せずに Update をクリック

    • DataONE Configuration

      “Enable DataONE Service” のチェックを外して “Bypass” をクリック

    すべての項目が “configured” か “bypassed” に変わっていれば 設定完了。

Metacat の微調整

  • 日本語検索用フィルタの追加

    /usr/local/apache-tomcat-6.0/webapps/metacat/WEB-INF/web.xml の <web-app> タグの直下に以下を追加する。

    <filter-mapping>
      <filter-name>setCharacterEncodingFilter</filter-name>
      <url-pattern>/metacat</url-pattern>
    </filter-mapping>
    
  • geoserver 用の設定が一部おかしいので修正する。 修正するファイルは /usr/local/apache-tomcat-6.0/webapps/metacat/style/common/spatial/map.js。

    --- map.js.orig 2014-02-14 16:01:44.000000000 +0900
    +++ map.js      2014-02-14 16:01:58.000000000 +0900
    @@ -33,7 +33,7 @@
         //    {layers: 'Bathymetry,Countries,Topography,Hillshading,Coastlines,Waterbodies,Inundated,Rivers,Streams,Builtup+areas,Railroads,Highways,Roads,Trails,Borders,Cities,Settlements,Airports'} );
    
            //map.addLayers([demis, ol_wms, world_borders, metacat_points, metacat_bounds]);
    -       map.addLayers([ol_wms, world_borders, metacat_points, metacat_bounds]);
    +       map.addLayers([world_borders, metacat_points, metacat_bounds]);
    
            // perhaps a skin has added more layers
            if (additionalLayers) {
    
  • tomcat を再起動する。

    # service tomcat6 restart
    

確認

http://hostname/metacat/ にアクセスして、Metacat のトップページが 表示されるかどうか確認する。