From d71f8403569e1744cfac02549e8a976fb3512709 Mon Sep 17 00:00:00 2001 From: Chris Pinnock Date: Wed, 6 Dec 2023 09:44:55 +0000 Subject: [PATCH] Packages: Various small fixes to the package scripts to improve them including: Reliably checking PID and log files to avoid spurious errors. No need to wait for bootstrap for Smart Rollup daemons. Ensure correct permissions on log directories. Ensure that the tezos user is created on the Smart Rollup package. --- scripts/dpkg/smartrollup.postinst | 12 +++++++ scripts/pkg-common/baker.conf | 2 +- scripts/pkg-common/baker.initd.in | 48 ++++++++++++++++--------- scripts/pkg-common/signer.initd.in | 2 +- scripts/pkg-common/smartrollup.conf | 6 ++-- scripts/pkg-common/smartrollup.initd.in | 31 +++------------- scripts/pkg-common/vdf.initd.in | 19 ++-------- scripts/rpm/smartrollup-spec.in | 2 ++ 8 files changed, 57 insertions(+), 65 deletions(-) diff --git a/scripts/dpkg/smartrollup.postinst b/scripts/dpkg/smartrollup.postinst index ae06162aaad1..f8cbb3970b38 100644 --- a/scripts/dpkg/smartrollup.postinst +++ b/scripts/dpkg/smartrollup.postinst @@ -1,4 +1,16 @@ #!/bin/sh +user=tezos +group=tezos +homedir=/var/tezos + +# Ensure the tezos user is created +getent group ${group} >/dev/null 2>&1 || addgroup --system ${group} +getent passwd ${user} >/dev/null 2>&1 || adduser --system \ + --home $homedir \ + --shell /bin/bash \ + --disabled-password \ + --ingroup ${group} ${user} + # Reload to get new init scripts /usr/bin/systemctl daemon-reload diff --git a/scripts/pkg-common/baker.conf b/scripts/pkg-common/baker.conf index 53621ac7373c..79843f0381e6 100644 --- a/scripts/pkg-common/baker.conf +++ b/scripts/pkg-common/baker.conf @@ -2,7 +2,7 @@ user=tezos group=tezos -# Wait for Node to bootstrap before starting bakers +# Wait for node waitfornode=yes # Keepalive - don't exit if node disappears (if yes) diff --git a/scripts/pkg-common/baker.initd.in b/scripts/pkg-common/baker.initd.in index 4b4663290911..86b7a8502207 100755 --- a/scripts/pkg-common/baker.initd.in +++ b/scripts/pkg-common/baker.initd.in @@ -37,6 +37,9 @@ rotateonstart=yes protocols="@PROTOCOLS@" waitfornode=yes othercliopts_baker_@PROTOCOL@="" + +nodesetup=local + keepalive=yes keepalive_opt="-K" @@ -52,12 +55,26 @@ accuser="/usr/bin/octez-accuser" [ "${keepalive}" != "yes" ] && keepalive_opt="" + +wait_for_bootstrap() +{ + echo "Waiting for node to be bootstrapped" >&2 + + while :; do + /usr/bin/octez-client bootstrapped >/dev/null 2>&1 && break + echo "Node not ready - sleeping for 30 seconds" >&2 + sleep 30 + done +} + initial_checks() { mkdir -p ${PIDDIR} chown $user:$group ${PIDDIR} mkdir -p ${logdir} + chown $user:$group ${logdir} + if [ -z "$lq_vote" ]; then echo "lq_vote must be set in /etc/octez/baker.conf" >&2 exit 3 @@ -67,18 +84,17 @@ initial_checks() exit 3 fi -} - -wait_for_bootstrap() -{ - echo "Waiting for node to be bootstrapped" >&2 + if [ "$nodesetup" != "local" ]; then + echo "Only local nodes currently supported by the package" >&2 + exit 3 + fi - while :; do - /usr/bin/octez-client bootstrapped >/dev/null 2>&1 && break - echo "Node not ready - sleeping for 30 seconds" >&2 - sleep 30 + if [ ! -d "$nodedir" ] && [ "$nodesetup" = "local" ]; then + echo "$nodedir must be set up with a local running node" >&2 + exit 3 + fi - done + [ "$waitfornode" = "yes" ] && wait_for_bootstrap } @@ -86,8 +102,10 @@ rotate_logs () { if [ ${rotateonstart} = "yes" ]; then for p in ${protocols}; do - mv -f "${logfile_baseb}${p}.log" "${logfile_baseb}${p}.log.1" - mv -f "${logfile_basea}${p}.log" "${logfile_basea}${p}.log.1" + [ -f "${logfile_baseb}${p}.log" ] && \ + mv -f "${logfile_baseb}${p}.log" "${logfile_baseb}${p}.log.1" + [ -f "${logfile_basea}${p}.log" ] && \ + mv -f "${logfile_basea}${p}.log" "${logfile_basea}${p}.log.1" done fi } @@ -95,7 +113,6 @@ rotate_logs () case "$1" in start) initial_checks rotate_logs - [ "$waitfornode" = "yes" ] && wait_for_bootstrap for p in ${protocols}; do [ ! -x "${baker}-$p" ] && continue @@ -106,9 +123,8 @@ start) initial_checks ;; stop) for p in ${protocols}; do - [ ! -x "${baker}-$p" ] && continue - kill "$(cat ${PIDFILEB}-$p)" - kill "$(cat ${PIDFILEA}-$p)" + [ -f "${PIDFILEB}-$p" ] && kill "$(cat ${PIDFILEB}-$p)" + [ -f "${PIDFILEA}-$p" ] && kill "$(cat ${PIDFILEA}-$p)" rm -f ${PIDFILEB}-$p ${PIDFILEA}-$p done ;; diff --git a/scripts/pkg-common/signer.initd.in b/scripts/pkg-common/signer.initd.in index efa82aeaf477..d08d5f191ab0 100755 --- a/scripts/pkg-common/signer.initd.in +++ b/scripts/pkg-common/signer.initd.in @@ -98,7 +98,7 @@ initial_checks() rotate_logs () { if [ ${rotateonstart} = "yes" ]; then - mv -f "${logfile}" "${logfile}.1" + [ -f "${logfile}" ] && mv -f "${logfile}" "${logfile}.1" fi } diff --git a/scripts/pkg-common/smartrollup.conf b/scripts/pkg-common/smartrollup.conf index 889c84c2ea55..6d447d81e101 100644 --- a/scripts/pkg-common/smartrollup.conf +++ b/scripts/pkg-common/smartrollup.conf @@ -3,12 +3,10 @@ #group=tezos # Data directories -#clientdir=~tezos/.tezos-client +#clientdir=/var/tezos/.tezos-client +#rollupdatadir=/var/tezos/.tezos-smart-rollup-node rollupdatadir=/var/tezos/smartrollup -# Wait for Node to bootstrap before starting rollup node -waitfornode=yes - # Assume the node is on the local machine. Change if not. nodeaddr=127.0.0.1 rpcport=8732 diff --git a/scripts/pkg-common/smartrollup.initd.in b/scripts/pkg-common/smartrollup.initd.in index 995b1b5ebe2e..da795778ca3e 100755 --- a/scripts/pkg-common/smartrollup.initd.in +++ b/scripts/pkg-common/smartrollup.initd.in @@ -31,9 +31,9 @@ user=tezos group=tezos nodedir=/var/tezos/node clientdir=~tezos/.tezos-client +rollupdatadir=~tezos/.tezos-smart-rollup-node logdir=/var/log/tezos rotateonstart=yes -waitfornode=yes nodeaddr=127.0.0.1 rpcport=8732 othercliopts_smartrollup="" @@ -52,52 +52,29 @@ initial_checks() chown $user:$group ${PIDDIR} mkdir -p ${logdir} - if [ -z "$rollupdatadir" ]; then - echo "rollupdatadir must be set in /etc/octez/smartrollup.conf" >&2 - exit 3 - fi - if [ -z "$clientdir" ]; then - echo "clientdir must be set" >&2 - exit 3 - fi + chown $user:$group ${logdir} if [ ! -f "$rollupdatadir/config.json" ]; then echo "Rollup not configured" >&2 exit 3 fi -} - -wait_for_bootstrap() -{ - echo "Waiting for node to be bootstrapped" >&2 - - while [ 1 = 1 ]; do - /usr/bin/octez-client -E $nodeurl bootstrapped >/dev/null 2>&1 - [ "$?" = "0" ] && break - echo "Node not ready - sleeping for 30 seconds" >&2 - sleep 30 - done - - - } rotate_logs () { if [ ${rotateonstart} = "yes" ]; then - mv -f "${logfile}" "${logfile}.1" + [ -f "${logfile}" ] && mv -f "${logfile}" "${logfile}.1" fi } case "$1" in start) initial_checks rotate_logs - [ "$waitfornode" = "yes" ] && wait_for_bootstrap su $user -c "${sr} -d "$clientdir" -E $nodeurl run --data-dir "$rollupdatadir" ${othercliopts_smartrollup} >> ${logfile} 2>&1 &" ;; stop) - pkill octez-smart-rollup-node + pkill -f octez-smart-rollup-node ;; restart) $0 stop diff --git a/scripts/pkg-common/vdf.initd.in b/scripts/pkg-common/vdf.initd.in index 790171258f41..b449e3239097 100755 --- a/scripts/pkg-common/vdf.initd.in +++ b/scripts/pkg-common/vdf.initd.in @@ -33,7 +33,6 @@ group=tezos logdir=/var/log/tezos rotateonstart=yes protocols="@PROTOCOLS@" -waitfornode=yes #shellcheck disable=SC1091 [ -r /etc/octez/node.conf ] && . /etc/octez/node.conf @@ -49,19 +48,7 @@ initial_checks() chown $user:$group ${PIDDIR} mkdir -p ${logdir} - -} - -wait_for_bootstrap() -{ - echo "Waiting for node to be bootstrapped" >&2 - - while :; do - /usr/bin/octez-client bootstrapped >/dev/null 2>&1 && break - echo "Node not ready - sleeping for 30 seconds" >&2 - sleep 30 - - done + chown $user:$group ${logdir} } @@ -69,7 +56,8 @@ rotate_logs () { if [ ${rotateonstart} = "yes" ]; then for p in ${protocols}; do - mv -f "${logfile_base}${p}.log" "${logfile_base}${p}.log.1" + [ -f "${logfile_base}${p}.log" ] && \ + mv -f "${logfile_base}${p}.log" "${logfile_base}${p}.log.1" done fi } @@ -77,7 +65,6 @@ rotate_logs () case "$1" in start) initial_checks rotate_logs - [ "$waitfornode" == "yes" ] && wait_for_bootstrap for p in ${protocols}; do [ ! -x "${baker}-$p" ] && continue su $user -c "${baker}-$p run vdf -K >> ${logfile_base}${p}.log 2>&1 & echo \$! > ${PIDFILE}-$p" diff --git a/scripts/rpm/smartrollup-spec.in b/scripts/rpm/smartrollup-spec.in index c1f633ad823d..762d59172cef 100644 --- a/scripts/rpm/smartrollup-spec.in +++ b/scripts/rpm/smartrollup-spec.in @@ -25,4 +25,6 @@ The Octez Smart Rollup daemons %config /etc/octez/smartrollup.conf %post +getent group tezos >/dev/null 2>&1 || groupadd tezos +getent passwd tezos >/dev/null 2>&1 || useradd -g tezos -d /var/tezos tezos /usr/bin/systemctl daemon-reload -- GitLab