[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#35874: “guix pull” fails on setlocale
From: |
Ludovic Courtès |
Subject: |
bug#35874: “guix pull” fails on setlocale |
Date: |
Sat, 25 May 2019 19:17:55 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) |
Hi!
Ricardo Wurmus <address@hidden> skribis:
> Ludovic Courtès <address@hidden> 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’.
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))))))