Difference between revisions of "Metro server installation"

From MeLibraries Wiki
Jump to: navigation, search
(Installation)
(Installation)
Line 20: Line 20:
 
On Unix, the daemon is [https://commons.apache.org/proper/commons-daemon/jsvc.html jsvc], which should be installed on the host metro server machine.
 
On Unix, the daemon is [https://commons.apache.org/proper/commons-daemon/jsvc.html jsvc], which should be installed on the host metro server machine.
 
=== Installation ===
 
=== Installation ===
Read the [https://commons.apache.org/proper/commons-daemon/jsvc.html jsvc] page to install on Unix. Once done the daemon can be started:
+
Read the [https://commons.apache.org/proper/commons-daemon/jsvc.html jsvc] page to install on Unix. Once done the daemon can be started and stopped by creating a <code>/etc/init.d/metro</code> file with permissions <code>-rwxr-xr-x 1 root root</code>. See here
jsvc.exec -home /usr/lib/jvm/default-java -cp /home/its/metro/dist/lib/commons-daemon-1.0.15.jar:/home/its/metro/dist/MeCard.jar  
+
 
-user its -outfile /home/its/metro/logs/metro.out -errfile /home/its/metro/logs/metro.err  
+
==== Init.d script ====
-pidfile /home/its/metro/logs/metro.pid mecard.MetroService -c /home/its/metro/config
+
<pre>
 +
/etc/init.d$ cat metro
 +
#!/bin/sh
 +
### BEGIN INIT INFO
 +
# Provides:         metro
 +
# Required-Start:    $remote_fs $syslog
 +
# Required-Stop:    $remote_fs $syslog
 +
# Default-Start:    2 3 4 5
 +
# Default-Stop:      0 1 6
 +
# Short-Description: Starts and stops the ME server after reboot.
 +
### END INIT INFO
 +
 
 +
# Author: Andrew Nisbet <anisbet@epl.ca>
 +
#
 +
 
 +
# Setup variables
 +
DESC="Starts and stops the ME service for Edmonton Public Library (EPL)"
 +
DAEMON=/usr/bin/jsvc
 +
# This is meant to fix a Debian bug found in kernal release
 +
# 4.4.0-81-generic #104-Ubuntu SMP Wed Jun 14 08:17:06 UTC 2017
 +
# that causes jsvc to fail on startup.
 +
export JSVC_EXTRA_OPTS="$JSVC_EXTRA_OPTS -Xss1280k"
 +
JAVA_HOME=/usr/lib/jvm/default-java # lrwxrwxrwx 1 root root 24 Feb 25  2016 /usr/lib/jvm/default-java -> java-1.8.0-openjdk-amd64/
 +
#JAVA_HOME=/usr/lib/jvm/java-7-openjdk #/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
 +
CLASS_PATH="/home/its/metro/dist/lib/commons-daemon-1.0.15.jar":"/home/its/metro/dist/MeCard.jar"
 +
WDPATH=/home/its/metro/logs
 +
PID=$WDPATH/metro.pid
 +
CLASS=mecard.MetroService
 +
USER=its
 +
LOG_OUT=$WDPATH/metro.out
 +
LOG_ERR=$WDPATH/metro.err
 +
 
 +
# -c tells the service where the config files are located. Valid values are "" or "-c <path>".
 +
#ARGS="-c ../"
 +
ARGS="-c /home/its/metro/config"
 +
 
 +
do_exec()
 +
{
 +
    $DAEMON -home "$JAVA_HOME" -cp $CLASS_PATH -user $USER -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS $ARGS
 +
}
 +
 
 +
case "$1" in
 +
    start)
 +
        do_exec
 +
            ;;
 +
    stop)
 +
        do_exec "-stop"
 +
            ;;
 +
    restart)
 +
        if [ -f "$PID" ]; then
 +
            do_exec "-stop"
 +
            do_exec
 +
        else
 +
            echo "service not running, will do nothing"
 +
            exit 1
 +
        fi
 +
            ;;
 +
    *)
 +
        echo "usage: $0 {start|stop|restart}" >&2
 +
        exit 3
 +
        ;;
 +
esac
 +
 
 +
</pre>
 +
 
 +
==== More modern approach ====
 +
You create a unit <code>/etc/systemd/system/metro.service</code> (from [https://unix.stackexchange.com/questions/426862/proper-way-to-run-shell-script-as-a-daemon https://unix.stackexchange.com/questions/426862/proper-way-to-run-shell-script-as-a-daemon]).
 +
<pre>
 +
[Unit]
 +
Description=MeCard registration Daemon.
 +
 
 +
[Service]
 +
ExecStart=/usr/bin/metro
 +
Restart=on-failure
 +
 
 +
[Install]
 +
WantedBy=multi-metro.target
 +
To start the demon you run
 +
 
 +
systemctl start metro.service
 +
To start at boot you enable it
 +
 
 +
systemctl enable metro.service
 +
 
 +
</pre>

Revision as of 11:01, 11 April 2019

The Metro service and be installed on hardware, a VM, or even a Docker instance, though to date, no one has done that. The server is dependent on Java in all cases. Specific dependencies are discussed in the Windows or Unix section. Because MeCard.jar is a Java application and so will work on both 32 and 64 bit OSes without change, but the supporting daemon/service support application needs to match the OS.

General notes

The Metro server is a Java application, or appliance that manages the communication between [https://melibraries.ca] and your library's ILS. There are a number of supporting libraries that are shipped with the MeCard.jar file that manage command line arguments, JDBC connections, the Daemon service etc. Some are not required for all sites but all are shipped for simplicity.

  • commons-cli-1.2.jar - included for reading and interpreted to
  • gson-2.2.4.jar - included for possible web services use.
  • commons-codec-1.8.jar - included for possible web services use.
  • fluent-hc-4.3.4.jar - included for possible web services use.
  • httpcore-4.3.2.jar - included for possible web services use.
  • sqljdbc42.jar - included for Horizon and Polaris sites.
  • commons-daemon-1.1.0.jar - used for running the MeCard.jar as a daemon on Unix or a service on Windows.

Windows

There are several batch files used to install the Metro service. They are simple and use Apache's prunsrv.exe, 32 or 64 bit depending on whether you are using a 32 or 64 bit version of Windows. For more information see here for examples.

Installation

There is an installation exe that does install the Metro server (MeCard.jar) on Windows. It was created by Inno Setup compiler.

Unix variants

On Unix, the daemon is jsvc, which should be installed on the host metro server machine.

Installation

Read the jsvc page to install on Unix. Once done the daemon can be started and stopped by creating a /etc/init.d/metro file with permissions -rwxr-xr-x 1 root root. See here

Init.d script

/etc/init.d$ cat metro
#!/bin/sh
### BEGIN INIT INFO
# Provides:          metro
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts and stops the ME server after reboot.
### END INIT INFO

# Author: Andrew Nisbet <anisbet@epl.ca>
#

# Setup variables
DESC="Starts and stops the ME service for Edmonton Public Library (EPL)"
DAEMON=/usr/bin/jsvc
# This is meant to fix a Debian bug found in kernal release
# 4.4.0-81-generic #104-Ubuntu SMP Wed Jun 14 08:17:06 UTC 2017
# that causes jsvc to fail on startup.
export JSVC_EXTRA_OPTS="$JSVC_EXTRA_OPTS -Xss1280k"
JAVA_HOME=/usr/lib/jvm/default-java # lrwxrwxrwx 1 root root 24 Feb 25  2016 /usr/lib/jvm/default-java -> java-1.8.0-openjdk-amd64/
#JAVA_HOME=/usr/lib/jvm/java-7-openjdk #/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
CLASS_PATH="/home/its/metro/dist/lib/commons-daemon-1.0.15.jar":"/home/its/metro/dist/MeCard.jar"
WDPATH=/home/its/metro/logs
PID=$WDPATH/metro.pid
CLASS=mecard.MetroService
USER=its
LOG_OUT=$WDPATH/metro.out
LOG_ERR=$WDPATH/metro.err

# -c tells the service where the config files are located. Valid values are "" or "-c <path>".
#ARGS="-c ../"
ARGS="-c /home/its/metro/config"

do_exec()
{
    $DAEMON -home "$JAVA_HOME" -cp $CLASS_PATH -user $USER -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS $ARGS
}

case "$1" in
    start)
        do_exec
            ;;
    stop)
        do_exec "-stop"
            ;;
    restart)
        if [ -f "$PID" ]; then
            do_exec "-stop"
            do_exec
        else
            echo "service not running, will do nothing"
            exit 1
        fi
            ;;
    *)
        echo "usage: $0 {start|stop|restart}" >&2
        exit 3
        ;;
esac

More modern approach

You create a unit /etc/systemd/system/metro.service (from https://unix.stackexchange.com/questions/426862/proper-way-to-run-shell-script-as-a-daemon).

[Unit]
Description=MeCard registration Daemon.

[Service]
ExecStart=/usr/bin/metro
Restart=on-failure

[Install]
WantedBy=multi-metro.target 
To start the demon you run

systemctl start metro.service 
To start at boot you enable it

systemctl enable metro.service