340 lines
8.5 KiB
Markdown
340 lines
8.5 KiB
Markdown
|
|
# SkyView Database Migration Guide
|
||
|
|
|
||
|
|
This guide covers the transition from SkyView's in-memory data storage to persistent SQLite database storage, introduced in version 0.1.0.
|
||
|
|
|
||
|
|
## Overview of Changes
|
||
|
|
|
||
|
|
### What's New
|
||
|
|
- **Persistent Storage**: Aircraft position history survives restarts
|
||
|
|
- **Callsign Enhancement**: Enriched aircraft information with airline/airport data
|
||
|
|
- **Embedded Aviation Database**: OpenFlights airline and airport data included
|
||
|
|
- **Configurable Retention**: Control how long historical data is kept
|
||
|
|
- **Privacy Controls**: Comprehensive privacy mode for sensitive environments
|
||
|
|
|
||
|
|
### What's Changed
|
||
|
|
- **Memory Usage**: Reduced memory footprint for aircraft tracking
|
||
|
|
- **Startup Time**: Slightly longer initial startup due to database initialization
|
||
|
|
- **Configuration**: New database and callsign configuration sections
|
||
|
|
- **File Structure**: New database file created in system or user directories
|
||
|
|
|
||
|
|
## Pre-Migration Checklist
|
||
|
|
|
||
|
|
### System Requirements
|
||
|
|
- **Disk Space**: Minimum 100MB available for database and backups
|
||
|
|
- **Permissions**: Write access to `/var/lib/skyview/` (system) or `~/.local/share/skyview/` (user)
|
||
|
|
- **SQLite**: No additional installation required (embedded in SkyView)
|
||
|
|
|
||
|
|
### Current Data
|
||
|
|
⚠️ **Important**: In-memory aircraft data from previous versions cannot be preserved during migration. Historical tracking will start fresh after the upgrade.
|
||
|
|
|
||
|
|
## Migration Process
|
||
|
|
|
||
|
|
### Automatic Migration (Recommended)
|
||
|
|
|
||
|
|
#### For Debian Package Users
|
||
|
|
```bash
|
||
|
|
# Update to new version
|
||
|
|
sudo apt update && sudo apt upgrade skyview-adsb
|
||
|
|
|
||
|
|
# Service will automatically restart and initialize database
|
||
|
|
sudo systemctl status skyview
|
||
|
|
```
|
||
|
|
|
||
|
|
#### For Manual Installation Users
|
||
|
|
```bash
|
||
|
|
# Stop current SkyView instance
|
||
|
|
sudo systemctl stop skyview # or kill existing process
|
||
|
|
|
||
|
|
# Backup current configuration
|
||
|
|
cp /etc/skyview/config.json /etc/skyview/config.json.backup
|
||
|
|
|
||
|
|
# Start new version (database will be created automatically)
|
||
|
|
sudo systemctl start skyview
|
||
|
|
```
|
||
|
|
|
||
|
|
### Manual Database Setup
|
||
|
|
|
||
|
|
If automatic initialization fails, you can manually initialize the database:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Create database directory
|
||
|
|
sudo mkdir -p /var/lib/skyview
|
||
|
|
sudo chown skyview:skyview /var/lib/skyview
|
||
|
|
|
||
|
|
# Run SkyView with explicit database initialization
|
||
|
|
sudo -u skyview /usr/bin/skyview --init-database --config /etc/skyview/config.json
|
||
|
|
```
|
||
|
|
|
||
|
|
## Configuration Updates
|
||
|
|
|
||
|
|
### New Configuration Sections
|
||
|
|
|
||
|
|
Add these sections to your existing `config.json`:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"database": {
|
||
|
|
"path": "",
|
||
|
|
"max_history_days": 7,
|
||
|
|
"backup_on_upgrade": true
|
||
|
|
},
|
||
|
|
"callsign": {
|
||
|
|
"enabled": true,
|
||
|
|
"cache_hours": 24,
|
||
|
|
"external_apis": true,
|
||
|
|
"privacy_mode": false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Configuration Migration
|
||
|
|
|
||
|
|
#### Default System Configuration
|
||
|
|
The new default configuration will be created at `/etc/skyview/config.json` if it doesn't exist:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"server": {
|
||
|
|
"host": "",
|
||
|
|
"port": 8080
|
||
|
|
},
|
||
|
|
"sources": [
|
||
|
|
{
|
||
|
|
"id": "local",
|
||
|
|
"name": "Local Receiver",
|
||
|
|
"host": "localhost",
|
||
|
|
"port": 30005,
|
||
|
|
"format": "beast",
|
||
|
|
"latitude": 0,
|
||
|
|
"longitude": 0,
|
||
|
|
"altitude": 0,
|
||
|
|
"enabled": true
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"settings": {
|
||
|
|
"history_limit": 500,
|
||
|
|
"stale_timeout": 60,
|
||
|
|
"update_rate": 1
|
||
|
|
},
|
||
|
|
"origin": {
|
||
|
|
"latitude": 51.4700,
|
||
|
|
"longitude": -0.4600,
|
||
|
|
"name": "Default Origin"
|
||
|
|
},
|
||
|
|
"database": {
|
||
|
|
"path": "",
|
||
|
|
"max_history_days": 7,
|
||
|
|
"backup_on_upgrade": true
|
||
|
|
},
|
||
|
|
"callsign": {
|
||
|
|
"enabled": true,
|
||
|
|
"cache_hours": 24,
|
||
|
|
"external_apis": true,
|
||
|
|
"privacy_mode": false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Preserving Custom Settings
|
||
|
|
|
||
|
|
If you have customized your configuration, merge your existing settings with the new sections:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backup original
|
||
|
|
cp /etc/skyview/config.json /etc/skyview/config.json.original
|
||
|
|
|
||
|
|
# Edit configuration to add new sections
|
||
|
|
sudo nano /etc/skyview/config.json
|
||
|
|
```
|
||
|
|
|
||
|
|
## Privacy Configuration
|
||
|
|
|
||
|
|
### Enabling Privacy Mode
|
||
|
|
|
||
|
|
For sensitive environments that require no external data transmission:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"callsign": {
|
||
|
|
"enabled": true,
|
||
|
|
"external_apis": false,
|
||
|
|
"privacy_mode": true,
|
||
|
|
"cache_hours": 168
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Privacy Mode Features
|
||
|
|
- **No External API Calls**: Completely disables OpenSky Network and other external APIs
|
||
|
|
- **Local-Only Enhancement**: Uses embedded OpenFlights data for callsign lookup
|
||
|
|
- **Offline Operation**: Full functionality without internet connectivity
|
||
|
|
- **Compliance Ready**: Suitable for air-gapped or restricted networks
|
||
|
|
|
||
|
|
## Post-Migration Verification
|
||
|
|
|
||
|
|
### Database Verification
|
||
|
|
```bash
|
||
|
|
# Check database file exists and has correct permissions
|
||
|
|
ls -la /var/lib/skyview/skyview.db
|
||
|
|
# Should show: -rw-r--r-- 1 skyview skyview [size] [date] skyview.db
|
||
|
|
|
||
|
|
# Verify database schema
|
||
|
|
sqlite3 /var/lib/skyview/skyview.db "SELECT version FROM schema_info ORDER BY version DESC LIMIT 1;"
|
||
|
|
# Should return current schema version number
|
||
|
|
```
|
||
|
|
|
||
|
|
### Service Health Check
|
||
|
|
```bash
|
||
|
|
# Check service status
|
||
|
|
sudo systemctl status skyview
|
||
|
|
|
||
|
|
# Check logs for any errors
|
||
|
|
sudo journalctl -u skyview -f
|
||
|
|
|
||
|
|
# Verify web interface accessibility
|
||
|
|
curl -I http://localhost:8080/
|
||
|
|
# Should return: HTTP/1.1 200 OK
|
||
|
|
```
|
||
|
|
|
||
|
|
### Feature Testing
|
||
|
|
1. **Historical Data**: Verify aircraft positions persist after restart
|
||
|
|
2. **Callsign Enhancement**: Check that airline names appear for aircraft with callsigns
|
||
|
|
3. **Performance**: Monitor memory and CPU usage compared to previous version
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Common Migration Issues
|
||
|
|
|
||
|
|
#### Database Permission Errors
|
||
|
|
```
|
||
|
|
Error: unable to open database file
|
||
|
|
```
|
||
|
|
|
||
|
|
**Solution**:
|
||
|
|
```bash
|
||
|
|
sudo chown -R skyview:skyview /var/lib/skyview/
|
||
|
|
sudo chmod 755 /var/lib/skyview/
|
||
|
|
sudo chmod 644 /var/lib/skyview/skyview.db
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Migration Failures
|
||
|
|
```
|
||
|
|
Error: migration failed at version X
|
||
|
|
```
|
||
|
|
|
||
|
|
**Solution**:
|
||
|
|
```bash
|
||
|
|
# Stop service
|
||
|
|
sudo systemctl stop skyview
|
||
|
|
|
||
|
|
# Remove corrupted database
|
||
|
|
sudo rm /var/lib/skyview/skyview.db
|
||
|
|
|
||
|
|
# Restart service (will recreate database)
|
||
|
|
sudo systemctl start skyview
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Configuration Conflicts
|
||
|
|
```
|
||
|
|
Error: unknown configuration field 'database'
|
||
|
|
```
|
||
|
|
|
||
|
|
**Solution**: Update configuration file with new sections, or reset to default configuration.
|
||
|
|
|
||
|
|
### Rolling Back
|
||
|
|
|
||
|
|
If you need to revert to the previous version:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Stop current service
|
||
|
|
sudo systemctl stop skyview
|
||
|
|
|
||
|
|
# Install previous package version
|
||
|
|
sudo apt install skyview-adsb=[previous-version]
|
||
|
|
|
||
|
|
# Remove database directory (optional)
|
||
|
|
sudo rm -rf /var/lib/skyview/
|
||
|
|
|
||
|
|
# Restore original configuration
|
||
|
|
sudo cp /etc/skyview/config.json.backup /etc/skyview/config.json
|
||
|
|
|
||
|
|
# Start service
|
||
|
|
sudo systemctl start skyview
|
||
|
|
```
|
||
|
|
|
||
|
|
⚠️ **Note**: Rolling back will lose all historical aircraft data stored in the database.
|
||
|
|
|
||
|
|
## Performance Impact
|
||
|
|
|
||
|
|
### Expected Changes
|
||
|
|
|
||
|
|
#### Memory Usage
|
||
|
|
- **Before**: ~50-100MB RAM for aircraft tracking
|
||
|
|
- **After**: ~30-60MB RAM (reduced due to database storage)
|
||
|
|
|
||
|
|
#### Disk Usage
|
||
|
|
- **Database**: ~10-50MB depending on retention settings and traffic
|
||
|
|
- **Backups**: Additional ~10-50MB for migration backups
|
||
|
|
|
||
|
|
#### Startup Time
|
||
|
|
- **Before**: 1-2 seconds
|
||
|
|
- **After**: 2-5 seconds (database initialization)
|
||
|
|
|
||
|
|
### Optimization Recommendations
|
||
|
|
|
||
|
|
#### For High-Traffic Environments
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"database": {
|
||
|
|
"max_history_days": 3,
|
||
|
|
"backup_on_upgrade": false
|
||
|
|
},
|
||
|
|
"settings": {
|
||
|
|
"history_limit": 100
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### For Resource-Constrained Systems
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"callsign": {
|
||
|
|
"enabled": false
|
||
|
|
},
|
||
|
|
"database": {
|
||
|
|
"max_history_days": 1
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Benefits After Migration
|
||
|
|
|
||
|
|
### Enhanced Features
|
||
|
|
- **Persistent History**: Aircraft tracks survive system restarts
|
||
|
|
- **Rich Callsign Data**: Airline names, routes, and aircraft types
|
||
|
|
- **Better Analytics**: Historical data enables trend analysis
|
||
|
|
- **Improved Performance**: Reduced memory usage for long-running instances
|
||
|
|
|
||
|
|
### Operational Improvements
|
||
|
|
- **Service Reliability**: Database recovery after crashes
|
||
|
|
- **Maintenance Windows**: Graceful restart without data loss
|
||
|
|
- **Monitoring**: Historical data for performance analysis
|
||
|
|
- **Compliance**: Privacy controls for regulatory requirements
|
||
|
|
|
||
|
|
## Support
|
||
|
|
|
||
|
|
### Getting Help
|
||
|
|
- **Documentation**: Check `/usr/share/doc/skyview-adsb/` for additional guides
|
||
|
|
- **Logs**: Service logs available via `journalctl -u skyview`
|
||
|
|
- **Configuration**: Example configs in `/usr/share/skyview/examples/`
|
||
|
|
- **Community**: Report issues at project repository
|
||
|
|
|
||
|
|
### Reporting Issues
|
||
|
|
When reporting migration issues, include:
|
||
|
|
- SkyView version (before and after)
|
||
|
|
- Operating system and version
|
||
|
|
- Configuration file content
|
||
|
|
- Error messages from logs
|
||
|
|
- Database file permissions (`ls -la /var/lib/skyview/`)
|
||
|
|
|
||
|
|
This migration enables SkyView's evolution toward more sophisticated aircraft tracking while maintaining the simplicity and reliability of the existing system.
|