diff --git a/installation.sh b/installation.sh index c1b2636..2589222 100644 --- a/installation.sh +++ b/installation.sh @@ -460,6 +460,28 @@ create_databases() { if [ -f "/var/www/moduleair_pro_4g/sqlite/create_db.py" ]; then if sudo /usr/bin/python3 "/var/www/moduleair_pro_4g/sqlite/create_db.py"; then print_success "Databases created successfully" + + # Set proper permissions on database files + print_status "Setting database permissions..." + + # Find all .db files in the sqlite directory and parent directory + if [ -d "/var/www/moduleair_pro_4g/sqlite" ]; then + # Set ownership and permissions for all database files + sudo find /var/www/moduleair_pro_4g -name "*.db" -type f -exec chown www-data:www-data {} \; + sudo find /var/www/moduleair_pro_4g -name "*.db" -type f -exec chmod 664 {} \; + + # Set permissions on the sqlite directory itself + sudo chown -R www-data:www-data /var/www/moduleair_pro_4g/sqlite + sudo chmod 775 /var/www/moduleair_pro_4g/sqlite + + # Also set permissions on any db-journal or db-wal files (SQLite temporary files) + sudo find /var/www/moduleair_pro_4g -name "*.db-journal" -type f -exec chown www-data:www-data {} \; + sudo find /var/www/moduleair_pro_4g -name "*.db-journal" -type f -exec chmod 664 {} \; + sudo find /var/www/moduleair_pro_4g -name "*.db-wal" -type f -exec chown www-data:www-data {} \; + sudo find /var/www/moduleair_pro_4g -name "*.db-wal" -type f -exec chmod 664 {} \; + + print_success "Database permissions set" + fi else print_error "Failed to create databases" return 1 @@ -469,6 +491,50 @@ create_databases() { fi } +# Fix database permissions +fix_database_permissions() { + print_step "Fixing database permissions..." + + # Set proper ownership and permissions for all database files + if [ -d "/var/www/moduleair_pro_4g" ]; then + # Find and fix all .db files + local db_count=$(sudo find /var/www/moduleair_pro_4g -name "*.db" -type f | wc -l) + + if [ "$db_count" -gt 0 ]; then + print_status "Found $db_count database file(s)" + + # Set ownership to www-data + sudo find /var/www/moduleair_pro_4g -name "*.db" -type f -exec chown www-data:www-data {} \; + sudo find /var/www/moduleair_pro_4g -name "*.db-*" -type f -exec chown www-data:www-data {} \; + + # Set read/write permissions for owner and group + sudo find /var/www/moduleair_pro_4g -name "*.db" -type f -exec chmod 664 {} \; + sudo find /var/www/moduleair_pro_4g -name "*.db-*" -type f -exec chmod 664 {} \; + + # Ensure directories containing databases are writable + sudo find /var/www/moduleair_pro_4g -name "*.db" -type f -exec dirname {} \; | sort -u | while read dir; do + sudo chown www-data:www-data "$dir" + sudo chmod 775 "$dir" + print_status "Fixed permissions for: $dir" + done + + print_success "Database permissions fixed" + else + print_warning "No database files found" + fi + + # Also ensure logs directory is writable + if [ -d "/var/www/moduleair_pro_4g/logs" ]; then + sudo chown -R www-data:www-data /var/www/moduleair_pro_4g/logs + sudo chmod -R 775 /var/www/moduleair_pro_4g/logs + print_success "Log directory permissions fixed" + fi + else + print_error "ModuleAir directory not found" + return 1 + fi +} + # Set configuration set_configuration() { print_step "Setting configuration..." @@ -638,6 +704,7 @@ main() { # Database and configuration setup create_databases set_configuration + fix_database_permissions # Fix permissions after database creation setup_cron_jobs setup_services