Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

  • NB! Be extremely careful if using copy-paste! Also note that wiki page may eat some specific chars.

2 Required sofware

Install them in that order. You can find them from /usr/ports.

unmigrated-wiki-markup
Panel

lang/perl5.14
lang/python27
www/apache22
databases/postgresql91-server \
[ databases/postgresql91-contrib <\- optional, but may become handy \ ]
java/openjdk6
www/tomcat7
devel/apache-ant
www/mod_jk
devel/maven3
shells/bash

3 Configuration rollercoaster

...

Panel

tcsh# grep AllowGroups /etc/ssh/sshd_config
AllowGroups wheel

tcsh# mkdir /var/log/apache2
tcsh# chown www /var/log/apache2
tcsh# mkdir -p /data/home/www
tcsh# pw usermod www -d /data/home/www
tcsh# echo "exit" > /data/home/www/.login
tcsh# chsh -s /bin/sh www

Several scripts from dspace are using "/bin/bash". To make them happy:

...

Panel

    <Connector port="8080" protocol="HTTP/1.1"
                maxThreads="150"
                minSpareThreads="25"
                maxSpareThreads="75"
                enableLookups="false"
                redirectPort="8443"
                acceptCount="100"
                connectionTimeout="20000"
                disableUploadTimeout="true"
                URIEncoding="UTF-8" />

Panel

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

Once again i found more reasonable not to copy (or symlink) webapps to tomcat appBase dir as suggests dspace official documentation. Instead i'm changin tomcat appBase to point to dspace webapps. Also put tomcat logs with other www/apache logs. Original lines are commented out and my lines marked bold.

Panel

      <!-- <Host name="localhost"  appBase="webapps" -->
      <Host name="localhost"  appBase="/data/dspace/webapps"
            unpackWARs="true" autoDeploy="true">
        <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
                pattern="%h %l %u %t "%r" %s %b" /> -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/log/apache2"
               prefix="tomcat_access." suffix=".log"
               pattern="%h %l %u %t "%r" %s %b" />

...

Some lines are omitted from output. Also configure "apache22/extra/httpd-mpm.conf" and "httpd-default.conf" to suit You. Also don't forget apache certificates.

*

tcsh#

egrep

\

-v

"#

\

|"^$

/usr/local/etc/apache22/httpd.conf

*


/*/


LoadModule

rewrite_module

libexec/apache22/mod_rewrite.so


LoadModule

jk_

module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

module          libexec/apache22/mod_jk.so


/*/


ErrorLog

"/var/log/apache2/httpd-error.log"


/*/

&nbsp;&nbsp;&nbsp; CustomLog "\


    CustomLog "|/usr/local/sbin/rotatelogs

\

-l

/var/log/apache2/httpd-access_%Y-%m-%d.log

86400"

combined


/*/


Include

etc/apache22/extra/httpd-mpm.conf


Include

etc/apache22/extra/httpd-default.conf


Include

etc/apache22/extra/httpd-ssl.conf


/*/


Include

etc/apache22/Includes/*.conf


NameVirtualHost

\

*:80


<IfModule

jk_module>

&nbsp;&nbsp; &nbsp;# relative path to


    # relative path to /usr/local

&nbsp;&nbsp; &nbsp;JkWorkersFile


    JkWorkersFile etc/apache22/workers.properties

&nbsp;&nbsp; &nbsp;JkShmFile&nbsp;


    JkShmFile  /var/run/jk-runtime-status

&nbsp;&nbsp; &nbsp;JkLogLevel error &nbsp;&nbsp; &nbsp;JkLogFile&nbsp;


    JkLogLevel error
    JkLogFile  /var/log/apache2/mod_jk.log


</IfModule>


<VirtualHost

\

*:80>


ServerName

dspace.example.com

&nbsp;&nbsp; &nbsp;DocumentRoot


    DocumentRoot /usr/local/www/apache22/data

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IfModule jk_module> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;JkMount /xmlui localhost-worker &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;JkMount /xmlui/\* localhost-worker &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;JkMount /solr localhost-worker &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;JkMount /solr/\* localhost-worker &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;JkMount /oai localhost-worker &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;JkMount /oai/\* localhost-worker &nbsp;&nbsp; &nbsp;</IfModule> &nbsp;&nbsp; &nbsp;RewriteEngine On &nbsp;&nbsp; &nbsp;RewriteRule \^/$ /xmlui/ \[PT\] &nbsp;&nbsp; &nbsp;RewriteRule \^/$ /solr/ \[PT\] &nbsp;&nbsp; &nbsp;RewriteRule \^/$ /oai/ \[PT\] &nbsp;&nbsp; &nbsp;RewriteCond [http://%]


        <IfModule jk_module>
        JkMount /xmlui localhost-worker
        JkMount /xmlui/* localhost-worker
        JkMount /solr localhost-worker
        JkMount /solr/* localhost-worker
        JkMount /oai localhost-worker
        JkMount /oai/* localhost-worker
    </IfModule>
    RewriteEngine On
    RewriteRule ^/$ /xmlui/ [PT]
    RewriteRule ^/$ /solr/ [PT]
    RewriteRule ^/$ /oai/ [PT]   
    RewriteCond http://%{HTTP_HOST}%{REQUEST_URI}

(.*)-login(.*)

\

[OR

\] &nbsp;&nbsp; &nbsp;RewriteCond [

]
    RewriteCond http://%

]

{HTTP_HOST}%{REQUEST_URI}

(.*)/register(.*)

\

[OR

\] &nbsp;&nbsp; &nbsp;RewriteCond [

]
    RewriteCond http://%

]

{HTTP_HOST}%{REQUEST_URI}

(.*)/forgot(.*)

&nbsp; &nbsp;&nbsp; &nbsp;RewriteRule

 
    RewriteRule (.*)

[

https://%

]

{HTTP_HOST}%{REQUEST_URI}

&nbsp;&nbsp; &nbsp;# &nbsp;&nbsp; &nbsp;CustomLog "\|/usr/local/sbin/rotatelogs \-l


    #
    CustomLog "|/usr/local/sbin/rotatelogs -l /var/log/apache2/dspace.example.com-access-%Y-%m-%d.log

86400"

combined &nbsp;&nbsp; &nbsp;ErrorLog

combined
    ErrorLog /var/log/apache2/dspace.example.com-error.log


</VirtualHost>

*

tcsh#

egrep

\

-v

"#

\

|"^$

/usr/local/etc/apache22/extra/httpd-ssl.conf

*


Listen

443


/*/


<VirtualHost

\

_default_:443>


ServerName

dspace.example.com:443


ServerAdmin

hostmaster@example.com


DocumentRoot

"/usr/local/www/apache22/data"


<IfModule

jk_module>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JkMount /xmlui localhost-worker &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JkMount /xmlui/\* localhost-worker &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JkMount /solr localhost-worker &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JkMount /solr/\* localhost-worker &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JkMount /oai localhost-worker &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JkMount /oai/\* localhost-worker &nbsp;&nbsp; &nbsp;RewriteEngine On &nbsp;&nbsp; &nbsp;RewriteRule \^/$ /xmlui/ \[PT\] &nbsp;&nbsp; &nbsp;RewriteRule \^/$ /solr/ \[PT\] &nbsp;&nbsp; &nbsp;RewriteRule \^/$ /oai/ \[PT\] </IfModule> ErrorLog "\


        JkMount /xmlui localhost-worker
        JkMount /xmlui/* localhost-worker
        JkMount /solr localhost-worker
        JkMount /solr/* localhost-worker
        JkMount /oai localhost-worker
        JkMount /oai/* localhost-worker
    RewriteEngine On
    RewriteRule ^/$ /xmlui/ [PT]
    RewriteRule ^/$ /solr/ [PT]
    RewriteRule ^/$ /oai/ [PT]
</IfModule>
ErrorLog "|/usr/local/sbin/rotatelogs

/var/log/apache2/https-error-%Y-%m-%d.log

5M"


TransferLog

"

\

|/usr/local/sbin/rotatelogs

/var/log/apache2/https-access-%Y-%m-%d.log

86400"


/*/


SSLCertificateFile

"/usr/local/etc/apache22/certs/dspace.example.com.crt"


SSLCertificateKeyFile

"/usr/local/etc/apache22/certs/dspace.example.com.key"


SSLCertificateChainFile

"/usr/local/etc/apache22/certs/dspace-bundle.example.com.crt"


/*/


<Directory

"/data/dspace/webapps/xmlui">

&nbsp;&nbsp;&nbsp; SSLOptions \+StdEnvVars \+ExportCertData


    SSLOptions +StdEnvVars +ExportCertData
</Directory>

Panel
Wiki Markup

4 Install Dspace

Panel

tcsh# mkdir /data/dspace
tcsh# cd /data
* tcsh# fetch -o dspace-1.8.1-src-release.tar.gz *http://sourceforge.net/projects/dspace/files/DSpace%20Stable/1.8.1/dspace-1.8.1-src-release.tar.gz/download\* (http://sourceforge.net/projects/dspace/files/DSpace%20Stable/1.8.1/dspace-1.8.1-src-release.tar.gz/download*)
tcsh# tar xzf dspace-1.8.1-src-release.tar.gz
tcsh# cd /data/dspace-1.8.1-src-release/dspace/config/

...

Open /data/dspace-1.8.1-src-release/dspace/config/dspace.cfg and make Your changes:

unmigrated-wiki-markup
Panel

dspace.dir

=

/data/dspace


dspace.hostname

=

dspace.example.com


dspace.baseUrl

=

[

http://dspace.example.com

]


dspace.url

=

${dspace.baseUrl}/xmlui


dspace.name

=

Dspace

at

Example.Com


db.name

=

postgres


db.url

=

jdbc:postgresql://localhost:5432/dspacedb


db.driver

=

org.postgresql.Driver


db.username

=

dspace


db.password

=

s0mepw


db.maxconnections

=

30


db.maxwait

=

5000


db.maxidle

=

\

-1


db.statementpool

=

true


mail.server

=

smtp.example.com


mail.server.port

=

25


mail.from.address

=

dspace-noreply@example.com


feedback.recipient

=

dspace-help@example.com


mail.admin

=

dspace-help@example.com


alert.recipient

=

postmaster@example.com


registration.notify

=

dspace-help@example.com


mail.charset

=

UTF-8


mail.allowed.referrers

=

localhost,dspace.example.com


mail.server.disabled

=

false


default.language

=

en_US


assetstore.dir

=

${dspace.dir}/assetstore


log.init.config

=

${dspace.dir}/config/log4j.properties


log.dir

=

/var/log/apache2/


search.dir

=

${dspace.dir}/search


/*/


handle.canonical.prefix

=

[

http://hdl.handle.net/

]


handle.prefix

=

12345


handle.dir

=

${dspace.dir}/handle-server


/*/


upload.max

=

536870912


default.locale

=

en


xmlui.supported.locales

=

en


xmlui.force.ssl

=

true


xmlui.user.registration=false

Configure LDAP module. As i'm writing its not possible to configure multiple ldap servers in order to achieve failover (eg. ldap://ldapserver1 ldapserver2/?blah?blah).

...

Just in case verify /data/dspace/config/log4j.properties doesn't bug You.  Remove unneeded "/" There may be 3 erratic lines like this one:

Panel

/var/log/apache2/*/*cocoon.log

Also verify that /data/dspace/config/modules/authentication.cfg and authentication-ldap.cfg are correct.

...

Now install certificates required to use LDAPS. Make sure that You have JAVA_HOME set:

unmigrated-wiki-markup
Panel

*tcsh# set JAVA_HOME=/usr/local/openjdk6* *
tcsh# echo $JAVA_HOME*
/usr/local/openjdk6 *
tcsh# keytool \ -import \ -file /tmp/myldap-clients.example.com.crt \ -alias myldap.example.com \ -keystore $JAVA_HOME/jre/lib/security/cacerts*
Enter keystore password:&nbsp;   'changeit'&nbsp;&nbsp; <\- by default without    <- by default without '-es\!
/*/
Trust this certificate? \ [no\]:&nbsp; *yes* Certificate was added to keystore *tcsh# keytool \-list \-keystore   yes
Certificate was added to keystore
tcsh# keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts* *
tcsh# rm \ -f /tmp/olpmyldap-wild-clients.example.com.crt*

5 Handle

If You are using "handle" also, then:

Panel

tcsh# /data/dspace/bin/dspace make-handle-config /data/dspace/handle-server

Create /usr/local/etc/rc.d/handle with following content. This script runs handle service as "www" user.

\#\!

#!/bin/sh

\


#

\


#

PROVIDE:

handle

\


#

REQUIRE:

NETWORKING

tomcat7

\


#

KEYWORD:

shutdown

\


#

\


#

handle_server_enable="YES"

\


#

.

/etc/rc.subr

name="handle_server"


start_cmd="${name}

\

_start"


stop_cmd="${name}

\

_stop"


rcvar=`set_rcvar`

command="/data/dspace/bin/start-handle-server"

handle_server_start()

{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \[ \-x ${command} \]; then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;


{
        if [ -x ${command} ]; then
        pid="`ps

\

-axuwww

\

|

grep

\

-v

grep

\

|

grep

handle-server

\

|

nawk

'{

print

$2

}'`"

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \[


                if [ "${pid}"X

=

"X"

\

];

then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su - www \-c ${command} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "Handle server is already running." &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi } handle_server_stop() { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pid="`ps \-axuwww \| grep \-v grep \| grep handle-server \| nawk '{ print $2 }'`" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \[ "${pid}"X \!= "X" \]; then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pid_owner="`ps \-axu \|grep \-v grep \| grep \-w $pid \|nawk '{ print $1 }'`" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \[ "${pid_owner}" = "www" \]; then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kill \-15 ${pid} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "Handle server is not running?" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi } \# set defaults

then
                        su - www -c ${command}
                else
                        echo "Handle server is already running."
                fi
        fi
}
handle_server_stop()
{
        pid="`ps -axuwww | grep -v grep | grep handle-server | nawk '{ print $2 }'`"
        if [ "${pid}"X != "X" ]; then
                pid_owner="`ps -axu |grep -v grep | grep -w $pid |nawk '{ print $1 }'`"
                if [ "${pid_owner}" = "www" ]; then
                        kill -15 ${pid}
                        sleep 1
                fi
        else
                echo "Handle server is not running?"
        fi
}
# set defaults

handle_server_enable=${handle_server_enable:-"NO"}


load_rc_config

"${name}"

run_rc_command

"$1"

Panel
Wiki Markup

6 Clean up and daemons startup

...

Panel

apache22_enable="YES"
tomcat7_enable="YES"
tomcat7_java_opts="-Xmx512M -Xms512M -XX:MaxPermSize=128M -Dfile.encoding=UTF-8"
tomcat7_catalina_log=">> /var/log/apache2/catalina-`date +%Y-%m-%d`.log 2>&1"
tomcat7_catalina_tmpdir="/tmp"
handle_server_enable="YES"
postgresql_enable="YES"
postgresql_data="/data/pgsql"

...

  • If You should later on upgrade "openjdk", then You need to import LDAP certificate again - you'll lose it!
  • If You should upgrade mod_jk port, then dont forget to uncomment "#LoadModule jk_module.... " line!to uncomment "#LoadModule jk_module.... " line!
  • After dspace upgrade dont forget cocoon: /data/dspace/webapps/xmlui/WEB-INF/cocoon/properties/core.properties
  • Implement backups and monitoring!
  • Implement firewall. If using pf:
unmigrated-wiki-markup
Panel

WEB_PORTS="{

80,

443

}"


HANDLE_PORTS="{

2641,

8000

}"

\


#

www


pass

in

log

quick

on

$EXT_IF

proto

tcp

from

any

to

port

$WEB_PORTS

\


#

dspace

handle

service


pass

in

log

quick

on

$EXT_IF

proto

tcp

from

any

to

port

$HANDLE_PORTS

Maybe You need SSH too, but in general keep blocking.