#!/bin/bash set -e # Init script to copy configuration files to the correct locations # This handles the discrepancy between where K8s mounts configs # and where the socktop package expects them (HOME directory) echo "===================================" echo "Initializing socktop webterm config" echo "===================================" # Determine the actual HOME directory for the socktop user SOCKTOP_HOME=$(eval echo ~socktop) echo "Socktop HOME: ${SOCKTOP_HOME}" echo "Current user: $(whoami) (UID: $(id -u))" # Check if we're running as root if [ "$(id -u)" -eq 0 ]; then echo "Running as root, will create directories and set permissions" # Check if socktop home exists and try to ensure it's accessible if [ ! -d "${SOCKTOP_HOME}" ]; then echo "Creating ${SOCKTOP_HOME}..." mkdir -p "${SOCKTOP_HOME}" chown socktop:socktop "${SOCKTOP_HOME}" 2>/dev/null || echo " ⚠ Could not change ownership of home directory (may be restricted)" else echo " ✓ Home directory exists" # Try to fix ownership if possible, but don't fail if we can't chown socktop:socktop "${SOCKTOP_HOME}" 2>/dev/null || echo " ⚠ Could not change ownership of home directory (may be restricted by security context)" fi # Create config directories with proper structure echo "Creating config directories..." mkdir -p "${SOCKTOP_HOME}/.config/socktop/certs" 2>/dev/null || true mkdir -p "${SOCKTOP_HOME}/.config/alacritty" 2>/dev/null || true # Try to fix ownership recursively, ignore errors chown -R socktop:socktop "${SOCKTOP_HOME}/.config" 2>/dev/null || echo " ⚠ Could not change ownership of .config directory (may be restricted)" # Ensure directories are writable by socktop user at minimum chmod -R u+rwX "${SOCKTOP_HOME}/.config" 2>/dev/null || true echo " ✓ Created directories" else echo "Running as non-root user ($(id -u)), creating directories" # Try to create directories - will work if HOME is writable mkdir -p "${SOCKTOP_HOME}/.config/socktop/certs" 2>/dev/null || { echo " ⚠ Could not create directories - checking if they already exist..." if [ -d "${SOCKTOP_HOME}/.config/socktop/certs" ]; then echo " ✓ Directories already exist" else echo " ✗ Failed to create directories and they don't exist" echo " Attempting to continue anyway..." fi } mkdir -p "${SOCKTOP_HOME}/.config/alacritty" 2>/dev/null || true fi # Copy configuration files echo "Copying configuration files..." # Copy profiles.json if [ -f "/home/socktop/.config/socktop/profiles.json" ]; then TARGET="${SOCKTOP_HOME}/.config/socktop/profiles.json" # Remove existing file if it exists rm -f "${TARGET}" 2>/dev/null || true if [ "$(id -u)" -eq 0 ]; then # Running as root - copy and set ownership cp -f /home/socktop/.config/socktop/profiles.json "${TARGET}" 2>/dev/null || { echo " ⚠ Failed to copy profiles.json, trying alternative method..." cat /home/socktop/.config/socktop/profiles.json > "${TARGET}" 2>/dev/null || echo " ✗ Could not copy profiles.json" } chown socktop:socktop "${TARGET}" 2>/dev/null || true chmod 644 "${TARGET}" 2>/dev/null || true else # Running as socktop user cp -f /home/socktop/.config/socktop/profiles.json "${TARGET}" 2>/dev/null || { cat /home/socktop/.config/socktop/profiles.json > "${TARGET}" 2>/dev/null || echo " ✗ Could not copy profiles.json" } fi if [ -f "${TARGET}" ]; then echo " ✓ Copied profiles.json" fi else echo " ⚠ profiles.json not found at mount point" fi # Copy alacritty.toml if [ -f "/home/socktop/.config/alacritty/alacritty.toml" ]; then TARGET="${SOCKTOP_HOME}/.config/alacritty/alacritty.toml" rm -f "${TARGET}" 2>/dev/null || true if [ "$(id -u)" -eq 0 ]; then cp -f /home/socktop/.config/alacritty/alacritty.toml "${TARGET}" 2>/dev/null || cat /home/socktop/.config/alacritty/alacritty.toml > "${TARGET}" 2>/dev/null || true chown socktop:socktop "${TARGET}" 2>/dev/null || true chmod 644 "${TARGET}" 2>/dev/null || true else cp -f /home/socktop/.config/alacritty/alacritty.toml "${TARGET}" 2>/dev/null || cat /home/socktop/.config/alacritty/alacritty.toml > "${TARGET}" 2>/dev/null || true fi if [ -f "${TARGET}" ]; then echo " ✓ Copied alacritty.toml" fi else echo " ⚠ alacritty.toml not found at mount point" fi # Copy catppuccin-frappe.toml if [ -f "/home/socktop/.config/alacritty/catppuccin-frappe.toml" ]; then TARGET="${SOCKTOP_HOME}/.config/alacritty/catppuccin-frappe.toml" rm -f "${TARGET}" 2>/dev/null || true if [ "$(id -u)" -eq 0 ]; then cp -f /home/socktop/.config/alacritty/catppuccin-frappe.toml "${TARGET}" 2>/dev/null || cat /home/socktop/.config/alacritty/catppuccin-frappe.toml > "${TARGET}" 2>/dev/null || true chown socktop:socktop "${TARGET}" 2>/dev/null || true chmod 644 "${TARGET}" 2>/dev/null || true else cp -f /home/socktop/.config/alacritty/catppuccin-frappe.toml "${TARGET}" 2>/dev/null || cat /home/socktop/.config/alacritty/catppuccin-frappe.toml > "${TARGET}" 2>/dev/null || true fi if [ -f "${TARGET}" ]; then echo " ✓ Copied catppuccin-frappe.toml" fi else echo " ⚠ catppuccin-frappe.toml not found at mount point" fi # Copy certificates if they exist if [ -d "/home/socktop/.config/socktop/certs" ]; then echo "Copying certificates..." for cert in /home/socktop/.config/socktop/certs/*.pem; do if [ -f "$cert" ]; then TARGET="${SOCKTOP_HOME}/.config/socktop/certs/$(basename "$cert")" rm -f "${TARGET}" 2>/dev/null || true if [ "$(id -u)" -eq 0 ]; then cp -f "$cert" "${TARGET}" 2>/dev/null || cat "$cert" > "${TARGET}" 2>/dev/null || true chown socktop:socktop "${TARGET}" 2>/dev/null || true chmod 644 "${TARGET}" 2>/dev/null || true else cp -f "$cert" "${TARGET}" 2>/dev/null || cat "$cert" > "${TARGET}" 2>/dev/null || true fi if [ -f "${TARGET}" ]; then echo " ✓ Copied $(basename "$cert")" fi fi done else echo " ℹ No certificates directory found (optional)" fi # Fix paths in profiles.json if it exists if [ -f "${SOCKTOP_HOME}/.config/socktop/profiles.json" ]; then echo "Rewriting paths in profiles.json..." # Replace /home/socktop with actual HOME directory and ensure certs/ subdirectory sed -i "s|/home/socktop/.config/socktop/rpi-|${SOCKTOP_HOME}/.config/socktop/certs/rpi-|g" "${SOCKTOP_HOME}/.config/socktop/profiles.json" 2>/dev/null || { echo " ⚠ Could not rewrite paths in-place, trying alternative method..." sed "s|/home/socktop/.config/socktop/rpi-|${SOCKTOP_HOME}/.config/socktop/certs/rpi-|g" "${SOCKTOP_HOME}/.config/socktop/profiles.json" > "${SOCKTOP_HOME}/.config/socktop/profiles.json.tmp" 2>/dev/null && \ mv "${SOCKTOP_HOME}/.config/socktop/profiles.json.tmp" "${SOCKTOP_HOME}/.config/socktop/profiles.json" 2>/dev/null || \ echo " ✗ Could not rewrite paths" } if [ "$(id -u)" -eq 0 ]; then chown socktop:socktop "${SOCKTOP_HOME}/.config/socktop/profiles.json" 2>/dev/null || true fi echo " ✓ Updated certificate paths" fi # Verify final permissions echo "Verifying permissions..." ls -la "${SOCKTOP_HOME}/.config/" 2>&1 || echo " ⚠ Could not list config directory" echo "===================================" echo "Configuration initialization complete" echo "===================================" # Switch to socktop user only if running as root if [ "$(id -u)" -eq 0 ]; then echo "Switching to socktop user and executing: $@" exec runuser -u socktop -- "$@" else echo "Already running as non-root user ($(whoami)), continuing..." exec "$@" fi