SQLite Database issue with SPIP v4.1.5 on Linux environment

Hi,

I’m trying to deploy the SPIPv.4.1.5 on Linux based Azure App service and PHP v8.0.
Deployment is done successfully on Linux machine and able to open ecrire/?exec=install. Then, it asks for the language and database name. After entering the database name, it keeps on loading and fails on step 3 after sometime with « database is locked » error from SQLite.

Please find the logs below:

Pri:ERREUR: SQLSTATE[HY000]: General error: 5 database is locked in /home/site/wwwroot/ecrire/req/sqlite_generique.php line 2937 - CREATE TABLE IF NOT EXISTS spip_articles (
id_article INTEGER NOT NULL,
surtitre text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
titre text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
soustitre text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
id_rubrique bigint(21) DEFAULT ‹ 0 › NOT NULL,
descriptif text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
chapo mediumtext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
texte longtext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
ps mediumtext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
date datetime DEFAULT ‹ 0000-00-00 00:00:00 › NOT NULL,
statut varchar(10) DEFAULT ‹ 0 › NOT NULL COLLATE NOCASE,
id_secteur bigint(21) DEFAULT ‹ 0 › NOT NULL,
maj TIMESTAMP,
export VARCHAR(10) DEFAULT ‹ oui › COLLATE NOCASE,
date_redac datetime DEFAULT ‹ 0000-00-00 00:00:00 › NOT NULL,
visites integer DEFAULT ‹ 0 › NOT NULL,
referers integer DEFAULT ‹ 0 › NOT NULL,
popularite DOUBLE DEFAULT ‹ 0 › NOT NULL,
accepter_forum CHAR(3) DEFAULT ‹  › NOT NULL COLLATE NOCASE,
date_modif datetime DEFAULT ‹ 0000-00-00 00:00:00 › NOT NULL,
lang VARCHAR(10) DEFAULT ‹  › NOT NULL COLLATE NOCASE,
langue_choisie VARCHAR(3) DEFAULT ‹ non › COLLATE NOCASE,
id_trad bigint(21) DEFAULT ‹ 0 › NOT NULL,
nom_site tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
url_site text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
virtuel text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
PRIMARY KEY (id_article))

2022-10-12 13:30:13 169.254.129.1 (pid 88) :Pri:ERREUR: Erreur sqlite HY000 / 5
2022-10-12 13:30:13 169.254.129.1 (pid 88) :Pri:ERREUR: Erreur sqlite HY000 / 5
2022-10-12 13:30:13 169.254.129.1 (pid 88) :Pri:cf maj.log
2022-10-12 13:31:14 169.254.129.1 (pid 88) :Pri:ERREUR: SQLSTATE[HY000]: General error: 5 database is locked in /home/site/wwwroot/ecrire/req/sqlite_generique.php line 2937 - CREATE TABLE IF NOT EXISTS spip_auteurs (
id_auteur INTEGER NOT NULL,
nom text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
bio text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
email tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
nom_site tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
url_site text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
login VARCHAR(255) COLLATE BINARY,
pass tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
low_sec tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
statut varchar(255) DEFAULT ‹ 0 › NOT NULL COLLATE NOCASE,
webmestre varchar(3) DEFAULT ‹ non › NOT NULL COLLATE NOCASE,
maj TIMESTAMP,
pgp TEXT DEFAULT ‹  › NOT NULL COLLATE NOCASE,
htpass tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
en_ligne datetime DEFAULT ‹ 0000-00-00 00:00:00 › NOT NULL,
alea_actuel tinytext COLLATE NOCASE,
alea_futur tinytext COLLATE NOCASE,
prefs text COLLATE NOCASE,
cookie_oubli tinytext COLLATE NOCASE,
source VARCHAR(10) DEFAULT ‹ spip › NOT NULL COLLATE NOCASE,
lang VARCHAR(10) DEFAULT ‹  › NOT NULL COLLATE NOCASE,
imessage VARCHAR(3) DEFAULT ‹  › NOT NULL COLLATE NOCASE,
backup_cles mediumtext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
PRIMARY KEY (id_auteur))

2022-10-12 13:31:14 169.254.129.1 (pid 88) :Pri:ERREUR: Erreur sqlite HY000 / 5
2022-10-12 13:31:14 169.254.129.1 (pid 88) :Pri:ERREUR: Erreur sqlite HY000 / 5
2022-10-12 13:32:15 169.254.129.1 (pid 88) :Pri:ERREUR: SQLSTATE[HY000]: General error: 5 database is locked in /home/site/wwwroot/ecrire/req/sqlite_generique.php line 2937 - CREATE TABLE IF NOT EXISTS spip_auteurs (
id_auteur INTEGER NOT NULL,
nom text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
bio text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
email tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
nom_site tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
url_site text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
login VARCHAR(255) COLLATE BINARY,
pass tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
low_sec tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
statut varchar(255) DEFAULT ‹ 0 › NOT NULL COLLATE NOCASE,
webmestre varchar(3) DEFAULT ‹ non › NOT NULL COLLATE NOCASE,
maj TIMESTAMP,
pgp TEXT DEFAULT ‹  › NOT NULL COLLATE NOCASE,
htpass tinytext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
en_ligne datetime DEFAULT ‹ 0000-00-00 00:00:00 › NOT NULL,
alea_actuel tinytext COLLATE NOCASE,
alea_futur tinytext COLLATE NOCASE,
prefs text COLLATE NOCASE,
cookie_oubli tinytext COLLATE NOCASE,
source VARCHAR(10) DEFAULT ‹ spip › NOT NULL COLLATE NOCASE,
lang VARCHAR(10) DEFAULT ‹  › NOT NULL COLLATE NOCASE,
imessage VARCHAR(3) DEFAULT ‹  › NOT NULL COLLATE NOCASE,
backup_cles mediumtext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
PRIMARY KEY (id_auteur))

2022-10-12 13:32:15 169.254.129.1 (pid 88) :Pri:ERREUR: Erreur sqlite HY000 / 5
2022-10-12 13:32:15 169.254.129.1 (pid 88) :Pri:ERREUR: Erreur sqlite HY000 / 5
2022-10-12 13:32:15 169.254.129.1 (pid 88) :Pri:cf maj.log
2022-10-12 13:33:15 169.254.129.1 (pid 88) :Pri:ERREUR: SQLSTATE[HY000]: General error: 5 database is locked in /home/site/wwwroot/ecrire/req/sqlite_generique.php line 2937 - CREATE TABLE IF NOT EXISTS spip_rubriques (
id_rubrique INTEGER NOT NULL,
id_parent bigint(21) DEFAULT ‹ 0 › NOT NULL,
titre text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
descriptif text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
texte longtext DEFAULT ‹  › NOT NULL COLLATE NOCASE,
id_secteur bigint(21) DEFAULT ‹ 0 › NOT NULL,
maj TIMESTAMP,
statut varchar(10) DEFAULT ‹ 0 › NOT NULL COLLATE NOCASE,
date datetime DEFAULT ‹ 0000-00-00 00:00:00 › NOT NULL,
lang VARCHAR(10) DEFAULT ‹  › NOT NULL COLLATE NOCASE,
langue_choisie VARCHAR(3) DEFAULT ‹ non › COLLATE NOCASE,
statut_tmp varchar(10) DEFAULT ‹ 0 › NOT NULL COLLATE NOCASE,
date_tmp datetime DEFAULT ‹ 0000-00-00 00:00:00 › NOT NULL,
profondeur smallint(5) DEFAULT ‹ 0 › NOT NULL,
PRIMARY KEY (id_rubrique))

Although SPIPv4.1.5 works fine in Windows machine but same code fails in Linux.

Can anyone please suggest the resolution for above issue?

Error message is « General error: 5 database is locked », so why is your db possibly locked ?

Searching the web provides some answers :

  • « every time this error occurs, check your if SQLiteBrowser (or any other editor) is on and does have any unsaved changes. »
  • « Too many processes are trying to insert too rapidly into the database which is locking the table. You are welcome to try: $file_db->query("SET LOCK MODE TO WAIT 120") » With spip this could be done calling sql_query ("SET LOCK MODE TO WAIT 120") … at the end of your config/connect.php file
  • and also « POSIX advisory locking is known to be buggy or even unimplemented on many NFS implementations […]. Your best defense is to not use SQLite for files on a network filesystem. […] I was able to resolve the issue by moving the SQLite database file to a guest OS (Linux) directory that was not mounted/shared with the host OS (Windows). In my case I moved the SQLite database file to /tmp on the Linux guest OS. »

Ref: php - Sqlite3, SQLSTATE[HY000]: General error: 5 database is locked - Stack Overflow,

Maybe use mysql instead…