#!/usr/bin/env bash # SPDX-License-Identifier: Apache-2.0 # # Renders the systemd unit templates deploy/systemd/*.service.in (ADR 0024). # # Usage: scripts/render-units.sh # writes /.service, .service and # .service with @BINDIR@ = . # # Names come from the environment (set by the Makefile, ADR 0018): PRODUCT, # DISPLAY_NAME, BIN_SERVER, BIN_AGENT_DNS, BIN_AGENT_DHCP, ENV_PREFIX. set -euo pipefail if [[ $# -ne 2 ]]; then sed -n '4,11p' "$0" | sed 's/^# \{0,1\}//' >&2 exit 2 fi bindir="$1" outdir="$2" PRODUCT="${PRODUCT:-ddi-suite}" DISPLAY_NAME="${DISPLAY_NAME:-DDI-Suite}" BIN_SERVER="${BIN_SERVER:-ddi-server}" BIN_AGENT_DNS="${BIN_AGENT_DNS:-ddi-agent-dns}" BIN_AGENT_DHCP="${BIN_AGENT_DHCP:-ddi-agent-dhcp}" ENV_PREFIX="${ENV_PREFIX:-DDI_}" # Values end up in sed replacements: allow only safe characters. for v in "$bindir" "$PRODUCT" "$BIN_SERVER" "$BIN_AGENT_DNS" "$BIN_AGENT_DHCP" "$ENV_PREFIX"; do [[ "$v" =~ ^[A-Za-z0-9._/+-]+$ ]] || { echo "unsafe value: $v" >&2; exit 2; } done [[ "$DISPLAY_NAME" =~ ^[A-Za-z0-9\ ._+-]+$ ]] || { echo "unsafe display name: $DISPLAY_NAME" >&2; exit 2; } src="$(cd "$(dirname "$0")/../deploy/systemd" && pwd)" mkdir -p "$outdir" render() { sed -e "s|@PRODUCT@|$PRODUCT|g" -e "s|@DISPLAY_NAME@|$DISPLAY_NAME|g" \ -e "s|@BIN_SERVER@|$BIN_SERVER|g" -e "s|@BIN_AGENT_DNS@|$BIN_AGENT_DNS|g" \ -e "s|@BIN_AGENT_DHCP@|$BIN_AGENT_DHCP|g" -e "s|@BINDIR@|$bindir|g" \ -e "s|@CONFIG_DIR@|/etc/$PRODUCT|g" -e "s|@ENV_PREFIX@|$ENV_PREFIX|g" \ "$src/$1" >"$outdir/$2" if grep -q '@[A-Z_]*@' "$outdir/$2"; then echo "unreplaced placeholder in $2" >&2 exit 1 fi } render server.service.in "$BIN_SERVER.service" render agent-dns.service.in "$BIN_AGENT_DNS.service" render agent-dhcp.service.in "$BIN_AGENT_DHCP.service"