From 2ad7dbb1ca16603c347bc1b8dffd49858c67a077 Mon Sep 17 00:00:00 2001 From: "o.omahony" Date: Tue, 6 Sep 2022 14:14:44 +0100 Subject: [PATCH 1/4] tidying of install scripts --- scripts/packages/nginx-agent | 6 +-- scripts/packages/packager/local-entrypoint.sh | 2 +- .../packages/packager/signed-entrypoint.sh | 12 +++--- scripts/packages/postinstall.sh | 6 ++- scripts/packages/postremove.sh | 4 +- scripts/packages/preinstall.sh | 40 ++++++++++--------- 6 files changed, 38 insertions(+), 32 deletions(-) diff --git a/scripts/packages/nginx-agent b/scripts/packages/nginx-agent index 9079399d4..ccddbd7b9 100644 --- a/scripts/packages/nginx-agent +++ b/scripts/packages/nginx-agent @@ -7,7 +7,7 @@ # Enable this script by adding: # nginx_agent_enable="YES" # ... to /etc/rc.conf - +# shellcheck source=/dev/null . /etc/rc.subr name=nginx_agent @@ -26,12 +26,12 @@ start_agent() { } stop_agent() { - /bin/kill -2 $(cat $pidfile) + /bin/kill -2 "$(cat $pidfile)" } status_agent() { if [ -e $pidfile ]; then - echo $name is running on PID $(cat $pidfile) + echo $name is running on PID "$(cat $pidfile)" else echo $name is not running return 1 diff --git a/scripts/packages/packager/local-entrypoint.sh b/scripts/packages/packager/local-entrypoint.sh index f7e42c1b6..5296c87a1 100644 --- a/scripts/packages/packager/local-entrypoint.sh +++ b/scripts/packages/packager/local-entrypoint.sh @@ -30,6 +30,6 @@ pkg -o ABI="FreeBSD:13:amd64" create --format txz \ # Renaming file extension from pkg to txz. In older versions of pkg the extension would represent the format of the file # but since version 1.17.0 pkg will now always create a file with the extesion pkg no matter what the format is. # See 1.17.0 release notes for more info: https://cgit.freebsd.org/ports/commit/?id=e497a16a286972bfcab908209b11ee6a13d99dc9 -mv ./build/nginx-agent-$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v')-SNAPSHOT.pkg ./build/nginx-agent-$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v')-SNAPSHOT.txz +mv ./build/nginx-agent-"$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v')"-SNAPSHOT.pkg ./build/nginx-agent-"$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v')"-SNAPSHOT.txz rm -rf /staging diff --git a/scripts/packages/packager/signed-entrypoint.sh b/scripts/packages/packager/signed-entrypoint.sh index 7481475ed..77bc4c807 100644 --- a/scripts/packages/packager/signed-entrypoint.sh +++ b/scripts/packages/packager/signed-entrypoint.sh @@ -26,18 +26,18 @@ chmod +x staging/usr/local/etc/rc.d/nginx-agent VERSION="$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v')" envsubst < scripts/packages/manifest > staging/+MANIFEST for freebsd_abi in $FREEBSD_DISTROS; do \ - mkdir -p ./build/packages/txz/$freebsd_abi; \ - pkg -o ABI=$freebsd_abi create --format txz \ + mkdir -p ./build/packages/txz/"$freebsd_abi"; \ + pkg -o ABI="$freebsd_abi" create --format txz \ -m staging \ -r staging \ -p staging/plist \ - -o ./build/packages/txz/$freebsd_abi; \ - # create freebsd pkg repo layout \ - pkg repo ./build/packages/txz/$freebsd_abi .key.rsa; \ + -o ./build/packages/txz/"$freebsd_abi"; \ + # create freebsd pkg repo layout + pkg repo ./build/packages/txz/"$freebsd_abi" .key.rsa; \ # Renaming file extension from pkg to txz. In older versions of pkg the extension would represent the format of the file # but since version 1.17.0 pkg will now always create a file with the extesion pkg no matter what the format is. # See 1.17.0 release notes for more info: https://cgit.freebsd.org/ports/commit/?id=e497a16a286972bfcab908209b11ee6a13d99dc9 - mv ./build/packages/txz/$freebsd_abi/nginx-agent-$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v').pkg ./build/packages/txz/$freebsd_abi/nginx-agent-$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v').txz; \ + mv ./build/packages/txz/"$freebsd_abi"/nginx-agent-"$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v')".pkg ./build/packages/txz/"$freebsd_abi"/nginx-agent-"$(git describe --match 'v[0-9]*' --abbrev=0 | tr -d 'v')".txz; \ done; \ rm -rf /staging diff --git a/scripts/packages/postinstall.sh b/scripts/packages/postinstall.sh index acbebdab2..b48009f51 100755 --- a/scripts/packages/postinstall.sh +++ b/scripts/packages/postinstall.sh @@ -1,7 +1,9 @@ #!/bin/sh # Determine OS platform +# shellcheck source=/dev/null . /etc/os-release -if [ $ID = "freebsd" ]; then + +if [ "$ID" = "freebsd" ]; then BSD_HIER="/usr/local" AGENT_EXE="${BSD_HIER}/bin/nginx-agent" else @@ -142,7 +144,7 @@ echo "----------------------------------------------------------------------" echo " NGINX Agent package has been successfully installed." echo "" echo " Please follow the next steps to start the software:" -if [ $ID = "freebsd" ]; then +if [ "$ID" = "freebsd" ]; then echo " sudo service nginx-agent start" echo "" else diff --git a/scripts/packages/postremove.sh b/scripts/packages/postremove.sh index 15177da9e..f0cf3debb 100755 --- a/scripts/packages/postremove.sh +++ b/scripts/packages/postremove.sh @@ -1,7 +1,9 @@ #!/bin/sh # Determine OS platform +# shellcheck source=/dev/null . /etc/os-release -if [ $ID = "freebsd" ]; then + +if [ "$ID" = "freebsd" ]; then echo "Stop and remove nginx-agent service" service nginx-agent onestop || true sysrc -x nginx_agent_enable || true diff --git a/scripts/packages/preinstall.sh b/scripts/packages/preinstall.sh index 0cdb8eddc..fd76a2f5e 100644 --- a/scripts/packages/preinstall.sh +++ b/scripts/packages/preinstall.sh @@ -20,12 +20,14 @@ INSTANCE_GROUP="" ################################ ###### Default variables ################################ -export AGENT_GROUP=${AGENT_GROUP:-$(id -ng)} -export AGENT_INSTALL_LOG=${AGENT_INSTALL_LOG:-/tmp/agent-install.log} +export AGENT_GROUP="${AGENT_GROUP:-$(id -ng)}" +export AGENT_INSTALL_LOG="${AGENT_INSTALL_LOG:-/tmp/agent-install.log}" # Determine OS platform +# shellcheck source=/dev/null . /etc/os-release -if [ $ID = "freebsd" ]; then + +if [ "$ID" = "freebsd" ]; then AGENT_CONFIG_FILE=${AGENT_CONFIG_FILE:-"/usr/local/etc/nginx-agent/nginx-agent.conf"} AGENT_DYNAMIC_CONFIG_DIR="/usr/local/etc/nginx-agent" else @@ -147,14 +149,14 @@ load_config_values() { # If the file doesn't exist attempt to create it if [ ! -f "$AGENT_DYNAMIC_CONFIG_FILE" ]; then - printf "Could not find ${AGENT_DYNAMIC_CONFIG_FILE} ... Creating file\n" + printf "Could not find %s ... Creating file\n" ${AGENT_DYNAMIC_CONFIG_FILE} mkdir -p ${AGENT_DYNAMIC_CONFIG_DIR} - printf "${AGENT_DYNAMIC_CONFIG_COMMENT}" | tee ${AGENT_DYNAMIC_CONFIG_FILE} > /dev/null - printf "Successfully created ${AGENT_DYNAMIC_CONFIG_FILE}\n" + printf "%s" "${AGENT_DYNAMIC_CONFIG_COMMENT}" | tee ${AGENT_DYNAMIC_CONFIG_FILE} > /dev/null + printf "Successfully created %s\n" "${AGENT_DYNAMIC_CONFIG_FILE}" fi # Check if there are existing values - local _instance_group=$(grep "^instance_group:" "${AGENT_DYNAMIC_CONFIG_FILE}" | head -n 1 | cut -d : -f 2 | sed "s/^[[:space:]]//") + _instance_group="$(grep "^instance_group:" "${AGENT_DYNAMIC_CONFIG_FILE}" | head -n 1 | cut -d : -f 2 | sed "s/^[[:space:]]//")" if [ "$_instance_group" ] && [ ! "${INSTANCE_GROUP}" ]; then INSTANCE_GROUP=$_instance_group @@ -165,8 +167,8 @@ update_config_file() { agent_config_updated="" dynamic_config_updated="" - printf "Updating ${AGENT_DYNAMIC_CONFIG_FILE} ...\n" - local sed_cmd="sed -i.bak " + printf "Updating %s ...\n" "${AGENT_DYNAMIC_CONFIG_FILE}" + sed_cmd="sed -i.bak " if [ ! -f "$AGENT_CONFIG_FILE" ]; then err_exit "$AGENT_CONFIG_FILE does not exist" fi @@ -180,10 +182,10 @@ update_config_file() { # Check the instance group and set accordingly if [ "${INSTANCE_GROUP}" ]; then if [ "$(grep -cP '^(?=[\s]*+[^#])[^#]*(instance_group)' "${AGENT_DYNAMIC_CONFIG_FILE}")" -ge 1 ]; then - printf "Setting existing instance_group: ${INSTANCE_GROUP}\n" + printf "Setting existing instance_group: %s\n" "${INSTANCE_GROUP}" ${sed_cmd} "/^[[:space:]]*#/!s/\(instance_group:.*\)/instance_group: ${INSTANCE_GROUP}/g" "${AGENT_DYNAMIC_CONFIG_FILE}" else - printf "Setting instance_group: ${INSTANCE_GROUP}\n" + printf "Setting instance_group: %s\n" "${INSTANCE_GROUP}" printf "instance_group: %s\n" "${INSTANCE_GROUP}" >> "${AGENT_DYNAMIC_CONFIG_FILE}" fi dynamic_config_updated="true" @@ -192,25 +194,25 @@ update_config_file() { # Check the log-level and set accordingly if [ "${LOG_LEVEL}" ]; then if [ "$(grep -cP '^(?=[\s]*+[^#])[^#]*(level:)' "${AGENT_CONFIG_FILE}")" -ge 1 ]; then - printf "Setting existing log level: ${LOG_LEVEL}\n" + printf "Setting existing log level: %s\n" ${LOG_LEVEL} ${sed_cmd} "/^[[:space:]]*#/!s/\(level:.*\)/level: ${LOG_LEVEL}/g" "${AGENT_CONFIG_FILE}" else - printf "Setting log level: ${LOG_LEVEL}\n" - local log_level_replacement="s/^log:/log:\\ + printf "Setting log level: %s\n" "${LOG_LEVEL}" + _log_level_replacement="s/^log:/log:\\ level: ${LOG_LEVEL}/" - ${sed_cmd} "${log_level_replacement}" "${AGENT_CONFIG_FILE}" - printf "Successfully updated ${AGENT_CONFIG_FILE} \n" + ${sed_cmd} "${_log_level_replacement}" "${AGENT_CONFIG_FILE}" + printf "Successfully updated %s\n" "${AGENT_CONFIG_FILE}" fi agent_config_updated="true" fi if [ "${dynamic_config_updated=}" ]; then - printf "Successfully updated ${AGENT_DYNAMIC_CONFIG_FILE}\n" + printf "Successfully updated %s\n" "${AGENT_DYNAMIC_CONFIG_FILE}" fi if [ "${agent_config_updated=}" ]; then - printf "Successfully updated ${AGENT_CONFIG_FILE}\n" + printf "Successfully updated %s\n" "${AGENT_CONFIG_FILE}" fi } @@ -223,4 +225,4 @@ update_config_file() { ensure_sudo load_config_values update_config_file -} | tee ${AGENT_INSTALL_LOG} +} | tee "${AGENT_INSTALL_LOG}" From 0bde008fcf1a06ce7a2130ea591c4b993af380e4 Mon Sep 17 00:00:00 2001 From: "o.omahony" Date: Tue, 6 Sep 2022 14:33:47 +0100 Subject: [PATCH 2/4] added sym link between /var/run and /run --- .nfpm.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.nfpm.yaml b/.nfpm.yaml index 215eb56db..1f4fc1bfc 100644 --- a/.nfpm.yaml +++ b/.nfpm.yaml @@ -29,6 +29,9 @@ contents: packager: rpm - dst: /var/log/nginx-agent type: dir + - src: /var/run/nginx-agent + dst: /run/nginx-agent + type: "symlink" overrides: deb: depends: From 03974b9b292f94b78a0a2299e07432ec6a515974 Mon Sep 17 00:00:00 2001 From: "o.omahony" Date: Wed, 7 Sep 2022 14:16:00 +0100 Subject: [PATCH 3/4] suggested changes from review --- scripts/packages/postinstall.sh | 2 +- scripts/packages/preinstall.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/packages/postinstall.sh b/scripts/packages/postinstall.sh index b48009f51..9af8cb5cf 100755 --- a/scripts/packages/postinstall.sh +++ b/scripts/packages/postinstall.sh @@ -135,7 +135,7 @@ if command -v systemctl; then systemctl enable "${AGENT_UNIT_FILE}" fi -if [ $ID = "freebsd" ]; then +if [ "$ID" = "freebsd" ]; then printf "PostInstall: Enabling NGINX Agent Service\n" sysrc nginx_agent_enable=YES fi diff --git a/scripts/packages/preinstall.sh b/scripts/packages/preinstall.sh index fd76a2f5e..bfa8894ff 100644 --- a/scripts/packages/preinstall.sh +++ b/scripts/packages/preinstall.sh @@ -129,7 +129,7 @@ parse_args() { done if [ "$valid_log_level" != "true" ]; then - printf "Exiting due to invalid option ($1) for -o | --log-level. Please select a valid option: trace, debug, info, error, fatal, panic.\n" + printf "Exiting due to invalid option (%s) for -o | --log-level. Please select a valid option: trace, debug, info, error, fatal, panic.\n" "$1" exit 1 fi @@ -194,7 +194,7 @@ update_config_file() { # Check the log-level and set accordingly if [ "${LOG_LEVEL}" ]; then if [ "$(grep -cP '^(?=[\s]*+[^#])[^#]*(level:)' "${AGENT_CONFIG_FILE}")" -ge 1 ]; then - printf "Setting existing log level: %s\n" ${LOG_LEVEL} + printf "Setting existing log level: %s\n" "${LOG_LEVEL}" ${sed_cmd} "/^[[:space:]]*#/!s/\(level:.*\)/level: ${LOG_LEVEL}/g" "${AGENT_CONFIG_FILE}" else printf "Setting log level: %s\n" "${LOG_LEVEL}" From 2e48e6536096138fa0849f360484e15c99a71423 Mon Sep 17 00:00:00 2001 From: "o.omahony" Date: Thu, 8 Sep 2022 10:46:01 +0100 Subject: [PATCH 4/4] removed print help from preinstall --- scripts/packages/preinstall.sh | 63 +--------------------------------- 1 file changed, 1 insertion(+), 62 deletions(-) diff --git a/scripts/packages/preinstall.sh b/scripts/packages/preinstall.sh index bfa8894ff..10c9f255e 100644 --- a/scripts/packages/preinstall.sh +++ b/scripts/packages/preinstall.sh @@ -1,15 +1,11 @@ #!/bin/sh set -e -# Copyright (C) Nginx, Inc. 2021. +# Copyright (C) Nginx, Inc. 2022. # # Description: # NGINX Agent install script for downloading the NGINX Agent package from the appropriate repository # -# args: -# $INSTANCE_GROUP | -g | --instance-group Instance group name (e.g. nginx-01) -# $LOG_LEVEL | -o | --log-level Log level for this script (info; trace; debug; error; fatal; panic;) - ################################ ###### Changeable variables ################################ @@ -73,22 +69,6 @@ title() { sleep 5 } -print_help() { - title - cat <] [-o | --log-level default: info; trace; debug; error; fatal; panic] - - -Options: - -g | --instance-group Instance group name (e.g. nginx-01) - -o | --log-level Logging level of nginx-agent (default: info; trace; debug; error; fatal; panic) -} -EOF -} - ensure_sudo() { if [ "$(id -u)" = "0" ]; then echo "Sudo permissions detected" @@ -105,46 +85,6 @@ is_empty() { return 1 } -parse_args() { - while [ "$1" != "" ]; do - arg=$1 - case "$arg" in - -g | --instance-group) - [ "$#" -eq 1 ] && print_help && err_exit "\nMissing value for '$arg'" - shift - is_empty "$arg" "$1" && shift && continue - INSTANCE_GROUP=$1 - printf "Overriding instance_group value from command line: %s ...\n" "${INSTANCE_GROUP}" - ;; - -o | --log-level) - [ "$#" -eq 1 ] && print_help && err_exit "\nMissing value for '$arg'" - shift - is_empty "$arg" "$1" && shift && continue - - valid_log_level="false" - for LEVEL in ${ALLOWABLE_LOG_LEVELS}; do - if [ "$LEVEL" = "$1" ]; then - valid_log_level="true" - fi - done - - if [ "$valid_log_level" != "true" ]; then - printf "Exiting due to invalid option (%s) for -o | --log-level. Please select a valid option: trace, debug, info, error, fatal, panic.\n" "$1" - exit 1 - fi - - LOG_LEVEL=$1 - printf "Overriding log-level value from command line: %s ...\n" "${LOG_LEVEL}" - ;; - *) - print_help - exit 0 - ;; - esac - shift - done -} - load_config_values() { # If the file doesn't exist attempt to create it @@ -220,7 +160,6 @@ update_config_file() { # Main body of the script # { - parse_args "$@" title ensure_sudo load_config_values