GNU bug report logs -
#35874
guix-daemon from "guix pull" does not honor user settings
Previous Next
Full log
Message #17 received at 35874 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Hi!
Ricardo Wurmus <ricardo.wurmus <at> mdc-berlin.de> skribis:
> Ludovic Courtès <ludo <at> gnu.org> writes:
[...]
>> When you do ‘guix pull’, the resulting (guix config) is supposed to
>> honor the settings of the calling ‘guix’: %localstatedir, etc.
>>
>> It seems that it wasn’t the case here? Could you try again running
>> ‘guix pull’ from a ‘guix’ command that has non-default settings and
>> check the resulting (guix config) module?
>
> Is (guix config) enough? What about the daemon? I’ve had no problem
> with “guix” itself when used with a daemon taken from the git checkout.
Oooh, good point, the ‘guix-daemon’ package uses a fixed localstatedir.
I believe the patch below solves the problem. WDYT?
> Yes, I was able to identify the corrupt store items and copy the
> corresponding items from a separate machine. I was lucky that it
> aborted early when trying to delete items, so it seems that it didn’t
> get to do all that much damage.
Phheeew.
> (Curiously, I wasn’t able to run “guix gc --verify=repair,contents”
> because Guix claims I don’t have sufficient privileges to repair the
> store — I’m running this as root, but who knows how NFS complicates
> things…)
It’s supposed to work if you’re root, and the privilege claim checks
just that (see nix-daemon.cc):
--8<---------------cut here---------------start------------->8---
if (remoteAddr.ss_family == AF_UNIX) {
[…]
trusted = clientUid == 0;
[…]
case wopVerifyStore: {
bool checkContents = readInt(from) != 0;
bool repair = readInt(from) != 0;
startWork();
if (repair && !trusted)
throw Error("you are not privileged to repair paths");
bool errors = store->verifyStore(checkContents, repair);
stopWork();
writeInt(errors, to);
break;
}
--8<---------------cut here---------------end--------------->8---
Thanks,
Ludo’.
[Message part 2 (text/x-patch, inline)]
diff --git a/guix/self.scm b/guix/self.scm
index 6d7569ec19..8cc82de64c 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -603,7 +603,21 @@ Info manual."
(define (wrap daemon)
(program-file "guix-daemon"
#~(begin
+ ;; Refer to the right 'guix' command for 'guix
+ ;; substitute' & co.
(setenv "GUIX" #$command)
+
+ ;; Honor the user's settings rather than those hardcoded
+ ;; in the 'guix-daemon' package.
+ (unless (getenv "GUIX_STATE_DIRECTORY")
+ (setenv "GUIX_STATE_DIRECTORY"
+ #$(string-append %localstatedir "/guix")))
+ (unless (getenv "GUIX_CONFIGURATION_DIRECTORY")
+ (setenv "GUIX_CONFIGURATION_DIRECTORY"
+ #$(string-append %sysconfdir "/guix")))
+ (unless (getenv "NIX_STORE_DIR")
+ (setenv "NIX_STORE_DIR" %storedir))
+
(apply execl #$(file-append daemon "/bin/guix-daemon")
"guix-daemon" (cdr (command-line))))))
This bug report was last modified 5 years and 356 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.