GNU bug report logs - #50945
Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"

Previous Next

Package: guix;

Reported by: Jan Nieuwenhuizen <janneke <at> gnu.org>

Date: Fri, 1 Oct 2021 15:48:01 UTC

Severity: normal

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 50945 in the body.
You can then email your comments to 50945 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#50945; Package guix. (Fri, 01 Oct 2021 15:48:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Jan Nieuwenhuizen <janneke <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Fri, 01 Oct 2021 15:48:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jan Nieuwenhuizen <janneke <at> gnu.org>
To: bug-guix <at> gnu.org
Subject: Guix home: No such file or directory:
 "/run/user/1003/on-first-login-executed"
Date: Fri, 01 Oct 2021 17:46:56 +0200
[Message part 1 (text/plain, inline)]
Hi,

When using su or sudo to enter an account managed by guix home, I get
this error

--8<---------------cut here---------------start------------->8---
Backtrace:
           2 (primitive-load "/home/guix/.guix-home/on-first-login")
In ice-9/ports.scm:
   461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
In unknown file:
           0 (open-file "/run/user/1003/on-first-login-executed" "w" …)

ERROR: In procedure open-file:
In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
--8<---------------cut here---------------end--------------->8---

Upon a console login or ssh login, /var/run/1003 is created and all is fine.

See below for the scenario, home-minimal.scm is attached.

Greetings,
Janneke


$ ssh guix <at> localhost -p 2222
guix <at> localhost's password: 
Last login: Tue Jun 23 11:45:08 2020 from 2001:980:1b4f:1:216:d3ff:fe29:7cdb
guix <at> dundal ~$ guix home reconfigure home-minimal.scm
/gnu/store/fgxpmf1iwjp9f8dfyaf7wxqa8105lq3w-home
Cleaning up symlinks from previous home-environment.

Skipping /home/guix/.config/fontconfig (not an empty directory)... done
Skipping /home/guix/.config (not an empty directory)... done
Cleanup finished.

New symlinks to home-environment will be created soon.
All conflicting files will go to /home/guix/1633101995-guix-home-legacy-configs-backup.

Skipping   /home/guix/.config (directory already exists)... done
Creating   /home/guix/.config/fontconfig... done
Symlinking /home/guix/.config/fontconfig/fonts.conf -> /gnu/store/phj2z2iiqdhryfy7mqral0b9qz3hlva6-fonts.conf... done
Symlinking /home/guix/.config/test.conf -> /gnu/store/bdixb09v30bvhpgi2f6ndiq25wzb9l74-tmp-file.txt... done
Symlinking /home/guix/.bash_profile -> /gnu/store/j3vhlswj46psxicapnq8c9p1jrwd55rk-bash_profile... done
Symlinking /home/guix/.profile -> /gnu/store/fxbppk3pqzdi3zzy0xl5vg1ir6c5jzq5-shell-profile... done
Symlinking /home/guix/.bashrc -> /gnu/store/513j2xkszmcmv7fiawh59mr0i1fmin55-bashrc... done
 done
Finished updating symlinks.

Comparing /gnu/store/fgxpmf1iwjp9f8dfyaf7wxqa8105lq3w-home/profile/share/fonts and
          /gnu/store/fgxpmf1iwjp9f8dfyaf7wxqa8105lq3w-home/profile/share/fonts... done (same)
Evaling on-change gexps.

On-change gexps evaluation finished.

guix <at> dundal ~$ guix home list-generations
]8;;file://dundal/var/guix/profiles/per-user/guix/guix-home-1-link\Generation 1	Oct 01 2021 12:19:16]8;;\	(current)
  file name: /var/guix/profiles/per-user/guix/guix-home-1-link
  canonical file name: /gnu/store/fgxpmf1iwjp9f8dfyaf7wxqa8105lq3w-home
  channels:
    guix:
      repository URL: https://git.savannah.gnu.org/git/guix.git
      branch: master
      commit: ]8;;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=56b10709efc4eb35df66f52a20ce3cb7fab4fee6\56b10709efc4eb35df66f52a20ce3cb7fab4fee6]8;;\
  configuration file: ]8;;file://dundal/gnu/store/kjha5z8mck0pa9jrgx2266rq1lvlb3ji-configuration.scm\/gnu/store/kjha5z8mck0pa9jrgx2266rq1lvlb3ji-configuration.scm]8;;\
guix <at> dundal ~$ logout
Connection to localhost closed.
17:26:49 janneke <at> dundal:~
$ sudo -i -u guix
Password: 
Backtrace:
           2 (primitive-load "/home/guix/.guix-home/on-first-login")
In ice-9/ports.scm:
   461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
In unknown file:
           0 (open-file "/run/user/1003/on-first-login-executed" "w" …)

ERROR: In procedure open-file:
In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
guix <at> dundal ~$ ls -ltrF /run/user
total 0
drwx------  7 gdm     gdm     160 Oct  1 12:16 971/
drwx------ 13 janneke janneke 260 Oct  1 13:07 1000/
guix <at> dundal ~$ logout
17:29:34 janneke <at> dundal:~
$ su - guix
Password: 
Backtrace:
           2 (primitive-load "/home/guix/.guix-home/on-first-login")
In ice-9/ports.scm:
   461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
In unknown file:
           0 (open-file "/run/user/1003/on-first-login-executed" "w" …)

ERROR: In procedure open-file:
In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
17:37:33 janneke <at> dundal:~
$ ssh guix <at> localhost -p 2222
guix <at> localhost's password: 
Last login: Fri Oct  1 17:23:35 2021 from 127.0.0.1
guix <at> dundal ~$ 

[home-minimal.scm (application/octet-stream, attachment)]
[Message part 3 (text/plain, inline)]
-- 
Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com

Information forwarded to bug-guix <at> gnu.org:
bug#50945; Package guix. (Fri, 01 Oct 2021 17:06:01 GMT) Full text and rfc822 format available.

Message #8 received at 50945 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: Jan Nieuwenhuizen <janneke <at> gnu.org>, 50945 <at> debbugs.gnu.org
Cc: Andrew Tropin <andrew <at> trop.in>
Subject: Re: bug#50945: Guix home: No such file or directory:
 "/run/user/1003/on-first-login-executed"
Date: Fri, 01 Oct 2021 19:05:40 +0200
[Message part 1 (text/plain, inline)]
On Fri, Oct 01 2021, Jan Nieuwenhuizen wrote:

> Hi,
>
> When using su or sudo to enter an account managed by guix home, I get
> this error
>
> --8<---------------cut here---------------start------------->8---
> Backtrace:
>            2 (primitive-load "/home/guix/.guix-home/on-first-login")
> In ice-9/ports.scm:
>    461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
> In unknown file:
>            0 (open-file "/run/user/1003/on-first-login-executed" "w" …)
>
> ERROR: In procedure open-file:
> In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
> --8<---------------cut here---------------end--------------->8---
>
> Upon a console login or ssh login, /var/run/1003 is created and all is fine.
>
> See below for the scenario, home-minimal.scm is attached.
>
> Greetings,
> Janneke

[ Cc Andrew who did most of the work on Guix Home ]

I think this is because Guix Home relies on $XDG_RUNTIME_DIR to be
defined, otherwise it falls-back to /run/user/UID.  But it looks like
/run/user/UID isn’t created when using ‘su’ to login.  I don’t really
know how these things work under the hood; maybe using $XDG_RUNTIME_DIR
isn’t best idea.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#50945; Package guix. (Thu, 07 Oct 2021 05:22:01 GMT) Full text and rfc822 format available.

Message #11 received at 50945 <at> debbugs.gnu.org (full text, mbox):

From: Andrew Tropin <andrew <at> trop.in>
To: Jan Nieuwenhuizen <janneke <at> gnu.org>, 50945 <at> debbugs.gnu.org
Cc: Oleg Pykhalov <go.wigust <at> gmail.com>
Subject: Re: bug#50945: Guix home: No such file or directory:
 "/run/user/1003/on-first-login-executed"
Date: Thu, 07 Oct 2021 08:21:24 +0300
[Message part 1 (text/plain, inline)]
On 2021-10-01 17:46, Jan Nieuwenhuizen wrote:

> Hi,
>
> When using su or sudo to enter an account managed by guix home, I get
> this error
>
> --8<---------------cut here---------------start------------->8---
> Backtrace:
>            2 (primitive-load "/home/guix/.guix-home/on-first-login")
> In ice-9/ports.scm:
>    461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
> In unknown file:
>            0 (open-file "/run/user/1003/on-first-login-executed" "w" …)
>
> ERROR: In procedure open-file:
> In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
> --8<---------------cut here---------------end--------------->8---
>
> Upon a console login or ssh login, /var/run/1003 is created and all is fine.
>
> See below for the scenario, home-minimal.scm is attached.
>
> Greetings,
> Janneke
>
>
> $ ssh guix <at> localhost -p 2222
> guix <at> localhost's password: 
> Last login: Tue Jun 23 11:45:08 2020 from 2001:980:1b4f:1:216:d3ff:fe29:7cdb
> guix <at> dundal ~$ guix home reconfigure home-minimal.scm
> /gnu/store/fgxpmf1iwjp9f8dfyaf7wxqa8105lq3w-home
> Cleaning up symlinks from previous home-environment.
>
> Skipping /home/guix/.config/fontconfig (not an empty directory)... done
> Skipping /home/guix/.config (not an empty directory)... done
> Cleanup finished.
>
> New symlinks to home-environment will be created soon.
> All conflicting files will go to /home/guix/1633101995-guix-home-legacy-configs-backup.
>
> Skipping   /home/guix/.config (directory already exists)... done
> Creating   /home/guix/.config/fontconfig... done
> Symlinking /home/guix/.config/fontconfig/fonts.conf -> /gnu/store/phj2z2iiqdhryfy7mqral0b9qz3hlva6-fonts.conf... done
> Symlinking /home/guix/.config/test.conf -> /gnu/store/bdixb09v30bvhpgi2f6ndiq25wzb9l74-tmp-file.txt... done
> Symlinking /home/guix/.bash_profile -> /gnu/store/j3vhlswj46psxicapnq8c9p1jrwd55rk-bash_profile... done
> Symlinking /home/guix/.profile -> /gnu/store/fxbppk3pqzdi3zzy0xl5vg1ir6c5jzq5-shell-profile... done
> Symlinking /home/guix/.bashrc -> /gnu/store/513j2xkszmcmv7fiawh59mr0i1fmin55-bashrc... done
>  done
> Finished updating symlinks.
>
> Comparing /gnu/store/fgxpmf1iwjp9f8dfyaf7wxqa8105lq3w-home/profile/share/fonts and
>           /gnu/store/fgxpmf1iwjp9f8dfyaf7wxqa8105lq3w-home/profile/share/fonts... done (same)
> Evaling on-change gexps.
>
> On-change gexps evaluation finished.
>
> guix <at> dundal ~$ guix home list-generations
> ]8;;file://dundal/var/guix/profiles/per-user/guix/guix-home-1-link\Generation 1	Oct 01 2021 12:19:16]8;;\	(current)
>   file name: /var/guix/profiles/per-user/guix/guix-home-1-link
>   canonical file name: /gnu/store/fgxpmf1iwjp9f8dfyaf7wxqa8105lq3w-home
>   channels:
>     guix:
>       repository URL: https://git.savannah.gnu.org/git/guix.git
>       branch: master
>       commit: ]8;;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=56b10709efc4eb35df66f52a20ce3cb7fab4fee6\56b10709efc4eb35df66f52a20ce3cb7fab4fee6]8;;\
>   configuration file: ]8;;file://dundal/gnu/store/kjha5z8mck0pa9jrgx2266rq1lvlb3ji-configuration.scm\/gnu/store/kjha5z8mck0pa9jrgx2266rq1lvlb3ji-configuration.scm]8;;\
> guix <at> dundal ~$ logout
> Connection to localhost closed.
> 17:26:49 janneke <at> dundal:~
> $ sudo -i -u guix
> Password: 
> Backtrace:
>            2 (primitive-load "/home/guix/.guix-home/on-first-login")
> In ice-9/ports.scm:
>    461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
> In unknown file:
>            0 (open-file "/run/user/1003/on-first-login-executed" "w" …)
>
> ERROR: In procedure open-file:
> In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
> guix <at> dundal ~$ ls -ltrF /run/user
> total 0
> drwx------  7 gdm     gdm     160 Oct  1 12:16 971/
> drwx------ 13 janneke janneke 260 Oct  1 13:07 1000/
> guix <at> dundal ~$ logout
> 17:29:34 janneke <at> dundal:~
> $ su - guix
> Password: 
> Backtrace:
>            2 (primitive-load "/home/guix/.guix-home/on-first-login")
> In ice-9/ports.scm:
>    461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
> In unknown file:
>            0 (open-file "/run/user/1003/on-first-login-executed" "w" …)
>
> ERROR: In procedure open-file:
> In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
> 17:37:33 janneke <at> dundal:~
> $ ssh guix <at> localhost -p 2222
> guix <at> localhost's password: 
> Last login: Fri Oct  1 17:23:35 2021 from 127.0.0.1
> guix <at> dundal ~$ 

Thank you for a very detailed report.

pam_elogind doesn't create a session, when the login shell spawned by
sudo or su => XDG_RUNTIME_DIR not get created => this message appears.

I think we can omit execution of any processes by on-first-login script
in case session wasn't created.  Added the check:

[0001-home-services-on-first-login-Check-if-XDG_RUNTIME_DI.patch (text/x-patch, inline)]
From aab6df0298963fe91a6ebfd1dadbc1530eceeff7 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew <at> trop.in>
Date: Thu, 7 Oct 2021 08:12:04 +0300
Subject: [PATCH] home-services: on-first-login: Check if XDG_RUNTIME_DIR
 exists.

* gnu/home-services.scm (on-first-login): on-first-login won't execute
anything if XDG_RUNTIME_DIR doesn't exists.
---
 gnu/home-services.scm | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/gnu/home-services.scm b/gnu/home-services.scm
index 9f1e986616..0b77a1321d 100644
--- a/gnu/home-services.scm
+++ b/gnu/home-services.scm
@@ -286,8 +286,11 @@ will be put in @file{~/.guix-home/files}.")))
        ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
        ;; allows to launch on-first-login script on first login only
        ;; after complete logout/reboot.
-       (when (not (file-exists? flag-file-path))
-         (begin #$@gexps (touch flag-file-path))))))
+       (if (file-exists? xdg-runtime-dir)
+           (when (not (file-exists? flag-file-path))
+             (begin #$@gexps (touch flag-file-path)))
+           (display "XDG_RUNTIME_DIR doesn't exists, the session wasn't
+created, on-first-login script won't execute anything.")))))
 
 (define (on-first-login-script-entry m-on-first-login)
   "Return, as a monadic value, an entry for the on-first-login script
-- 
2.33.0

[Message part 3 (text/plain, inline)]
-- 
Best regards,
Andrew Tropin
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#50945; Package guix. (Fri, 05 Nov 2021 16:59:02 GMT) Full text and rfc822 format available.

Message #14 received at 50945 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: Andrew Tropin <andrew <at> trop.in>, Jan Nieuwenhuizen <janneke <at> gnu.org>,
 50945 <at> debbugs.gnu.org
Subject: Re: bug#50945: Guix home: No such file or directory:
 "/run/user/1003/on-first-login-executed"
Date: Fri, 05 Nov 2021 17:58:29 +0100
[Message part 1 (text/plain, inline)]
Hi,

On Thu, Oct 07 2021, Andrew Tropin wrote:

> On 2021-10-01 17:46, Jan Nieuwenhuizen wrote:
>
>> Hi,
>>
>> When using su or sudo to enter an account managed by guix home, I get
>> this error
>>
>> --8<---------------cut here---------------start------------->8---
>> Backtrace:
>>            2 (primitive-load "/home/guix/.guix-home/on-first-login")
>> In ice-9/ports.scm:
>>    461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
>> In unknown file:
>>            0 (open-file "/run/user/1003/on-first-login-executed" "w" …)
>>
>> ERROR: In procedure open-file:
>> In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
>> --8<---------------cut here---------------end--------------->8---
>>
>> [...]
>
> Thank you for a very detailed report.
>
> pam_elogind doesn't create a session, when the login shell spawned by
> sudo or su => XDG_RUNTIME_DIR not get created => this message appears.
>
> I think we can omit execution of any processes by on-first-login script
> in case session wasn't created.  Added the check:
>
> From aab6df0298963fe91a6ebfd1dadbc1530eceeff7 Mon Sep 17 00:00:00 2001
> From: Andrew Tropin <andrew <at> trop.in>
> Date: Thu, 7 Oct 2021 08:12:04 +0300
> Subject: [PATCH] home-services: on-first-login: Check if XDG_RUNTIME_DIR
>  exists.
>
> * gnu/home-services.scm (on-first-login): on-first-login won't execute
> anything if XDG_RUNTIME_DIR doesn't exists.
> ---
>  gnu/home-services.scm | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/gnu/home-services.scm b/gnu/home-services.scm
> index 9f1e986616..0b77a1321d 100644
> --- a/gnu/home-services.scm
> +++ b/gnu/home-services.scm
> @@ -286,8 +286,11 @@ will be put in @file{~/.guix-home/files}.")))
>         ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
>         ;; allows to launch on-first-login script on first login only
>         ;; after complete logout/reboot.
> -       (when (not (file-exists? flag-file-path))
> -         (begin #$@gexps (touch flag-file-path))))))
> +       (if (file-exists? xdg-runtime-dir)
> +           (when (not (file-exists? flag-file-path))

Use (unless …) instead of (when (not …)…).

> +             (begin #$@gexps (touch flag-file-path)))
> +           (display "XDG_RUNTIME_DIR doesn't exists, the session wasn't
> +created, on-first-login script won't execute anything.")))))

It would be good to tell the user how they could manually run the
script, that way they could manually set/create $XDG_RUNTIME_DIR and run
the script.

  "XDG_RUNTIME_DIR doesn't exist; the 'on-first-login' script won't
  execute anything.  You can manually execute the script by running
  '$HOME/.guix-home/on-first-login'

WDYT?
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#50945; Package guix. (Mon, 08 Nov 2021 09:25:02 GMT) Full text and rfc822 format available.

Message #17 received at 50945 <at> debbugs.gnu.org (full text, mbox):

From: Andrew Tropin <andrew <at> trop.in>
To: Oleg Pykhalov <go.wigust <at> gmail.com>, Xinglu Chen <public <at> yoctocell.xyz>
Cc: 50945 <at> debbugs.gnu.org, Jan Nieuwenhuizen <janneke <at> gnu.org>
Subject: Re: bug#50945: Guix home: No such file or directory:
 "/run/user/1003/on-first-login-executed"
Date: Mon, 08 Nov 2021 12:24:35 +0300
[Message part 1 (text/plain, inline)]
On 2021-11-05 17:58, Xinglu Chen wrote:

> Hi,
>
> On Thu, Oct 07 2021, Andrew Tropin wrote:
>
>> On 2021-10-01 17:46, Jan Nieuwenhuizen wrote:
>>
>>> Hi,
>>>
>>> When using su or sudo to enter an account managed by guix home, I get
>>> this error
>>>
>>> --8<---------------cut here---------------start------------->8---
>>> Backtrace:
>>>            2 (primitive-load "/home/guix/.guix-home/on-first-login")
>>> In ice-9/ports.scm:
>>>    461:11  1 (call-with-output-file "/run/user/1003/on-first-login-…" …)
>>> In unknown file:
>>>            0 (open-file "/run/user/1003/on-first-login-executed" "w" …)
>>>
>>> ERROR: In procedure open-file:
>>> In procedure open-file: No such file or directory: "/run/user/1003/on-first-login-executed"
>>> --8<---------------cut here---------------end--------------->8---
>>>
>>> [...]
>>
>> Thank you for a very detailed report.
>>
>> pam_elogind doesn't create a session, when the login shell spawned by
>> sudo or su => XDG_RUNTIME_DIR not get created => this message appears.
>>
>> I think we can omit execution of any processes by on-first-login script
>> in case session wasn't created.  Added the check:
>>
>> From aab6df0298963fe91a6ebfd1dadbc1530eceeff7 Mon Sep 17 00:00:00 2001
>> From: Andrew Tropin <andrew <at> trop.in>
>> Date: Thu, 7 Oct 2021 08:12:04 +0300
>> Subject: [PATCH] home-services: on-first-login: Check if XDG_RUNTIME_DIR
>>  exists.
>>
>> * gnu/home-services.scm (on-first-login): on-first-login won't execute
>> anything if XDG_RUNTIME_DIR doesn't exists.
>> ---
>>  gnu/home-services.scm | 7 +++++--
>>  1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/gnu/home-services.scm b/gnu/home-services.scm
>> index 9f1e986616..0b77a1321d 100644
>> --- a/gnu/home-services.scm
>> +++ b/gnu/home-services.scm
>> @@ -286,8 +286,11 @@ will be put in @file{~/.guix-home/files}.")))
>>         ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
>>         ;; allows to launch on-first-login script on first login only
>>         ;; after complete logout/reboot.
>> -       (when (not (file-exists? flag-file-path))
>> -         (begin #$@gexps (touch flag-file-path))))))
>> +       (if (file-exists? xdg-runtime-dir)
>> +           (when (not (file-exists? flag-file-path))
>
> Use (unless …) instead of (when (not …)…).
>
>> +             (begin #$@gexps (touch flag-file-path)))
>> +           (display "XDG_RUNTIME_DIR doesn't exists, the session wasn't
>> +created, on-first-login script won't execute anything.")))))
>
> It would be good to tell the user how they could manually run the
> script, that way they could manually set/create $XDG_RUNTIME_DIR and run
> the script.
>
>   "XDG_RUNTIME_DIR doesn't exist; the 'on-first-login' script won't
>   execute anything.  You can manually execute the script by running
>   '$HOME/.guix-home/on-first-login'
>
> WDYT?

Addressed suggestions, attaching updated patch.

[0001-home-services-on-first-login-Check-if-XDG_RUNTIME_DI.patch (text/x-patch, inline)]
From 8b924b02ab917632047d6653f19d9b16175989bf Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew <at> trop.in>
Date: Thu, 7 Oct 2021 08:12:04 +0300
Subject: [PATCH] home-services: on-first-login: Check if XDG_RUNTIME_DIR
 exists.

* gnu/home-services.scm (on-first-login): on-first-login won't execute
anything if XDG_RUNTIME_DIR doesn't exists.
---
 gnu/home/services.scm | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/gnu/home/services.scm b/gnu/home/services.scm
index 5c9b743f7b..1e295b6afe 100644
--- a/gnu/home/services.scm
+++ b/gnu/home/services.scm
@@ -286,8 +286,13 @@ (define (compute-on-first-login-script _ gexps)
        ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
        ;; allows to launch on-first-login script on first login only
        ;; after complete logout/reboot.
-       (when (not (file-exists? flag-file-path))
-         (begin #$@gexps (touch flag-file-path))))))
+       (if (file-exists? xdg-runtime-dir)
+           (unless (file-exists? flag-file-path)
+             (begin #$@gexps (touch flag-file-path)))
+           (display "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 apropriate value and manually execute the
+script by running '$HOME/.guix-home/on-first-login'")))))
 
 (define (on-first-login-script-entry m-on-first-login)
   "Return, as a monadic value, an entry for the on-first-login script
-- 
2.33.0

[Message part 3 (text/plain, inline)]
Also, added a note about elogind/XDG_RUNTIME_DIR to manual.

[0001-doc-Add-a-note-about-elogind-and-XDG_RUNTIME_DIR-for.patch (text/x-patch, inline)]
From f5d35fd4f542a11226c0159ee32498e374ff40a2 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew <at> trop.in>
Date: Mon, 8 Nov 2021 12:22:04 +0300
Subject: [PATCH] doc: Add a note about elogind and XDG_RUNTIME_DIR for Guix
 Home.

* doc/guix.texi (Declaring the Home Environment): Add a note about elogind and
XDG_RUNTIME_DIR.
---
 doc/guix.texi | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 3355a535ad..36437cf161 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -35916,6 +35916,13 @@ guix home reconfigure config.scm
 This ``builds'' your home environment and creates @file{~/.guix-home}
 pointing to it.  Voilà!
 
+@quotation 
+Ensure that operating system has elogind or any other mechanism, which
+creates xdg runtime directory and sets @env{XDG_RUNTIME_DIR} variable.
+Otherwise, @file{on-first-login} script won't execute anything, and
+process like userland Shepherd and its descendants won't start.
+@end quotation
+
 @node Configuring the Shell
 @section Configuring the Shell
 This section is safe to skip if your shell or shells are managed by
-- 
2.33.0

[Message part 5 (text/plain, inline)]
Oleg, please apply it if it looks good.

-- 
Best regards,
Andrew Tropin
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#50945; Package guix. (Sun, 14 Nov 2021 22:12:02 GMT) Full text and rfc822 format available.

Message #20 received at 50945 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Andrew Tropin <andrew <at> trop.in>
Cc: Oleg Pykhalov <go.wigust <at> gmail.com>, 50945 <at> debbugs.gnu.org,
 Xinglu Chen <public <at> yoctocell.xyz>, Jan Nieuwenhuizen <janneke <at> gnu.org>
Subject: Re: bug#50945: Guix home: No such file or directory:
 "/run/user/1003/on-first-login-executed"
Date: Sun, 14 Nov 2021 23:11:09 +0100
Hi Andrew and all,

Andrew Tropin <andrew <at> trop.in> skribis:

> On 2021-11-05 17:58, Xinglu Chen wrote:
> From 8b924b02ab917632047d6653f19d9b16175989bf Mon Sep 17 00:00:00 2001
> From: Andrew Tropin <andrew <at> trop.in>
> Date: Thu, 7 Oct 2021 08:12:04 +0300
> Subject: [PATCH] home-services: on-first-login: Check if XDG_RUNTIME_DIR
>  exists.
>
> * gnu/home-services.scm (on-first-login): on-first-login won't execute
> anything if XDG_RUNTIME_DIR doesn't exists.

Applied, with a “Fixes” line in the commit log.  However…

> +++ b/gnu/home/services.scm
> @@ -286,8 +286,13 @@ (define (compute-on-first-login-script _ gexps)
>         ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
>         ;; allows to launch on-first-login script on first login only
>         ;; after complete logout/reboot.
> -       (when (not (file-exists? flag-file-path))
> -         (begin #$@gexps (touch flag-file-path))))))
> +       (if (file-exists? xdg-runtime-dir)
> +           (unless (file-exists? flag-file-path)
> +             (begin #$@gexps (touch flag-file-path)))
> +           (display "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 apropriate value and manually execute the
> +script by running '$HOME/.guix-home/on-first-login'")))))

This pattern is problematic because this text is not internationalized
(not subject to translation).  Part of caring about users in Guix
implies ensuring that all messages are internationalized.

The fact that the text is embedded in a generated script makes it a
little trickier.  In the installer, we address that by using the message
catalog of the ‘guix’ package like so:

    #~(begin
        (bindtextdomain "guix" (string-append #$guix "/share/locale"))
        (textdomain "guix")
        (setlocale LC_ALL ""))

The downside is that the script ends up depending on the ‘guix’ package;
we could optimize that later on.

At any rate, for these cases where you cannot avoid having messages
printed by generated scripts such as this one, the solution would be to:

  1. Add calls to ‘bindtextdomain’ and ‘textdomain’ as above
     (‘setlocale’ no longer needs to be called explicitly).

  2. Import (guix i18n) and wrap messages in ‘G_’ (or ‘N_’) calls.

  3. Ensure that each file that uses ‘G_’ or ‘N_’ is listed in
     po/guix/POTFILES.in.

Could one of you take a look?  :-)

> Also, added a note about elogind/XDG_RUNTIME_DIR to manual.
>
> From f5d35fd4f542a11226c0159ee32498e374ff40a2 Mon Sep 17 00:00:00 2001
> From: Andrew Tropin <andrew <at> trop.in>
> Date: Mon, 8 Nov 2021 12:22:04 +0300
> Subject: [PATCH] doc: Add a note about elogind and XDG_RUNTIME_DIR for Guix
>  Home.
>
> * doc/guix.texi (Declaring the Home Environment): Add a note about elogind and
> XDG_RUNTIME_DIR.

I tweaked the wording and applied.  Thank you!

Ludo’.




bug closed, send any further explanations to 50945 <at> debbugs.gnu.org and Jan Nieuwenhuizen <janneke <at> gnu.org> Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Sun, 14 Nov 2021 22:13:01 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 13 Dec 2021 12:24:11 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 96 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.