Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .nfpm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
6 changes: 3 additions & 3 deletions scripts/packages/nginx-agent
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion scripts/packages/packager/local-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
12 changes: 6 additions & 6 deletions scripts/packages/packager/signed-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
8 changes: 5 additions & 3 deletions scripts/packages/postinstall.sh
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -133,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
Expand All @@ -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
Expand Down
4 changes: 3 additions & 1 deletion scripts/packages/postremove.sh
Original file line number Diff line number Diff line change
@@ -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
Expand Down
103 changes: 22 additions & 81 deletions scripts/packages/preinstall.sh
Original file line number Diff line number Diff line change
@@ -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
################################
Expand All @@ -20,12 +16,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
Expand Down Expand Up @@ -71,22 +69,6 @@ title() {
sleep 5
}

print_help() {
title
cat <<EOF
Install NGINX Agent.

Usage:
$(basename "$0") [-g | --instance-group <instance_group>] [-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"
Expand All @@ -103,58 +85,18 @@ 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 ($1) for -o | --log-level. Please select a valid option: trace, debug, info, error, fatal, panic.\n"
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
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
Expand All @@ -165,8 +107,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
Expand All @@ -180,10 +122,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"
Expand All @@ -192,35 +134,34 @@ 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
}

#
# Main body of the script
#
{
parse_args "$@"
title
ensure_sudo
load_config_values
update_config_file
} | tee ${AGENT_INSTALL_LOG}
} | tee "${AGENT_INSTALL_LOG}"