126 lines
3.8 KiB
Bash
Executable File
126 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# NebuleAir Pro 4G - Comprehensive Update Script
|
||
# This script performs a complete system update including git pull,
|
||
# config initialization, and service management
|
||
|
||
echo "======================================"
|
||
echo "NebuleAir Pro 4G - Firmware Update"
|
||
echo "======================================"
|
||
echo "Started at: $(date)"
|
||
echo ""
|
||
|
||
# Set working directory
|
||
cd /var/www/nebuleair_pro_4g
|
||
|
||
# Ensure this script is executable (needed because git config core.fileMode false)
|
||
chmod +x /var/www/nebuleair_pro_4g/update_firmware.sh
|
||
|
||
# Function to print status messages
|
||
print_status() {
|
||
echo "[$(date '+%H:%M:%S')] $1"
|
||
}
|
||
|
||
# Function to check command success
|
||
check_status() {
|
||
if [ $? -eq 0 ]; then
|
||
print_status "✓ $1 completed successfully"
|
||
else
|
||
print_status "✗ $1 failed"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# Step 1: Git operations
|
||
print_status "Step 1: Updating firmware from repository..."
|
||
git fetch origin
|
||
check_status "Git fetch"
|
||
|
||
# Show current branch and any changes
|
||
print_status "Current branch: $(git branch --show-current)"
|
||
if [ -n "$(git status --porcelain)" ]; then
|
||
print_status "Warning: Local changes detected:"
|
||
git status --short
|
||
fi
|
||
|
||
# Pull latest changes
|
||
git pull origin $(git branch --show-current)
|
||
check_status "Git pull"
|
||
|
||
# Step 2: Update database configuration
|
||
print_status ""
|
||
print_status "Step 2: Updating database configuration..."
|
||
/usr/bin/python3 /var/www/nebuleair_pro_4g/sqlite/set_config.py
|
||
check_status "Database configuration update"
|
||
|
||
# Step 3: Check and fix file permissions
|
||
print_status ""
|
||
print_status "Step 3: Checking file permissions..."
|
||
sudo chmod +x /var/www/nebuleair_pro_4g/update_firmware.sh
|
||
sudo chmod 755 /var/www/nebuleair_pro_4g/sqlite/*.py
|
||
sudo chmod 755 /var/www/nebuleair_pro_4g/NPM/*.py
|
||
sudo chmod 755 /var/www/nebuleair_pro_4g/BME280/*.py
|
||
sudo chmod 755 /var/www/nebuleair_pro_4g/SARA/*.py
|
||
sudo chmod 755 /var/www/nebuleair_pro_4g/envea/*.py
|
||
check_status "File permissions update"
|
||
|
||
# Step 4: Restart critical services if they exist
|
||
print_status ""
|
||
print_status "Step 4: Managing system services..."
|
||
|
||
# List of services to check and restart
|
||
services=(
|
||
"nebuleair-npm-data.timer"
|
||
"nebuleair-envea-data.timer"
|
||
"nebuleair-sara-data.timer"
|
||
"nebuleair-bme280-data.timer"
|
||
"nebuleair-mppt-data.timer"
|
||
)
|
||
|
||
for service in "${services[@]}"; do
|
||
if systemctl list-unit-files | grep -q "$service"; then
|
||
# Check if service is enabled before restarting
|
||
if systemctl is-enabled --quiet "$service" 2>/dev/null; then
|
||
print_status "Restarting enabled service: $service"
|
||
sudo systemctl restart "$service"
|
||
if systemctl is-active --quiet "$service"; then
|
||
print_status "✓ $service is running"
|
||
else
|
||
print_status "⚠ $service failed to start"
|
||
fi
|
||
else
|
||
print_status "ℹ Service $service is disabled, skipping restart"
|
||
fi
|
||
else
|
||
print_status "ℹ Service $service not found (may not be installed)"
|
||
fi
|
||
done
|
||
|
||
# Step 5: System health check
|
||
print_status ""
|
||
print_status "Step 5: System health check..."
|
||
|
||
# Check disk space
|
||
disk_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
|
||
if [ "$disk_usage" -gt 90 ]; then
|
||
print_status "⚠ Warning: Disk usage is high ($disk_usage%)"
|
||
else
|
||
print_status "✓ Disk usage is acceptable ($disk_usage%)"
|
||
fi
|
||
|
||
# Check if database is accessible
|
||
if [ -f "/var/www/nebuleair_pro_4g/sqlite/sensors.db" ]; then
|
||
print_status "✓ Database file exists"
|
||
else
|
||
print_status "⚠ Warning: Database file not found"
|
||
fi
|
||
|
||
# Step 6: Final cleanup
|
||
print_status ""
|
||
print_status "Step 6: Cleaning up..."
|
||
sudo find /var/www/nebuleair_pro_4g/logs -name "*.log" -size +10M -exec truncate -s 0 {} \;
|
||
check_status "Log cleanup"
|
||
|
||
print_status "Update completed successfully!"
|
||
|
||
exit 0 |