From 4a9f34f2ac725208125090cda47281b1fb3b5271 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 25 Jul 2024 19:18:56 +0200 Subject: [PATCH 01/16] Drop service wrappers These service wrappers only replicate the default systemd behavior. Running it directly simplifies it greatly because it also drops the need to manage the rundir, which systemd will now take care of for us. Signed-off-by: Tim Meusel --- .../project_data.yaml.mustache | 3 - .../template/global/ext/cli/foreground.erb | 48 ------- .../template/global/ext/cli/reload.erb | 50 -------- .../template/global/ext/cli/start.erb | 120 ------------------ .../template/global/ext/cli/stop.erb | 26 ---- .../global/ext/debian/ezbake.service.erb | 16 ++- .../lein-ezbake/template/global/ext/fpm.rb | 6 - .../global/ext/redhat/ezbake.service.erb | 16 ++- .../template/global/install.sh.erb | 4 - 9 files changed, 22 insertions(+), 267 deletions(-) delete mode 100644 resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb delete mode 100644 resources/puppetlabs/lein-ezbake/template/global/ext/cli/reload.erb delete mode 100755 resources/puppetlabs/lein-ezbake/template/global/ext/cli/start.erb delete mode 100644 resources/puppetlabs/lein-ezbake/template/global/ext/cli/stop.erb diff --git a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache index a1f198af..fd24c081 100644 --- a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache +++ b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache @@ -41,9 +41,6 @@ templates: - ext/debian/postinst.erb - ext/config/user/conf.d/*.erb - ext/bin/*.erb - - ext/cli/apps/*.erb - - ext/cli/*.erb - - ext/cli_defaults/*.erb - ext/default.erb - ext/ezbake-functions.sh.erb - install.sh.erb diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb deleted file mode 100644 index cb6a6e95..00000000 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash - -restartfile="/opt/puppetlabs/server/data/<%= EZBake::Config[:real_name] %>/restartcounter" -cli_defaults=${INSTALL_DIR}/cli/cli-defaults.sh - -if [ ! -e "${INSTALL_DIR}/ezbake-functions.sh" ]; then - echo "Unable to find ${INSTALL_DIR}/ezbake-functions.sh script, failing start." 1>&2 - exit 1 -fi - -. "${INSTALL_DIR}/ezbake-functions.sh" - -init_restart_file "$restartfile" || exit $? - -if !(echo "${@}" | grep -e "--debug" -q) -then - LOG_APPENDER="-Dlogappender=STDOUT" -fi - -CLASSPATH="${INSTALL_DIR}/<%= EZBake::Config[:uberjar_name] %>" - -if [ -e "$cli_defaults" ]; then - . $cli_defaults - if [ $? -ne 0 ]; then - echo "Unable to initialize cli defaults, failing start." 1>&2 - exit 1 - fi -fi - -COMMAND="${JAVA_BIN} ${JAVA_ARGS} ${LOG_APPENDER} \ - -cp "$CLASSPATH" \ - clojure.main -m <%= EZBake::Config[:main_namespace] %> \ - --config ${CONFIG} --bootstrap-config ${BOOTSTRAP_CONFIG} \ - --restart-file "${restartfile}" \ - ${TK_ARGS} \ - ${@}" - -pushd "${INSTALL_DIR}" &> /dev/null -if [ "$EUID" = "0" ] && command -v runuser &> /dev/null; then - runuser "${USER}" -s /bin/bash -c "$COMMAND" -elif [ "$EUID" = "$(id -u ${USER})" ]; then - /bin/bash -c "$COMMAND" -elif command -v sudo &> /dev/null; then - sudo -H -u "${USER}" $COMMAND -else - su "${USER}" -s /bin/bash -c "$COMMAND" -fi -popd &> /dev/null diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/reload.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/reload.erb deleted file mode 100644 index f9c95d42..00000000 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/reload.erb +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -set +e - -restartfile="/opt/puppetlabs/server/data/<%= EZBake::Config[:real_name] %>/restartcounter" -reload_timeout="${RELOAD_TIMEOUT:-<%= EZBake::Config[:reload_timeout] %>}" -timeout="$reload_timeout" -realname="<%= EZBake::Config[:real_name] %>" - -if [ -d "/run" ]; then - PIDFILE="/run/puppetlabs/${realname}/${realname}.pid" -else - PIDFILE="/var/run/puppetlabs/${realname}/${realname}.pid" -fi - -if [ ! -e "${INSTALL_DIR}/ezbake-functions.sh" ]; then - echo "Unable to find ${INSTALL_DIR}/ezbake-functions.sh script, failing start." 1>&2 - exit 1 -fi - -. "${INSTALL_DIR}/ezbake-functions.sh" - -init_restart_file "$restartfile" || exit $? - -initial="$(head -n 1 "$restartfile")" -pid="$(pgrep -f "<%= EZBake::Config[:uberjar_name] %>.* -m <%= EZBake::Config[:main_namespace] %>")" -kill -HUP $pid >/dev/null 2>&1 -if [ $? -ne 0 ]; then - echo "Service not running so cannot be reloaded" 1>&2 - exit 1 -fi -sleep 0.1 -cur="$(head -n 1 "$restartfile")" -while [ "$cur" == "$initial" ] ;do - kill -0 $pid >/dev/null 2>&1 - if [ $? -ne 0 ]; then - echo "Process $pid exited before reload had completed" 1>&2 - rm -f "$PIDFILE" - exit 1 - fi - sleep 1 - cur="$(head -n 1 "$restartfile")" - - ((timeout--)) - if [ $timeout -eq 0 ]; then - echo "Reload timed out after $reload_timeout seconds" - exit 1 - fi -done - -exit 0 diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/start.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/start.erb deleted file mode 100755 index 328b6a8d..00000000 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/start.erb +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/env bash -set +e - -pid="$(pgrep -f "<%= EZBake::Config[:uberjar_name] %>.* -m <%= EZBake::Config[:main_namespace] %>")" - -restartfile="/opt/puppetlabs/server/data/<%= EZBake::Config[:real_name] %>/restartcounter" -start_timeout="${START_TIMEOUT:-<%= EZBake::Config[:start_timeout] %>}" - -real_name="<%= EZBake::Config[:real_name] %>" - -if [ -d "/run" ]; then - rundir="/run/puppetlabs/${real_name}" -else - rundir="/var/run/puppetlabs/${real_name}" -fi - -app_logdir=${app_logdir:=/var/log/puppetlabs/${real_name}} -PIDFILE="${rundir}/${real_name}.pid" - -cli_defaults=${INSTALL_DIR}/cli/cli-defaults.sh - -if [ ! -e "${INSTALL_DIR}/ezbake-functions.sh" ]; then - echo "Unable to find ${INSTALL_DIR}/ezbake-functions.sh script, failing start." 1>&2 - exit 1 -fi - -/usr/bin/install --directory --owner=$USER --group=$GROUP --mode=755 "$rundir" -if [ $? -ne 0 ]; then - echo "Unable to create/set permissions for rundir: ${rundir}" 1>&2 - exit 1 -fi - -. "${INSTALL_DIR}/ezbake-functions.sh" - -write_pid_file() { - echo "$pid" > "$PIDFILE" - if [ $? -ne 0 ]; then - echo "Unable to write pid file: ${PIDFILE}" 1>&2 - terminate_java_process - exit 1 - fi -} - -terminate_java_process() { - echo "Startup script was terminated before completion" 1>&2 - kill_pid "$pid" "$PIDFILE" "$SERVICE_STOP_RETRIES" - exit 1 -} - -if [ -n "$pid" ]; then - write_pid_file - exit 0 -fi - -rm -f "$PIDFILE" - -init_restart_file "$restartfile" || exit $? - -CLASSPATH=${INSTALL_DIR}/<%= EZBake::Config[:uberjar_name] %> - -if [ -e "$cli_defaults" ]; then - . $cli_defaults - if [ $? -ne 0 ]; then - echo "Unable to initialize cli defaults, failing start." 1>&2 - exit 1 - fi -fi - -java_version=$($JAVA_BIN -version 2>&1 | head -1 | awk -F\" '{ print $2 }') -java_major_version=$(echo $java_version | awk -F. '{ print $1 }') - -LOG_APPENDER="-Dlogappender=F1" - -out_of_memory_flag='-XX:OnOutOfMemoryError=kill -9 %p' -if [ "$java_major_version" -ge 11 ]; then - out_of_memory_flag="-XX:+CrashOnOutOfMemoryError" -fi - -"$JAVA_BIN" $JAVA_ARGS $LOG_APPENDER \ - "$out_of_memory_flag" \ - -XX:ErrorFile="$app_logdir/${real_name}_err_pid%p.log" \ - -cp "$CLASSPATH" \ - clojure.main \ - -m <%= EZBake::Config[:main_namespace] %> \ - --config "$CONFIG" \ - --bootstrap-config "$BOOTSTRAP_CONFIG" \ - --restart-file "$restartfile" \ - $TK_ARGS & - -# $! is the process id of the last backgrounded process, the Java process above. -pid=$! -trap terminate_java_process SIGHUP SIGINT SIGTERM -write_pid_file - -cur="$(head -n 1 "$restartfile")" -initial="$cur" - -timeout="$start_timeout" -while [ "$cur" == "$initial" ] ;do - kill -0 $pid >/dev/null 2>&1 - if [ $? -ne 0 ]; then - rm -f "$PIDFILE" - echo "Background process $pid exited before start had completed" 1>&2 - exit 1 - fi - - sleep 1 - cur="$(head -n 1 "$restartfile")" - - ((timeout--)) - if [ $timeout -eq 0 ]; then - echo "Startup timed out after $start_timeout seconds" 1>&2 - terminate_java_process - rm -f "$PIDFILE" - exit 1 - fi -done - -write_pid_file -exit 0 diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/stop.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/stop.erb deleted file mode 100644 index b9926101..00000000 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/stop.erb +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -set +e - -pid="$(pgrep -f "<%= EZBake::Config[:uberjar_name] %>.* -m <%= EZBake::Config[:main_namespace] %>")" -realname="<%= EZBake::Config[:real_name] %>" - -if [ -d "/run" ]; then - PIDFILE="/run/puppetlabs/${realname}/${realname}.pid" -else - PIDFILE="/var/run/puppetlabs/${realname}/${realname}.pid" -fi - -if [ ! -e "${INSTALL_DIR}/ezbake-functions.sh" ]; then - echo "Unable to find ${INSTALL_DIR}/ezbake-functions.sh script, failing stop." 1>&2 - exit 1 -fi - -. "${INSTALL_DIR}/ezbake-functions.sh" - -if [ -z "$pid" ]; then - rm -f "$PIDFILE" - exit 0 -else - kill_pid "$pid" "$PIDFILE" "$SERVICE_STOP_RETRIES" - exit $? -fi diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb index 72011239..e2168b6f 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb @@ -19,14 +19,14 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % <% end -%> [Service] -Type=forking +Type=exec +LogsDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> EnvironmentFile=/etc/default/<%= EZBake::Config[:project] %> User=<%= EZBake::Config[:user] %> TimeoutStartSec=<%= EZBake::Config[:start_timeout] %> TimeoutStopSec=<%= EZBake::Config[:stop_timeout] %> Restart=on-failure StartLimitBurst=5 -PIDFile=/run/puppetlabs/<%= EZBake::Config[:real_name] %>/<%= EZBake::Config[:real_name] %>.pid PrivateTmp=true # https://tickets.puppetlabs.com/browse/EZ-129 @@ -50,9 +50,15 @@ ExecStartPre=<%= action %> <% end -%> <% end -%> -ExecReload=/opt/puppetlabs/server/apps/<%= EZBake::Config[:real_name] %>/bin/<%= EZBake::Config[:real_name] %> reload -ExecStart=/opt/puppetlabs/server/apps/<%= EZBake::Config[:real_name] %>/bin/<%= EZBake::Config[:real_name] %> start -ExecStop=/opt/puppetlabs/server/apps/<%= EZBake::Config[:real_name] %>/bin/<%= EZBake::Config[:real_name] %> stop +ExecStart="$JAVA_BIN" $JAVA_ARGS $LOG_APPENDER \ + '-XX:OnOutOfMemoryError=kill -9 %p' -XX:+CrashOnOutOfMemoryError \ + -XX:ErrorFile="$LOGS_DIRECTORY/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ + -cp "$INSTALL_DIR/<%= EZBake::Config[:uberjar_name] %>" \ + clojure.main \ + -m <%= EZBake::Config[:main_namespace] %> \ + --config "$CONFIG" \ + --bootstrap-config "$BOOTSTRAP_CONFIG" \ + $TK_ARGS KillMode=process diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb index 910ba7c0..51b17c79 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb @@ -175,7 +175,6 @@ termini_opts = Array('') options.app_logdir = "/var/log/puppetlabs/#{options.realname}" -options.app_rundir = "/var/run/puppetlabs/#{options.realname}" options.app_prefix = "/opt/puppetlabs/server/apps/#{options.realname}" options.app_data = "/opt/puppetlabs/server/data/#{options.realname}" @@ -185,7 +184,6 @@ shared_opts << "--rpm-digest sha256" shared_opts << "--rpm-rpmbuild-define 'rpmversion #{options.version}'" fpm_opts << "--rpm-rpmbuild-define '_app_logdir #{options.app_logdir}'" - fpm_opts << "--rpm-rpmbuild-define '_app_rundir #{options.app_rundir}'" fpm_opts << "--rpm-rpmbuild-define '_app_prefix #{options.app_prefix}'" fpm_opts << "--rpm-rpmbuild-define '_app_data #{options.app_data}'" @@ -222,7 +220,6 @@ fpm_opts << "--rpm-rpmbuild-define '_systemd_sles #{options.systemd_sles}'" fpm_opts << "--rpm-rpmbuild-define '_sysconfdir /etc'" fpm_opts << "--rpm-rpmbuild-define '_prefix #{options.app_prefix}'" - fpm_opts << "--rpm-rpmbuild-define '_rundir /var/run'" fpm_opts << "--rpm-rpmbuild-define '__jar_repack 0'" shared_opts << "--rpm-dist #{options.dist}" @@ -253,7 +250,6 @@ fpm_opts << "--directories #{options.app_logdir}" fpm_opts << "--directories /etc/puppetlabs/#{options.realname}" - fpm_opts << "--directories #{options.app_rundir}" shared_opts << "--rpm-auto-add-directories" fpm_opts << "--rpm-auto-add-exclude-directories /etc/puppetlabs" shared_opts << "--rpm-auto-add-exclude-directories /opt/puppetlabs" @@ -267,7 +263,6 @@ fpm_opts << "--rpm-auto-add-exclude-directories /etc/logrotate.d" fpm_opts << "--rpm-auto-add-exclude-directories /usr/lib/tmpfiles.d" fpm_opts << "--rpm-auto-add-exclude-directories /var/log/puppetlabs" - fpm_opts << "--rpm-auto-add-exclude-directories /var/run/puppetlabs" termini_opts << "--rpm-auto-add-exclude-directories /opt/puppetlabs/puppet" termini_opts << "--rpm-auto-add-exclude-directories /opt/puppetlabs/puppet/lib" termini_opts << "--rpm-auto-add-exclude-directories /opt/puppetlabs/puppet/lib/ruby" @@ -287,7 +282,6 @@ fpm_opts << "--rpm-attr 750,#{options.user},#{options.group}:/etc/puppetlabs/#{options.realname}" fpm_opts << "--rpm-attr 750,#{options.user},#{options.group}:#{options.app_logdir}" fpm_opts << "--rpm-attr -,#{options.user},#{options.group}:#{options.app_data}" - fpm_opts << "--rpm-attr 755,#{options.user},#{options.group}:#{options.app_rundir}" fpm_opts << "--edit" fpm_opts << "--category 'System Environment/Daemons'" diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb index 2a6af137..a479e70c 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb @@ -19,14 +19,14 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % <% end -%> [Service] -Type=forking +Type=exec +LogsDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> EnvironmentFile=/etc/sysconfig/<%= EZBake::Config[:project] %> User=<%= EZBake::Config[:user] %> TimeoutStartSec=<%= EZBake::Config[:start_timeout] %> TimeoutStopSec=<%= EZBake::Config[:stop_timeout] %> Restart=on-failure StartLimitBurst=5 -PIDFile=/run/puppetlabs/<%= EZBake::Config[:real_name] %>/<%= EZBake::Config[:real_name] %>.pid PrivateTmp=true # https://tickets.puppetlabs.com/browse/EZ-129 @@ -50,9 +50,15 @@ ExecStartPre=<%= action %> <% end -%> <% end -%> -ExecReload=/opt/puppetlabs/server/apps/<%= EZBake::Config[:real_name] %>/bin/<%= EZBake::Config[:real_name] %> reload -ExecStart=/opt/puppetlabs/server/apps/<%= EZBake::Config[:real_name] %>/bin/<%= EZBake::Config[:real_name] %> start -ExecStop=/opt/puppetlabs/server/apps/<%= EZBake::Config[:real_name] %>/bin/<%= EZBake::Config[:real_name] %> stop +ExecStart="$JAVA_BIN" $JAVA_ARGS $LOG_APPENDER \ + '-XX:OnOutOfMemoryError=kill -9 %p' -XX:+CrashOnOutOfMemoryError \ + -XX:ErrorFile="$LOGS_DIRECTORY/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ + -cp "$INSTALL_DIR/<%= EZBake::Config[:uberjar_name] %>" \ + clojure.main \ + -m <%= EZBake::Config[:main_namespace] %> \ + --config "$CONFIG" \ + --bootstrap-config "$BOOTSTRAP_CONFIG" \ + $TK_ARGS KillMode=process diff --git a/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb b/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb index f2d626d0..25712823 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb @@ -21,7 +21,6 @@ real_name=${real_name:=<%= EZBake::Config[:real_name] -%>} projdatadir=${projdatadir:=${datadir}/${real_name}} confdir=${confdir:=/etc} projconfdir=${projconfdir:=${confdir}/puppetlabs/${real_name}} -rundir=${rundir:=/var/run/puppetlabs/${real_name}} # Application specific bin directory bindir=${bindir:=/opt/puppetlabs/server/apps/${real_name}/bin} # User facing bin directory, expected to be added to interactive shell PATH @@ -174,7 +173,6 @@ fi ln -s "../apps/${real_name}/bin/<%= basename %>" "${DESTDIR}${symbindir}/<%= basename %>" ln -s "../server/apps/${real_name}/bin/<%= basename %>" "${DESTDIR}${uxbindir}/<%= basename %>" <% end -%> - install -d -m 0755 "${DESTDIR}${rundir}" install -d -m 700 "${DESTDIR}${app_logdir}" <% EZBake::Config[:create_dirs].each do |dir| -%> install -d -m 700 "${DESTDIR}<%= dir %>" @@ -320,8 +318,6 @@ function task_postinst_permissions { chmod 770 $app_data chown <%= EZBake::Config[:user] %>:<%= EZBake::Config[:group] %> $projconfdir chmod 750 $projconfdir - chown <%= EZBake::Config[:user] %>:<%= EZBake::Config[:group] %> $rundir - chmod 0755 $rundir <% EZBake::Config[:create_dirs].each do |dir| -%> chown <%= EZBake::Config[:user] %>:<%= EZBake::Config[:group] %> <%= dir %> chmod 700 <%= dir %> From 2c2fed0de905c758d8ac96dda21352c777760dac Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sat, 12 Jul 2025 18:09:02 +0200 Subject: [PATCH 02/16] Restore rendering of CLI apps This fixes a regression introduced in https://github.com/OpenVoxProject/ezbake/pull/5 / b2de7c7a2e7704491a08665a9f53ded8009aa109 openvox-server has some ERB templates: https://github.com/OpenVoxProject/openvox-server/tree/main/resources/ext/cli and since above change, they aren't rendered anymore. The templates are still required and builds fail. Signed-off-by: Tim Meusel --- .../lein-ezbake/staging-templates/project_data.yaml.mustache | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache index fd24c081..069fd5f7 100644 --- a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache +++ b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache @@ -41,6 +41,7 @@ templates: - ext/debian/postinst.erb - ext/config/user/conf.d/*.erb - ext/bin/*.erb + - ext/cli/*.erb - ext/default.erb - ext/ezbake-functions.sh.erb - install.sh.erb From 19630dc0efb1f00d00d51350e6a2b682af1e6462 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 22 Mar 2024 11:41:26 +0100 Subject: [PATCH 03/16] Make JAVA_BIN a configuration option Making it a config option allows for differentation. The comment for version 8 was outdated, since puppetserver 8 refuses to start up with Java 8. Signed-off-by: Tim Meusel --- resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb index 51b17c79..4ca9b930 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb @@ -35,6 +35,7 @@ options.systemd_sles = 0 options.sles = 0 options.java = 'java-1.8.0-openjdk-headless' +options.java_bin = '/usr/bin/java' options.release = 1 options.platform_version = 0 options.replaces = {} From 84bd610b05e08c9f031f528c4526b8c3133f6988 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 19 Jul 2024 16:35:21 +0200 Subject: [PATCH 04/16] Move JAVA_BIN to systemd service files The EnvironmentFile paths are config locations so if a user ever modified them, they're not replaced. By defining this in the service file, the packaging will update the location. The result is that even if a java location changes that a simple yum/apt upgrade will respect the new value in most situations. Signed-off-by: Tim Meusel --- resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb | 3 --- .../lein-ezbake/template/global/ext/debian/ezbake.service.erb | 2 +- .../lein-ezbake/template/global/ext/redhat/ezbake.service.erb | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb index 29351ff0..1add5825 100644 --- a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb +++ b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb @@ -2,9 +2,6 @@ # Init settings for <%= EZBake::Config[:project] %> ########################################### -# Location of your Java binary -JAVA_BIN="<%= EZBake::Config[:java_bin] %>" - # Modify this if you'd like to change the memory allocation, enable JMX, etc JAVA_ARGS="<%= EZBake::Config[:java_args] %>" diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb index e2168b6f..b3400c57 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb @@ -50,7 +50,7 @@ ExecStartPre=<%= action %> <% end -%> <% end -%> -ExecStart="$JAVA_BIN" $JAVA_ARGS $LOG_APPENDER \ +ExecStart=<%= EZBake::Config[:java_bin] %> $JAVA_ARGS $LOG_APPENDER \ '-XX:OnOutOfMemoryError=kill -9 %p' -XX:+CrashOnOutOfMemoryError \ -XX:ErrorFile="$LOGS_DIRECTORY/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ -cp "$INSTALL_DIR/<%= EZBake::Config[:uberjar_name] %>" \ diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb index a479e70c..a984d99b 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb @@ -50,7 +50,7 @@ ExecStartPre=<%= action %> <% end -%> <% end -%> -ExecStart="$JAVA_BIN" $JAVA_ARGS $LOG_APPENDER \ +ExecStart=<%= EZBake::Config[:java_bin] %> $JAVA_ARGS $LOG_APPENDER \ '-XX:OnOutOfMemoryError=kill -9 %p' -XX:+CrashOnOutOfMemoryError \ -XX:ErrorFile="$LOGS_DIRECTORY/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ -cp "$INSTALL_DIR/<%= EZBake::Config[:uberjar_name] %>" \ From d841a7741187e3bc16375b77daef3291e77bfeb1 Mon Sep 17 00:00:00 2001 From: Kenyon Ralph Date: Sat, 19 Jul 2025 15:50:11 -0700 Subject: [PATCH 05/16] Eliminate net-tools dependency ezbake-functions.sh.erb uses the deprecated netstat from the deprecated net-tools package. But I can't find any uses of the functions in ezbake-functions.sh.erb, so let's remove it. The functions were used in the wrappers which were eliminated in #5. Fixes #13. Signed-off-by: Tim Meusel --- .../project_data.yaml.mustache | 1 - .../global/ext/ezbake-functions.sh.erb | 162 ------------------ .../lein-ezbake/template/global/ext/fpm.rb | 1 - .../template/global/install.sh.erb | 1 - 4 files changed, 165 deletions(-) delete mode 100644 resources/puppetlabs/lein-ezbake/template/global/ext/ezbake-functions.sh.erb diff --git a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache index 069fd5f7..89bc152e 100644 --- a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache +++ b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache @@ -43,7 +43,6 @@ templates: - ext/bin/*.erb - ext/cli/*.erb - ext/default.erb - - ext/ezbake-functions.sh.erb - install.sh.erb - controller.sh.erb tar_excludes: diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/ezbake-functions.sh.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/ezbake-functions.sh.erb deleted file mode 100644 index 1eb82d87..00000000 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/ezbake-functions.sh.erb +++ /dev/null @@ -1,162 +0,0 @@ -#! /bin/bash -# -# Useful shell functions for programs packaged with ezbake. -# - -# -# Wait `timeout` seconds for the application identified by `pid to bind to any -# TCP port -# -wait_for_app() -{ - local pid=${1:?} - local timeout=${2:-<%= EZBake::Config[:start_timeout] %>} - - while : ;do - - # verify the process is still running; if not, return failure - ps -p $pid 2>&1 > /dev/null - if [ "$?" != 0 ]; then - return 1 - fi - - # if there are any TCP ports associated with the process, return success - netstat -tulpn 2>/dev/null | grep "$pid" 2>&1 >/dev/null - if [ "$?" = 0 ]; then - sleep 5 - return 0 - fi - - # if we reach the timeout, return failure - if [ "$timeout" = 0 ]; then - return 1 - fi - - sleep 1 - timeout=$(($timeout-1)) - done -} - - -# -# Wait `timeout` seconds for `pidfile` to be created, otherwise return failure. -# Default timeout is 5 seconds. -# -wait_for_pidfile() -{ - local pidfile=${1:?} - local timeout=${2:-5} - - while [ ! -s "$pidfile" ] ;do - sleep 1 - - # if we reach the timeout, return failure - if [ "$timeout" -eq 0 ] ;then - return 1 - fi - - timeout=$(($timeout-1)) - done - - return 0 -} - -# -# Kill a process. -# -# First argument (required) is the pid to kill. -# -# Second argument (optional) is a pidfile that should be removed after the -# process is killed. -# -# Third argument (optional) is a timeout (in seconds) to wait for the process -# to die. Default timeout is 60 seconds. -# -# Returns 0 (success) if the process is dead or 1 (failure) if the process is -# still running after attempts to kill have completed. -# -kill_pid() -{ - local pid=${1:?} - local pidfile=$2 - local stop_timeout=${3:-<%= EZBake::Config[:stop_timeout] %>} - - kill -TERM $pid >/dev/null 2>&1 - sleep 0.1 - - timeout=$stop_timeout - kill -0 $pid >/dev/null 2>&1 - while [ $? -eq 0 ] && [ $timeout -ne 0 ]; do - sleep 1 - ((timeout--)) - kill -0 $pid >/dev/null 2>&1 - done - - if [ $timeout -eq 0 ]; then - echo "Process $pid not terminated gracefully after $stop_timeout seconds" 1>&2 - kill -KILL $pid >/dev/null 2>&1 - sleep 1 - kill -0 $pid >/dev/null 2>&1 - timeout=$stop_timeout - while [ $? -eq 0 ] && [ $timeout -ne 0 ]; do - sleep 1 - ((timeout--)) - kill -0 $pid >/dev/null 2>&1 - done - if [ $? -eq 0 ]; then - echo "Process $pid not killed after SIGKILL" 1>&2 - return 1 - else - echo "Process $pid killed after SIGKILL" 1>&2 - fi - fi - - if [ -n "$pidfile" ]; then - rm -f "$pidfile" - fi - - return 0 -} - -init_restart_file() -{ - local restart_file="${1:?}" - local restart_file_base_dir="$(dirname "$restartfile")" - local user="${USER:-<%= EZBake::Config[:user] %>}" - local group="${GROUP:-<%= EZBake::Config[:group] %>}" - - if [ ! -e "$restartfile" ]; then - /usr/bin/install --directory --owner=$user --group=$group --mode=755 "$restart_file_base_dir" - if [ $? -ne 0 ]; then - echo "Unable to create or set permissions for restart file at ${restart_file_base_dir}" 1>&2 - return 1 - fi - echo -n "0" > "$restart_file" - if [ $? -ne 0 ]; then - echo "Unable to create restart file at ${restart_file}" 1>&2 - return 1 - fi - chown $user:$group "$restart_file" - if [ $? -ne 0 ]; then - echo "Unable to set permissions for restart file at ${restart_file}" 1>&2 - return 1 - fi - elif [ ! -r "$restart_file" ] || [ ! -w "$restart_file" ]; then - echo "The restart-file at ${restart_file} is not readable and/or writeable." 1>&2 - return 1 - fi - - return 0 -} - -if [ "$0" = "$BASH_SOURCE" ] ;then - COMMAND=${1:?} - export $(systemctl show -p MainPID <%= EZBake::Config[:project] %>.service) - case $COMMAND in - wait_for_app) - wait_for_app ${MainPID:?} ${START_TIMEOUT:-<%= EZBake::Config[:start_timeout] %>} - ;; - *) - ;; - esac -fi diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb index 4ca9b930..f2213774 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb @@ -377,7 +377,6 @@ fpm_opts << "--depends '#{options.java}'" fpm_opts << "--depends bash" -fpm_opts << "--depends net-tools" fpm_opts << "--depends /usr/bin/which" if options.output_type == 'rpm' fpm_opts << "--depends adduser" if options.output_type == 'deb' fpm_opts << "--depends procps" diff --git a/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb b/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb index 25712823..b7e2b8dc 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb @@ -123,7 +123,6 @@ function task_install { install -d -m 0755 "${dest_apps_dir}" install -d -m 0770 "${DESTDIR}${app_data}" install -m 0644 <%= EZBake::Config[:uberjar_name] %> "${dest_apps_dir}" - install -m 0755 ext/ezbake-functions.sh "${dest_apps_dir}" install -m 0644 ext/ezbake.manifest "${dest_apps_dir}" install -d -m 0755 "${DESTDIR}${projconfdir}/conf.d" From cbc74d4cd3a52a51e996732b182d3453237deabb Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 23 Jul 2025 01:46:17 +0200 Subject: [PATCH 06/16] Quote environment variables in systemd services Fixes: b2de7c7a2e7704491a08665a9f53ded8009aa109 ("Drop service wrappers") Signed-off-by: Tim Meusel --- .../template/global/ext/debian/ezbake.service.erb | 8 ++++---- .../template/global/ext/redhat/ezbake.service.erb | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb index b3400c57..51935d72 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb @@ -52,12 +52,12 @@ ExecStartPre=<%= action %> ExecStart=<%= EZBake::Config[:java_bin] %> $JAVA_ARGS $LOG_APPENDER \ '-XX:OnOutOfMemoryError=kill -9 %p' -XX:+CrashOnOutOfMemoryError \ - -XX:ErrorFile="$LOGS_DIRECTORY/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ - -cp "$INSTALL_DIR/<%= EZBake::Config[:uberjar_name] %>" \ + -XX:ErrorFile="${LOGS_DIRECTORY}/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ + -cp "${INSTALL_DIR}/<%= EZBake::Config[:uberjar_name] %>" \ clojure.main \ -m <%= EZBake::Config[:main_namespace] %> \ - --config "$CONFIG" \ - --bootstrap-config "$BOOTSTRAP_CONFIG" \ + --config "${CONFIG}" \ + --bootstrap-config "${BOOTSTRAP_CONFIG}" \ $TK_ARGS KillMode=process diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb index a984d99b..56aadd74 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb @@ -52,12 +52,12 @@ ExecStartPre=<%= action %> ExecStart=<%= EZBake::Config[:java_bin] %> $JAVA_ARGS $LOG_APPENDER \ '-XX:OnOutOfMemoryError=kill -9 %p' -XX:+CrashOnOutOfMemoryError \ - -XX:ErrorFile="$LOGS_DIRECTORY/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ - -cp "$INSTALL_DIR/<%= EZBake::Config[:uberjar_name] %>" \ + -XX:ErrorFile="${LOGS_DIRECTORY}/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ + -cp "${INSTALL_DIR}/<%= EZBake::Config[:uberjar_name] %>" \ clojure.main \ -m <%= EZBake::Config[:main_namespace] %> \ - --config "$CONFIG" \ - --bootstrap-config "$BOOTSTRAP_CONFIG" \ + --config "${CONFIG}" \ + --bootstrap-config "${BOOTSTRAP_CONFIG}" \ $TK_ARGS KillMode=process From b6b99026352722bd2f0c51147ff7b26d9c8bd4d5 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 24 Jul 2025 17:56:44 +0200 Subject: [PATCH 07/16] unit file: fix uninitialized LOG_APPENDER variable This was initially set in /opt/puppetlabs/server/apps/puppetserver/cli/apps/foreground and went missing during b2de7c7a2e7704491a08665a9f53ded8009aa109 Thix fixes a regression. Signed-off-by: Tim Meusel --- .../lein-ezbake/template/global/ext/debian/ezbake.service.erb | 2 +- .../lein-ezbake/template/global/ext/redhat/ezbake.service.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb index 51935d72..692ad6aa 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb @@ -50,7 +50,7 @@ ExecStartPre=<%= action %> <% end -%> <% end -%> -ExecStart=<%= EZBake::Config[:java_bin] %> $JAVA_ARGS $LOG_APPENDER \ +ExecStart=<%= EZBake::Config[:java_bin] %> $JAVA_ARGS -Dlogappender=F1 \ '-XX:OnOutOfMemoryError=kill -9 %p' -XX:+CrashOnOutOfMemoryError \ -XX:ErrorFile="${LOGS_DIRECTORY}/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ -cp "${INSTALL_DIR}/<%= EZBake::Config[:uberjar_name] %>" \ diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb index 56aadd74..863bef0a 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb @@ -50,7 +50,7 @@ ExecStartPre=<%= action %> <% end -%> <% end -%> -ExecStart=<%= EZBake::Config[:java_bin] %> $JAVA_ARGS $LOG_APPENDER \ +ExecStart=<%= EZBake::Config[:java_bin] %> $JAVA_ARGS -Dlogappender=F1 \ '-XX:OnOutOfMemoryError=kill -9 %p' -XX:+CrashOnOutOfMemoryError \ -XX:ErrorFile="${LOGS_DIRECTORY}/<%= EZBake::Config[:real_name] %>_err_pid%p.log" \ -cp "${INSTALL_DIR}/<%= EZBake::Config[:uberjar_name] %>" \ From 4508cebec4e76b5120db81751c9b4570bde9438c Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 25 Jul 2025 19:19:55 +0200 Subject: [PATCH 08/16] Patch java_bin if overridden In 9768a77de95ff19f66f4b328fc60efe69f5f3a6b the java binary was overridden, but this didn't have a point because it's not available when the files are rendered. They only have access to the ezbake config. This takes an approach of patching the files after the fact. It writes out backup files that are restored after. That is to deal with the fact that our build process isn't clean and is reused between multiple builds. Fixes: 9768a77de95f ("Use virtual Java packages on Red Hat and set java_bin") Signed-off-by: Tim Meusel --- .../lein-ezbake/template/global/ext/fpm.rb | 66 ++++++++++++++----- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb index f2213774..1e3a63bc 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb @@ -4,6 +4,40 @@ require 'optparse' require 'ostruct' +def patch_files(options) + if options.java_bin == EZBake::Config[:java_bin] + yield + else + suffix = '.backup' + [ + # Debian + '/etc/default/puppet*', + '/lib/systemd/system/puppet*.service', + # RPM + '/usr/lib/systemd/system/puppet*.service', + '/etc/sysconfig/puppet*', + ].each do |path| + Dir.glob(File.join(options.chdir, path)).each do |real_path| + content = File.read(real_path) + next unless content.include?(EZBake::Config[:java_bin]) + + warn "Copying #{real_path} to #{real_path}#{suffix}" + FileUtils.cp(real_path, "#{real_path}#{suffix}") + warn "Patching #{real_path} to use #{options.java_bin}" + File.write(real_path, content.gsub(EZBake::Config[:java_bin], options.java_bin)) + end + end + + yield + + Dir.glob(File.join(options.chdir, '**', "*#{suffix}")).each do |path| + original = File.join(File.dirname(path), File.basename(path, suffix)) + warn "Restoring #{path} to #{original}" + FileUtils.mv(path, original) + end + end +end + options = OpenStruct.new # ezbake.rb is rendered from @@ -449,22 +483,24 @@ puts "#{Dir.pwd}" end -# fpm sends all output to stdout -out, _, stat = Open3.capture3("#{fpm_editor} fpm #{fpm_opts.join(' ')}") -fail "Error trying to run FPM for #{options.dist}!\n#{out}" unless stat.success? +patch_files(options) do + # fpm sends all output to stdout + out, _, stat = Open3.capture3("#{fpm_editor} fpm #{fpm_opts.join(' ')}") + fail "Error trying to run FPM for #{options.dist}!\n#{out}" unless stat.success? -puts "#{out}" + puts "#{out}" -if options.termini - if options.debug - puts "==========================" - puts "FPM COMMAND" - puts "fpm #{termini_opts.join(' ')}" - puts "==========================" - end + if options.termini + if options.debug + puts "==========================" + puts "FPM COMMAND" + puts "fpm #{termini_opts.join(' ')}" + puts "==========================" + end - # fpm sends all output to stdout - out, _, stat = Open3.capture3("fpm #{termini_opts.join(' ')}") - fail "Error trying to run FPM for the termini for #{options.dist}!\n#{out}" unless stat.success? - puts "#{out}" + # fpm sends all output to stdout + out, _, stat = Open3.capture3("fpm #{termini_opts.join(' ')}") + fail "Error trying to run FPM for the termini for #{options.dist}!\n#{out}" unless stat.success? + puts "#{out}" + end end From b9c77e7ab6c68321d0b1525ba82d838c19a525d0 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 30 Jul 2025 20:41:29 +0200 Subject: [PATCH 09/16] default.rb: Set JAVA_BIN for openvox-server CLI apps Signed-off-by: Tim Meusel --- resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb index 1add5825..31132b7c 100644 --- a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb +++ b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb @@ -2,6 +2,9 @@ # Init settings for <%= EZBake::Config[:project] %> ########################################### +# used by openvox-server CLI apps, not by the systemd unit +JAVA_BIN="<%= EZBake::Config[:java_bin] %>" + # Modify this if you'd like to change the memory allocation, enable JMX, etc JAVA_ARGS="<%= EZBake::Config[:java_args] %>" From 53e9377e5b679b86215c7106c617cf2882e2c899 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 30 Jul 2025 21:15:24 +0200 Subject: [PATCH 10/16] Ensure the RuntimeDirectory exists Prior to b2de7c7a2e7704491a08665a9f53ded8009aa109 a tmpfiles config file was created to ensure the run directory exists. It was dropped, but causes the server to refuse to start up. This instead makes systemd responsible for creating it when the service starts. Fixes: b2de7c7a2e7704491a08665a9f53ded8009aa109 ("Drop service wrappers") Signed-off-by: Tim Meusel --- .../lein-ezbake/template/global/ext/debian/ezbake.service.erb | 1 + .../lein-ezbake/template/global/ext/redhat/ezbake.service.erb | 1 + 2 files changed, 2 insertions(+) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb index 692ad6aa..d404a019 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb @@ -21,6 +21,7 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % [Service] Type=exec LogsDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> +RuntimeDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> EnvironmentFile=/etc/default/<%= EZBake::Config[:project] %> User=<%= EZBake::Config[:user] %> TimeoutStartSec=<%= EZBake::Config[:start_timeout] %> diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb index 863bef0a..d2ce9456 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb @@ -21,6 +21,7 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % [Service] Type=exec LogsDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> +RuntimeDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> EnvironmentFile=/etc/sysconfig/<%= EZBake::Config[:project] %> User=<%= EZBake::Config[:user] %> TimeoutStartSec=<%= EZBake::Config[:start_timeout] %> From c3a7de0388d26db1051a635c0b6ca3b34510482a Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 31 Jul 2025 15:08:00 +0200 Subject: [PATCH 11/16] Restore foreground.erb foreground is a subcommand for openvox-server and openvoxdb. This this a public interface to our users and removing it is a breaking change. This fixes a regression introduced in b2de7c7a2e7704491a08665a9f53ded8009aa109 Signed-off-by: Tim Meusel --- .../template/global/ext/cli/foreground.erb | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb new file mode 100644 index 00000000..cb6a6e95 --- /dev/null +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +restartfile="/opt/puppetlabs/server/data/<%= EZBake::Config[:real_name] %>/restartcounter" +cli_defaults=${INSTALL_DIR}/cli/cli-defaults.sh + +if [ ! -e "${INSTALL_DIR}/ezbake-functions.sh" ]; then + echo "Unable to find ${INSTALL_DIR}/ezbake-functions.sh script, failing start." 1>&2 + exit 1 +fi + +. "${INSTALL_DIR}/ezbake-functions.sh" + +init_restart_file "$restartfile" || exit $? + +if !(echo "${@}" | grep -e "--debug" -q) +then + LOG_APPENDER="-Dlogappender=STDOUT" +fi + +CLASSPATH="${INSTALL_DIR}/<%= EZBake::Config[:uberjar_name] %>" + +if [ -e "$cli_defaults" ]; then + . $cli_defaults + if [ $? -ne 0 ]; then + echo "Unable to initialize cli defaults, failing start." 1>&2 + exit 1 + fi +fi + +COMMAND="${JAVA_BIN} ${JAVA_ARGS} ${LOG_APPENDER} \ + -cp "$CLASSPATH" \ + clojure.main -m <%= EZBake::Config[:main_namespace] %> \ + --config ${CONFIG} --bootstrap-config ${BOOTSTRAP_CONFIG} \ + --restart-file "${restartfile}" \ + ${TK_ARGS} \ + ${@}" + +pushd "${INSTALL_DIR}" &> /dev/null +if [ "$EUID" = "0" ] && command -v runuser &> /dev/null; then + runuser "${USER}" -s /bin/bash -c "$COMMAND" +elif [ "$EUID" = "$(id -u ${USER})" ]; then + /bin/bash -c "$COMMAND" +elif command -v sudo &> /dev/null; then + sudo -H -u "${USER}" $COMMAND +else + su "${USER}" -s /bin/bash -c "$COMMAND" +fi +popd &> /dev/null From a58925e4f298e84d4df9facb82629310b091b9f5 Mon Sep 17 00:00:00 2001 From: Yury Bushmelev Date: Thu, 31 Jul 2025 22:41:54 +0800 Subject: [PATCH 12/16] Rewrite foreground.erb to not require ezbake-functions.sh Signed-off-by: Tim Meusel --- .../template/global/ext/cli/foreground.erb | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb index cb6a6e95..3f19d82a 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb @@ -1,26 +1,20 @@ #!/usr/bin/env bash restartfile="/opt/puppetlabs/server/data/<%= EZBake::Config[:real_name] %>/restartcounter" -cli_defaults=${INSTALL_DIR}/cli/cli-defaults.sh - -if [ ! -e "${INSTALL_DIR}/ezbake-functions.sh" ]; then - echo "Unable to find ${INSTALL_DIR}/ezbake-functions.sh script, failing start." 1>&2 - exit 1 +if [ ! -e "$restartfile" ]; then + printf '0' | /usr/bin/install -D --owner="${USER:-<%= EZBake::Config[:user] %>}" --group="${GROUP:-<%= EZBake::Config[:group] %>}" --mode=0644 "$restartfile" fi -. "${INSTALL_DIR}/ezbake-functions.sh" - -init_restart_file "$restartfile" || exit $? - -if !(echo "${@}" | grep -e "--debug" -q) +if ! (echo "${@}" | grep -e "--debug" -q) then LOG_APPENDER="-Dlogappender=STDOUT" fi CLASSPATH="${INSTALL_DIR}/<%= EZBake::Config[:uberjar_name] %>" +cli_defaults="${INSTALL_DIR}/cli/cli-defaults.sh" if [ -e "$cli_defaults" ]; then - . $cli_defaults + . "$cli_defaults" if [ $? -ne 0 ]; then echo "Unable to initialize cli defaults, failing start." 1>&2 exit 1 @@ -28,10 +22,10 @@ if [ -e "$cli_defaults" ]; then fi COMMAND="${JAVA_BIN} ${JAVA_ARGS} ${LOG_APPENDER} \ - -cp "$CLASSPATH" \ + -cp '${CLASSPATH}' \ clojure.main -m <%= EZBake::Config[:main_namespace] %> \ --config ${CONFIG} --bootstrap-config ${BOOTSTRAP_CONFIG} \ - --restart-file "${restartfile}" \ + --restart-file '${restartfile}' \ ${TK_ARGS} \ ${@}" From 6cc1d8c68d24fa432bee2d58b0f1cd6f0f863d21 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 31 Jul 2025 16:12:59 +0200 Subject: [PATCH 13/16] Package ext/cli_defaults/*.erb templates This is a regression from b2de7c7a2e7704491a08665a9f53ded8009aa109 Previously we had `ext/cli_defaults/*.erb`. This is still required because openvox-server ships a file there: https://github.com/OpenVoxProject/openvox-server/blob/main/resources/ext/cli_defaults/cli-defaults.sh.erb Signed-off-by: Tim Meusel --- .../lein-ezbake/staging-templates/project_data.yaml.mustache | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache index 89bc152e..cbf98200 100644 --- a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache +++ b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache @@ -42,6 +42,7 @@ templates: - ext/config/user/conf.d/*.erb - ext/bin/*.erb - ext/cli/*.erb + - ext/cli_defaults/*.erb - ext/default.erb - install.sh.erb - controller.sh.erb From 9fd0bcd9c97daf672a6f05b09c836edc483de2c1 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 31 Jul 2025 17:30:08 +0200 Subject: [PATCH 14/16] systemd unit: Readd reload command This fixes a regression from b2de7c7a2e7704491a08665a9f53ded8009aa109 where we removed the reload script. Now that we don't fork anymore, we can just rely on `$MAINPID`, which is a variable provided by systemd. see https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html#ExecReload= Signed-off-by: Tim Meusel --- .../lein-ezbake/template/global/ext/debian/ezbake.service.erb | 1 + .../lein-ezbake/template/global/ext/redhat/ezbake.service.erb | 1 + 2 files changed, 2 insertions(+) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb index d404a019..d33dfb0f 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb @@ -66,6 +66,7 @@ KillMode=process <% EZBake::Config[:debian][:post_start_action].each do |action| -%> ExecStartPost=-<%= action %> <% end -%> +ExecReload=kill -HUP $MAINPID SuccessExitStatus=143 [Install] diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb index d2ce9456..dddd8d5d 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb @@ -66,6 +66,7 @@ KillMode=process <% EZBake::Config[:redhat][:post_start_action].each do |action| -%> ExecStartPost=-<%= action %> <% end -%> +ExecReload=kill -HUP $MAINPID SuccessExitStatus=143 [Install] From c2855c75bbe45170cdc4f74a2df0aee0eef9174f Mon Sep 17 00:00:00 2001 From: Robert Waffen Date: Fri, 22 Aug 2025 11:00:17 +0200 Subject: [PATCH 15/16] fix: add /dev/stdin back to install command. use short parameters to also make it work on busybox/alpine Signed-off-by: Tim Meusel --- .../lein-ezbake/template/global/ext/cli/foreground.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb index 3f19d82a..6bb22430 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/cli/foreground.erb @@ -2,7 +2,7 @@ restartfile="/opt/puppetlabs/server/data/<%= EZBake::Config[:real_name] %>/restartcounter" if [ ! -e "$restartfile" ]; then - printf '0' | /usr/bin/install -D --owner="${USER:-<%= EZBake::Config[:user] %>}" --group="${GROUP:-<%= EZBake::Config[:group] %>}" --mode=0644 "$restartfile" + printf '0' | /usr/bin/install -D -o "${USER:-<%= EZBake::Config[:user] %>}" -g "${GROUP:-<%= EZBake::Config[:group] %>}" -m 0644 /dev/stdin "$restartfile" fi if ! (echo "${@}" | grep -e "--debug" -q) From 4e3d24d2a968267311d4ee0253c9ae59904728f1 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 2 Jan 2026 19:44:03 +0100 Subject: [PATCH 16/16] systemd: Switch to Type=notify-reload With the merge of https://github.com/OpenVoxProject/trapperkeeper/pull/23, we can switch to notify. Then the service will notify systemd when the service is actually started. Signed-off-by: Tim Meusel --- .../lein-ezbake/template/global/ext/debian/ezbake.service.erb | 2 +- .../lein-ezbake/template/global/ext/redhat/ezbake.service.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb index d33dfb0f..5913d429 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb @@ -19,7 +19,7 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % <% end -%> [Service] -Type=exec +Type=notify-reload LogsDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> RuntimeDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> EnvironmentFile=/etc/default/<%= EZBake::Config[:project] %> diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb index dddd8d5d..7a937261 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb @@ -19,7 +19,7 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % <% end -%> [Service] -Type=exec +Type=notify-reload LogsDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> RuntimeDirectory=puppetlabs/<%= EZBake::Config[:real_name] %> EnvironmentFile=/etc/sysconfig/<%= EZBake::Config[:project] %>