maintainer-feedback requested: [Bug 213611] ports-mgmt/pkg: 1.9.1 pkgdb locking doesn't work on NFS

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Wed Oct 19 13:16:52 UTC 2016


Markus Wennrich <mwennrich at gmail.com> has reassigned Bugzilla Automation
<bugzilla at FreeBSD.org>'s request for maintainer-feedback to pkg at FreeBSD.org:
Bug 213611: ports-mgmt/pkg: 1.9.1 pkgdb locking doesn't work on NFS
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=213611



--- Description ---
pkg info fails with following error, if /var/db/pkg is on NFS:

pkg: sqlite error while executing iterator in file pkgdb_iterator.c:1033:
database is locked

ktrace:

 61912 pkg	CALL  setgroups(0x1,0x802780abc)
 61912 pkg	RET   setgroups 0
 61912 pkg	CALL  setegid(0xfffe)
 61912 pkg	RET   setegid 0
 61912 pkg	CALL  setgid(0xfffe)
 61912 pkg	RET   setgid 0
 61912 pkg	CALL  seteuid(0xfffe)
 61912 pkg	RET   seteuid 0
 61912 pkg	CALL  setuid(0xfffe)
 61912 pkg	RET   setuid 0
 61912 pkg	CALL 
mkdir(0x80301c2e8,0x1ff<S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH
|S_IWOTH|S_IXOTH>)
 61912 pkg	NAMI  "/var/db/pkg/local.sqlite.lock"
 61912 pkg	RET   mkdir -1 errno 13 Permission denied

==> privileges get dropped and only afterwards mkdir
/var/db/pkg/local.sqlite.lock is tried, which has to fail as user "nobody".



Verified with "chmod 777 /var/db/pkg/"

   drwxr-xr-x	2 nobody  nobody    4096 Oct 19 12:50 local.sqlite.lock



>From src/info.c:

322
323	    drop_privileges();
324	    if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
325		    pkgdb_close(db);

Probably wrong order of drop_privileges and pkgdb_obtain_lock?


This happens only on NFS because of this in src/pkgdb.c:

1026  /*
1027   * Fall back on unix-dotfile locking strategy if on a network filesystem
1028   */

(...)
1034   sqlite3_vfs_register(sqlite3_vfs_find("unix-dotfile"), 1);


(Our quick workaround was to comment out the whole "fall back on unix-dotfile
on NFS" part. Probably not the best solution ...)


More information about the freebsd-pkg mailing list