From 51f525e8424f445a4daeb5cdeba7ceb89cd9ad02 Mon Sep 17 00:00:00 2001 From: LV-426 Date: Mon, 27 Apr 2015 16:31:33 +0300 Subject: wip: widen tool scope: neo4j-mux -> rz-mux --- res/neo4j/neo4j-mux/README | 1 - .../conf-template.d/neo4j-server.properties.jinja | 16 --- .../neo4j-service_deomain-init-script.jinja | 135 ------------------- .../conf-template.d/neo4j.properties.jinja | 5 - res/rz-mux/README | 1 + .../neo4j-server.properties.jinja | 16 +++ .../neo4j-service_deomain-init-script.jinja | 135 +++++++++++++++++++ .../neo4j-conf-template.d/neo4j.properties.jinja | 5 + src/local/neo4j-mux/neo4j-mux-installer.sh | 97 -------------- src/local/neo4j-mux/neo4j-mux-tool.py | 51 -------- src/local/rz-mux/rz-mux-tool.py | 89 +++++++++++++ src/local/rz-mux/rz-mux-tool.sh | 143 +++++++++++++++++++++ 12 files changed, 389 insertions(+), 305 deletions(-) delete mode 100644 res/neo4j/neo4j-mux/README delete mode 100644 res/neo4j/neo4j-mux/conf-template.d/neo4j-server.properties.jinja delete mode 100755 res/neo4j/neo4j-mux/conf-template.d/neo4j-service_deomain-init-script.jinja delete mode 100644 res/neo4j/neo4j-mux/conf-template.d/neo4j.properties.jinja create mode 100644 res/rz-mux/README create mode 100644 res/rz-mux/neo4j-conf-template.d/neo4j-server.properties.jinja create mode 100755 res/rz-mux/neo4j-conf-template.d/neo4j-service_deomain-init-script.jinja create mode 100644 res/rz-mux/neo4j-conf-template.d/neo4j.properties.jinja delete mode 100644 src/local/neo4j-mux/neo4j-mux-installer.sh delete mode 100644 src/local/neo4j-mux/neo4j-mux-tool.py create mode 100644 src/local/rz-mux/rz-mux-tool.py create mode 100644 src/local/rz-mux/rz-mux-tool.sh diff --git a/res/neo4j/neo4j-mux/README b/res/neo4j/neo4j-mux/README deleted file mode 100644 index d2e7bdda..00000000 --- a/res/neo4j/neo4j-mux/README +++ /dev/null @@ -1 +0,0 @@ -multiplexed neo4j configuration templates diff --git a/res/neo4j/neo4j-mux/conf-template.d/neo4j-server.properties.jinja b/res/neo4j/neo4j-mux/conf-template.d/neo4j-server.properties.jinja deleted file mode 100644 index e56ddf91..00000000 --- a/res/neo4j/neo4j-mux/conf-template.d/neo4j-server.properties.jinja +++ /dev/null @@ -1,16 +0,0 @@ -# ----------------------------------------------------------------------------- -# Neo4j server configuration -# -dbms.security.auth_enabled=false -org.neo4j.server.database.location=data/graph.db -org.neo4j.server.db.tuning.properties=conf/neo4j.properties -org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml -org.neo4j.server.http.log.enabled=false -org.neo4j.server.webadmin.rrdb.location=data/rrd -org.neo4j.server.webserver.https.cert.location=conf/ssl/snakeoil.cert -org.neo4j.server.webserver.https.enabled=true -org.neo4j.server.webserver.https.key.location=conf/ssl/snakeoil.key -org.neo4j.server.webserver.https.keystore.location=data/keystore -org.neo4j.server.webserver.https.port={{ org_neo4j_server_webserver_https_port }} -org.neo4j.server.webserver.port={{ org_neo4j_server_webserver_port }} - diff --git a/res/neo4j/neo4j-mux/conf-template.d/neo4j-service_deomain-init-script.jinja b/res/neo4j/neo4j-mux/conf-template.d/neo4j-service_deomain-init-script.jinja deleted file mode 100755 index 55b1ad01..00000000 --- a/res/neo4j/neo4j-mux/conf-template.d/neo4j-service_deomain-init-script.jinja +++ /dev/null @@ -1,135 +0,0 @@ -#! /bin/sh - -### BEGIN INIT INFO -# Provides: neo4j__{{ domain_name }} -# Required-Start: $remote_fs $syslog $network -# Required-Stop: $remote_fs $syslog -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Neo4j Graph Database server -# Description: Neo4j is a Graph Database, which is a compelling -# alternative to an RDBMS. http://www.neo4j.org -### END INIT INFO - -# Author: Julian Simpson -# -# Copyright (c) 2002-2015 "Neo Technology," - -# Network Engine for Objects in Lund AB [http://neotechnology.com] -# -# This file is part of Neo4j. -# -# Neo4j is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see - -PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC="Neo4j Graph Database" -NAME=neo4j__{{ domain_name }} -DAEMON=/var/lib/neo4j/instance-root.d/{{ domain_name }}/bin/neo4j -DAEMON_ARGS="start" -PIDFILE=/var/lib/neo4j/instance-root.d/{{ domain_name }}/data/neo4j-service.pid -SCRIPTNAME=/etc/init.d/neo4j-service__{{ domain_name }} - -NEO_USER=neo4j - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/$NAME ] && . /etc/default/$NAME - -# Load the VERBOSE setting and other rcS variables -. /lib/init/vars.sh - -# Define LSB log_* functions. -. /lib/lsb/init-functions - -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # 2 if daemon could not be started - start-stop-daemon --chuid ${NEO_USER} --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ - || return 1 - start-stop-daemon --chuid ${NEO_USER} --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ - $DAEMON_ARGS \ - || return 2 -} - -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # 2 if daemon could not be stopped - # other if a failure occurred - start-stop-daemon --chuid ${NEO_USER} --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE - RETVAL="$?" - [ "$RETVAL" = 2 ] && return 2 - - start-stop-daemon --chuid ${NEO_USER} --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON - [ "$?" = 2 ] && return 2 - # Many daemons don't delete their pidfiles when they exit. - rm -f $PIDFILE - return "$RETVAL" -} - -# Ensure that the NEO_USER is set to a useful default. -[ -n "${NEO_USER}" ] || NEO_USER=$NAME - -case "$1" in - start) - [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - stop) - [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - status) - status_of_proc -p $PIDFILE "$DAEMON" "$NAME" && exit 0 || exit $? - ;; - restart|force-reload) - log_daemon_msg "Restarting $DESC" "$NAME" - do_stop - case "$?" in - 0|1) - do_start - case "$?" in - 0) log_end_msg 0 ;; - 1) log_end_msg 1 ;; # Old process is still running - *) log_end_msg 1 ;; # Failed to start - esac - ;; - *) - # Failed to stop - log_end_msg 1 - ;; - esac - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 - exit 3 - ;; -esac - -: diff --git a/res/neo4j/neo4j-mux/conf-template.d/neo4j.properties.jinja b/res/neo4j/neo4j-mux/conf-template.d/neo4j.properties.jinja deleted file mode 100644 index 580da87f..00000000 --- a/res/neo4j/neo4j-mux/conf-template.d/neo4j.properties.jinja +++ /dev/null @@ -1,5 +0,0 @@ -# ----------------------------------------------------------------------------- -# Neo4j configuration -# -remote_shell_port={{ remote_shell_port }} - diff --git a/res/rz-mux/README b/res/rz-mux/README new file mode 100644 index 00000000..d2e7bdda --- /dev/null +++ b/res/rz-mux/README @@ -0,0 +1 @@ +multiplexed neo4j configuration templates diff --git a/res/rz-mux/neo4j-conf-template.d/neo4j-server.properties.jinja b/res/rz-mux/neo4j-conf-template.d/neo4j-server.properties.jinja new file mode 100644 index 00000000..e56ddf91 --- /dev/null +++ b/res/rz-mux/neo4j-conf-template.d/neo4j-server.properties.jinja @@ -0,0 +1,16 @@ +# ----------------------------------------------------------------------------- +# Neo4j server configuration +# +dbms.security.auth_enabled=false +org.neo4j.server.database.location=data/graph.db +org.neo4j.server.db.tuning.properties=conf/neo4j.properties +org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml +org.neo4j.server.http.log.enabled=false +org.neo4j.server.webadmin.rrdb.location=data/rrd +org.neo4j.server.webserver.https.cert.location=conf/ssl/snakeoil.cert +org.neo4j.server.webserver.https.enabled=true +org.neo4j.server.webserver.https.key.location=conf/ssl/snakeoil.key +org.neo4j.server.webserver.https.keystore.location=data/keystore +org.neo4j.server.webserver.https.port={{ org_neo4j_server_webserver_https_port }} +org.neo4j.server.webserver.port={{ org_neo4j_server_webserver_port }} + diff --git a/res/rz-mux/neo4j-conf-template.d/neo4j-service_deomain-init-script.jinja b/res/rz-mux/neo4j-conf-template.d/neo4j-service_deomain-init-script.jinja new file mode 100755 index 00000000..55b1ad01 --- /dev/null +++ b/res/rz-mux/neo4j-conf-template.d/neo4j-service_deomain-init-script.jinja @@ -0,0 +1,135 @@ +#! /bin/sh + +### BEGIN INIT INFO +# Provides: neo4j__{{ domain_name }} +# Required-Start: $remote_fs $syslog $network +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Neo4j Graph Database server +# Description: Neo4j is a Graph Database, which is a compelling +# alternative to an RDBMS. http://www.neo4j.org +### END INIT INFO + +# Author: Julian Simpson +# +# Copyright (c) 2002-2015 "Neo Technology," + +# Network Engine for Objects in Lund AB [http://neotechnology.com] +# +# This file is part of Neo4j. +# +# Neo4j is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see + +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC="Neo4j Graph Database" +NAME=neo4j__{{ domain_name }} +DAEMON=/var/lib/neo4j/instance-root.d/{{ domain_name }}/bin/neo4j +DAEMON_ARGS="start" +PIDFILE=/var/lib/neo4j/instance-root.d/{{ domain_name }}/data/neo4j-service.pid +SCRIPTNAME=/etc/init.d/neo4j-service__{{ domain_name }} + +NEO_USER=neo4j + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +. /lib/lsb/init-functions + +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --chuid ${NEO_USER} --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --chuid ${NEO_USER} --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ + $DAEMON_ARGS \ + || return 2 +} + +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --chuid ${NEO_USER} --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + + start-stop-daemon --chuid ${NEO_USER} --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +# Ensure that the NEO_USER is set to a useful default. +[ -n "${NEO_USER}" ] || NEO_USER=$NAME + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc -p $PIDFILE "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + restart|force-reload) + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/res/rz-mux/neo4j-conf-template.d/neo4j.properties.jinja b/res/rz-mux/neo4j-conf-template.d/neo4j.properties.jinja new file mode 100644 index 00000000..580da87f --- /dev/null +++ b/res/rz-mux/neo4j-conf-template.d/neo4j.properties.jinja @@ -0,0 +1,5 @@ +# ----------------------------------------------------------------------------- +# Neo4j configuration +# +remote_shell_port={{ remote_shell_port }} + diff --git a/src/local/neo4j-mux/neo4j-mux-installer.sh b/src/local/neo4j-mux/neo4j-mux-installer.sh deleted file mode 100644 index ea18ff41..00000000 --- a/src/local/neo4j-mux/neo4j-mux-installer.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash - -# -# Multiplexed Neo4J instance installer -# -# generated config dir structure: -# -# /etc/neo4j/mux-conf.d/ -# └── dom-x -# ├── neo4j.properties -# ├── neo4j-server.properties -# └── ... -# -# generated root dir structure: -# -# /var/lib/neo4j/mux-root.d/ -# └── dom-x -# ├── data/ -# ├── bin -> /var/lib/neo4j/bin -# ├── conf -> /etc/neo4j/mux-conf.d/dom-y -# ├── lib -> /usr/share/neo4j/lib -# ├── plugins -> /usr/share/neo4j/plugins -# └── system -> /usr/share/neo4j/system -# - -die() { - echo $1 1>&2; exit 1 -} - -install_neo4j_instance() { - - [[ -e "/etc/init.d/${RZ_NEO4J_SVC_NAME}" ]] && die "${RZ_NEO4J_SVC_NAME} already installed." - - install -v --owner=${NEO4J_USER} --group=adm --directory /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} - install -v --owner=${NEO4J_USER} --group=adm --directory /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} - install -v --owner=${NEO4J_USER} --group=adm --directory /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME}/ssl - install -v --owner=${NEO4J_USER} --group=adm --directory /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME} - install -v --owner=${NEO4J_USER} --group=adm --directory /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/data - - cp /etc/neo4j/custom-logback.xml \ - /etc/neo4j/jmx.access \ - /etc/neo4j/jmx.password \ - /etc/neo4j/logging.properties \ - /etc/neo4j/neo4j-http-logging.xml \ - /etc/neo4j/neo4j.properties \ - /etc/neo4j/neo4j-server.properties \ - /etc/neo4j/neo4j-wrapper.conf \ - /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} - - cp /etc/neo4j/custom-logback.xml \ - /etc/neo4j/ssl/snakeoil.cert \ - /etc/neo4j/ssl/snakeoil.key \ - /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME}/ssl - - ln -vs /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} -T /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/conf - ln -vs /var/lib/neo4j/bin -T /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/bin - ln -vs /usr/share/neo4j/lib -T /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/lib - ln -vs /usr/share/neo4j/plugins -T /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/plugins - ln -vs /usr/share/neo4j/system -T /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/system - - python /tmp/neo-m/neo4j-mux-tool.py --domain ${RZ_INSTANCE_NAME} -} - -DEFAULT_USER='neo4j' - -NEO4J_HOME=`(cd $(dirname $0)/.. && pwd)` -NEO4J_USER=neo4j - -SCRIPT_NAME="${NEO4J_HOME}/bin/neo4j" - -RZ_NEO4J_SVC_NAME='neo4j-service__domain-x' -SVC_INIT_SCRIPT_PATH=/etc/init.d/${RZ_NEO4J_SVC_NAME} - -PID_FILE=/var/run/${RZ_NEO4J_SVC_NAME} - -RZ_INSTANCE_NAME=$2 - -[ $UID != 0 ] && die 'must be root to continue.' -[ -z ${RZ_INSTANCE_NAME} ] && die 'RZ_INSTANCE_NAME arg missing, aborting' -[ -e "$PID_FILE" ] && die '${RZ_NEO4J_SVC_NAME} already running, please stop it before continuing' - -case $1 in - install) - install_neo4j_instance - - tree /var/lib/neo4j/mux-root.d/ - tree /etc/neo4j/mux-conf.d/ - ;; - uninstall) - rm ${SVC_INIT_SCRIPT_PATH} - rm -rf /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} - rm -rf /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME} - ;; - *) - echo "Usage: $0 " - ;; -esac \ No newline at end of file diff --git a/src/local/neo4j-mux/neo4j-mux-tool.py b/src/local/neo4j-mux/neo4j-mux-tool.py deleted file mode 100644 index aec2902f..00000000 --- a/src/local/neo4j-mux/neo4j-mux-tool.py +++ /dev/null @@ -1,51 +0,0 @@ -""" - Multiplexed-Neo4J instance configuration generator -""" -import argparse -from jinja2 import Environment, FileSystemLoader -import os -import random - -def gen_neo4j_domain_config(target_dir, domain_name): - """ - Generate domain-specific neo4j configuration file set - """ - - class Template_Task(): - def __init__(self, template_name, dst_path, kv_set): - self.template_name = template_name - self.dst_path = dst_path - self.kv_set = kv_set - - port_seed = 10000 + random.randint(1000, 1990) - conf_task_arr = [Template_Task('neo4j-server.properties.jinja', - os.path.join(target_dir, 'neo4j-server.properties'), - {'org_neo4j_server_webserver_https_port': port_seed, - 'org_neo4j_server_webserver_port': port_seed + 1}), - Template_Task('neo4j.properties.jinja', - os.path.join(target_dir, 'neo4j.properties'), - {'remote_shell_port': port_seed + 2}), - Template_Task('neo4j-service_deomain-init-script.jinja', - '/etc/init.d/neo4j-service__%s' % (domain_name), - {'domain_name': domain_name}), - ] - - for conf_task_obj in conf_task_arr: - tmpl = env.get_template(conf_task_obj.template_name) - - with open(conf_task_obj.dst_path, 'w') as f_out: - f_out.write(tmpl.render(**conf_task_obj.kv_set)) - print('neo4j-mux-tool: generated: %s' % (f_out.name)) - - os.chmod('/etc/init.d/neo4j-service__%s' % (domain_name), 00755) - -if __name__ == '__main__': - global env - - p = argparse.ArgumentParser(description='rz-cli tool') - p.add_argument('-d', '--domain', required=True, help='target domain name') - args = p.parse_args() - - env = Environment(loader=FileSystemLoader('conf-template.d')) - gen_neo4j_domain_config(target_dir=os.path.join('/etc/neo4j/instance-conf.d/%s/' % (args.domain)), - domain_name=args.domain) diff --git a/src/local/rz-mux/rz-mux-tool.py b/src/local/rz-mux/rz-mux-tool.py new file mode 100644 index 00000000..9c5ad9c0 --- /dev/null +++ b/src/local/rz-mux/rz-mux-tool.py @@ -0,0 +1,89 @@ +""" + Multiplexed-Rhizi instance configuration generator: + - setup Neo4J domain instance + - setup Rhizi domain instance +""" +import argparse +from jinja2 import Environment, FileSystemLoader +import os +import pwd +import random + + +class Template_Task(): + + def __init__(self, template_path, dst_path, kv_set): + self.jinja_tmpl = env.get_template(template_path) + self.dst_path = dst_path + self.kv_set = kv_set + + def do_exec(self): + + dst_dir = os.path.dirname(self.dst_path) + if not os.path.exists(dst_dir): + print('rz-mux-tool: warning: target dir missing, installing: %s, please adjust usr/grp' % (dst_dir)) + os.makedirs(dst_dir) + + with open(self.dst_path, 'w') as f_out: + f_out.write(self.jinja_tmpl.render(**self.kv_set)) + + print('rz-mux-tool: generated: %s' % (f_out.name)) + +def gen_dom_config__neo4j(domain_name): + """ + Generate domain-specific neo4j configuration file set + """ + + neo4j_template_path_prefix = 'neo4j-conf-template.d' + target_dir = os.path.join('etc/neo4j/instance-conf.d', args.domain) + port_seed = 10000 + random.randint(1000, 9990) + + conf_task_set = [Template_Task(os.path.join(neo4j_template_path_prefix, 'neo4j-server.properties.jinja'), + os.path.join(install_prefix, target_dir, 'neo4j-server.properties'), + {'org_neo4j_server_webserver_https_port': port_seed, + 'org_neo4j_server_webserver_port': port_seed + 1}), + Template_Task(os.path.join(neo4j_template_path_prefix, 'neo4j.properties.jinja'), + os.path.join(install_prefix, target_dir, 'neo4j.properties'), + {'remote_shell_port': port_seed + 2}), + Template_Task(os.path.join(neo4j_template_path_prefix, 'neo4j-service_deomain-init-script.jinja'), + os.path.join(install_prefix, 'etc/init.d/', 'neo4j-service__%s' % (domain_name)), + {'domain_name': domain_name}), + ] + + for conf_task_obj in conf_task_set: + conf_task_obj.do_exec() + +def gen_dom_config__apache(domain_name): + """ + Generate domain-specific neo4j configuration file set + """ + apache_template_path_prefix = 'apache-conf-template.d' + rhizi_top_domain_name = 'rhizi.net' + domain_fqdn = '%s.%s' % (domain_name, rhizi_top_domain_name) + + conf_task_set = [Template_Task(os.path.join(apache_template_path_prefix, 'x.%s.conf' % (rhizi_top_domain_name)), + os.path.join(install_prefix, 'etc/apache/sites-available', domain_fqdn), + {'domain_name': domain_name}), + ] + + for conf_task_obj in conf_task_set: + conf_task_obj.do_exec() + +def gen_dom_config__rhizi(domain_name): + pass + +if __name__ == '__main__': + global env + global install_prefix + + p = argparse.ArgumentParser(description='rz-cli tool') + p.add_argument('-d', '--domain', required=True, help='target domain name') + p.add_argument('--install-prefix', default='/', help='install dir path prefix, default=\'/\'') + p.add_argument('--template-dir', default='conf-template.d', help='path to template dir') # default devied from installed pkg layout + args = p.parse_args() + + install_prefix = args.install_prefix + + env = Environment(loader=FileSystemLoader(args.template_dir)) + gen_dom_config__neo4j(domain_name=args.domain) + gen_dom_config__apache(domain_name=args.domain) diff --git a/src/local/rz-mux/rz-mux-tool.sh b/src/local/rz-mux/rz-mux-tool.sh new file mode 100644 index 00000000..5dc597f0 --- /dev/null +++ b/src/local/rz-mux/rz-mux-tool.sh @@ -0,0 +1,143 @@ +#!/bin/bash + +# +# Multiplexed Neo4J instance installer +# +# generated config dir structure: +# +# /etc/neo4j/mux-conf.d/ +# └── dom-x +# ├── neo4j.properties +# ├── neo4j-server.properties +# └── ... +# +# generated root dir structure: +# +# /var/lib/neo4j/mux-root.d/ +# └── dom-x +# ├── data/ +# ├── bin -> /var/lib/neo4j/bin +# ├── conf -> /etc/neo4j/mux-conf.d/dom-y +# ├── lib -> /usr/share/neo4j/lib +# ├── plugins -> /usr/share/neo4j/plugins +# └── system -> /usr/share/neo4j/system +# + +die() { + echo $1 1>&2; exit 1 +} + +install_instance__neo4j() { + + [[ -e "/etc/init.d/${RZ_NEO4J_SVC_NAME}" ]] && die "${RZ_NEO4J_SVC_NAME} already installed." + + install -v --owner=${NEO4J_USER} --group=adm --directory /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} + install -v --owner=${NEO4J_USER} --group=adm --directory /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} + install -v --owner=${NEO4J_USER} --group=adm --directory /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME}/ssl + install -v --owner=${NEO4J_USER} --group=adm --directory /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME} + install -v --owner=${NEO4J_USER} --group=adm --directory /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/data + + cp /etc/neo4j/custom-logback.xml \ + /etc/neo4j/jmx.access \ + /etc/neo4j/jmx.password \ + /etc/neo4j/logging.properties \ + /etc/neo4j/neo4j-http-logging.xml \ + /etc/neo4j/neo4j.properties \ + /etc/neo4j/neo4j-server.properties \ + /etc/neo4j/neo4j-wrapper.conf \ + /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} + + cp /etc/neo4j/custom-logback.xml \ + /etc/neo4j/ssl/snakeoil.cert \ + /etc/neo4j/ssl/snakeoil.key \ + /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME}/ssl + + ln -vs -T /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/conf + ln -vs -T /var/lib/neo4j/bin /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/bin + ln -vs -T /usr/share/neo4j/lib /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/lib + ln -vs -T /usr/share/neo4j/plugins /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/plugins + ln -vs -T /usr/share/neo4j/system /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME}/system + + python /tmp/neo-m/neo4j-mux-tool.py --domain ${RZ_INSTANCE_NAME} + + # set modes, ownership + chmod +x ${SVC_INIT_SCRIPT_PATH} +} + +install_instance__apache() { + install -v --owner=${APACHE_USER} --group=${APACHE_USER} --directory /srv/rhizi/mux-root.d/${RZ_INSTANCE_NAME} + install -v --owner=${APACHE_USER} --group=${APACHE_USER} --directory /srv/rhizi/mux-root.d/${RZ_INSTANCE_NAME}/webapp + install -v --owner=${APACHE_USER} --group=${APACHE_USER} --directory /srv/rhizi/mux-root.d/${RZ_INSTANCE_NAME}/auth + + ln -vs -T /etc/rhizi/mux-conf.d/${RZ_INSTANCE_NAME} /srv/rhizi/mux-root.d/${RZ_INSTANCE_NAME}/webapp/etc + ln -vs -T /usr/share/rhizi/webapp/static/ /srv/rhizi/mux-root.d/${RZ_INSTANCE_NAME}/webapp/static + ln -vs -T /usr/share/rhizi/webapp/templates/ /srv/rhizi/mux-root.d/${RZ_INSTANCE_NAME}/webapp/templates + + apache_site_conf=${RZ_INSTANCE_NAME}.${RZ_TOP_DOMAIN_NAME} + ln -vs -T /etc/apache/sites-available/${apache_site_conf} /etc/apache/sites-enabled/${apache_site_conf} + ln -vs -T /etc/apache/sites-available/${apache_site_conf} /etc/apache/sites-enabled/${apache_site_conf} +} + +install_instance__rz() { + install -v --owner=${NEO4J_USER} --group=adm --directory /etc/rhizi/mux-conf.d/${RZ_INSTANCE_NAME} + + cp /etc/rhizi/rhizi-server.conf.example /etc/rhizi/mux-conf.d/${RZ_INSTANCE_NAME}/ +} + +uninstall_instance__apache() { + rm -rvf /srv/rhizi/mux-root.d/${RZ_INSTANCE_NAME} +} + +uninstall_instance__neo4j() { + rm ${SVC_INIT_SCRIPT_PATH} + rm -rf /etc/neo4j/mux-conf.d/${RZ_INSTANCE_NAME} + rm -rf /var/lib/neo4j/mux-root.d/${RZ_INSTANCE_NAME} +} + +uninstall_instance__rz() { + rm -rvf /etc/rhizi/mux-conf.d/${RZ_INSTANCE_NAME} +} + +DEFAULT_USER='neo4j' + +NEO4J_HOME=`(cd $(dirname $0)/.. && pwd)` +NEO4J_USER=neo4j + +APACHE_USER=www-data + +SCRIPT_NAME="${NEO4J_HOME}/bin/neo4j" + +RZ_TOP_DOMAIN_NAME=rhizi.net +RZ_NEO4J_SVC_NAME='neo4j-service__domain-x' +SVC_INIT_SCRIPT_PATH=/etc/init.d/${RZ_NEO4J_SVC_NAME} + +PID_FILE=/var/run/${RZ_NEO4J_SVC_NAME} + +RZ_INSTANCE_NAME=$2 + +[ $UID != 0 ] && die 'must be root to continue.' +[ -z ${RZ_INSTANCE_NAME} ] && die 'RZ_INSTANCE_NAME arg missing, aborting' +[ -e "$PID_FILE" ] && die '${RZ_NEO4J_SVC_NAME} already running, please stop it before continuing' + +case $1 in + install) + install_instance__apache + install_instance__neo4j + install_instance__rz + + tree /srv/www/rhizi/ + tree /var/lib/neo4j/mux-root.d/ + tree /etc/neo4j/mux-conf.d/ + tree /srv/www/rhizi/mux-root.d/ + + echo "please edit & enable rz_config at /etc/rhizi/mux-conf.d/${RZ_INSTANCE_NAME}/" + ;; + uninstall) + uninstall_instance__apache + uninstall_instance__neo4j + uninstall_instance__rz + ;; + *) + echo "Usage: $0 " + ;; +esac -- cgit v1.3.1