Files
venus/dbus-generator-ramp/deploy.sh
2026-03-26 14:15:02 +00:00

216 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
#
# Deploy script for Generator Current Ramp Controller
#
# Deploys a built package to a CerboGX device via SSH.
#
# Usage:
# ./deploy.sh <cerbo-ip> [package.tar.gz]
# ./deploy.sh 192.168.1.100 # Uses latest package in current dir
# ./deploy.sh 192.168.1.100 dbus-generator-ramp-1.0.0.tar.gz
#
# Prerequisites:
# - SSH access enabled on CerboGX (Settings > General > SSH)
# - Package built with ./build-package.sh
#
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Default values
CERBO_IP=""
PACKAGE=""
SSH_USER="root"
REMOTE_DIR="/data"
# Print usage
usage() {
echo "Usage: $0 <cerbo-ip> [OPTIONS] [package.tar.gz]"
echo ""
echo "Arguments:"
echo " cerbo-ip IP address of the CerboGX"
echo " package.tar.gz Package file (default: latest in current directory)"
echo ""
echo "Options:"
echo " --user USER SSH user (default: root)"
echo " -h, --help Show this help message"
echo ""
echo "Examples:"
echo " $0 192.168.1.100"
echo " $0 192.168.1.100 dbus-generator-ramp-1.2.0.tar.gz"
echo ""
echo "Prerequisites:"
echo " 1. Enable SSH on CerboGX: Settings > General > SSH"
echo " 2. Build package first: ./build-package.sh"
exit 1
}
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--user)
SSH_USER="$2"
shift 2
;;
-h|--help)
usage
;;
-*)
echo -e "${RED}Error: Unknown option: $1${NC}"
usage
;;
*)
if [ -z "$CERBO_IP" ]; then
CERBO_IP="$1"
elif [ -z "$PACKAGE" ]; then
PACKAGE="$1"
else
echo -e "${RED}Error: Too many arguments${NC}"
usage
fi
shift
;;
esac
done
# Check required arguments
if [ -z "$CERBO_IP" ]; then
echo -e "${RED}Error: CerboGX IP address required${NC}"
echo ""
usage
fi
# Find package if not specified
if [ -z "$PACKAGE" ]; then
# Look for latest package in script directory
PACKAGE=$(ls -t "$SCRIPT_DIR"/dbus-generator-ramp-*.tar.gz 2>/dev/null | head -1)
if [ -z "$PACKAGE" ]; then
echo -e "${RED}Error: No package found. Run ./build-package.sh first${NC}"
exit 1
fi
fi
# Verify package exists
if [ ! -f "$PACKAGE" ]; then
# Try in script directory
if [ -f "$SCRIPT_DIR/$PACKAGE" ]; then
PACKAGE="$SCRIPT_DIR/$PACKAGE"
else
echo -e "${RED}Error: Package not found: $PACKAGE${NC}"
exit 1
fi
fi
PACKAGE_NAME=$(basename "$PACKAGE")
echo "=================================================="
echo "Deploying to CerboGX"
echo "=================================================="
echo "Target: $SSH_USER@$CERBO_IP"
echo "Package: $PACKAGE_NAME"
echo ""
# Test SSH connection
echo -e "${YELLOW}1. Testing SSH connection...${NC}"
if ! ssh -o ConnectTimeout=5 -o BatchMode=yes "$SSH_USER@$CERBO_IP" "echo 'SSH OK'" 2>/dev/null; then
echo -e "${RED} SSH connection failed.${NC}"
echo ""
echo " Troubleshooting:"
echo " - Verify CerboGX IP address: $CERBO_IP"
echo " - Enable SSH: Settings > General > SSH on the CerboGX"
echo " - Check password/key authentication"
echo ""
echo " Try manual connection:"
echo " ssh $SSH_USER@$CERBO_IP"
exit 1
fi
echo -e "${GREEN} SSH connection OK${NC}"
# Copy package
echo -e "${YELLOW}2. Copying package to CerboGX...${NC}"
scp "$PACKAGE" "$SSH_USER@$CERBO_IP:$REMOTE_DIR/"
echo -e "${GREEN} Package copied${NC}"
# Install on CerboGX
echo -e "${YELLOW}3. Installing on CerboGX...${NC}"
ssh "$SSH_USER@$CERBO_IP" bash <<EOF
set -e
cd $REMOTE_DIR
# Stop existing service if running
if [ -d /service/dbus-generator-ramp ]; then
echo " Stopping existing service..."
svc -d /service/dbus-generator-ramp 2>/dev/null || true
# Wait for service to fully stop and release D-Bus name
sleep 3
fi
# Remove old installation directory (but keep learned data)
if [ -d $REMOTE_DIR/dbus-generator-ramp ]; then
echo " Backing up learned model..."
if [ -f $REMOTE_DIR/dbus-generator-ramp/learned_model.json ]; then
cp $REMOTE_DIR/dbus-generator-ramp/learned_model.json /tmp/learned_model.json.bak 2>/dev/null || true
fi
echo " Removing old installation..."
rm -rf $REMOTE_DIR/dbus-generator-ramp
fi
# Extract new package
echo " Extracting package..."
tar -xzf $PACKAGE_NAME
# Restore learned model if it existed
if [ -f /tmp/learned_model.json.bak ]; then
echo " Restoring learned model..."
mkdir -p $REMOTE_DIR/dbus-generator-ramp
mv /tmp/learned_model.json.bak $REMOTE_DIR/dbus-generator-ramp/learned_model.json
fi
# Run install script
echo " Running install.sh..."
cd $REMOTE_DIR/dbus-generator-ramp
./install.sh
# Clean up package file
rm -f $REMOTE_DIR/$PACKAGE_NAME
EOF
echo -e "${GREEN} Installation complete${NC}"
# Check service status
echo -e "${YELLOW}4. Checking service status...${NC}"
sleep 2
ssh "$SSH_USER@$CERBO_IP" bash <<'EOF'
if command -v svstat >/dev/null 2>&1; then
echo ""
svstat /service/dbus-generator-ramp 2>/dev/null || echo " Service not yet supervised"
echo ""
echo "Recent logs:"
if [ -f /var/log/dbus-generator-ramp/current ]; then
cat /var/log/dbus-generator-ramp/current | tai64nlocal 2>/dev/null | tail -10
else
echo " No logs yet"
fi
fi
EOF
echo ""
echo "=================================================="
echo -e "${GREEN}Deployment complete!${NC}"
echo "=================================================="
echo ""
echo "Useful commands (on CerboGX):"
echo " svstat /service/dbus-generator-ramp"
echo " tail -F /var/log/dbus-generator-ramp/current | tai64nlocal"
echo " svc -t /service/dbus-generator-ramp # restart"
echo " svc -d /service/dbus-generator-ramp # stop"
echo ""