Files
usda-vision/camera-management-api/setup_timezone.sh
salirezav 44c8c3f6dd Update environment configuration and enhance user management features
- Changed VITE_SUPABASE_URL in .env.example for deployment consistency.
- Added new user management functionality to reset user passwords in UserManagement component.
- Updated supabase.ts to include first and last name fields in user profiles and added password reset functionality.
- Enhanced DashboardLayout to include a user profile view and improved user display in TopNavbar.
- Updated seed.sql to create additional users with roles for testing purposes.
2025-09-22 11:20:15 -04:00

290 lines
8.6 KiB
Bash
Executable File

#!/bin/bash
# Time Synchronization Setup for USDA Vision Camera System
# Location: Atlanta, Georgia (Eastern Time Zone)
echo "🕐 Setting up time synchronization for Atlanta, Georgia..."
echo "=================================================="
# Check if running as root
if [ "$EUID" -eq 0 ]; then
echo "Running as root - can make system changes"
CAN_SUDO=true
else
echo "Running as user - will use sudo for system changes"
CAN_SUDO=false
fi
# Function to run commands with appropriate privileges
run_cmd() {
if [ "$CAN_SUDO" = true ]; then
"$@"
else
sudo "$@"
fi
}
# 1. Set timezone to Eastern Time (Atlanta, Georgia)
echo "📍 Setting timezone to America/New_York (Eastern Time)..."
if run_cmd timedatectl set-timezone America/New_York; then
echo "✅ Timezone set successfully"
else
echo "❌ Failed to set timezone - trying alternative method..."
if run_cmd ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime; then
echo "✅ Timezone set using alternative method"
else
echo "❌ Failed to set timezone"
fi
fi
# 2. Install and configure NTP for time synchronization
echo ""
echo "🔄 Setting up NTP time synchronization..."
# Check if systemd-timesyncd is available (modern systems)
if systemctl is-available systemd-timesyncd >/dev/null 2>&1; then
echo "Using systemd-timesyncd for time synchronization..."
# Enable and start systemd-timesyncd
run_cmd systemctl enable systemd-timesyncd
run_cmd systemctl start systemd-timesyncd
# Configure NTP servers (US-based servers for better accuracy)
echo "Configuring NTP servers..."
cat << EOF | run_cmd tee /etc/systemd/timesyncd.conf
[Time]
NTP=time.nist.gov pool.ntp.org time.google.com
FallbackNTP=time.cloudflare.com time.windows.com
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048
EOF
# Restart timesyncd to apply new configuration
run_cmd systemctl restart systemd-timesyncd
echo "✅ systemd-timesyncd configured and started"
elif command -v ntpd >/dev/null 2>&1; then
echo "Using ntpd for time synchronization..."
# Install ntp if not present
if ! command -v ntpd >/dev/null 2>&1; then
echo "Installing ntp package..."
if command -v apt-get >/dev/null 2>&1; then
run_cmd apt-get update && run_cmd apt-get install -y ntp
elif command -v yum >/dev/null 2>&1; then
run_cmd yum install -y ntp
elif command -v dnf >/dev/null 2>&1; then
run_cmd dnf install -y ntp
fi
fi
# Configure NTP servers
cat << EOF | run_cmd tee /etc/ntp.conf
# NTP configuration for Atlanta, Georgia
driftfile /var/lib/ntp/ntp.drift
# US-based NTP servers for better accuracy
server time.nist.gov iburst
server pool.ntp.org iburst
server time.google.com iburst
server time.cloudflare.com iburst
# Fallback servers
server 0.us.pool.ntp.org iburst
server 1.us.pool.ntp.org iburst
server 2.us.pool.ntp.org iburst
server 3.us.pool.ntp.org iburst
# Security settings
restrict default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict exp-dash
restrict -6 ::1
# Local clock as fallback
server 127.127.1.0
fudge 127.127.1.0 stratum 10
EOF
# Enable and start NTP service
run_cmd systemctl enable ntp
run_cmd systemctl start ntp
echo "✅ NTP configured and started"
else
echo "⚠️ No NTP service found - installing chrony as alternative..."
# Install chrony
if command -v apt-get >/dev/null 2>&1; then
run_cmd apt-get update && run_cmd apt-get install -y chrony
elif command -v yum >/dev/null 2>&1; then
run_cmd yum install -y chrony
elif command -v dnf >/dev/null 2>&1; then
run_cmd dnf install -y chrony
fi
# Configure chrony
cat << EOF | run_cmd tee /etc/chrony/chrony.conf
# Chrony configuration for Atlanta, Georgia
server time.nist.gov iburst
server pool.ntp.org iburst
server time.google.com iburst
server time.cloudflare.com iburst
# US pool servers
pool us.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
EOF
# Enable and start chrony
run_cmd systemctl enable chrony
run_cmd systemctl start chrony
echo "✅ Chrony configured and started"
fi
# 3. Force immediate time synchronization
echo ""
echo "⏰ Forcing immediate time synchronization..."
if systemctl is-active systemd-timesyncd >/dev/null 2>&1; then
run_cmd systemctl restart systemd-timesyncd
sleep 2
run_cmd timedatectl set-ntp true
elif systemctl is-active ntp >/dev/null 2>&1; then
run_cmd ntpdate -s time.nist.gov
run_cmd systemctl restart ntp
elif systemctl is-active chrony >/dev/null 2>&1; then
run_cmd chrony sources -v
run_cmd chronyc makestep
fi
# 4. Configure hardware clock
echo ""
echo "🔧 Configuring hardware clock..."
if run_cmd hwclock --systohc; then
echo "✅ Hardware clock synchronized with system clock"
else
echo "⚠️ Could not sync hardware clock (this may be normal in containers)"
fi
# 5. Display current time information
echo ""
echo "📊 Current Time Information:"
echo "================================"
echo "System time: $(date)"
echo "UTC time: $(date -u)"
echo "Timezone: $(timedatectl show --property=Timezone --value 2>/dev/null || cat /etc/timezone 2>/dev/null || echo 'Unknown')"
# Check if timedatectl is available
if command -v timedatectl >/dev/null 2>&1; then
echo ""
echo "Time synchronization status:"
timedatectl status
fi
# 6. Create a time check script for the vision system
echo ""
echo "📝 Creating time verification script..."
cat << 'EOF' > check_time.py
#!/usr/bin/env python3
"""
Time verification script for USDA Vision Camera System
Checks if system time is properly synchronized
"""
import datetime
import pytz
import requests
import json
def check_system_time():
"""Check system time against multiple sources"""
print("🕐 USDA Vision Camera System - Time Verification")
print("=" * 50)
# Get local time
local_time = datetime.datetime.now()
utc_time = datetime.datetime.utcnow()
# Get Atlanta timezone
atlanta_tz = pytz.timezone('America/New_York')
atlanta_time = datetime.datetime.now(atlanta_tz)
print(f"Local system time: {local_time}")
print(f"UTC time: {utc_time}")
print(f"Atlanta time: {atlanta_time}")
print(f"Timezone: {atlanta_time.tzname()}")
# Check against world time API
try:
print("\n🌐 Checking against world time API...")
response = requests.get("http://worldtimeapi.org/api/timezone/America/New_York", timeout=5)
if response.status_code == 200:
data = response.json()
api_time = datetime.datetime.fromisoformat(data['datetime'].replace('Z', '+00:00'))
# Compare times (allow 5 second difference)
time_diff = abs((atlanta_time.replace(tzinfo=None) - api_time.replace(tzinfo=None)).total_seconds())
print(f"API time: {api_time}")
print(f"Time difference: {time_diff:.2f} seconds")
if time_diff < 5:
print("✅ Time is synchronized (within 5 seconds)")
return True
else:
print("❌ Time is NOT synchronized (difference > 5 seconds)")
return False
else:
print("⚠️ Could not reach time API")
return None
except Exception as e:
print(f"⚠️ Error checking time API: {e}")
return None
if __name__ == "__main__":
check_system_time()
EOF
chmod +x check_time.py
echo "✅ Time verification script created: check_time.py"
# 7. Add time sync check to the vision system startup
echo ""
echo "🔗 Integrating time sync with vision system..."
# Update the startup script to include time check
if [ -f "start_system.sh" ]; then
# Create backup
cp start_system.sh start_system.sh.backup
# Add time sync check to startup script
sed -i '/# Run system tests first/i\
# Check time synchronization\
echo "🕐 Checking time synchronization..."\
python check_time.py\
echo ""' start_system.sh
echo "✅ Updated start_system.sh to include time verification"
fi
echo ""
echo "🎉 Time synchronization setup complete!"
echo ""
echo "Summary:"
echo "- Timezone set to America/New_York (Eastern Time)"
echo "- NTP synchronization configured and enabled"
echo "- Time verification script created (check_time.py)"
echo "- Startup script updated to check time sync"
echo ""
echo "To verify time sync manually, run: python check_time.py"
echo "Current time: $(date)"