"Fossies" - the Fresh Open Source Software Archive

Member "koha-19.11.15/debian/scripts/koha-z3950-responder" (23 Feb 2021, 9825 Bytes) of package /linux/misc/koha-19.11.15.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Bash source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/bin/bash
    2 #
    3 # Copyright 2015 Theke Solutions
    4 # Copyright 2016 Koha-Suomi
    5 # Copyright 2018 The National Library of Finland, University of Helsinki
    6 #
    7 # This file is part of Koha.
    8 #
    9 # This program is free software: you can redistribute it and/or modify
   10 # it under the terms of the GNU General Public License as published by
   11 # the Free Software Foundation, either version 3 of the License, or
   12 # (at your option) any later version.
   13 #
   14 # This program is distributed in the hope that it will be useful,
   15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
   16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   17 # GNU General Public License for more details.
   18 #
   19 # You should have received a copy of the GNU General Public License
   20 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
   21 
   22 set -e
   23 
   24 . /lib/lsb/init-functions
   25 
   26 # Read configuration variable file if it is present
   27 [ -r /etc/default/koha-common ] && . /etc/default/koha-common
   28 
   29 # include helper functions
   30 if [ -f "/usr/share/koha/bin/koha-functions.sh" ]; then
   31     . "/usr/share/koha/bin/koha-functions.sh"
   32 else
   33     echo "Error: /usr/share/koha/bin/koha-functions.sh not present." 1>&2
   34     exit 1
   35 fi
   36 
   37 usage()
   38 {
   39     local scriptname=$(basename $0)
   40 
   41     cat <<EOF
   42 $scriptname
   43 
   44 This script lets you manage the Z39.50/SRU daemons for your Koha instances.
   45 
   46 Usage:
   47 $scriptname --start|--stop|--restart [--quiet|-q] instancename1 [instancename2...]
   48 $scriptname --enable|--disable instancename1 [instancename2]
   49 $scriptname -h|--help
   50 
   51     --start               Start the Z39.50/SRU daemon for the specified instances
   52     --stop                Stop the Z39.50/SRU daemon for the specified instances
   53     --restart             Restart the Z39.50/SRU daemon for the specified instances
   54     --enable              Enable Z39.50/SRU for the specified instances
   55     --disable             Disable Z39.50/SRU for the specified instances
   56     --debugger            Enable running Z39.50/SRU in debug mode
   57     --debugger-key        Specify the key the IDE is expecting
   58     --debugger-location   Specify the host:port for your debugger tool (defaults
   59                           to localhost:9000)
   60     --debugger-path       Specify the path for the debugger library
   61     --quiet|-q            Make the script quiet about non existent instance names
   62                           (useful for calling from another scripts).
   63     --help|-h             Display this help message
   64 
   65 EOF
   66 }
   67 
   68 start_z3950()
   69 {
   70     local instancename=$1
   71 
   72     local PIDFILE="/var/run/koha/${instancename}/z3950-responder.pid"
   73     local NAME="${instancename}-koha-z3950-responder"
   74     local CONFIGDIR="/etc/koha/z3950"
   75 
   76     if [ -e "/etc/koha/sites/${instancename}/z3950/config.xml" ]; then
   77         # pick instance-specific config dir
   78         CONFIGDIR="/etc/koha/sites/${instancename}/z3950"
   79     fi # else stick with the default one
   80 
   81     _check_and_fix_perms $instancename
   82 
   83     instance_user="${instancename}-koha"
   84 
   85     daemonize="-D -d ${instancename}-koha-z3950"
   86     logging="-l /var/log/koha/${instancename}/z3950.log"
   87 
   88     if [ "$DEV_INSTALL" = "1" ]; then
   89         MISCDIR=$KOHA_HOME/misc
   90     else
   91         MISCDIR=/usr/share/koha/bin
   92     fi
   93 
   94     Z3950RESPONDER="/usr/bin/perl $MISCDIR/z3950_responder.pl"
   95     if [ "$debug_mode" = "yes" ]; then
   96         if [ "$DEV_INSTALL" = "1" ]; then
   97             warn "Not a dev install, disabling debug mode"
   98         else
   99             environment="development"
  100             daemonize=""
  101             logging="" # remote debugger takes care
  102             Z3950RESPONDER="/usr/bin/perl -d ${MISCDIR}/z3950_responder.pl"
  103         fi
  104     fi
  105 
  106     Z3950OPTS="-c ${CONFIGDIR} \
  107                -u ${instance_user} \
  108                -p ${PIDFILE} ${daemonize} ${logging}"
  109 
  110     if ! is_z3950_running ${instancename}; then
  111         export KOHA_CONF="/etc/koha/sites/${instancename}/koha-conf.xml"
  112 
  113         log_daemon_msg "Starting Z39.50/SRU daemon for ${instancename}"
  114 
  115         # Change to the instance's user dir
  116         current_dir=$(pwd)
  117         eval cd ~$instance_user
  118 
  119         if ${Z3950RESPONDER} ${Z3950OPTS}; then
  120             log_end_msg 0
  121         else
  122             log_end_msg 1
  123         fi
  124         # Go back to the original dir
  125         cd "$current_dir"
  126 
  127     else
  128         log_daemon_msg "Error: Z39.50/SRU already running for ${instancename}"
  129         log_end_msg 1
  130     fi
  131 }
  132 
  133 stop_z3950()
  134 {
  135     local instancename=$1
  136 
  137     local PIDFILE="/var/run/koha/${instancename}/z3950-responder.pid"
  138 
  139     if is_z3950_running ${instancename}; then
  140 
  141         log_daemon_msg "Stopping Z39.50/SRU daemon for ${instancename}"
  142 
  143         if start-stop-daemon --pidfile ${PIDFILE} --stop --retry=TERM/30/KILL/5; then
  144             log_end_msg 0
  145         else
  146             log_end_msg 1
  147         fi
  148     else
  149         log_daemon_msg "Error: Z39.50/SRU not running for ${instancename}"
  150         log_end_msg 1
  151     fi
  152 }
  153 
  154 restart_z3950()
  155 {
  156     local instancename=$1
  157 
  158     local PIDFILE="/var/run/koha/${instancename}/z3950.pid"
  159 
  160     if is_z3950_running ${instancename}; then
  161 
  162         log_daemon_msg "Restarting Z39.50/SRU daemon for ${instancename}"
  163 
  164         if stop_z3950 $instancename && start_z3950 $instancename; then
  165             log_end_msg 0
  166         else
  167             log_end_msg 1
  168         fi
  169     else
  170         log_daemon_msg "Error: Z39.50/SRU not running for ${instancename}"
  171         log_end_msg 1
  172     fi
  173 }
  174 
  175 enable_z3950()
  176 {
  177     local instancename=$1
  178 
  179     if [ ! -e /etc/koha/sites/${instancename}/koha-conf.xml ] ;
  180     then
  181         echo "No such instance: ${instancename}" > /dev/stderr
  182         return 1
  183     fi
  184 
  185     local configdir=/etc/koha/sites/${instancename}/z3950
  186     if [ -e ${configdir}/config.xml ]
  187     then
  188         [ "${quiet}" != "yes" ] && warn "Z39.50/SRU already enabled for $name"
  189         return 1
  190     fi
  191 
  192     if [ ! -e ${configdir} ]
  193     then
  194         mkdir ${configdir}
  195     fi
  196     cp /etc/koha/z3950/* ${configdir}/
  197     chown ${name}-koha:${name}-koha ${configdir}/*
  198     chmod 600 ${configdir}/*
  199 
  200     [ "${quiet}" != "yes" ] && warn "Z39.50/SRU enabled for $name - edit files in ${configdir} to configure"
  201     return 0
  202 }
  203 
  204 disable_z3950()
  205 {
  206     local instancename=$1
  207 
  208     if is_z3950_enabled $instancename; then
  209         local configdir=/etc/koha/sites/${instancename}/z3950
  210         mv ${configdir} ${configdir}.`date +%F_%T`
  211         [ "${quiet}" != "yes" ] && warn "Z39.50/SRU disabled for ${instancename}"
  212         return 0
  213     else
  214         [ "${quiet}" != "yes" ] && warn "Z39.50/SRU already disabled for ${instancename}"
  215         return 1
  216     fi
  217 }
  218 
  219 _check_and_fix_perms()
  220 {
  221     local instance=$1
  222 
  223     local files="/var/log/koha/${instance}/z3950.log"
  224 
  225     for file in ${files}
  226     do
  227         if [ ! -e "${file}" ]; then
  228             touch ${file}
  229         fi
  230         chown "${instance}-koha":"${instance}-koha" ${file}
  231     done
  232 }
  233 
  234 set_action()
  235 {
  236     if [ "$op" = "" ]; then
  237         op=$1
  238     else
  239         die "Error: only one action can be specified."
  240     fi
  241 }
  242 
  243 op=""
  244 quiet="no"
  245 debug_mode="no"
  246 debugger_key=""
  247 debugger_location="localhost:9000"
  248 debugger_path=""
  249 
  250 # Read command line parameters
  251 while [ $# -gt 0 ]; do
  252 
  253     case "$1" in
  254         -h|--help)
  255             usage ; exit 0 ;;
  256         -q|--quiet)
  257             quiet="yes"
  258             shift ;;
  259         --start)
  260             set_action "start"
  261             shift ;;
  262         --stop)
  263             set_action "stop"
  264             shift ;;
  265         --restart)
  266             set_action "restart"
  267             shift ;;
  268         --enable)
  269             set_action "enable"
  270             shift ;;
  271         --disable)
  272             set_action "disable"
  273             shift ;;
  274         --debugger)
  275             debug_mode="yes"
  276             shift ;;
  277         --debugger-key)
  278             debugger_key="$2"
  279             shift 2 ;;
  280         --debugger-location)
  281             debugger_location="$2"
  282             shift 2 ;;
  283         --debugger-path)
  284             debugger_path="$2"
  285             shift 2 ;;
  286         -*)
  287             die "Error: invalid option switch ($1)" ;;
  288         *)
  289             # We expect the remaining stuff are the instance names
  290             break ;;
  291     esac
  292 
  293 done
  294 
  295 if [ $# -gt 0 ]; then
  296     # We have at least one instance name
  297     for name in "$@"; do
  298 
  299         if is_instance $name; then
  300 
  301             adjust_paths_dev_install $name
  302             export DEV_INSTALL
  303             export KOHA_HOME
  304             PERL5LIB=$PERL5LIB:$KOHA_HOME/installer:$KOHA_HOME/lib/installer
  305             # If debug mode is enabled, add the debugger lib path
  306             # to PERL5LIB if appropriate
  307             if [ "$debug_mode" = "yes" ]; then
  308                 if [ "$debugger_path" != "" ]; then
  309                     PERL5LIB="${debugger_path}":$PERL5LIB
  310                 fi
  311                 export PERL5DB="BEGIN { require q(${debugger_path}/perl5db.pl) }"
  312                 export PERLDB_OPTS="RemotePort=${debugger_location} async=1 LogFile=/var/log/koha/${name}/z3950-debug.log"
  313                 export DBGP_IDEKEY=${debugger_key}
  314                 export PERL5OPT="-d"
  315             fi
  316 
  317             export PERL5LIB
  318 
  319             case $op in
  320                 "start")
  321                     start_z3950 $name
  322                     ;;
  323                 "stop")
  324                     stop_z3950 $name
  325                     ;;
  326                 "restart")
  327                     restart_z3950 $name
  328                     ;;
  329                 "enable")
  330                     enable_z3950 $name
  331                     ;;
  332                 "disable")
  333                     disable_z3950 $name
  334                     ;;
  335                 *)
  336                     usage
  337                     ;;
  338             esac
  339 
  340         else
  341             if [ "$quiet" = "no" ]; then
  342                 log_daemon_msg "Error: Invalid instance name $name"
  343                 log_end_msg 1
  344             fi
  345         fi
  346 
  347     done
  348 else
  349     if [ "$quiet" = "no" ]; then
  350         warn "Error: you must provide at least one instance name"
  351     fi
  352 fi
  353 
  354 exit 0