#!/bin/sh -e BIN_DIR="/usr/local/bin" ETC_DIR="/etc" # Ensure the target bin dir exists # Care, we never want to remove it :-D __directory "${BIN_DIR}" \ --state "exists" \ --mode 0755 export require="${require} __directory${BIN_DIR}" STATE="$(cat "${__object}/parameter/state")" USER="$(cat "${__object}/parameter/user")" GROUP="$(cat "${__object}/parameter/group" 2>/dev/null || true)" if [ -z "${GROUP}" ]; then GROUP="${USER}" fi SERVICE_NAME="${__object_id}" BINARY="$(cat "${__object}/parameter/binary" 2>/dev/null || true)" if [ -z "${BINARY}" ]; then BINARY="${SERVICE_NAME}" fi EXTRA_BINARIES="$(cat "${__object}/parameter/extra-binary" 2>/dev/null || true)" # This only makes sense for file archives if [ -n "${EXTRA_BINARIES}" ] && [ -f "${__object}/parameter/unpack" ]; then cat >> /dev/stderr <<-EOF You cannot specify extra binaries without the --unpack argument. Make sure that the --url argument points to a file archive. EOF fi SERVICE_EXEC="$(cat "${__object}/parameter/service-exec" 2>/dev/null || true)" if [ -z "${SERVICE_EXEC}" ]; then SERVICE_EXEC="${BIN_DIR}/${BINARY}" fi SERVICE_EXEC="${SERVICE_EXEC} $(cat "${__object}/parameter/service-args")" SERVICE_DESCRIPTION="$(cat "${__object}/parameter/service-description" \ 2>/dev/null || true)" if [ -z "${SERVICE_DESCRIPTION}" ]; then SERVICE_DESCRIPTION="cdist-managed '${SERVICE_NAME}' service" fi DOWNLOAD_URL="$(cat "${__object}/parameter/url")" CHECKSUM="$(cat "${__object}/parameter/checksum")" SHOULD_VERSION="$(cat "${__object}/parameter/version")" # Create a user for the service if it is not root if [ "${USER}" != "root" ] && \ [ ! -f "${__object}/parameter/do-not-manage-user" ]; then if [ "${STATE}" = "absent" ]; then # When removing, ensure user is not being used user_require="__systemd_unit/${SERVICE_NAME}.service" fi require="${require} ${user_require}" __user "${USER}" \ --system \ --state "${STATE}" \ --home /nonexistent \ --comment "cdist-managed ${SERVICE_NAME} user" # Track dependencies service_require="${service_require} __user/${USER}" fi # Place config file if necessary CONFIG_FILE_DEST="${ETC_DIR}/${SERVICE_NAME}.conf" CONFIG_FILE_SOURCE="$(cat "${__object}/parameter/config-file-source" 2>/dev/null || true)" if [ "${CONFIG_FILE_SOURCE}" = "-" ]; then CONFIG_FILE_SOURCE="${__object}/stdin" fi if [ -n "${CONFIG_FILE_SOURCE}" ] && [ "${STATE}" = "present" ]; then require="${require} __user/${USER}" __file \ "${CONFIG_FILE_DEST}" \ --owner "${USER}" \ --group "${GROUP}" \ --mode "0440" \ --source "${CONFIG_FILE_SOURCE}" service_required="${service_required} __file${CONFIG_FILE_DEST}" fi # TODO: Support non-systemd __systemd_unit "${SERVICE_NAME}.service" \ --source "-" \ --state "${STATE}" \ --restart \ --enablement-state "enabled" </dev/null || true)" # Download packed file __download "${TMP_PATH}.tar.gz" \ --url "${DOWNLOAD_URL}" \ --download remote \ --sum "${CHECKSUM}" # Unpack file and also perform service upgrade # shellcheck disable=SC2086 require="__download${TMP_PATH}.tar.gz" \ __unpack "${TMP_PATH}.tar.gz" \ ${UNPACK_ARGS} \ --destination "${TMP_PATH}" \ --onchange "$(cat <