Kein Zugriff auf SQLITE3 Paketdatenbank von FreeBSD als normaler Benutzer seit Upgrade auf pkg 2.6.2_1

Stefan1

Well-Known Member
Hallo zusammen,

seit dem ich heute das Quartalsupdate II/2026 eingespielt habe, bei dem pkg auf Version 2.6.2_1 upgegraded wurde, kann ich als normaler Benutzer nicht mehr
auf die SQLITE3-Paketdatenbanken unter /var/db/pkg zugreifen. Wenn ich eine Abfrage mache, bekomme die Fehlermeldung "trying to write to a readonly database". Diese Meldung
kommt sowohl beim Zugriff auf die Datenbank local.sqlite als auch auf die /var/db/pkg/repos/FreeBSD/db. Bei Rechnern, die noch auf dem Stand 1. Quartal 2026
sind, kommt die Fehlermeldung nicht, und ich kann über meine selbstgeschriebene grafische Paketverwaltung auf die beiden Datenbanken zugreifen und
Abfragen machen.

Die Dateiberechtigungen haben sich nicht geändert und sehen wie folgt aus:

Code:
stefan@csl-bsd:/var/db/pkg $ ls -laF
total 50876
drwxr-xr-x   3 root wheel         8  7 Apr. 18:59 ./
drwxr-xr-x  17 root wheel        29  6 Apr. 20:30 ../
-rw-------   1 root wheel      2999 27 Okt.  2024 .sh_history
-rw-r--r--   1 root wheel       158 11 Apr.  2024 FreeBSD.meta
-rw-r--r--   1 root wheel 117219328  7 Apr. 18:59 local.sqlite
lrwxr-xr-x   1 root wheel        28 27 Okt.  2024 repo-FreeBSD.sqlite@ -> /var/db/pkg/repos/FreeBSD/db
drwxr-xr-x   4 root wheel         4  7 Okt.  2025 repos/
-r--r--r--   1 root wheel   8627983 17 Mai   2025 vuln.xml

Wenn ich jetzt der Gruppe 'wheel' Schreibrechte auf das Verzeichnis /var/db/pkg einräume habe ich wieder
Zugriff auf die beiden Datenbanken, aber wenn ich ein pkg-Kommando, wie z.B. "pkg install" absetze, kommt
die Fehlermeldung "pkg: local.sqlite permissions (0664) too lax". Es ist egal, ob ich den pkg-Befehl als root
oder mit sudo absetze.

Hat jemand eine Idee, wie ich den Zustand vor dem Quartalsupdate wieder herstellen kann?
 
permissions too lax - da drückt sqlite normalerweise aus, wenn ihm die Dateiberechtigungen nicht passen;
du könntest testweise mal die betreffende local.sqlite mit 0750 oder 0700 ausstatten;
bezieht er sich auf die im o.g. Verzeichnis gelistete local.sqlite - oder liegt noch eine weitere in /var/db/pkg/repos/FreeBSD/db?
 
permissions too lax - da drückt sqlite normalerweise aus, wenn ihm die Dateiberechtigungen nicht passen;
du könntest testweise mal die betreffende local.sqlite mit 0750 oder 0700 ausstatten;
bezieht er sich auf die im o.g. Verzeichnis gelistete local.sqlite - oder liegt noch eine weitere in /var/db/pkg/repos/FreeBSD/db?
Danke für den Tipp. Hat leider nicht funktioniert. Es erscheint immer noch die Fehlermeldung " attempt to write to a readonly database"
 
Wie genau greifst du auf die DB zu, also mit welchem Programm oder welcher Schnittstelle?

Rob
Ich greife über Tcl/Tk über die sqlite3-tcl Schnittstelle zu. Ich bekomme aber auch die Fehlermeldung wenn ich über das Terminal mit dem sqlite3 Kommando direkt in der Datenbank arbeite. Bis zum Quartalsupdate konnte ich das als normaler User machen, jetzt geht das nur noch als root. Ob das mit sudo funktioniert muss ich zuhause noch mal ausprobieren.
 
Ich habe eine vorläufige Lösung gefunden ... ich starte meine grafische Paketverwaltung mit qsudo über einen Starter in XFCE.

Danke für die Unterstützung.
 
ich starte meine grafische Paketverwaltung mit qsudo
das ist keine Problemlösung. Wenn du den Fehler finden möchtest, musst du offenlegen welche SQL-Statements du mit tcl oder über das sqlite-cli auf der pkg-Datenbank ausführst. Und ob der Fehler z.B. bei dem Aufruf von pkg ver als normaler Benutzer ebenso auftritt.

Rob
 
das ist keine Problemlösung. Wenn du den Fehler finden möchtest, musst du offenlegen welche SQL-Statements du mit tcl oder über das sqlite-cli auf der pkg-Datenbank ausführst. Und ob der Fehler z.B. bei dem Aufruf von pkg ver als normaler Benutzer ebenso auftritt.

Rob
Ist schon klar, habe ich ja auch geschrieben ... vorläufig ... damit ich das Programm erstmal weiter nutzen kann ... das kommt täglich zum Einsatz ...

pkg ver funktioniert als normaler Benutzer

Code:
# Tcl/Tk Code
# locale.sqlite3 Datenbank öffnen
sqlite3 db_local "/var/db/pkg/local.sqlite"

Dieser Befehl führt erst mal zu keiner Fehlermeldung.

Code:
set pkg_local_package [db_local eval {SELECT name,version,comment,flatsize,arch,locked,time,desc,automatic from packages}]

Dieser Befehl führt zur Fehlermeldung "attempt to write to a readonly database"

Hier die Bildschirmausgaben, wenn ich direkt vom Terminal aus als normaler User mit dem sqlite3-Kommando die Datenbank öffne:

Code:
stefan@hp-bsd:~ $ cd /var/db/pkg
stefan@hp-bsd:/var/db/pkg $ ls -laF
total 49652
drwxr-x---   3 root wheel         8 11 Apr. 08:52 ./
drwxr-xr-x  17 root wheel        31 11 Apr. 08:47 ../
-rw-------   1 root wheel      3821  7 Apr. 22:17 .sh_history
-rwxr-x---   1 root wheel       158 11 Apr.  2024 FreeBSD.meta*
-rwxr-x---   1 root wheel 114262016 11 Apr. 08:52 local.sqlite*
lrwxr-x---   1 root wheel        28 27 Okt.  2024 repo-FreeBSD.sqlite@ -> /var/db/pkg/repos/FreeBSD/db
drwxr-x---   4 root wheel         4 13 Juni  2025 repos/
-rwxr-x---   1 root wheel   8429681  1 Jan.  2025 vuln.xml*
stefan@hp-bsd:/var/db/pkg $ sqlite3 local.sqlite
SQLite version 3.50.4 2025-07-30 19:33:53
Enter ".help" for usage hints.
sqlite> .tables
Error: attempt to write a readonly database
sqlite> SELECT name,version,comment from packages ORDER BY name ASC;
Parse error: attempt to write a readonly database (8)
sqlite>
 
Hast du das mal so probiert?

$ sqlite3 local.sqlite "SELECT name,version,comment,flatsize,arch,locked,time,desc,automatic FROM packages;" ".exit"
 
Hast du das mal so probiert?

$ sqlite3 local.sqlite "SELECT name,version,comment,flatsize,arch,locked,time,desc,automatic FROM packages;" ".exit"

Ja hier ist das Ergebnis
Code:
stefan@csl-bsd:/var/db/pkg $ sqlite3 local.sqlite "SELECT name,version,comment,flatsize,arch,locked,time,desc,automatic FROM packages;" ".exit"
Error: in prepare, attempt to write a readonly database (8)
stefan@csl-bsd:/var/db/pkg $

Funktioniert also nicht.

Wahrscheinlich ist das ein neues Sicherheitsfeature, das mit pkg 2.6.2 eingeführt wurde.

Ich denke, meine "vorläufige" Lösung wird meine Dauerlösung. Da ich spätestens beim Installieren und Deinstallieren von packages sudo-Rechte benötige, ist es eigentlich optimal, meine grafische Paketverwaltung direkt mit qsudo zu starten, dann brauche ich nur einmal das sudo-Passwort abzufragen.
 
Ich habe aktuell kein FreeBSD, unter dem ich das testen koennte. Ich kannte nur deinen Befehl set pkg_local_package [db_local eval {SELECT name,version,comment,flatsize,arch,locked,time,desc,automatic from packages}] auf diese Art nicht. Vor allem wundert mich die Meldung Error: in prepare, attempt to write a readonly database, denn Du liest nur Daten und schreibst keine. Was sqlite3 hier intern macht, kann ich nicht nachvollziehen. Es war halt mal einen Versuch wert. :-)
 
Aus der Befragung von Lumo und weiterer Recherche im Web habe ich mir folgendes zusammengereimt:

Lumo:
3. SQLite Konfiguration (WAL Mode beachten)

SQLite erstellt oft temporäre Dateien (wie -wal, -shm), wenn der Write-Ahead-Logging (WAL) Modus aktiv ist.

Aus den Releasenotes zu pkg von Github:

2.6.0
Major Changes

db: enable WAL mode for local databases


2.6.2 Latest
Major Changes
Other Changes

- register: properly close the database
- fix an issue which make some installed packages temporary invisible
to the non root users (regression from the WAL introduction)

Ich nehme an, das mein Problem etwas mit dem WAL Mode zu tun hat, und die fehlenden Schreibrechte auf die temporären Dateien zu
den Fehlermeldungen führen. Vielleicht werden auch bei SELECTs temporäre Dateien erstellt ... keine Ahnung ...
 
Zurück
Oben