#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(cd -- "$SCRIPT_DIR/.." && pwd)" SOURCE_DIR="$PROJECT_DIR/dist/car_ui" INSTALL_DIR="/opt/car_ui" SERVICE="car-ui.service" DESKTOP_USER="cheykrym" DESKTOP_DIR="/home/$DESKTOP_USER/Desktop" LAUNCHER_SOURCE="$PROJECT_DIR/system_configs/Return_to_Car_UI.desktop" LAUNCHER_TARGET="$DESKTOP_DIR/Return_to_Car_UI.desktop" RETURN_HELPER_SOURCE="$PROJECT_DIR/scripts/return-to-car-mode.sh" RETURN_HELPER_TARGET="/usr/local/bin/return-to-car-mode" DEV_HELPER_SOURCE="$PROJECT_DIR/scripts/switch-to-dev-mode.sh" DEV_HELPER_TARGET="/usr/local/bin/switch-to-dev-mode" if [[ $EUID -ne 0 ]]; then echo "ERROR: deploy.sh must be run as root." echo echo "Run:" echo " sudo $0" exit 1 fi if [[ ! -x "$SOURCE_DIR/car_ui" ]]; then echo "ERROR: Build not found:" echo " $SOURCE_DIR/car_ui" echo echo "Run scripts/build.sh first." exit 1 fi if [[ ! -f "$LAUNCHER_SOURCE" ]]; then echo "ERROR: Desktop launcher not found:" echo " $LAUNCHER_SOURCE" exit 1 fi if [[ ! -f "$RETURN_HELPER_SOURCE" ]]; then echo "ERROR: Return-to-Car helper not found:" echo " $RETURN_HELPER_SOURCE" exit 1 fi if [[ ! -f "$DEV_HELPER_SOURCE" ]]; then echo "ERROR: Switch-to-Dev helper not found:" echo " $DEV_HELPER_SOURCE" exit 1 fi echo "==> Stopping $SERVICE" systemctl stop "$SERVICE" 2>/dev/null || true echo "==> Installing Car UI to $INSTALL_DIR" rm -rf "$INSTALL_DIR" mkdir -p "$INSTALL_DIR" cp -a "$SOURCE_DIR/." "$INSTALL_DIR/" echo "==> Installing system helpers" install -o root -g root -m 755 \ "$RETURN_HELPER_SOURCE" \ "$RETURN_HELPER_TARGET" install -o root -g root -m 755 \ "$DEV_HELPER_SOURCE" \ "$DEV_HELPER_TARGET" echo "==> Installing desktop launcher" mkdir -p "$DESKTOP_DIR" install \ -o "$DESKTOP_USER" \ -g "$DESKTOP_USER" \ -m 755 \ "$LAUNCHER_SOURCE" \ "$LAUNCHER_TARGET" # Mark launcher as trusted for the desktop environment. sudo -u "$DESKTOP_USER" \ DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u "$DESKTOP_USER")/bus" \ gio set "$LAUNCHER_TARGET" metadata::trusted true 2>/dev/null || true echo "==> Starting $SERVICE" if [[ "$(systemctl get-default)" == "multi-user.target" ]]; then echo "==> Starting $SERVICE" systemctl start "$SERVICE" else echo "==> Development mode detected" echo " $SERVICE will not be started" fi echo echo "==> Deployment complete" echo " Application: $INSTALL_DIR/car_ui" echo " Return helper: $RETURN_HELPER_TARGET" echo " Dev helper: $DEV_HELPER_TARGET" echo " Desktop launcher: $LAUNCHER_TARGET"