|
1 | 1 | #!/bin/bash |
2 | 2 |
|
3 | | -RUNNER_GEN_DIR="${RUNNER_GEN_DIR:-{{ platform_gen_dir }}}" |
4 | | -RELEASE_ROOT_DIR="${RELEASE_ROOT_DIR:-{{ runner_base_dir }}}" |
| 3 | +RUNNER_GEN_DIR={{platform_gen_dir}} |
| 4 | +RELX_RIAK={{platform_bin_dir}}/riak |
5 | 5 | PID_DIR={{pid_dir}} |
6 | | -COMMAND={{platform_bin_dir}}/riak |
7 | | -DEBUG_COMMAND={{platform_bin_dir}}/riak-debug |
8 | | -RUNNER_LOG_DIR={{platform_log_dir}} |
9 | | -RELX_CONFIG_PATH=${RUNNER_GEN_DIR}/sys.config |
10 | | -VMARGS_PATH=${RUNNER_GEN_DIR}/vm.args |
| 6 | +PIPE_DIR={{pipe_dir}}/ # terminating / (relx treats it as a prefix) |
11 | 7 |
|
| 8 | +mkdir -p $PID_DIR $PIPE_DIR |
| 9 | +chown riak:riak $PID_DIR $PIPE_DIR |
12 | 10 |
|
13 | | -# On first running the sys.config and vm.args will not be a link |
14 | | -# as cfconfig has not yet been run as a pre_start hook. If there's no |
15 | | -# link use the default for now |
16 | | -if [ ! -L $RELX_CONFIG_PATH ]; then |
17 | | - cp $RELEASE_ROOT_DIR/releases/{{release_version}}/sys.config $RELX_CONFIG_PATH |
18 | | -fi |
19 | | -if [ ! -L $VMARGS_PATH ]; then |
20 | | - cp $RELEASE_ROOT_DIR/releases/{{release_version}}/vm.args $VMARGS_PATH |
21 | | -fi |
| 11 | +function write_pid_file { # relx doesn't seem to write the pid file, does it? |
| 12 | + local c=3 |
| 13 | + sleep 1 |
| 14 | + while [[ $c -ne 0 ]]; do |
| 15 | + if [ "`maybe_su ${RELX_RIAK} ping`" = "pong" ]; then |
| 16 | + maybe_su ${RELX_RIAK} pid >$PID_DIR/riak.pid |
| 17 | + # systemd wants it to be owned by root, so: |
| 18 | + chown root:root $PID_DIR/riak.pid 2&>1 >/dev/null \ |
| 19 | + || true # if we are run as non-root, just never mind |
| 20 | + break |
| 21 | + fi |
| 22 | + sleep 2 |
| 23 | + c=$(($c - 1)) |
| 24 | + done |
| 25 | +} |
22 | 26 |
|
23 | | -# When running as a service, running as riak not as root, and systemd has created PID folder |
24 | | -if [[ $EUID -ne 0 ]]; then |
25 | | - case "$1" in |
26 | | - start|console|foreground) |
27 | | - RELX_CONFIG_PATH=${RELX_CONFIG_PATH} VMARGS_PATH=${VMARGS_PATH} RUNNER_LOG_DIR=${RUNNER_LOG_DIR} PIPE_DIR=${PIPE_DIR} ${COMMAND} ${*} -pa {{platform_lib_dir}}/patches |
28 | | - ;; |
29 | | - *) |
30 | | - RELX_CONFIG_PATH=${RELX_CONFIG_PATH} VMARGS_PATH=${VMARGS_PATH} RUNNER_LOG_DIR=${RUNNER_LOG_DIR} PIPE_DIR=${PIPE_DIR} ${COMMAND} ${*} |
31 | | - ;; |
32 | | - esac |
33 | | -else |
34 | | - # In this case we're running sudo riak - so have root access, but cannot rely |
35 | | - # systemd having created the PID dir, and need to sudo to the riak user |
36 | | - if [ ! -d $PID_DIR ]; then |
37 | | - mkdir $PID_DIR |
38 | | - chown riak:riak $PID_DIR |
39 | | - fi |
40 | | - case "$1" in |
41 | | - start|console|foreground) |
42 | | - su - riak -c "NODETOOL_NODE_PREFIX=${NODETOOL_NODE_PREFIX} RELX_CONFIG_PATH=${RELX_CONFIG_PATH} VMARGS_PATH=${VMARGS_PATH} RUNNER_LOG_DIR=${RUNNER_LOG_DIR} PIPE_DIR=${PIPE_DIR} ${COMMAND} ${*} -pa {{platform_lib_dir}}/patches" |
43 | | - ;; |
44 | | - debug) |
45 | | - # Drop the "debug" from the args as we're going to directly call riak-debug now |
46 | | - shift |
47 | | - # Debug may fail if run via relx script due to use of relative start location, and also need for root access |
48 | | - NODETOOL_NODE_PREFIX=${NODETOOL_NODE_PREFIX} RELX_CONFIG_PATH=${RELX_CONFIG_PATH} VMARGS_PATH=${VMARGS_PATH} RUNNER_LOG_DIR=${RUNNER_LOG_DIR} PIPE_DIR=${PIPE_DIR} ${DEBUG_COMMAND} ${*} |
49 | | - ;; |
50 | | - *) |
51 | | - ESCAPED_ARGS=`echo "$@" | sed -e 's/\([\\\(\\\){}"\x27]\)/\\\\\1/g'` |
52 | | - su - riak -c "NODETOOL_NODE_PREFIX=${NODETOOL_NODE_PREFIX} RELX_CONFIG_PATH=${RELX_CONFIG_PATH} VMARGS_PATH=${VMARGS_PATH} RUNNER_LOG_DIR=${RUNNER_LOG_DIR} PIPE_DIR=${PIPE_DIR} ${COMMAND} ${ESCAPED_ARGS}" |
53 | | - ;; |
54 | | - esac |
55 | | -fi |
| 27 | +function delete_pid_file { |
| 28 | + rm -f $PID_DIR/riak.pid |
| 29 | +} |
56 | 30 |
|
| 31 | +function maybe_su { |
| 32 | + if [[ $EUID -ne 0 ]]; then |
| 33 | + NODETOOL_NODE_PREFIX=${NODETOOL_NODE_PREFIX} PIPE_DIR=${PIPE_DIR} $* |
| 34 | + else |
| 35 | + # freebsd su is fairly limited, so: |
| 36 | + f=$RUNNER_GEN_DIR/su_piggy |
| 37 | + cat >$f <<EOF |
| 38 | +#!/bin/sh |
| 39 | +NODETOOL_NODE_PREFIX=${NODETOOL_NODE_PREFIX} PIPE_DIR=$PIPE_DIR $* |
| 40 | +EOF |
| 41 | + chmod +x $f |
| 42 | + su - riak $f |
| 43 | + fi |
| 44 | +} |
57 | 45 |
|
| 46 | +case "$1" in |
| 47 | + start) |
| 48 | + maybe_su $RELX_RIAK $* -pa {{runner_patch_dir}} \ |
| 49 | + && write_pid_file |
| 50 | + test -r $PID_DIR/riak.pid && exit 0 |
| 51 | + ;; |
| 52 | + console|foreground) |
| 53 | + maybe_su $RELX_RIAK $* -pa {{runner_patch_dir}} |
| 54 | + ;; |
| 55 | + stop) |
| 56 | + maybe_su $RELX_RIAK $* \ |
| 57 | + && delete_pid_file |
| 58 | + ;; |
| 59 | + admin) |
| 60 | + shift |
| 61 | + maybe_su `which riak-admin` $* |
| 62 | + ;; |
| 63 | + repl) |
| 64 | + shift |
| 65 | + maybe_su `which riak-repl` $* |
| 66 | + ;; |
| 67 | + debug) |
| 68 | + shift |
| 69 | + maybe_su `which riak-debug` $* |
| 70 | + ;; |
| 71 | + *) |
| 72 | + ESCAPED_ARGS=`echo "$@" | sed -e 's/\([\\\(\\\){}"\x27]\)/\\\\\1/g'` |
| 73 | + maybe_su $RELX_RIAK $ESCAPED_ARGS |
| 74 | + ;; |
| 75 | +esac |
0 commit comments