Cron jobs may set the LOGNAME environment variable but no USER, e.g. under Debian 7 (wheezy). In that case 'guix package' fails to use $localstatedir/guix/profiles/per-user/$user. From a quick grep I couldn't find more places in Guix where USER is used, so here's a patch that just does it straightforwardly in two places in scripts/package.scm, but perhaps a more generic solution would be good for the future.
===File /home/tub/media/src/guix/0001-Try-LOGNAME-in-addition-to-USER.patch=== >From 902267cf99aacaea994cc95b77551f0d2bd35836 Mon Sep 17 00:00:00 2001 From: Taylan Ulrich B <[email protected]> Date: Sat, 5 Jul 2014 15:28:50 +0300 Subject: [PATCH] Try LOGNAME in addition to USER. Notoriously, cron jobs may set LOGNAME only and not USER. See e.g. crontab(5) under Debian 7 (wheezy). * guix/scripts/package.scm (%profile-directory) (guix-package): Also try LOGNAME if USER is unset. --- guix/scripts/package.scm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index f930b00..2e626f3 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -59,7 +59,8 @@ (define %profile-directory (string-append %state-directory "/profiles/" - (or (and=> (getenv "USER") + (or (and=> (or (getenv "USER") + (getenv "LOGNAME")) (cut string-append "per-user/" <>)) "default"))) @@ -797,7 +798,9 @@ more information.~%")) %profile-directory) (format (current-error-port) (_ "Please change the owner of `~a' to user ~s.~%") - %profile-directory (or (getenv "USER") (getuid))) + %profile-directory (or (getenv "USER") + (getenv "LOGNAME") + (getuid))) (rtfm)))) (define (process-actions opts) -- 1.8.4 ============================================================ Taylan
