homelab infrastructure services
at main 76 lines 2.5 kB view raw
1#!/bin/bash 2 3# Dry run test for machine setup 4# Shows what would be executed without making changes 5 6set -euo pipefail 7 8SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 9 10TIN_SERVICE_NAME="gazette" 11TIN_SERVICE_ENVIRONMENT="test" 12NAS_SERVER="DS412plus" 13 14log() { 15 echo "[DRY RUN] $*" 16} 17 18test_service_setup() { 19 # Calculate what would be created 20 local service_uid="11110" # gazette:test 21 local service_user="${TIN_SERVICE_NAME}-${TIN_SERVICE_ENVIRONMENT}" 22 local sheet="${TIN_SHEET:-topsheet}" 23 local nfs_export="/volume1/tinsnip/${sheet}/${TIN_SERVICE_NAME}/${TIN_SERVICE_ENVIRONMENT}" 24 25 log "Service Setup Dry Run" 26 log "====================" 27 log "Service: $TIN_SERVICE_NAME" 28 log "Environment: $TIN_SERVICE_ENVIRONMENT" 29 log "NAS Server: $NAS_SERVER" 30 log "" 31 32 log "Would create user: $service_user (UID: $service_uid)" 33 log "Would run: sudo useradd -u $service_uid -s /bin/bash -m $service_user" 34 log "" 35 36 log "Would install NFS dependencies:" 37 log " sudo apt-get update -qq" 38 log " sudo apt-get install -y nfs-common" 39 log "" 40 41 log "Would mount NFS:" 42 log " sudo mkdir -p /mnt/docker" 43 log " sudo mount -t nfs ${NAS_SERVER}:${nfs_export} /mnt/docker" 44 log "" 45 46 log "Would create XDG symlinks:" 47 log " mkdir -p ~/.local/state/${sheet}" 48 log " mkdir -p ~/.local/share/${sheet}" 49 log " mkdir -p ~/.config/${sheet}" 50 log " ln -sfn /mnt/docker/state ~/.local/state/${sheet}/@${TIN_SERVICE_NAME}" 51 log " ln -sfn /mnt/docker/data ~/.local/share/${sheet}/@${TIN_SERVICE_NAME}" 52 log " ln -sfn /mnt/docker/config ~/.config/${sheet}/@${TIN_SERVICE_NAME}" 53 log "" 54 55 log "Would install rootless Docker for $service_user:" 56 log " sudo -u $service_user curl -fsSL https://get.docker.com/rootless | sh" 57 log " sudo setcap cap_net_bind_service=ep \$(which rootlesskit)" 58 log " sudo -u $service_user systemctl --user enable docker.service" 59 log "" 60 61 log "Final state would be:" 62 log " User: $service_user (UID: $service_uid)" 63 log " Mount: /mnt/docker -> ${NAS_SERVER}:${nfs_export}" 64 log " Docker: Rootless with privileged ports" 65 log " XDG: ~/.local/{state,share,config}/${sheet}/@${TIN_SERVICE_NAME}" 66} 67 68main() { 69 test_service_setup 70 71 echo 72 echo "To run actual setup:" 73 echo " $SCRIPT_DIR/setup.sh $TIN_SERVICE_NAME $TIN_SERVICE_ENVIRONMENT $NAS_SERVER" 74} 75 76main "$@"