From 69fa928d564484e86dfeb0505262e4c8d613d6ee Mon Sep 17 00:00:00 2001 From: PaulVua Date: Wed, 20 May 2026 11:15:08 +0200 Subject: [PATCH] =?UTF-8?q?v1.9.2:=20Fix=20hotspot=20non=20d=C3=A9marr?= =?UTF-8?q?=C3=A9=20si=20SQLite=20lock=C3=A9e=20au=20boot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - boot_hotspot.sh: busy timeout 5s sur les requêtes SQLite - boot_hotspot.sh: SSID fallback nebuleair-pro- si deviceName vide - Corrige le cas où le hotspot ne démarrait pas quand la DB était lockée par les timers systemd au boot (SSID vide → nmcli refuse) Co-Authored-By: Claude Opus 4.7 (1M context) --- VERSION | 2 +- boot_hotspot.sh | 20 ++++++++++++++------ changelog.json | 16 ++++++++++++++++ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/VERSION b/VERSION index 9ab8337..8fdcf38 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.9.1 +1.9.2 diff --git a/boot_hotspot.sh b/boot_hotspot.sh index 2adbc8f..4e25e95 100755 --- a/boot_hotspot.sh +++ b/boot_hotspot.sh @@ -44,21 +44,29 @@ echo "getting RPI serial number" serial_number=$(cat /proc/cpuinfo | grep Serial | awk '{print substr($3, length($3) - 7)}') # update Sqlite database (only if not already set, i.e., still has default value 'XXXX') +# Use busy timeout to handle concurrent access from systemd timers at boot echo "Updating SQLite database with device ID: $serial_number" -sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='$serial_number' WHERE key='deviceID' AND value='XXXX';" +sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='$serial_number' WHERE key='deviceID' AND value='XXXX';" echo "id: $serial_number" # Get deviceID from SQLite config_table (may be different from serial_number if manually configured) -DEVICE_ID=$(sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='deviceID'") +DEVICE_ID=$(sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='deviceID'") echo "Device ID from database: $DEVICE_ID" # Get deviceName from SQLite config_table for use in hotspot SSID -DEVICE_NAME=$(sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='deviceName'") +DEVICE_NAME=$(sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='deviceName'") echo "Device Name from database: $DEVICE_NAME" +# Fallback SSID if DB read failed (lock contention) or deviceName is empty: +# use a deterministic name derived from the RPi serial so hotspot still starts. +if [ -z "$DEVICE_NAME" ]; then + DEVICE_NAME="nebuleair-pro-$serial_number" + echo "WARN: deviceName empty in DB, using fallback SSID: $DEVICE_NAME" +fi + # Get SSH tunnel port from SQLite config_table -SSH_TUNNEL_PORT=$(sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='sshTunnel_port'") +SSH_TUNNEL_PORT=$(sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='sshTunnel_port'") #need to wait for the network manager to be ready sleep 20 @@ -92,7 +100,7 @@ if [ "$STATE" == "30 (disconnected)" ]; then sudo nmcli device wifi hotspot ifname wlan0 ssid "$DEVICE_NAME" password nebuleaircfg # Update SQLite to reflect hotspot mode - sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='hotspot' WHERE key='WIFI_status'" + sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='hotspot' WHERE key='WIFI_status'" else echo "🛜Success: wlan0 is connected!🛜" @@ -100,7 +108,7 @@ else echo "Connection: $CONN_SSID" # Update SQLite to reflect hotspot mode - sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='connected' WHERE key='WIFI_status'" + sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='connected' WHERE key='WIFI_status'" # Lancer le tunnel SSH #echo "Démarrage du tunnel SSH sur le port $SSH_TUNNEL_PORT..." diff --git a/changelog.json b/changelog.json index df4cbbd..91365a9 100644 --- a/changelog.json +++ b/changelog.json @@ -1,5 +1,21 @@ { "versions": [ + { + "version": "1.9.2", + "date": "2026-05-20", + "changes": { + "features": [], + "improvements": [ + "boot_hotspot.sh: ajout d'un busy timeout de 5s sur toutes les requêtes SQLite pour gérer la contention avec les timers systemd au boot", + "boot_hotspot.sh: SSID de hotspot dérivé du serial RPi (nebuleair-pro-) en fallback si deviceName est vide dans la DB" + ], + "fixes": [ + "Correction d'un bug critique: le hotspot ne démarrait pas si la SQLite était lockée au boot (les requêtes échouaient silencieusement, $DEVICE_NAME restait vide, nmcli refusait de créer un hotspot sans SSID). Visible dans les logs par 'Error: in prepare, database is locked (5)' suivi de 'Failed to setup a Wi-Fi hotspot: A wireless setting with a valid SSID is required'" + ], + "compatibility": [] + }, + "notes": "Garantit que le hotspot de configuration démarre dans tous les cas où wlan0 est déconnecté, même en cas de race condition avec les autres services au boot." + }, { "version": "1.9.1", "date": "2026-05-19",