#!/bin/sh # postinst — twiy package ONLY (twiy-raweb uses postinst-raweb). # # Config files live under /nginx but are NOT tracked by dpkg. The package # ships an empty /nginx skeleton (so dpkg keeps the dirs across upgrades) plus # a pristine copy of every config under /usr/share/twiy/defaults/nginx. # # Config policy for twiy: # - target present (identical OR admin-edited) -> NEVER replace; leave as-is. # - target absent -> ASK the admin (per file, # Y/N) and only create it on Y. # We never drop .new and we never overwrite an existing config, so an # upgrade can never change an admin-edited config. # # /hostdata is left entirely to the admin: we only make sure the dir exists, # and we never touch or remove its contents. set -e # Ask the admin a yes/no question on the controlling terminal. Defaults to # "no" (return 1) whenever we cannot prompt — noninteractive frontend or no # usable terminal — so a config is never created without explicit consent. prompt_yes_no() { msg="$1" if [ "${DEBIAN_FRONTEND:-}" = noninteractive ] || [ ! -r /dev/tty ]; then echo "twiy: $msg -> skipped (noninteractive)" return 1 fi printf 'twiy: %s [y/N] ' "$msg" > /dev/tty read ans < /dev/tty || ans="" case "$ans" in [Yy]|[Yy][Ee][Ss]) return 0 ;; *) return 1 ;; esac } useradd -r -s /bin/false nginx 2>/dev/null || true # Existing dirs are left exactly as they are (mkdir -p is a no-op then). mkdir -p /nginx /hostdata # Migration: older releases shipped /nginx/* as dpkg-tracked files, so the # upgrade unpack deletes them before this script runs. preinst stashed a copy # first — restore the admin's own files now, without clobbering anything # already present (cp -n). This only puts back what dpkg removed; it never # introduces new packaged defaults, so no prompt is needed here. if [ -d /var/backups/twiy-nginx ]; then cp -an /var/backups/twiy-nginx/. /nginx/ 2>/dev/null || true rm -rf /var/backups/twiy-nginx fi # Seed packaged defaults: # - target present -> do nothing (never replace, no .new). # - target absent -> ask the admin; create it only if they answer yes. seed_tree() { stash="$1" target="$2" [ -d "$stash" ] || return 0 find "$stash" -type f | while IFS= read -r src; do rel=${src#$stash/} dst="$target/$rel" if [ -e "$dst" ]; then continue fi if prompt_yes_no "config '$dst' does not exist. Create it from the packaged default?"; then install -d "$(dirname "$dst")" cp -p "$src" "$dst" echo "twiy: created $dst" else echo "twiy: skipped $dst" fi done } seed_tree /usr/share/twiy/defaults/nginx /nginx install -d /nginx/conf.d /nginx/config install -d -o nginx -g nginx -m 0755 /var/log/nginx chown -R nginx:nginx /var/log/nginx /nginx 2>/dev/null || true systemctl daemon-reload 2>/dev/null || true systemctl enable nginx.service 2>/dev/null || true systemctl restart nginx.service 2>/dev/null || true exit 0