diff --git a/deploy.sh b/deploy.sh index 22d0847..cffa049 100644 --- a/deploy.sh +++ b/deploy.sh @@ -204,9 +204,9 @@ cd /opt/dockge docker compose up -d # call replacements for nginx db -replace_in_sqlite_db "/opt/stacks/npm/data/database.sqlite" "?domain?" $domain -replace_in_sqlite_db "/opt/stacks/npm/data/database.sqlite" "?localip?" $localip -replace_in_sqlite_db "/opt/stacks/npm/data/database.sqlite" "?adminpass?" $adminpass +replace_in_sqlite_db "/opt/stacks/npm/data/database.sqlite" "" $domain +replace_in_sqlite_db "/opt/stacks/npm/data/database.sqlite" "" $localip +replace_in_sqlite_db "/opt/stacks/npm/data/database.sqlite" "" $adminpass echo "" diff --git a/prepdb.sh b/prepdb.sh index 20390f3..b9a3a65 100644 --- a/prepdb.sh +++ b/prepdb.sh @@ -20,22 +20,9 @@ replace_in_sqlite_db() { local OLD_STRING_ESC=$(printf '%s\n' "$OLD_STRING" | sed "s/'/''/g") local NEW_STRING_ESC=$(printf '%s\n' "$NEW_STRING" | sed "s/'/''/g") - # Start a transaction with immediate mode for better locking - if ! sqlite3 "$DB_PATH" "BEGIN IMMEDIATE TRANSACTION;"; then - echo "Error: Failed to begin transaction" - exit 1 - fi - # Get a list of all tables in the database local TABLES - TABLES=$(sqlite3 "$DB_PATH" ".tables") || { - echo "Error: Failed to get list of tables" - sqlite3 "$DB_PATH" "ROLLBACK;" - exit 1 - } - - # Track if we made any changes - local CHANGES_MADE=false + TABLES=$(sqlite3 "$DB_PATH" ".tables") # Loop through each table for TABLE in $TABLES; do @@ -68,41 +55,17 @@ replace_in_sqlite_db() { fi # Update only rows where the column contains OLD_STRING - if sqlite3 "$DB_PATH" " + # Run each update in its own connection to avoid locking issues + sqlite3 "$DB_PATH" " UPDATE $ESCAPED_TABLE SET $ESCAPED_COLUMN = replace(CAST($ESCAPED_COLUMN AS TEXT), '$OLD_STRING_ESC', '$NEW_STRING_ESC') WHERE CAST($ESCAPED_COLUMN AS TEXT) LIKE '%$OLD_STRING_ESC%'; - " 2>/dev/null; then - CHANGES_MADE=true - else - echo " Warning: Failed to update table $TABLE, column $COLUMN" - fi + " fi done done - # Try to commit the transaction with retries - local RETRIES=3 - local COMMIT_SUCCESS=false - - while [ $RETRIES -gt 0 ]; do - if sqlite3 "$DB_PATH" "COMMIT;" 2>/dev/null; then - COMMIT_SUCCESS=true - break - else - echo "Warning: Failed to commit transaction, retrying ($RETRIES attempts left)..." - sleep 1 - ((RETRIES--)) - fi - done - - if [ "$COMMIT_SUCCESS" = false ]; then - echo "Error: Failed to commit transaction after multiple attempts" - sqlite3 "$DB_PATH" "ROLLBACK;" 2>/dev/null - exit 1 - else - echo "Replacement completed in '$DB_PATH'. Original database backed up to '$BACKUP_PATH'." - fi + echo "Replacement completed in '$DB_PATH'. Original database backed up to '$BACKUP_PATH'." } #set script directory @@ -110,7 +73,7 @@ scriptdir="$(dirname "$(realpath "$0")")" #example usage: replace_in_sqlite_db "database.sqlite" "Europe/Amsterdam" "UTC" cp $scriptdir/stacks/npm/data/database-pre.sqlite $scriptdir/stacks/npm/data/database.sqlite -replace_in_sqlite_db "$scriptdir/stacks/npm/data/database.sqlite" "sdgserver.online" "?domain?" -replace_in_sqlite_db "$scriptdir/stacks/npm/data/database.sqlite" "192.168.2.132" "?localip?" -replace_in_sqlite_db "$scriptdir/stacks/npm/data/database.sqlite" "z5fGWz2i0q" "?adminpass?" -replace_in_sqlite_db "$scriptdir/stacks/npm/data/database.sqlite" "0.0.0.0/0" "?localip?" +replace_in_sqlite_db "$scriptdir/stacks/npm/data/database.sqlite" "sdgserver.online" "" +replace_in_sqlite_db "$scriptdir/stacks/npm/data/database.sqlite" "192.168.2.132" "" +replace_in_sqlite_db "$scriptdir/stacks/npm/data/database.sqlite" "z5fGWz2i0q" "" +replace_in_sqlite_db "$scriptdir/stacks/npm/data/database.sqlite" "0.0.0.0/0" ""