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..cbf98200 100644 --- a/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache +++ b/resources/puppetlabs/lein-ezbake/staging-templates/project_data.yaml.mustache @@ -41,11 +41,9 @@ 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 - controller.sh.erb tar_excludes: diff --git a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb index 29351ff0..31132b7c 100644 --- a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb +++ b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb @@ -2,7 +2,7 @@ # Init settings for <%= EZBake::Config[:project] %> ########################################### -# Location of your Java binary +# 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 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..6bb22430 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 -o "${USER:-<%= EZBake::Config[:user] %>}" -g "${GROUP:-<%= EZBake::Config[:group] %>}" -m 0644 /dev/stdin "$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} \ ${@}" 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..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,14 +19,15 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % <% end -%> [Service] -Type=forking +Type=notify-reload +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] %> 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,15 +51,22 @@ 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=<%= 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] %>" \ + clojure.main \ + -m <%= EZBake::Config[:main_namespace] %> \ + --config "${CONFIG}" \ + --bootstrap-config "${BOOTSTRAP_CONFIG}" \ + $TK_ARGS 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/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 910ba7c0..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 @@ -35,6 +69,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 = {} @@ -175,7 +210,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 +219,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 +255,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 +285,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 +298,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 +317,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'" @@ -382,7 +411,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" @@ -455,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 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..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,14 +19,15 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % <% end -%> [Service] -Type=forking +Type=notify-reload +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] %> 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,15 +51,22 @@ 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=<%= 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] %>" \ + clojure.main \ + -m <%= EZBake::Config[:main_namespace] %> \ + --config "${CONFIG}" \ + --bootstrap-config "${BOOTSTRAP_CONFIG}" \ + $TK_ARGS KillMode=process <% EZBake::Config[:redhat][: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/install.sh.erb b/resources/puppetlabs/lein-ezbake/template/global/install.sh.erb index f2d626d0..b7e2b8dc 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 @@ -124,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" @@ -174,7 +172,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 +317,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 %>