homelab infrastructure services

Complete service deployment improvements - Fix Docker install to handle systemd user session failures - Add automatic service definition copying during setup - Improved logging and user guidance - Service catalog now accessible to service users

Fixes all major pain points discovered during real deployment:
- NFS detection logic improved
- Script path issues resolved
- Docker systemd issues handled- Service catalog access automated

+59 -7
+17 -5
machine/scripts/install_docker.sh
··· 79 79 80 80 # Enable systemd user session if needed 81 81 if ! systemctl --user status >/dev/null 2>&1; then 82 - echo "Starting systemd user session..." 82 + echo "Systemd user session not available, using manual start..." 83 + # Set up for manual Docker start 84 + echo 'export XDG_RUNTIME_DIR="$HOME/.docker/run"' >> ~/.bashrc 85 + echo 'export DOCKER_HOST="unix://$XDG_RUNTIME_DIR/docker.sock"' >> ~/.bashrc 86 + 87 + # Create XDG_RUNTIME_DIR 88 + mkdir -p "$HOME/.docker/run" 89 + export XDG_RUNTIME_DIR="$HOME/.docker/run" 90 + export DOCKER_HOST="unix://$XDG_RUNTIME_DIR/docker.sock" 91 + 92 + # Start Docker manually 93 + dockerd-rootless.sh & 94 + sleep 5 95 + else 96 + # Systemd is available 83 97 loginctl enable-linger $(whoami) 98 + systemctl --user enable docker.service 99 + systemctl --user start docker.service 84 100 fi 85 - 86 - # Enable Docker service 87 - systemctl --user enable docker.service 88 - systemctl --user start docker.service 89 101 90 102 # Wait for Docker to start 91 103 sleep 5
+42 -2
machine/scripts/setup_service.sh
··· 65 65 fi 66 66 } 67 67 68 + copy_service_definition() { 69 + local service_name="$1" 70 + local service_user="$2" 71 + 72 + # Look for service definition in common locations 73 + local service_catalog_dirs=( 74 + "$HOME/.local/opt/dynamicalsystem.service" 75 + "/opt/dynamicalsystem/service" 76 + "$(dirname "$SCRIPT_DIR")/../service" 77 + ) 78 + 79 + local found_service="" 80 + for catalog_dir in "${service_catalog_dirs[@]}"; do 81 + if [[ -d "$catalog_dir/$service_name" ]]; then 82 + found_service="$catalog_dir/$service_name" 83 + log "Found service definition: $found_service" 84 + break 85 + fi 86 + done 87 + 88 + if [[ -n "$found_service" ]]; then 89 + # Copy service definition to NFS mount 90 + log "Copying service definition to /mnt/docker/service/$service_name/" 91 + mkdir -p "/mnt/docker/service/$service_name" 92 + cp -r "$found_service"/* "/mnt/docker/service/$service_name/" 93 + chown -R "$service_user:$service_user" "/mnt/docker/service/$service_name" 94 + log "Service definition ready for deployment" 95 + else 96 + log "No service definition found for $service_name" 97 + log "You can manually add docker-compose.yml to /mnt/docker/service/$service_name/" 98 + fi 99 + } 100 + 68 101 main() { 69 102 # Validate parameters 70 103 if [[ -z "$SERVICE_NAME" || -z "$SERVICE_ENV" || -z "$NAS_SERVER" ]]; then ··· 116 149 error "Failed to install Docker" 117 150 fi 118 151 152 + # Step 3: Copy service definition if available 153 + log "Step 3: Setting up service definition..." 154 + copy_service_definition "$SERVICE_NAME" "$SERVICE_USER" 155 + 119 156 log "" 120 157 log "Service setup complete!" 121 158 log "" ··· 130 167 log " cd /mnt/docker" 131 168 log " docker run hello-world" 132 169 log "" 133 - log "To deploy services, create docker-compose.yml files in:" 134 - log " /mnt/docker/service/" 170 + log "To deploy the $SERVICE_NAME service:" 171 + log " sudo -u $SERVICE_USER -i" 172 + log " cd /mnt/docker/service/$SERVICE_NAME" 173 + log " ./setup.sh # If available" 174 + log " docker compose up -d" 135 175 } 136 176 137 177 main "$@"