summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/scripts/environment.scm8
1 files changed, 7 insertions, 1 deletions
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index 1b3b1312ea3..b2e715c6ddd 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -828,7 +828,13 @@ WHILE-LIST."
(let* ((cwd (getcwd))
(home (getenv "HOME"))
(uid (if user 1000 (getuid)))
- (gid (if user 1000 (getgid)))
+ (gid (if user
+ 1000
+ ;; When running as root, always map a non-zero GID
+ ;; or writing to 'gid_map' would fail with EPERM.
+ (match (getgid)
+ (0 1000)
+ (gid gid))))
;; On a foreign distro, the name service switch might be
;; dysfunctional and 'getpwuid' throws. Don't let that hamper