all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Andrew Tropin <andrew@trop.in>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: 56758@debbugs.gnu.org
Subject: [bug#56758] [PATCH 0/2] Don't try to mkdir XDG_RUNTIME_DIR
Date: Mon, 01 Aug 2022 17:09:59 +0300	[thread overview]
Message-ID: <87o7x4awco.fsf@trop.in> (raw)
In-Reply-To: <87r120b039.fsf@trop.in>

[-- Attachment #1: Type: text/plain, Size: 9095 bytes --]

On 2022-08-01 15:49, Andrew Tropin wrote:

> On 2022-08-01 12:08, Ludovic Courtès wrote:
>
>> Hi,
>>
>> Andrew Tropin <andrew@trop.in> skribis:
>>
>>> From d08ed8de3ead1a704a96e0e6673dffb62f859597 Mon Sep 17 00:00:00 2001
>>> From: Andrew Tropin <andrew@trop.in>
>>> Date: Thu, 21 Jul 2022 15:24:32 +0300
>>> Subject: [PATCH 1/2] home: xdg: Use closures in activation scripts.
>>>
>>> * gnu/home/services/xdg.scm (ensure-xdg-base-dirs-on-activation,
>>> home-xdg-user-directories-files-service): Use closures in activation scripts.
>>
>> [...]
>>
>>>  (define (ensure-xdg-base-dirs-on-activation config)
>>> -  #~(map (lambda (xdg-base-dir-variable)
>>> -           ((@@ (guix build utils) mkdir-p)
>>> -            (getenv
>>> -             xdg-base-dir-variable)))
>>> -         '#$(map (lambda (field)
>>> -                   (format
>>> -                    #f "XDG_~a"
>>> -                    (object->snake-case-string
>>> -                     (configuration-field-name field) 'upper)))
>>> -                 home-xdg-base-directories-configuration-fields)))
>>> +  (with-imported-modules '((guix build utils))
>>> +    #~(map (lambda (xdg-base-dir-variable)
>>> +             ((@ (guix build utils) mkdir-p)
>>
>> This change doesn’t hurt but it’s apparently unnecessary.
>
> At least it removes the usage of @@ :)
>
>>
>>> +    (with-imported-modules `((guix build utils)
>>> +                             ,@(source-module-closure
>>> +                                '((ice-9 string-fun))))
>>
>> However this one is incorrect as it would lead (ice-9 string-fun) from
>> the host Guile to be imported into the build environment, thereby making
>> the result dependent on the version of Guile that is used “outside” (you
>> may have seen a warning like “importing (ice-9 string-fun) from the
>> host”.)
>
> Why so?  I expected modules closure to be compiled on build side and
> provided to activation script via preset load-path.
>
> BTW, I don't see this warning.
>
>>
>>> From da332f8272ea3c240fc4e3664051da3b3a4e18c6 Mon Sep 17 00:00:00 2001
>>> From: Andrew Tropin <andrew@trop.in>
>>> Date: Thu, 21 Jul 2022 17:06:24 +0300
>>> Subject: [PATCH 2/2] home: xdg: Skip mkdir XDG_RUNTIME_DIR in activation
>>>  script.
>>>
>>> * gnu/home/services/xdg.scm (ensure-xdg-base-dirs-on-activation): Skip mkdir
>>> XDG_RUNTIME_DIR in activation script.
>>> ---
>>>  gnu/home/services/xdg.scm | 19 ++++++++++++-------
>>>  1 file changed, 12 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm
>>> index 5a41dc4994..541f64a379 100644
>>> --- a/gnu/home/services/xdg.scm
>>> +++ b/gnu/home/services/xdg.scm
>>> @@ -109,13 +109,18 @@ (define (ensure-xdg-base-dirs-on-activation config)
>>>    (with-imported-modules '((guix build utils))
>>>      #~(map (lambda (xdg-base-dir-variable)
>>>               ((@ (guix build utils) mkdir-p)
>>> -              (getenv
>>> -               xdg-base-dir-variable)))
>>> -           '#$(map (lambda (field)
>>> -                     (format
>>> -                      #f "XDG_~a"
>>> -                      (object->snake-case-string
>>> -                       (configuration-field-name field) 'upper)))
>>> +              (getenv xdg-base-dir-variable)))
>>> +           '#$(filter-map
>>> +               (lambda (field)
>>> +                 (let ((env-var-name
>>> +                        (format
>>> +                         #f "XDG_~a"
>>> +                         (object->snake-case-string
>>> +                          (configuration-field-name field) 'upper))))
>>> +                   ;; XDG_RUNTIME_DIR shouldn't be created during activation
>>> +                   ;; and will be provided by elogind or other service.
>>> +                   (and (not (string=? "XDG_RUNTIME_DIR" env-var-name))
>>> +                        env-var-name)))
>>>                     home-xdg-base-directories-configuration-fields))))
>>>  
>>>  (define (last-extension-or-cfg config extensions)
>>
>> I tweaked that accordingly (patch attached), but that leads to a test
>> failure in ‘tests/guix-home.sh’ because there’s a warning about
>> XDG_RUNTIME_DIR not existing that goes to standard output of ‘guix home
>> container’:
>>
>> --8<---------------cut here---------------start------------->8---
>> + guix home container home.scm -- false
>> XDG_RUNTIME_DIR doesn't exists, on-first-login script
>> won't execute anything.  You can check if xdg runtime directory exists,
>> XDG_RUNTIME_DIR variable is set to appropriate value and manually execute the
>> script by running '$HOME/.guix-home/on-first-login'++ guix home container home.scm -- echo '$HOME'
>> guix home: warning: only 4.1 GiB of free space available on /gnu/store
>> hint: Consider deleting old profile generations and collecting garbage, along
>> these lines:
>>
>>      guix gc --delete-generations=1m
>>
>> + test 'XDG_RUNTIME_DIR doesn'\''t exists, on-first-login script
>> won'\''t execute anything.  You can check if xdg runtime directory exists,
>> XDG_RUNTIME_DIR variable is set to appropriate value and manually execute the
>> script by running '\''$HOME/.guix-home/on-first-login'\''/home/ludo' = /home/ludo
>> --8<---------------cut here---------------end--------------->8---
>>
>> Thoughts?
>
> Hm, I tried with both your and my patches, but I don't get a test fail.
>
> --8<---------------cut here---------------start------------->8---
> make check TESTS="tests/guix-home.sh"
> make  check-recursive
> make[1]: Entering directory '/home/bob/work/gnu/guix'
> Making check in po/guix
> make[2]: Entering directory '/home/bob/work/gnu/guix/po/guix'
> make[2]: Nothing to be done for 'check'.
> make[2]: Leaving directory '/home/bob/work/gnu/guix/po/guix'
> Making check in po/packages
> make[2]: Entering directory '/home/bob/work/gnu/guix/po/packages'
> make[2]: Nothing to be done for 'check'.
> make[2]: Leaving directory '/home/bob/work/gnu/guix/po/packages'
> make[2]: Entering directory '/home/bob/work/gnu/guix'
> Compiling Scheme modules...
> Compiling Scheme modules...
> Compiling Scheme modules...
> Compiling Scheme modules...
> make  check-TESTS check-local
> make[3]: Entering directory '/home/bob/work/gnu/guix'
> make[4]: Entering directory '/home/bob/work/gnu/guix'
> PASS: tests/guix-home.sh
> ============================================================================
> Testsuite summary for GNU Guix 1.3.0.22216-446db
> ============================================================================
> # TOTAL: 1
> # PASS:  1
> # SKIP:  0
> # XFAIL: 0
> # FAIL:  0
> # XPASS: 0
> # ERROR: 0
> ============================================================================
> make[4]: Leaving directory '/home/bob/work/gnu/guix'
> make[3]: Nothing to be done for 'check-local'.
> make[3]: Leaving directory '/home/bob/work/gnu/guix'
> make[2]: Leaving directory '/home/bob/work/gnu/guix'
> make[1]: Leaving directory '/home/bob/work/gnu/guix'
>
> Compilation finished at Mon Aug  1 15:42:20
> --8<---------------cut here---------------end--------------->8---
>
>
> The same with guix home container.
>
> --8<---------------cut here---------------start------------->8---
> guix home container ~/tmp/he.scm -- false
> WARNING: (guile-user): imported module (guix build utils) overrides core binding `delete'
> Symlinking /home/bob/.profile -> /gnu/store/dann7r1095xll0kji5yl0ql07096rc8j-shell-profile... done
> Symlinking /home/bob/.bash_profile -> /gnu/store/q0i9j1fbxwdr7sqin1hi16zhir8b4qwd-bash_profile... done
> Symlinking /home/bob/.bashrc -> /gnu/store/0hblljbzbbrbawhcv2hlz14narb78s2m-bashrc... done
> Symlinking /home/bob/.config/fontconfig/fonts.conf -> /gnu/store/4261pxafny0g2myhh9yj1771ry7k05lc-fonts.conf... done
>  done
> Finished updating symlinks.
>
> Comparing /gnu/store/non-existing-generation/profile/share/fonts and
>           /gnu/store/f2bc4zy8hqv3in72yg4kxdxppigfafn1-home/profile/share/fonts... done (same)
> Evaluating on-change gexps.
>
> On-change gexps evaluation finished.
> --8<---------------cut here---------------end--------------->8---

Ok, I found the problem. guix container uses hosts $SHELL variable,
which in my case is zsh and this makes the shell inside container not to
source ~/.profile, so on-first-login isn't executed.

I was able to reproduce test fail and message inside container.

My thoughts:
1. home container in tests must always use bash.
2. Error message should be printed to stderr.
3. Right now I experiment with elogind-less system, trying out seatd and
greetd, and try to figure out when and how process (especially shepherd)
should be started and killed.  I'll share my findings on this later, but
it's very likely that we will get rid of on-first-login at all (or at
least won't source it automatically by login shell in all or some the
cases).

Do you want me to prepare patch for #2?

-- 
Best regards,
Andrew Tropin

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

  reply	other threads:[~2022-08-01 14:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-25  9:43 [bug#56758] [PATCH 0/2] Don't try to mkdir XDG_RUNTIME_DIR Andrew Tropin
2022-08-01 10:08 ` Ludovic Courtès
2022-08-01 12:49   ` Andrew Tropin
2022-08-01 14:09     ` Andrew Tropin [this message]
2022-08-01 22:12     ` Maxime Devos
2022-08-02  6:00   ` [bug#56758] [PATCH v2 0/4] " Andrew Tropin
2022-08-05  9:06     ` bug#56758: " Ludovic Courtès
2022-08-05 15:03       ` [bug#56758] " Andrew Tropin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87o7x4awco.fsf@trop.in \
    --to=andrew@trop.in \
    --cc=56758@debbugs.gnu.org \
    --cc=ludo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.