diff --git a/installation.sh b/installation.sh index 2589222..46b28f2 100644 --- a/installation.sh +++ b/installation.sh @@ -61,9 +61,33 @@ check_sudo() { print_success "Sudo privileges confirmed" } +# Pre-configure packages to avoid prompts +pre_configure_packages() { + print_step "Pre-configuring packages to avoid prompts..." + + # Pre-configure common package questions + + # For any package that uses debconf + echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections + + # For timezone data (if tzdata gets updated) + echo 'tzdata tzdata/Areas select Europe' | sudo debconf-set-selections + echo 'tzdata tzdata/Zones/Europe select Paris' | sudo debconf-set-selections + + # For keyboard configuration + echo 'keyboard-configuration keyboard-configuration/layoutcode string us' | sudo debconf-set-selections + + # For any service restart prompts + echo '* libraries/restart-without-asking boolean true' | sudo debconf-set-selections + + print_success "Package pre-configuration completed" +} + # System update update_system() { print_step "Updating system packages..." + # Set non-interactive mode for apt + export DEBIAN_FRONTEND=noninteractive sudo apt update -y print_success "System packages updated" } @@ -72,6 +96,9 @@ update_system() { install_dependencies() { print_step "Installing system dependencies..." + # Ensure non-interactive mode + export DEBIAN_FRONTEND=noninteractive + local packages=( "git" "apache2" @@ -94,7 +121,7 @@ install_dependencies() { for package in "${packages[@]}"; do print_status "Installing $package..." - if sudo apt install -y "$package"; then + if sudo DEBIAN_FRONTEND=noninteractive apt install -y -q "$package"; then print_success "$package installed" else print_error "Failed to install $package" @@ -124,7 +151,7 @@ install_python_packages() { for package in "${pip_packages[@]}"; do print_status "Installing Python package: $package..." - if pip3 install "$package" --break-system-packages; then + if sudo pip3 install "$package" --break-system-packages; then print_success "$package installed" else print_warning "Failed to install $package (may already be installed)" @@ -460,28 +487,6 @@ 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 @@ -495,44 +500,23 @@ create_databases() { 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 + # Set full permissions for sqlite directory + if [ -d "/var/www/moduleair_pro_4g/sqlite" ]; then + sudo chmod 777 /var/www/moduleair_pro_4g/sqlite/ + print_success "Set permissions for sqlite directory" else - print_error "ModuleAir directory not found" - return 1 + print_warning "sqlite directory not found" fi + + # Set full permissions for sensors.db + if [ -f "/var/www/moduleair_pro_4g/sqlite/sensors.db" ]; then + sudo chmod 777 /var/www/moduleair_pro_4g/sqlite/sensors.db + print_success "Set permissions for sensors.db" + else + print_warning "sensors.db not found" + fi + + print_success "Database permissions fixed" } # Set configuration @@ -689,8 +673,13 @@ main() { print_header "MODULEAIR PRO 4G INSTALLATION" print_status "Starting automated installation..." + # Set non-interactive mode globally + export DEBIAN_FRONTEND=noninteractive + export NEEDRESTART_MODE=a + check_root check_sudo + pre_configure_packages update_system install_dependencies install_python_packages