bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
Hi Andrew and all, Andrew Tropin skribis: > On 2021-11-05 17:58, Xinglu Chen wrote: > From 8b924b02ab917632047d6653f19d9b16175989bf Mon Sep 17 00:00:00 2001 > From: Andrew Tropin > 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 > 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#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
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 >> 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. From 8b924b02ab917632047d6653f19d9b16175989bf Mon Sep 17 00:00:00 2001 From: Andrew Tropin 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 Also, added a note about elogind/XDG_RUNTIME_DIR to manual. From f5d35fd4f542a11226c0159ee32498e374ff40a2 Mon Sep 17 00:00:00 2001 From: Andrew Tropin 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
bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
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 > 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 Description: PGP signature
bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
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 > 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 > 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: From aab6df0298963fe91a6ebfd1dadbc1530eceeff7 Mon Sep 17 00:00:00 2001 From: Andrew Tropin Date: Thu, 7 Oct 2021 08:12:04 +0300 Subject: [PATCH] home-services:
bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
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 Description: PGP signature
bug#50945: Guix home: No such file or directory: "/run/user/1003/on-first-login-executed"
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 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 guix@localhost's password: Last login: Fri Oct 1 17:23:35 2021 from 127.0.0.1 guix@dundal ~$ home-minimal.scm Description: Binary data -- Jan Nieuwenhuizen | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com