SYSTEMD SYNC: Link active systemd files to repository for automatic sync Problem Solved: ❌ Gap between repository systemd files and active systemd files ❌ Development changes in repo not reflected in running services ❌ Manual sync required to update systemd configuration ❌ Risk of configuration drift between repo and production Solution Implemented: ✅ Symbolic links from /etc/systemd/system/ to /opt/aitbc/systemd ✅ Automatic sync script for manual operations ✅ CI/CD workflow for automatic sync on repository changes ✅ Backup mechanism for safe operations ✅ Verification and status checking Files Created: 1. scripts/link-systemd.sh: - Creates symbolic links for all aitbc-* services - Handles .d directories automatically - Creates backups before making changes - Provides comprehensive status reporting 2. scripts/sync-systemd.sh: - Alternative copy-based sync method - For environments where symbolic links aren't preferred - Maintains file independence while keeping sync 3. .gitea/workflows/systemd-sync.yml: - Automatic CI/CD sync on repository changes - Triggers when systemd files are modified - Verifies link creation and service status - Provides manual instructions Benefits: ✅ Active systemd files always match repository ✅ No configuration drift between repo and production ✅ Changes in repo immediately reflected ✅ Automatic sync on every repository update ✅ Safe operations with backups ✅ CI/CD integration for automation Usage: - Manual: sudo ./scripts/link-systemd.sh - CI/CD: Automatic on systemd file changes - Verification: ls -la /etc/systemd/system/aitbc-* - Status: sudo systemctl status aitbc-* This eliminates the gap between repository and active systemd configuration, ensuring the repository always contains the current running state and changes are immediately reflected.
88 lines
2.5 KiB
Bash
Executable File
88 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# AITBC Systemd Sync Script
|
|
# Syncs repository systemd files to active systemd configuration
|
|
# Eliminates gap between repo and running services
|
|
|
|
set -e
|
|
|
|
REPO_SYSTEMD_DIR="/opt/aitbc/systemd"
|
|
ACTIVE_SYSTEMD_DIR="/etc/systemd/system"
|
|
|
|
echo "=== AITBC SYSTEMD SYNC ==="
|
|
echo "Repository: $REPO_SYSTEMD_DIR"
|
|
echo "Active: $ACTIVE_SYSTEMD_DIR"
|
|
echo
|
|
|
|
# Check if running as root
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "❌ This script must be run as root (use sudo)"
|
|
echo " sudo $0"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if repository systemd directory exists
|
|
if [[ ! -d "$REPO_SYSTEMD_DIR" ]]; then
|
|
echo "❌ Repository systemd directory not found: $REPO_SYSTEMD_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "🔍 Scanning for AITBC systemd files..."
|
|
|
|
# Create backup of current active systemd files
|
|
BACKUP_DIR="/opt/aitbc/systemd-backup-$(date +%Y%m%d-%H%M%S)"
|
|
echo "📦 Creating backup: $BACKUP_DIR"
|
|
mkdir -p "$BACKUP_DIR"
|
|
find "$ACTIVE_SYSTEMD_DIR" -name "aitbc-*" -type f -exec cp {} "$BACKUP_DIR/" \;
|
|
|
|
# Sync repository files to active systemd
|
|
echo "🔄 Syncing systemd files..."
|
|
|
|
# Copy all aitbc-* files from repo to active systemd
|
|
for file in "$REPO_SYSTEMD_DIR"/aitbc-*; do
|
|
if [[ -f "$file" ]]; then
|
|
filename=$(basename "$file")
|
|
target="$ACTIVE_SYSTEMD_DIR/$filename"
|
|
|
|
echo " 📄 Syncing: $filename"
|
|
|
|
# Copy file with proper permissions
|
|
cp "$file" "$target"
|
|
chmod 644 "$target"
|
|
|
|
# Handle .d directories
|
|
if [[ -d "${file}.d" ]]; then
|
|
target_dir="${target}.d"
|
|
echo " 📁 Syncing directory: ${filename}.d"
|
|
mkdir -p "$target_dir"
|
|
cp -r "${file}.d"/* "$target_dir/"
|
|
chmod 644 "$target_dir"/*
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo
|
|
echo "🔄 Reloading systemd daemon..."
|
|
systemctl daemon-reload
|
|
|
|
echo
|
|
echo "✅ Systemd sync completed!"
|
|
echo
|
|
echo "📊 Sync Summary:"
|
|
echo " Repository files: $(find "$REPO_SYSTEMD_DIR" -name 'aitbc-*' -type f | wc -l)"
|
|
echo " Active files: $(find "$ACTIVE_SYSTEMD_DIR" -name 'aitbc-*' -type f | wc -l)"
|
|
echo " Backup location: $BACKUP_DIR"
|
|
echo
|
|
echo "🔧 To restart services:"
|
|
echo " sudo systemctl restart aitbc-blockchain-node"
|
|
echo " sudo systemctl restart aitbc-coordinator-api"
|
|
echo " # ... or restart all AITBC services:"
|
|
echo " sudo systemctl restart aitbc-*"
|
|
echo
|
|
echo "🔍 To check status:"
|
|
echo " sudo systemctl status aitbc-*"
|
|
echo
|
|
echo "⚠️ If you need to restore backup:"
|
|
echo " sudo cp $BACKUP_DIR/* /etc/systemd/system/"
|
|
echo " sudo systemctl daemon-reload"
|