123 lines
3.1 KiB
Bash
123 lines
3.1 KiB
Bash
#!/bin/bash
|
|
|
|
# Color definitions for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Logging functions
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check if running as root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
log_error "Please run as root"
|
|
exit 1
|
|
fi
|
|
|
|
# Get script directory and project root
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
|
|
|
|
# Install Python3 RPM packages
|
|
log_info "Installing Python3 RPM packages..."
|
|
cd "${PROJECT_ROOT}/deploy/rpm"
|
|
rpm -Uvh --nodeps *.rpm
|
|
|
|
# Create work directory
|
|
WORK_DIR="/opt/collision_avoidance"
|
|
log_info "Creating work directory: $WORK_DIR"
|
|
mkdir -p $WORK_DIR
|
|
|
|
# Copy files
|
|
log_info "Copying files..."
|
|
cp -r "${PROJECT_ROOT}/deploy/bin/"* "/usr/local/bin/"
|
|
cp -r "${PROJECT_ROOT}/deploy/lib/"* "/usr/lib64/"
|
|
cp -r "${PROJECT_ROOT}/deploy/python/"* "/tmp/"
|
|
|
|
# Create config directory
|
|
CONFIG_DIR="/etc/collision_avoidance"
|
|
log_info "Creating config directory: $CONFIG_DIR"
|
|
mkdir -p $CONFIG_DIR
|
|
cp -r "${PROJECT_ROOT}/deploy/config/"* "$CONFIG_DIR/"
|
|
|
|
# Install Python packages
|
|
log_info "Installing Python packages..."
|
|
cd /tmp
|
|
for pkg in *.whl; do
|
|
if [ -f "$pkg" ]; then
|
|
pip3 install --no-index "$pkg"
|
|
fi
|
|
done
|
|
|
|
# Create service file
|
|
log_info "Creating system service..."
|
|
cat > /etc/systemd/system/collision-avoidance.service << EOL
|
|
[Unit]
|
|
Description=Collision Avoidance Service
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=/usr/local/bin/collision_avoidance
|
|
WorkingDirectory=/usr/local/bin
|
|
User=root
|
|
Restart=always
|
|
RestartSec=3
|
|
Environment=CONFIG_PATH=/etc/collision_avoidance
|
|
Environment=LD_LIBRARY_PATH=/usr/lib64
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOL
|
|
|
|
# Configure firewall
|
|
log_info "Configuring firewall..."
|
|
if command -v firewall-cmd &> /dev/null; then
|
|
firewall-cmd --permanent --add-port=8010/tcp
|
|
firewall-cmd --permanent --add-port=8081/tcp
|
|
firewall-cmd --reload
|
|
else
|
|
log_warn "firewalld not detected, please configure firewall manually"
|
|
fi
|
|
|
|
# Start service
|
|
log_info "Starting service..."
|
|
systemctl daemon-reload
|
|
systemctl enable collision-avoidance
|
|
systemctl start collision-avoidance
|
|
|
|
# Check service status
|
|
if systemctl is-active --quiet collision-avoidance; then
|
|
log_info "Service started successfully"
|
|
else
|
|
log_error "Service failed to start, check logs"
|
|
journalctl -u collision-avoidance -n 50
|
|
exit 1
|
|
fi
|
|
|
|
# Display service status
|
|
log_info "Deployment completed, service status:"
|
|
systemctl status collision-avoidance
|
|
|
|
# Display usage instructions
|
|
echo -e "\n${GREEN}Deployment completed!${NC}"
|
|
echo "Use these commands to manage the service:"
|
|
echo " Start service: systemctl start collision-avoidance"
|
|
echo " Stop service: systemctl stop collision-avoidance"
|
|
echo " Restart service: systemctl restart collision-avoidance"
|
|
echo " Check status: systemctl status collision-avoidance"
|
|
echo " View logs: journalctl -u collision-avoidance -f"
|
|
echo -e "\nConfig files location: ${CONFIG_DIR}"
|
|
echo "WebSocket port: 8010"
|
|
echo "Mock Server port: 8081" |