mirror of
https://github.com/NixOS/nix
synced 2025-06-24 13:51:16 +02:00
Improve database lock permission error context
Add helpful context when opening the Nix database lock fails due to permission errors. Instead of just showing "Permission denied", now provides guidance about possible causes: - Running as non-root in a single-user Nix installation - Nix daemon may have crashed
This commit is contained in:
parent
c5b1be46b4
commit
d60a8ee8b0
2 changed files with 12 additions and 2 deletions
|
@ -221,7 +221,16 @@ LocalStore::LocalStore(ref<const Config> config)
|
|||
schema upgrade is in progress. */
|
||||
if (!config->readOnly) {
|
||||
Path globalLockPath = dbDir + "/big-lock";
|
||||
globalLock = openLockFile(globalLockPath.c_str(), true);
|
||||
try {
|
||||
globalLock = openLockFile(globalLockPath.c_str(), true);
|
||||
} catch (SysError & e) {
|
||||
if (e.errNo == EACCES || e.errNo == EPERM) {
|
||||
e.addTrace({},
|
||||
"This command may have been run as non-root in a single-user Nix installation,\n"
|
||||
"or the Nix daemon may have crashed.");
|
||||
}
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
if (!config->readOnly && !lockFile(globalLock.get(), ltRead, false)) {
|
||||
|
|
|
@ -42,7 +42,8 @@ chmod -R -w $TEST_ROOT/var
|
|||
|
||||
# Make sure we fail on add operations on the read-only store
|
||||
# This is only for adding files that are not *already* in the store
|
||||
expectStderr 1 nix-store --add eval.nix | grepQuiet "error: opening lock file '$(readlink -e $TEST_ROOT)/var/nix/db/big-lock'"
|
||||
# Should show enhanced error message with helpful context
|
||||
expectStderr 1 nix-store --add eval.nix | grepQuiet "This command may have been run as non-root in a single-user Nix installation"
|
||||
expectStderr 1 nix-store --store local?read-only=true --add eval.nix | grepQuiet "Permission denied"
|
||||
|
||||
# Test the same operations from before should again succeed
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue