[PATCH 0/2] Don't try to mkdir XDG_RUNTIME_DIR

  • Done
  • quality assurance status badge
Details
3 participants
  • Andrew Tropin
  • Ludovic Courtès
  • Maxime Devos
Owner
unassigned
Submitted by
Andrew Tropin
Severity
normal
A
A
Andrew Tropin wrote on 25 Jul 2022 11:43
(address . guix-patches@gnu.org)
87wnc1zfrh.fsf@trop.in
Andrew Tropin (2):
home: xdg: Use closures in activation scripts.
home: xdg: Skip mkdir XDG_RUNTIME_DIR in activation script.

gnu/home/services/xdg.scm | 46 ++++++++++++++++++++++++---------------
1 file changed, 28 insertions(+), 18 deletions(-)

--
2.37.0
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.
---
gnu/home/services/xdg.scm | 41 ++++++++++++++++++++++-----------------
1 file changed, 23 insertions(+), 18 deletions(-)

Toggle diff (68 lines)
diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm
index 71c028c788..5a41dc4994 100644
--- a/gnu/home/services/xdg.scm
+++ b/gnu/home/services/xdg.scm
@@ -23,6 +23,7 @@ (define-module (gnu home services xdg)
#:use-module (gnu packages freedesktop)
#:use-module (gnu home services utils)
#:use-module (guix gexp)
+ #:use-module (guix modules)
#:use-module (guix records)
#:use-module (guix i18n)
#:use-module (guix diagnostics)
@@ -105,16 +106,17 @@ (define (home-xdg-base-directories-environment-variables-service config)
home-xdg-base-directories-configuration-fields))
(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)
+ (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))))
(define (last-extension-or-cfg config extensions)
"Picks configuration value from last provided extension. If there
@@ -205,14 +207,17 @@ (define (home-xdg-user-directories-activation-service config)
(let ((dirs (map (lambda (field)
((configuration-field-getter field) config))
home-xdg-user-directories-configuration-fields)))
- #~(let ((ensure-dir
- (lambda (path)
- (mkdir-p
- ((@@ (ice-9 string-fun) string-replace-substring)
- path "$HOME" (getenv "HOME"))))))
- (display "Creating XDG user directories...")
- (map ensure-dir '#$dirs)
- (display " done\n"))))
+ (with-imported-modules `((guix build utils)
+ ,@(source-module-closure
+ '((ice-9 string-fun))))
+ #~(let ((ensure-dir
+ (lambda (path)
+ ((@ (guix build utils) mkdir-p)
+ ((@ (ice-9 string-fun) string-replace-substring)
+ path "$HOME" (getenv "HOME"))))))
+ (display "Creating XDG user directories...")
+ (map ensure-dir '#$dirs)
+ (display " done\n")))))
(define home-xdg-user-directories-service-type
(service-type (name 'home-xdg-user-directories)
--
2.37.0
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(-)

Toggle diff (32 lines)
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)
--
2.37.0
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmLeZnIACgkQIgjSCVjB
3rDgOA//YAHIzdu//xKHVLh/qsavFcj1Zl/mI8KJAr4o4+oCrWR4UwVC9pf5Zx5Z
eUcU36I0qs7MwuVa3LlrrCWtuDxi3twpLs1V94FyloP0X8p5og1loX91BF4iM9Wh
3xwgrMWzsHWZ3crl1VlkhsoastPXGZss85ZJQJzZgc+YuG+s+n6M/M/bL+Qq5ZXM
mAUMB7w6PKcp0x1K8dOHfjDVqLcA/Z67qgdZBD2CXh9icZ2n1RcV+0WpOSPAN6Wn
krJfsOOvlr0Kgw5jmA6Hu4ljLoLxmLNnhDgr0yA5hnDW1i3U5wx0oa/rT4I8mWAj
jQd7J1XRo5WpZg+nI7S4+bsCL2from3AButKTF/UI79fu5b7Ru1Fr8Mt19Mr9Dgj
M5L3QatXMNZI9e1uTXxGeZPqaHh0VYk9BWFolA+lRCgoRGV7VzOfotpg2YioBs7R
96F0srzreWWWnOeHwTTb8L8L2S/3BANhm+9cWKzTxcx99KHOAIlYiacvdIEjKqDE
y0l1kLo5mSD88jWTFH+w7Auy8kQk8ZbuNzHhe9gTkfhKVwyiUAuG3/yDAo0b2T9M
VCCF6n8vLD2CjEc4OOt1AUUgHbDuSeNSJbNaUEy3D4iqsZiIPu0YnER6c9lHFEiP
Q8qHJjkTBxTSxpXIq+nHh9pj6B+Yf1SWg91cNhKst42pb26x/M8=
=tjzv
-----END PGP SIGNATURE-----

L
L
Ludovic Courtès wrote on 1 Aug 2022 12:08
(name . Andrew Tropin)(address . andrew@trop.in)(address . 56758@debbugs.gnu.org)
87r120z36g.fsf@gnu.org
Hi,

Andrew Tropin <andrew@trop.in> skribis:

Toggle quote (8 lines)
> 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.

[...]

Toggle quote (15 lines)
> (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.

Toggle quote (4 lines)
> + (with-imported-modules `((guix build utils)
> + ,@(source-module-closure
> + '((ice-9 string-fun))))

However this one is incorrect is 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”.)

Toggle quote (43 lines)
> 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’:

Toggle snippet (17 lines)
+ 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

Thoughts?

Ludo’.
From f6ff733aaaea7e5b8277b65430e7dc090dffa9aa Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@trop.in>
Date: Thu, 21 Jul 2022 17:06:24 +0300
Subject: [PATCH] home: xdg: Skip mkdir XDG_RUNTIME_DIR in activation script.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* gnu/home/services/xdg.scm (ensure-xdg-base-dirs-on-activation): Skip mkdir
XDG_RUNTIME_DIR in activation script.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
---
gnu/home/services/xdg.scm | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)

Toggle diff (31 lines)
diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm
index 71c028c788..0219bc93e0 100644
--- a/gnu/home/services/xdg.scm
+++ b/gnu/home/services/xdg.scm
@@ -109,12 +109,18 @@ (define (ensure-xdg-base-dirs-on-activation config)
((@@ (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)))
+ '#$(filter-map
+ (lambda (field)
+ (let ((variable
+ (string-append
+ "XDG_"
+ (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" variable))
+ variable)))
+ home-xdg-base-directories-configuration-fields)))
(define (last-extension-or-cfg config extensions)
"Picks configuration value from last provided extension. If there
--
2.37.1
A
A
Andrew Tropin wrote on 1 Aug 2022 14:49
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 56758@debbugs.gnu.org)
87r120b039.fsf@trop.in
On 2022-08-01 12:08, Ludovic Courtès wrote:

Toggle quote (31 lines)
> 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 @@ :)

Toggle quote (11 lines)
>
>> + (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.

Toggle quote (69 lines)
>
>> 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.

Toggle snippet (41 lines)
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


The same with guix home container.

Toggle snippet (16 lines)
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.

--
Best regards,
Andrew Tropin
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmLny8oACgkQIgjSCVjB
3rAE3Q//UHkSaxiihGmGzQ9tAv96S8jgf5Cf8KnsNQIKCwoGjYxGJrj3tIEbUNus
60j2aH5E4qgH4+HUeltl+EgLP5vQFttfQvoNGhish1W+aDL+wqJYoMaofmsrUNT/
Vtql8TSl8JTKGunuDLs1ioFfOxfBs2YYlyhsSH8cHsCAhAU9OtRGPNu73+hZQJYs
+irMd6VnmsEPi+96xgPrXJvSc3biBlCIIxjizqNVCFA8hOKVkeFLAtDzTT0eM/12
NsVxHS4EZydGdqzhZmqGLqY2LEzDYdblL0v49iImeSO0ToLoBpgtoCJ6QjS5z863
TBIzC4UYHiFyXM6k2ByGYVs80PXLcWw0L2X8zA0wmhwHXKbmLwIVznNZzJh1WF4D
3+GZTOJ/xPQYLDNW+qqOdRPTXaKErjJ4RWr7zIhxzfsgIzylx0NUkW7PyceIvVnQ
gXq//RNu30UdwlRg0WiBhdlhK4/g+IbpDwt3tm04E5ZxFwry2EiJ5XmhYyw7k42U
NzdseQM6W97rhykp0NBKnSuivPAXUHbNSMX2j5KOvqFifJju0rQHTIPiiUY1c5fC
h+pvlYgYnrZ4GN91OWCG9LtiErSvSDYPR12rqMMji8epvO93TwMCKSR9+AVVYjAF
pksBMnKel6HOCRX+QBB1ylxBZ9kRYtLWp6SW97HFWHhRk4K6+bc=
=qgHH
-----END PGP SIGNATURE-----

A
A
Andrew Tropin wrote on 1 Aug 2022 16:09
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 56758@debbugs.gnu.org)
87o7x4awco.fsf@trop.in
On 2022-08-01 15:49, Andrew Tropin wrote:

Toggle quote (183 lines)
> 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
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmLn3rcACgkQIgjSCVjB
3rBH4A//YpW40v0B7AGpnlc4Btqy9Ud/ZDDg/mTmRd+j2zCKAHzB7p2P5tEFtf67
kcrg8kDJ2E+XW0DJ8ruIULymuM0Q5igltyTjUfCs52SajYyNVv72LnIkAQB5iWhJ
1rWI8F3eIPMklfewWJ89QDwywXO/runUcEzJxboR9uySmspZCakdAACqJVQwMx+i
KPzTcYKXclp4n6FnRifPZSHO//tOi14w+amYHIL52NJ5uNpEbmuyTPQarCueCnpX
fcxAGRSoeSkVBSatsYcnFtpUaF02wSRs9gjMbuJrQ6ovYJ88rQObCvJtiVamitLu
5uVJiPAOT+9hPRg8JQI4QYO8DpozRFs0dtxcPtzSiNf/JqmiTq8Yk6C1tP3yhNRP
SkMX3ThWxdvTR0cESbGiLrQaa3OvAYWQN0NoeqthqwpJuF9ikawMMK3z8zPJKYje
eLabrvFbGqtplSsQR3PYGknyB6Nbql7pAgCFs+TpQ6kbMaU4uZla7uoL/mDiIGGY
EY981owxArCTLRDaJ6Bf20Rc92B4CIqAs6v+n5Ih10AYM4PM8eQ3TjVoV8E3edv4
OSHN897Eu6f6xhMXNBl7mToLwFU4ezyx1rspD8dR+6SNke3kKs6GeujWVfnnXye7
fOVQVoHWc9rBs+kJ5qEzppdpV9nnAGkBalISK7MJ9BvvqqtDYoY=
=eCwA
-----END PGP SIGNATURE-----

M
M
Maxime Devos wrote on 2 Aug 2022 00:12
Re: [bug#56758] [PATCH 0/2] Don't try to mkdir XDG_RUNTIME_DIR
(address . 56758@debbugs.gnu.org)
bfcaf0ca-2a4b-be4b-2280-0652cd549d8e@telenet.be
On 01-08-2022 14:49, Andrew Tropin wrote:
Toggle quote (7 lines)
>> 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.
This is true, and this causes the problem that Ludo' describes:
Two problems:
* (ice-9 string-fun) is part of Guile, so compiling it again is
pointless (and potentially harmful, if ice-9/string-fun.scm contains a
reference /gnu/store/.../some-target-specific-library.so)
* a form of non-determinism and non-reproducibility -- you are copying
the modules from the Guile that 'guix' is run with, instead of always
using the modules from the Guile that is defined inside Guix.
* additionally, maybe the inside-Guix and what-Guix-is-compiled-with
Guile expect different behaviour of (ice-9 string-fun), causing bugs
Greetings,
Maxime.
Attachment: file
Attachment: OpenPGP_signature
A
A
Andrew Tropin wrote on 2 Aug 2022 08:00
[PATCH v2 0/4] Don't try to mkdir XDG_RUNTIME_DIR
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 56758@debbugs.gnu.org)
875yjbi3ji.fsf@trop.in
Changes since v1:
- Don't use modules closure.
- Use string-append instead of format.
- Use warning instead of display.
- Hardcode SHELL=bash for home tests inside container.

Andrew Tropin (4):
home: xdg: Use single @ intsead of @@.
home: xdg: Skip mkdir XDG_RUNTIME_DIR in activation script.
home: Use warning instead of display.
tests: Make tests inside container reproducible.

gnu/home/services.scm | 8 +++++---
gnu/home/services/xdg.scm | 25 ++++++++++++++++---------
tests/guix-home.sh | 5 ++++-
3 files changed, 25 insertions(+), 13 deletions(-)

--
2.37.0
From e4b582654903d2cc227f8824df7873bf75f8b100 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@trop.in>
Date: Thu, 21 Jul 2022 15:24:32 +0300
Subject: [PATCH v2 1/4] home: xdg: Use single @ intsead of @@.

* gnu/home/services/xdg.scm (ensure-xdg-base-dirs-on-activation,
home-xdg-user-directories-files-service): Use single @ intsead of @@.
---
gnu/home/services/xdg.scm | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)

Toggle diff (34 lines)
diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm
index 71c028c788..04cf9d0aed 100644
--- a/gnu/home/services/xdg.scm
+++ b/gnu/home/services/xdg.scm
@@ -23,6 +23,7 @@ (define-module (gnu home services xdg)
#:use-module (gnu packages freedesktop)
#:use-module (gnu home services utils)
#:use-module (guix gexp)
+ #:use-module (guix modules)
#:use-module (guix records)
#:use-module (guix i18n)
#:use-module (guix diagnostics)
@@ -106,7 +107,7 @@ (define (home-xdg-base-directories-environment-variables-service config)
(define (ensure-xdg-base-dirs-on-activation config)
#~(map (lambda (xdg-base-dir-variable)
- ((@@ (guix build utils) mkdir-p)
+ ((@ (guix build utils) mkdir-p)
(getenv
xdg-base-dir-variable)))
'#$(map (lambda (field)
@@ -207,8 +208,8 @@ (define (home-xdg-user-directories-activation-service config)
home-xdg-user-directories-configuration-fields)))
#~(let ((ensure-dir
(lambda (path)
- (mkdir-p
- ((@@ (ice-9 string-fun) string-replace-substring)
+ ((@ (guix build utils) mkdir-p)
+ ((@ (ice-9 string-fun) string-replace-substring)
path "$HOME" (getenv "HOME"))))))
(display "Creating XDG user directories...")
(map ensure-dir '#$dirs)
--
2.37.0
From 35125e96522c0539308f09a151ff67571a865900 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@trop.in>
Date: Tue, 2 Aug 2022 08:00:21 +0300
Subject: [PATCH v2 2/4] 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 | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)

Toggle diff (31 lines)
diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm
index 04cf9d0aed..63c6041cd4 100644
--- a/gnu/home/services/xdg.scm
+++ b/gnu/home/services/xdg.scm
@@ -110,12 +110,18 @@ (define (ensure-xdg-base-dirs-on-activation config)
((@ (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)))
+ '#$(filter-map
+ (lambda (field)
+ (let ((variable
+ (string-append
+ "XDG_"
+ (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" variable))
+ variable)))
+ home-xdg-base-directories-configuration-fields)))
(define (last-extension-or-cfg config extensions)
"Picks configuration value from last provided extension. If there
--
2.37.0
From b67b8217830ee6e1afdf7532a961835fd77a5519 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@trop.in>
Date: Tue, 2 Aug 2022 08:20:38 +0300
Subject: [PATCH v2 3/4] home: Use warning instead of display.

* gnu/home/services/xdg.scm (compute-on-first-login-script): Use warning
instead of display.
---
gnu/home/services.scm | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

Toggle diff (29 lines)
diff --git a/gnu/home/services.scm b/gnu/home/services.scm
index 6fbc91fab2..4376422014 100644
--- a/gnu/home/services.scm
+++ b/gnu/home/services.scm
@@ -368,9 +368,11 @@ (define %initialize-gettext
(define (compute-on-first-login-script _ gexps)
(program-file
"on-first-login"
- (with-imported-modules (source-module-closure '((guix i18n)))
+ (with-imported-modules (source-module-closure '((guix i18n)
+ (guix diagnostics)))
#~(begin
- (use-modules (guix i18n))
+ (use-modules (guix i18n)
+ (guix diagnostics))
#$%initialize-gettext
(let* ((xdg-runtime-dir (or (getenv "XDG_RUNTIME_DIR")
@@ -387,7 +389,7 @@ (define (compute-on-first-login-script _ gexps)
(begin #$@gexps (touch flag-file-path)))
;; TRANSLATORS: 'on-first-login' is the name of a service and
;; shouldn't be translated
- (display (G_ "XDG_RUNTIME_DIR doesn't exists, on-first-login script
+ (warning (G_ "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'"))))))))
--
2.37.0
From 4c7084308338aa3eaedb3097b43117c421c39580 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@trop.in>
Date: Tue, 2 Aug 2022 08:40:31 +0300
Subject: [PATCH v2 4/4] tests: Make tests inside container reproducible.

* tests/guix-home.sh: Make tests inside container reproducible.
---
tests/guix-home.sh | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

Toggle diff (18 lines)
diff --git a/tests/guix-home.sh b/tests/guix-home.sh
index 1d1acbfd6e..d5e2dadbb5 100644
--- a/tests/guix-home.sh
+++ b/tests/guix-home.sh
@@ -107,7 +107,10 @@ EOF
if container_supported
then
- # Run the home in a container.
+ # Run the home in a container. Always use bash inside container for
+ # reproducibility of the tests.
+ # TODO: Make container independent from external environment variables.
+ SHELL=bash
guix home container home.scm -- true
! guix home container home.scm -- false
test "$(guix home container home.scm -- echo '$HOME')" = "$HOME"
--
2.37.0
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmLovpEACgkQIgjSCVjB
3rB/aA//QxSig+eZBo1FoDfHDQ7JKPxLbDS+nqj50QBceJxQnXVe6orXzgJYbYNm
sTRiYBhf81GmtojMcssMk0bQM8CBhRTSUmw5tWa+aX1ssVaNFdH6qltPiz3ECwjz
3aZZnRfpoSZ6KMll9W2OEF0Rm3kJdI2yFgFUih4YCfYB4H0Az+3KbXR/n3qwcrhc
bDNQsGnzEr9ycURqq1rf6GlCkysFp6maLj7Jm/YTegQSLLrFtF3/skMw/ROj2gNs
nVChUGQaKQG0DyH29ZeCzSflaBGQJ2vFFzRkEf/iw3Tr8+glS0BvUjfJfhcw0Dkb
QsWYl6rZmtbALBtm7rJl1GHEiasOPX/RWbnglZmtafQNu+H0Odh2Tf6RdOmNU3Yl
u5wct2gH0hfggfKaP+brdCuDydrstNzyAB2E0djJKHjx6Otxn/2VjzFUJU+WaJgM
Mz1ZmAR9ZTJMNDu4l/goFWclKChfKy/JmNXOcUe7k3s2HfhAiuoas1hEBLMO1T5o
Kn6dI8xurAlh4adlq+BxFUQREJbuUyDy+PAH7W5CGQlV8ZAs3qQTNGDd/ugmTvbA
6Qi3hUyIs/dtTGdKvwDghyaaThm4bnU6SZpuMlZMSzfNExUZPNpU9dwsGCkW7zZZ
SWzqpoFCfRZq5pQsU/bfhGH9Tp8oMso9AAvyMRDgvDx1XXfy5d0=
=9dQS
-----END PGP SIGNATURE-----

L
L
Ludovic Courtès wrote on 5 Aug 2022 11:06
(name . Andrew Tropin)(address . andrew@trop.in)(address . 56758-done@debbugs.gnu.org)
87y1w3hxfk.fsf@gnu.org
Hi Andrew,

Andrew Tropin <andrew@trop.in> skribis:

Toggle quote (5 lines)
> home: xdg: Use single @ intsead of @@.
> home: xdg: Skip mkdir XDG_RUNTIME_DIR in activation script.
> home: Use warning instead of display.
> tests: Make tests inside container reproducible.

Applied, thanks!

Ludo’.
Closed
A
A
Andrew Tropin wrote on 5 Aug 2022 17:03
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 56758-done@debbugs.gnu.org)
875yj6buma.fsf@trop.in
On 2022-08-05 11:06, Ludovic Courtès wrote:

Toggle quote (13 lines)
> Hi Andrew,
>
> Andrew Tropin <andrew@trop.in> skribis:
>
>> home: xdg: Use single @ intsead of @@.
>> home: xdg: Skip mkdir XDG_RUNTIME_DIR in activation script.
>> home: Use warning instead of display.
>> tests: Make tests inside container reproducible.
>
> Applied, thanks!
>
> Ludo’.

Thank you very much!)

--
Best regards,
Andrew Tropin
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmLtMT0ACgkQIgjSCVjB
3rDseBAAln4kF4eb0yWaJXtmXgYA/fUQ8CxlVgkDpVfbdJ6xmtoINrOF+Tqpzp7+
heTNtQ1MtpeagCE1X2cPpO6ebHm5JKwf9gRxAafatpbvkFZ11jU7K6vgjDVGOAxG
GyW6uVQY49lbwqNPUQ7E0Q8uyxxgKT4kUGSPkoy/5cfvyGSHQdpiXqz0WT1rHub0
aArYy72/rBQdd2l3NTv1n54wtma5IDyNrnHWm3HsgW/vOn/98xZPptICiSdNEhwW
J9DuX+gCkmYoS7FDn165uZ+gF1lISjZdX0bx/o24D4eSR3T2cWSOLhkGUIjC6AYG
yrZB1scOsoPxo7QvCFZ4bA2nW48lkPGhKGN1iYf1/FkSadCNje+CJCK83aPUZ4zN
uark4ZjhbLxtyxx8r3IlcrKWdq1cqSDGLYpxsEpclAbj4L+bibcLBuFyPdHmNFR1
8w1ayyFUCNtEH5fBofRYSEs+QmUDtvwXcIizFuOCBNQLn29Wnnko0vg4dNuDqQCc
VMW0VMctVqxhUhl33TmWsgzUO0KrI45bYuBCiHgbHmk9W6KQKxRqdfAxxjppL5rz
kTeU9qr3QMyiKmrio+Usjt8eKLulOxww3jVs5zjIzlOspQAJ7onxfLfHabsoQKKn
88TY1egCcMrzkmczd2NhhBGTeDVzMXOhWSMElChwS4QydbVvrVw=
=un1H
-----END PGP SIGNATURE-----

Closed
?