147 lines
3.4 KiB
Bash
147 lines
3.4 KiB
Bash
|
#############################################################
|
||
|
# scripts/update.sh #
|
||
|
#############################################################
|
||
|
|
||
|
cat > scripts/update.sh << 'EOFUPDATE'
|
||
|
#!/bin/bash
|
||
|
|
||
|
# VPN Gateway Update Script
|
||
|
# Updates the VPN Gateway installation
|
||
|
# Version: 1.0.0
|
||
|
|
||
|
set -e
|
||
|
|
||
|
# Colors
|
||
|
RED='\033[0;31m'
|
||
|
GREEN='\033[0;32m'
|
||
|
YELLOW='\033[1;33m'
|
||
|
BLUE='\033[0;34m'
|
||
|
NC='\033[0m'
|
||
|
|
||
|
INSTALL_DIR="/opt/vpn-gateway"
|
||
|
BACKUP_DIR="/opt/vpn-gateway-backup-$(date +%Y%m%d-%H%M%S)"
|
||
|
GITHUB_REPO="https://github.com/yourusername/vpn-gateway"
|
||
|
|
||
|
log() {
|
||
|
echo -e "${GREEN}[+]${NC} $1"
|
||
|
}
|
||
|
|
||
|
error() {
|
||
|
echo -e "${RED}[!]${NC} $1"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
warning() {
|
||
|
echo -e "${YELLOW}[*]${NC} $1"
|
||
|
}
|
||
|
|
||
|
# Check root
|
||
|
if [[ $EUID -ne 0 ]]; then
|
||
|
error "This script must be run as root"
|
||
|
fi
|
||
|
|
||
|
echo -e "${BLUE}=== VPN Gateway Update ===${NC}"
|
||
|
echo ""
|
||
|
|
||
|
# Check current version
|
||
|
if [ -f "$INSTALL_DIR/version" ]; then
|
||
|
CURRENT_VERSION=$(cat "$INSTALL_DIR/version")
|
||
|
log "Current version: $CURRENT_VERSION"
|
||
|
else
|
||
|
warning "Version file not found"
|
||
|
CURRENT_VERSION="unknown"
|
||
|
fi
|
||
|
|
||
|
# Check for updates
|
||
|
log "Checking for updates..."
|
||
|
LATEST_VERSION=$(curl -s "$GITHUB_REPO/raw/main/version" 2>/dev/null || echo "")
|
||
|
|
||
|
if [ -z "$LATEST_VERSION" ]; then
|
||
|
error "Could not fetch latest version"
|
||
|
fi
|
||
|
|
||
|
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
|
||
|
log "Already running latest version: $LATEST_VERSION"
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
log "New version available: $LATEST_VERSION"
|
||
|
echo ""
|
||
|
read -p "Update to version $LATEST_VERSION? (y/N): " -n 1 -r
|
||
|
echo ""
|
||
|
|
||
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
|
log "Update cancelled"
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
# Backup current installation
|
||
|
log "Creating backup at $BACKUP_DIR..."
|
||
|
cp -r "$INSTALL_DIR" "$BACKUP_DIR"
|
||
|
|
||
|
# Backup WireGuard configs
|
||
|
cp -r /etc/wireguard "$BACKUP_DIR/wireguard-configs"
|
||
|
|
||
|
# Backup iptables rules
|
||
|
iptables-save > "$BACKUP_DIR/iptables.rules"
|
||
|
ip6tables-save > "$BACKUP_DIR/ip6tables.rules"
|
||
|
|
||
|
log "Backup complete"
|
||
|
|
||
|
# Stop services
|
||
|
log "Stopping services..."
|
||
|
systemctl stop vpn-webui vpn-security-monitor 2>/dev/null || true
|
||
|
|
||
|
# Download updates
|
||
|
log "Downloading updates..."
|
||
|
cd /tmp
|
||
|
rm -rf vpn-gateway-update
|
||
|
git clone "$GITHUB_REPO" vpn-gateway-update || \
|
||
|
error "Failed to download updates"
|
||
|
|
||
|
# Update backend
|
||
|
log "Updating backend..."
|
||
|
cp /tmp/vpn-gateway-update/backend/app.py "$INSTALL_DIR/app.py"
|
||
|
|
||
|
# Update frontend
|
||
|
log "Updating frontend..."
|
||
|
cp /tmp/vpn-gateway-update/frontend/index.html "$INSTALL_DIR/static/index.html"
|
||
|
|
||
|
# Update scripts
|
||
|
log "Updating scripts..."
|
||
|
cp /tmp/vpn-gateway-update/scripts/*.sh /usr/local/bin/
|
||
|
chmod +x /usr/local/bin/vpn-*.sh
|
||
|
|
||
|
# Update Python dependencies
|
||
|
log "Updating dependencies..."
|
||
|
source "$INSTALL_DIR/venv/bin/activate"
|
||
|
pip install --upgrade -r /tmp/vpn-gateway-update/backend/requirements.txt
|
||
|
|
||
|
# Update version file
|
||
|
echo "$LATEST_VERSION" > "$INSTALL_DIR/version"
|
||
|
|
||
|
# Restart services
|
||
|
log "Restarting services..."
|
||
|
systemctl daemon-reload
|
||
|
systemctl start vpn-webui vpn-security-monitor
|
||
|
|
||
|
# Cleanup
|
||
|
rm -rf /tmp/vpn-gateway-update
|
||
|
|
||
|
# Verify update
|
||
|
sleep 3
|
||
|
if systemctl is-active vpn-webui >/dev/null 2>&1; then
|
||
|
log "Update successful!"
|
||
|
log "Version $LATEST_VERSION is now running"
|
||
|
echo ""
|
||
|
echo -e "${GREEN}Update complete!${NC}"
|
||
|
echo "Backup saved at: $BACKUP_DIR"
|
||
|
else
|
||
|
error "Services failed to start after update!"
|
||
|
echo "Restore from backup with:"
|
||
|
echo " rm -rf $INSTALL_DIR"
|
||
|
echo " mv $BACKUP_DIR $INSTALL_DIR"
|
||
|
echo " systemctl restart vpn-webui"
|
||
|
fi
|
||
|
|