v1.9.2: Fix hotspot non démarré si SQLite lockée au boot
- boot_hotspot.sh: busy timeout 5s sur les requêtes SQLite - boot_hotspot.sh: SSID fallback nebuleair-pro-<serial> 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) <noreply@anthropic.com>
This commit is contained in:
@@ -44,21 +44,29 @@ echo "getting RPI serial number"
|
|||||||
serial_number=$(cat /proc/cpuinfo | grep Serial | awk '{print substr($3, length($3) - 7)}')
|
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')
|
# 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"
|
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"
|
echo "id: $serial_number"
|
||||||
|
|
||||||
# Get deviceID from SQLite config_table (may be different from serial_number if manually configured)
|
# 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"
|
echo "Device ID from database: $DEVICE_ID"
|
||||||
|
|
||||||
# Get deviceName from SQLite config_table for use in hotspot SSID
|
# 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"
|
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
|
# 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
|
#need to wait for the network manager to be ready
|
||||||
sleep 20
|
sleep 20
|
||||||
@@ -92,7 +100,7 @@ if [ "$STATE" == "30 (disconnected)" ]; then
|
|||||||
sudo nmcli device wifi hotspot ifname wlan0 ssid "$DEVICE_NAME" password nebuleaircfg
|
sudo nmcli device wifi hotspot ifname wlan0 ssid "$DEVICE_NAME" password nebuleaircfg
|
||||||
|
|
||||||
# Update SQLite to reflect hotspot mode
|
# 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
|
else
|
||||||
echo "🛜Success: wlan0 is connected!🛜"
|
echo "🛜Success: wlan0 is connected!🛜"
|
||||||
@@ -100,7 +108,7 @@ else
|
|||||||
echo "Connection: $CONN_SSID"
|
echo "Connection: $CONN_SSID"
|
||||||
|
|
||||||
# Update SQLite to reflect hotspot mode
|
# 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
|
# Lancer le tunnel SSH
|
||||||
#echo "Démarrage du tunnel SSH sur le port $SSH_TUNNEL_PORT..."
|
#echo "Démarrage du tunnel SSH sur le port $SSH_TUNNEL_PORT..."
|
||||||
|
|||||||
@@ -1,5 +1,21 @@
|
|||||||
{
|
{
|
||||||
"versions": [
|
"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-<serial>) 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",
|
"version": "1.9.1",
|
||||||
"date": "2026-05-19",
|
"date": "2026-05-19",
|
||||||
|
|||||||
Reference in New Issue
Block a user