unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / Atom feed
* bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
@ 2021-10-01 15:46 Jan Nieuwenhuizen
  2021-10-01 17:05 ` Xinglu Chen
  2021-10-07  5:21 ` Andrew Tropin
  0 siblings, 2 replies; 6+ messages in thread
From: Jan Nieuwenhuizen @ 2021-10-01 15:46 UTC (permalink / raw)
  To: 50945

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

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@localhost -p 2222
guix@localhost's password: 
Last login: Tue Jun 23 11:45:08 2020 from 2001:980:1b4f:1:216:d3ff:fe29:7cdb
guix@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@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@dundal ~$ logout
Connection to localhost closed.
17:26:49 janneke@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@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@dundal ~$ logout
17:29:34 janneke@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@dundal:~
$ ssh guix@localhost -p 2222
guix@localhost's password: 
Last login: Fri Oct  1 17:23:35 2021 from 127.0.0.1
guix@dundal ~$ 


[-- Attachment #2: home-minimal.scm --]
[-- Type: application/octet-stream, Size: 741 bytes --]

(use-modules (gnu home)
             (gnu home-services)
             (gnu home-services shells)
             (gnu home-services shepherd)
             (gnu services)
             (gnu packages admin)
             (guix gexp))

(home-environment
 (packages (list htop))
 (services
  (list
   (service home-bash-service-type
            (home-bash-configuration
             (guix-defaults? #t)
             (bash-profile '("\
export HISTFILE=$XDG_CACHE_HOME/.bash_history"))))
   
   (simple-service 'test-config
                   home-files-service-type
                   (list `("config/test.conf"
                           ,(plain-file "tmp-file.txt"
                                        "the content of ~/.config/test.conf")))))))

[-- Attachment #3: Type: text/plain, Size: 152 bytes --]


-- 
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
  2021-10-01 15:46 bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed" Jan Nieuwenhuizen
@ 2021-10-01 17:05 ` Xinglu Chen
  2021-10-07  5:21 ` Andrew Tropin
  1 sibling, 0 replies; 6+ messages in thread
From: Xinglu Chen @ 2021-10-01 17:05 UTC (permalink / raw)
  To: Jan Nieuwenhuizen, 50945; +Cc: Andrew Tropin

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

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.

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
  2021-10-01 15:46 bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed" Jan Nieuwenhuizen
  2021-10-01 17:05 ` Xinglu Chen
@ 2021-10-07  5:21 ` Andrew Tropin
  2021-11-05 16:58   ` Xinglu Chen
  1 sibling, 1 reply; 6+ messages in thread
From: Andrew Tropin @ 2021-10-07  5:21 UTC (permalink / raw)
  To: Jan Nieuwenhuizen, 50945


[-- Attachment #1.1: Type: text/plain, Size: 4908 bytes --]

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@localhost -p 2222
> guix@localhost's password: 
> Last login: Tue Jun 23 11:45:08 2020 from 2001:980:1b4f:1:216:d3ff:fe29:7cdb
> guix@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@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@dundal ~$ logout
> Connection to localhost closed.
> 17:26:49 janneke@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@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@dundal ~$ logout
> 17:29:34 janneke@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@dundal:~
> $ ssh guix@localhost -p 2222
> guix@localhost's password: 
> Last login: Fri Oct  1 17:23:35 2021 from 127.0.0.1
> guix@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:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-home-services-on-first-login-Check-if-XDG_RUNTIME_DI.patch --]
[-- Type: text/x-patch, Size: 1397 bytes --]

From aab6df0298963fe91a6ebfd1dadbc1530eceeff7 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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


[-- Attachment #1.3: Type: text/plain, Size: 37 bytes --]


-- 
Best regards,
Andrew Tropin

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
  2021-10-07  5:21 ` Andrew Tropin
@ 2021-11-05 16:58   ` Xinglu Chen
  2021-11-08  9:24     ` Andrew Tropin
  0 siblings, 1 reply; 6+ messages in thread
From: Xinglu Chen @ 2021-11-05 16:58 UTC (permalink / raw)
  To: Andrew Tropin, Jan Nieuwenhuizen, 50945

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

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@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?

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
  2021-11-05 16:58   ` Xinglu Chen
@ 2021-11-08  9:24     ` Andrew Tropin
  2021-11-14 22:11       ` Ludovic Courtès
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Tropin @ 2021-11-08  9:24 UTC (permalink / raw)
  To: Oleg Pykhalov, Xinglu Chen; +Cc: 50945


[-- Attachment #1.1: Type: text/plain, Size: 2995 bytes --]

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@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.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-home-services-on-first-login-Check-if-XDG_RUNTIME_DI.patch --]
[-- Type: text/x-patch, Size: 1550 bytes --]

From 8b924b02ab917632047d6653f19d9b16175989bf Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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


[-- Attachment #1.3: Type: text/plain, Size: 62 bytes --]


Also, added a note about elogind/XDG_RUNTIME_DIR to manual.


[-- Attachment #1.4: 0001-doc-Add-a-note-about-elogind-and-XDG_RUNTIME_DIR-for.patch --]
[-- Type: text/x-patch, Size: 1150 bytes --]

From f5d35fd4f542a11226c0159ee32498e374ff40a2 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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


[-- Attachment #1.5: Type: text/plain, Size: 80 bytes --]


Oleg, please apply it if it looks good.

-- 
Best regards,
Andrew Tropin

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
  2021-11-08  9:24     ` Andrew Tropin
@ 2021-11-14 22:11       ` Ludovic Courtès
  0 siblings, 0 replies; 6+ messages in thread
From: Ludovic Courtès @ 2021-11-14 22:11 UTC (permalink / raw)
  To: Andrew Tropin; +Cc: 50945, Xinglu Chen

Hi Andrew and all,

Andrew Tropin <andrew@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@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@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’.




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-11-14 22:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-01 15:46 bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed" Jan Nieuwenhuizen
2021-10-01 17:05 ` Xinglu Chen
2021-10-07  5:21 ` Andrew Tropin
2021-11-05 16:58   ` Xinglu Chen
2021-11-08  9:24     ` Andrew Tropin
2021-11-14 22:11       ` Ludovic Courtès

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).