homelab infrastructure services
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 "$@"