216 lines
6.0 KiB
Bash
Executable File
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 ""
|