Files
giglez/scripts/setup_database.sh
T
leetcrypt 9f73595b20 feat: RTL_433 protocol database import - iteration 1/5
- Expanded protocol database from 18 → 299 signatures (16.6x increase)
- Imported 281 protocols from RTL_433 open-source database (286 total devices)
- Created automated import script: scripts/import_rtl433_protocols.py
- Generated rtl433_protocols_imported.py with timing/frequency/modulation data
- Updated protocol_database.py to include RTL433_PROTOCOLS
- All 26 tests passing

Breakdown by category:
  - Weather: 116 protocols
  - Sensors: 36 protocols
  - TPMS: 25 protocols
  - Security: 23 protocols
  - Home Automation: 18 protocols
  - Other: 50+ protocols

Frequency coverage:
  - 433.92 MHz: 248 protocols
  - 315.00 MHz: 32 protocols
  - 915.00 MHz: 1 protocol

This provides comprehensive coverage of Sub-GHz IoT devices for accurate
identification from raw RF captures.
2026-02-14 18:55:55 -08:00

282 lines
8.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
###############################################################################
# GigLez Database Setup Script
#
# Creates PostgreSQL database, user, and schema for GigLez platform
#
# Usage:
# sudo ./scripts/setup_database.sh
#
# This script must be run with sudo to access PostgreSQL
###############################################################################
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Script directory
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# Configuration
DB_NAME="giglez"
DB_USER="giglez_user"
PASSWORD_FILE="$PROJECT_ROOT/.db_password"
SCHEMA_FILE="$PROJECT_ROOT/scripts/create_schema.sql"
###############################################################################
# Helper Functions
###############################################################################
print_header() {
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}========================================${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}$1${NC}"
}
print_info() {
echo -e "${BLUE} $1${NC}"
}
###############################################################################
# Checks
###############################################################################
check_sudo() {
if [ "$EUID" -ne 0 ]; then
print_error "This script must be run with sudo"
echo "Usage: sudo $0"
exit 1
fi
print_success "Running with sudo privileges"
}
check_postgresql() {
print_header "Checking PostgreSQL Installation"
if ! command -v psql &> /dev/null; then
print_error "PostgreSQL is not installed"
print_info "Install with: sudo apt-get install postgresql postgresql-contrib postgis"
exit 1
fi
print_success "PostgreSQL is installed"
# Check if PostgreSQL service is running
if ! sudo systemctl is-active --quiet postgresql; then
print_warning "PostgreSQL service is not running"
print_info "Starting PostgreSQL service..."
sudo systemctl start postgresql
sleep 2
fi
print_success "PostgreSQL service is running"
}
check_password_file() {
print_header "Checking Password File"
if [ ! -f "$PASSWORD_FILE" ]; then
print_error "Password file not found: $PASSWORD_FILE"
exit 1
fi
DB_PASSWORD=$(cat "$PASSWORD_FILE" | tr -d '\n\r')
if [ -z "$DB_PASSWORD" ]; then
print_error "Password file is empty"
exit 1
fi
print_success "Password loaded from file"
}
###############################################################################
# Database Setup
###############################################################################
create_database() {
print_header "Creating Database"
# Check if database already exists
if sudo -u postgres psql -lqt | cut -d \| -f 1 | grep -qw "$DB_NAME"; then
print_warning "Database '$DB_NAME' already exists"
read -p "Drop and recreate? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_info "Dropping existing database..."
sudo -u postgres psql -c "DROP DATABASE IF EXISTS $DB_NAME;"
print_success "Existing database dropped"
else
print_info "Keeping existing database"
return 0
fi
fi
# Create database
print_info "Creating database '$DB_NAME'..."
sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
print_success "Database created"
}
create_user() {
print_header "Creating Database User"
# Check if user already exists
if sudo -u postgres psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='$DB_USER'" | grep -q 1; then
print_warning "User '$DB_USER' already exists"
read -p "Drop and recreate? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_info "Dropping existing user..."
sudo -u postgres psql -c "DROP USER IF EXISTS $DB_USER;"
print_success "Existing user dropped"
else
print_info "Updating password for existing user..."
sudo -u postgres psql -c "ALTER USER $DB_USER WITH PASSWORD '$DB_PASSWORD';"
print_success "Password updated"
return 0
fi
fi
# Create user with password
print_info "Creating user '$DB_USER'..."
sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';"
print_success "User created"
}
grant_privileges() {
print_header "Granting Privileges"
print_info "Granting all privileges on database '$DB_NAME' to '$DB_USER'..."
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
# Grant schema privileges
sudo -u postgres psql -d $DB_NAME -c "GRANT ALL ON SCHEMA public TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO $DB_USER;"
# Set default privileges for future objects
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO $DB_USER;"
sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO $DB_USER;"
print_success "Privileges granted"
}
enable_postgis() {
print_header "Enabling PostGIS Extension"
# Check if PostGIS is available
if ! dpkg -l | grep -q postgis; then
print_warning "PostGIS is not installed"
print_info "Install with: sudo apt-get install postgis postgresql-15-postgis-3"
print_info "Skipping PostGIS extension..."
return 0
fi
print_info "Enabling PostGIS extension..."
sudo -u postgres psql -d $DB_NAME -c "CREATE EXTENSION IF NOT EXISTS postgis;"
print_success "PostGIS extension enabled"
}
create_schema() {
print_header "Creating Database Schema"
if [ -f "$SCHEMA_FILE" ]; then
print_info "Running schema file: $SCHEMA_FILE"
PGPASSWORD="$DB_PASSWORD" psql -U $DB_USER -d $DB_NAME -h localhost -f "$SCHEMA_FILE"
print_success "Schema created from file"
else
print_warning "Schema file not found: $SCHEMA_FILE"
print_info "You'll need to run migrations manually"
fi
}
test_connection() {
print_header "Testing Connection"
print_info "Testing connection as '$DB_USER'..."
if PGPASSWORD="$DB_PASSWORD" psql -U $DB_USER -d $DB_NAME -h localhost -c "SELECT version();" &> /dev/null; then
print_success "Connection successful!"
# Show connection string
print_info ""
print_info "Connection details:"
echo " Database: $DB_NAME"
echo " User: $DB_USER"
echo " Host: localhost"
echo " Port: 5432"
echo ""
echo " Connection string:"
echo " postgresql://$DB_USER:$DB_PASSWORD@localhost:5432/$DB_NAME"
else
print_error "Connection failed"
exit 1
fi
}
###############################################################################
# Main
###############################################################################
main() {
print_header "GigLez Database Setup"
echo ""
# Run checks
check_sudo
check_postgresql
check_password_file
echo ""
# Setup database
create_database
create_user
grant_privileges
enable_postgis
# Create schema if file exists
if [ -f "$SCHEMA_FILE" ]; then
create_schema
fi
# Test connection
test_connection
echo ""
print_header "Setup Complete!"
print_success "Database is ready for use"
echo ""
print_info "Next steps:"
echo " 1. Run import script to load test data:"
echo " cd $PROJECT_ROOT"
echo " source venv/bin/activate"
echo " python scripts/import_with_african_gps.py --limit 5000 --no-matching"
echo ""
echo " 2. Start the API server:"
echo " uvicorn src.api.main:app --reload"
echo ""
}
# Run main
main