#!/usr/bin/env bash # # postinstall-frontend.bash - Post-installation script for zrok2-frontend package # set -euo pipefail # Package-specific configuration SERVICE_NAME="zrok2-frontend" SERVICE_USER="zrok2-frontend" SERVICE_GROUP="zrok2-frontend" SERVICE_HOME="/var/lib/zrok2-frontend" ADDITIONAL_GROUPS="" # Initialize debug output : "${DEBUG:=0}" if (( DEBUG )); then exec 3>&1 set -o xtrace else exec 3>/dev/null fi # Function to create service user and group create_service_user() { echo "Creating service user and group..." >&3 # Create group if it doesn't exist if ! getent group "${SERVICE_GROUP}" >/dev/null 2>&1; then groupadd --system "${SERVICE_GROUP}" echo "Created group: ${SERVICE_GROUP}" >&3 fi # Create user if it doesn't exist if ! getent passwd "${SERVICE_USER}" >/dev/null 2>&1; then if [[ -n "${ADDITIONAL_GROUPS}" ]]; then useradd --system \ --gid "${SERVICE_GROUP}" \ --groups "${ADDITIONAL_GROUPS}" \ --home-dir "${SERVICE_HOME}" \ --create-home \ --shell /usr/sbin/nologin \ --comment "zrok2 service user" \ "${SERVICE_USER}" else useradd --system \ --gid "${SERVICE_GROUP}" \ --home-dir "${SERVICE_HOME}" \ --create-home \ --shell /usr/sbin/nologin \ --comment "zrok2 service user" \ "${SERVICE_USER}" fi echo "Created user: ${SERVICE_USER}" >&3 else # User exists, add to additional groups if specified if [[ -n "${ADDITIONAL_GROUPS}" ]]; then usermod --append --groups "${ADDITIONAL_GROUPS}" "${SERVICE_USER}" echo "Added ${SERVICE_USER} to groups: ${ADDITIONAL_GROUPS}" >&3 fi fi # Ensure home directory exists and has correct permissions if [[ ! -d "${SERVICE_HOME}" ]]; then mkdir -p "${SERVICE_HOME}" echo "Created home directory: ${SERVICE_HOME}" >&3 fi chown "${SERVICE_USER}:${SERVICE_GROUP}" "${SERVICE_HOME}" chmod 750 "${SERVICE_HOME}" # Ensure config directory exists and has correct permissions if [[ ! -d "/etc/zrok2" ]]; then mkdir -p "/etc/zrok2" echo "Created config directory: /etc/zrok2" >&3 fi chown root:root "/etc/zrok2" chmod 755 "/etc/zrok2" } # Function to handle clean installation install() { echo "Performing clean installation setup for ${SERVICE_NAME}..." >&3 create_service_user # Reload systemd if command -v systemctl >/dev/null 2>&1; then systemctl daemon-reload echo "Systemd reloaded. Enable and start service as needed:" >&3 echo " systemctl enable --now ${SERVICE_NAME}" >&3 fi } # Function to handle upgrade upgrade() { echo "Performing upgrade setup for ${SERVICE_NAME}..." >&3 create_service_user # Reload systemd and restart service if running if command -v systemctl >/dev/null 2>&1; then systemctl daemon-reload if systemctl is-active --quiet "${SERVICE_NAME}.service" 2>/dev/null; then echo "Restarting ${SERVICE_NAME} service..." >&3 systemctl restart "${SERVICE_NAME}.service" fi fi } # Main script logic main() { # Determine action based on package manager parameters if (( $# )); then if [[ $1 == 1 || ($1 == configure && -z ${2:-}) ]]; then # RPM: $1=1 for install, DEB: $1=configure with no $2 for install action=install elif [[ $1 == 2 || ($1 == configure && -n ${2:-}) ]]; then # RPM: $1=2 for upgrade, DEB: $1=configure with $2=version for upgrade action=upgrade else echo "ERROR: unexpected action '$1'" >&2 exit 1 fi else echo "ERROR: missing action parameter" >&2 exit 1 fi case "$action" in "install") install printf "\033[32mCompleted clean install of ${SERVICE_NAME}\033[0m\n" ;; "upgrade") upgrade printf "\033[32mCompleted upgrade of ${SERVICE_NAME}\033[0m\n" ;; esac } # Run main function with all arguments main "$@"