GNU bug report logs -
#77220
[shepherd]: Timers do not set HOME environment variable correctly
Previous Next
Reported by: Tomas Volf <~@wolfsden.cz>
Date: Sun, 23 Mar 2025 21:31:01 UTC
Severity: normal
Done: Tomas Volf <~@wolfsden.cz>
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 77220 in the body.
You can then email your comments to 77220 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-guix <at> gnu.org
:
bug#77220
; Package
guix
.
(Sun, 23 Mar 2025 21:31:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Tomas Volf <~@wolfsden.cz>
:
New bug report received and forwarded. Copy sent to
bug-guix <at> gnu.org
.
(Sun, 23 Mar 2025 21:31:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Hi,
I am in a process of porting my crontabs over to shepherd timers and
noticed a difference.
Given a timer executed under some user (via #:user "git" #:group "git"
keyword arguments), the HOME variable is set to /. Is that correct? I
get that it might be desirable for a root user, but for regular users
that is surprising and causes (for example gitolite from the package of
the same name) to not function:
--8<---------------cut here---------------start------------->8---
2025-03-23 21:09:06 FATAL: errors found but logfile could not be created
2025-03-23 21:09:06 FATAL: //.gitolite/logs/gitolite-2025-03.log: No such file or directory
2025-03-23 21:09:06 FATAL: die chdir //.gitolite failed: No such file or directory<<newline>>
--8<---------------cut here---------------end--------------->8---
1. Is this intentional?
2. If yes, is this something you would be opened to changing?
Or at least, if this is intentional, would it not be better to not set
HOME at all instead of to a wrong value?
For the time being, I will just do `HOME=~git' as a first line of all
the scripts, but it is not great having to do that everywhere.
Tomas
--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
Information forwarded
to
bug-guix <at> gnu.org
:
bug#77220
; Package
guix
.
(Wed, 26 Mar 2025 11:34:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 77220 <at> debbugs.gnu.org (full text, mbox):
Hi Tomas,
Tomas Volf <~@wolfsden.cz> skribis:
> Given a timer executed under some user (via #:user "git" #:group "git"
> keyword arguments), the HOME variable is set to /. Is that correct? I
> get that it might be desirable for a root user, but for regular users
> that is surprising and causes (for example gitolite from the package of
> the same name) to not function:
>
> 2025-03-23 21:09:06 FATAL: errors found but logfile could not be created
> 2025-03-23 21:09:06 FATAL: //.gitolite/logs/gitolite-2025-03.log: No such file or directory
> 2025-03-23 21:09:06 FATAL: die chdir //.gitolite failed: No such file or directory<<newline>>
>
> 1. Is this intentional?
> 2. If yes, is this something you would be opened to changing?
Timers do not set ‘HOME’ (or any other environment variable) at all.
That is, they take what’s given in (command … #:environment-variables …)
and don’t touch it.
It’s intentional, but the downside is that it can lead to more verbose
timer definitions, where would have to explicitly do:
(command … #:environment-variables
(cons "HOME=/whatever" (default-environment-variables)))
or similar.
How does that sound?
Ludo’.
Reply sent
to
Tomas Volf <~@wolfsden.cz>
:
You have taken responsibility.
(Wed, 26 Mar 2025 22:12:01 GMT)
Full text and
rfc822 format available.
Notification sent
to
Tomas Volf <~@wolfsden.cz>
:
bug acknowledged by developer.
(Wed, 26 Mar 2025 22:12:01 GMT)
Full text and
rfc822 format available.
Message #13 received at 77220-done <at> debbugs.gnu.org (full text, mbox):
Ludovic Courtès <ludo <at> gnu.org> writes:
> Hi Tomas,
>
> Tomas Volf <~@wolfsden.cz> skribis:
>
>> Given a timer executed under some user (via #:user "git" #:group "git"
>> keyword arguments), the HOME variable is set to /. Is that correct? I
>> get that it might be desirable for a root user, but for regular users
>> that is surprising and causes (for example gitolite from the package of
>> the same name) to not function:
>>
>> 2025-03-23 21:09:06 FATAL: errors found but logfile could not be created
>> 2025-03-23 21:09:06 FATAL: //.gitolite/logs/gitolite-2025-03.log: No such file or directory
>> 2025-03-23 21:09:06 FATAL: die chdir //.gitolite failed: No such file or directory<<newline>>
>>
>> 1. Is this intentional?
>> 2. If yes, is this something you would be opened to changing?
>
> Timers do not set ‘HOME’ (or any other environment variable) at all.
> That is, they take what’s given in (command … #:environment-variables …)
> and don’t touch it.
>
> It’s intentional, but the downside is that it can lead to more verbose
> timer definitions, where would have to explicitly do:
>
> (command … #:environment-variables
> (cons "HOME=/whatever" (default-environment-variables)))
>
> or similar.
>
> How does that sound?
It sounds... verbose. :) In practice it cannot be
--8<---------------cut here---------------start------------->8---
(command … #:environment-variables
(cons "HOME=/whatever" (default-environment-variables)))
--8<---------------cut here---------------end--------------->8---
but something like
--8<---------------cut here---------------start------------->8---
(command … #:environment-variables
(cons (string-append "HOME="
(passwd:dir (getpwnam "whatever")))
(default-environment-variables)))
--8<---------------cut here---------------end--------------->8---
I do however see your point, I simply need to get the timer == cron
approximation out of my head. I am viewing it too much through "this is
cron" lenses. I just add this (setting the home) into my wrapper.
I am closing this bug, since there is nothing to do here.
Thanks for the explanation,
Tomas
--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
Information forwarded
to
bug-guix <at> gnu.org
:
bug#77220
; Package
guix
.
(Wed, 26 Mar 2025 22:46:02 GMT)
Full text and
rfc822 format available.
Message #16 received at 77220 <at> debbugs.gnu.org (full text, mbox):
Ludovic Courtès <ludo <at> gnu.org> writes:
> Hi Tomas,
>
> Tomas Volf <~@wolfsden.cz> skribis:
>
>> Given a timer executed under some user (via #:user "git" #:group "git"
>> keyword arguments), the HOME variable is set to /. Is that correct? I
>> get that it might be desirable for a root user, but for regular users
>> that is surprising and causes (for example gitolite from the package of
>> the same name) to not function:
>>
>> 2025-03-23 21:09:06 FATAL: errors found but logfile could not be created
>> 2025-03-23 21:09:06 FATAL: //.gitolite/logs/gitolite-2025-03.log: No such file or directory
>> 2025-03-23 21:09:06 FATAL: die chdir //.gitolite failed: No such file or directory<<newline>>
>>
>> 1. Is this intentional?
>> 2. If yes, is this something you would be opened to changing?
>
> Timers do not set ‘HOME’ (or any other environment variable) at all.
> That is, they take what’s given in (command … #:environment-variables …)
> and don’t touch it.
>
> It’s intentional, but the downside is that it can lead to more verbose
> timer definitions, where would have to explicitly do:
>
> (command … #:environment-variables
> (cons "HOME=/whatever" (default-environment-variables)))
>
> or similar.
>
> How does that sound?
Now that I have tried to actually implement it, I have noticed that I
need to do
--8<---------------cut here---------------start------------->8---
(command … #:environment-variables
(cons "HOME=/whatever" (delete "HOME=/" (default-environment-variables))))
--8<---------------cut here---------------end--------------->8---
Since it seems last occurrence of an environment variable is used, not
first. Still works, but looks bit ugly I guess.
In case anyone runs into this bug, below is a full version I ended up
using (user, group, environment-variables are arguments to the wrapping
function).
--8<---------------cut here---------------start------------->8---
#:user #$user
#:group #$group
#:environment-variables
(let ((pw (getpw (or #$user (getuid)))))
(cons* (string-append "HOME=" (passwd:dir pw))
(string-append "USER=" (passwd:name pw))
(remove (lambda (x)
(or (string-prefix? "HOME=" x)
(string-prefix? "USER=" x)))
(or '#$environment-variables
(default-environment-variables)))))
--8<---------------cut here---------------end--------------->8---
Tomas
--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
Information forwarded
to
bug-guix <at> gnu.org
:
bug#77220
; Package
guix
.
(Tue, 01 Apr 2025 10:19:03 GMT)
Full text and
rfc822 format available.
Message #19 received at 77220 <at> debbugs.gnu.org (full text, mbox):
Hi Tomas,
Tomas Volf <~@wolfsden.cz> skribis:
> In case anyone runs into this bug, below is a full version I ended up
> using (user, group, environment-variables are arguments to the wrapping
> function).
>
> #:user #$user
> #:group #$group
> #:environment-variables
> (let ((pw (getpw (or #$user (getuid)))))
> (cons* (string-append "HOME=" (passwd:dir pw))
> (string-append "USER=" (passwd:name pw))
> (remove (lambda (x)
> (or (string-prefix? "HOME=" x)
> (string-prefix? "USER=" x)))
> (or '#$environment-variables
> (default-environment-variables)))))
What would be nice is to provide in (shepherd support) or similar a
‘home-environment-variables’ procedure (or similar) that would add HOME=
and USER= to the given list of environment variables.
That would avoid duplication of the boilerplate above.
If you’d like to submit such a patch, it’d be welcome!
Thanks,
Ludo’.
Information forwarded
to
bug-guix <at> gnu.org
:
bug#77220
; Package
guix
.
(Thu, 03 Apr 2025 11:28:02 GMT)
Full text and
rfc822 format available.
Message #22 received at 77220 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Ludovic Courtès <ludo <at> gnu.org> writes:
> What would be nice is to provide in (shepherd support) or similar a
> ‘home-environment-variables’ procedure (or similar) that would add HOME=
> and USER= to the given list of environment variables.
>
> That would avoid duplication of the boilerplate above.
>
> If you’d like to submit such a patch, it’d be welcome!
Would something like the attached work? I placed the procedure directly
into the (shepherd service) module, since the point is to reduce
boilerplate, I thought it better to not having to specify (modules
'((shepherd support))) every time someone wants to use it, but I can
move it if you prefer.
[0001-service-Add-user-environment-variables-procedure.patch (text/x-patch, inline)]
From f330b8df42b554d6388487df9a81d87bb4ac5071 Mon Sep 17 00:00:00 2001
From: Tomas Volf <~@wolfsden.cz>
Date: Thu, 3 Apr 2025 13:19:26 +0200
Subject: [PATCH] service: Add user-environment-variables procedure.
* modules/shepherd/service.scm (user-environment-variables): New procedure.
* doc/shepherd.texi (Service De- and Constructors): Document it.
* tests/service.scm: And test it.
---
Makefile.am | 1 +
doc/shepherd.texi | 9 +++++++++
modules/shepherd/service.scm | 16 ++++++++++++++-
tests/service.scm | 38 ++++++++++++++++++++++++++++++++++++
4 files changed, 63 insertions(+), 1 deletion(-)
create mode 100644 tests/service.scm
diff --git a/Makefile.am b/Makefile.am
index 7404009..a61b403 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -296,6 +296,7 @@ TESTS = \
tests/syslog-slow-output.sh \
tests/terminate-before-running.sh \
tests/unload.sh \
+ tests/service.scm \
tests/services/monitoring.sh \
tests/services/repl.sh \
tests/services/timer.sh \
diff --git a/doc/shepherd.texi b/doc/shepherd.texi
index f826b74..e94496b 100644
--- a/doc/shepherd.texi
+++ b/doc/shepherd.texi
@@ -1203,6 +1203,15 @@ returns when the program starts (@pxref{Runtime Environment,
@code{environ},, guile, GNU Guile Reference Manual}).
@end defvar
+@deffn {Procedure} user-environment-variables @
+ [name-or-id (getuid)] @
+ [environment-variables (default-environment-variables)]
+
+Take the list of environment variables, replace @env{HOME} with home
+directory of the user and @env{USER} with the name of the user and
+return the result.
+@end deffn
+
@defvar default-pid-file-timeout
This parameter (@pxref{Parameters,,, guile, GNU Guile Reference Manual})
specifies the default PID file timeout in seconds, when
diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
index 5477aa5..c03c2c4 100644
--- a/modules/shepherd/service.scm
+++ b/modules/shepherd/service.scm
@@ -127,6 +127,7 @@
default-respawn-delay
default-service-termination-handler
default-environment-variables
+ user-environment-variables
default-service-directory
make-forkexec-constructor
make-kill-destructor
@@ -1484,6 +1485,20 @@ background:~{ ~a~}."
;; set when starting a service.
(make-parameter '()))
+(define* (user-environment-variables #:optional
+ (name-or-id (getuid))
+ (environment-variables
+ (default-environment-variables)))
+ "Return the value of @var{environment-variables} with @env{HOME} and
+@env{USER} replaced by correct values for user @var{name-or-id}."
+ (let ((pw (getpw name-or-id)))
+ (cons* (string-append "HOME=" (passwd:dir pw))
+ (string-append "USER=" (passwd:name pw))
+ (remove (lambda (x)
+ (or (string-prefix? "HOME=" x)
+ (string-prefix? "USER=" x)))
+ environment-variables))))
+
(define default-pid-file-timeout
;; Maximum number of seconds to wait for a PID file to show up.
(make-parameter 5))
@@ -2986,4 +3001,3 @@ we want to receive these signals."
"This does not work for the 'root' service."
(lambda (running)
(local-output (l10n "You must be kidding.")))))))
-
diff --git a/tests/service.scm b/tests/service.scm
new file mode 100644
index 0000000..1826306
--- /dev/null
+++ b/tests/service.scm
@@ -0,0 +1,38 @@
+;; GNU Shepherd --- Test the service module.
+;; Copyright © 2025 Tomas Volf <~@wolfsden.cz>
+;;
+;; This file is part of the GNU Shepherd.
+;;
+;; The GNU Shepherd is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or (at
+;; your option) any later version.
+;;
+;; The GNU Shepherd is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with the GNU Shepherd. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-service)
+ #:use-module (shepherd service)
+ #:use-module (srfi srfi-64))
+
+
+(test-begin "user-environment-variables")
+
+(let ((environment-variables '("USER=foo"
+ "HOME=/foo"
+ "USER=bar"
+ "HOME=/bar")))
+ ;; Pretty much any system should have root in /etc/passwd.
+ (test-equal "name sets variables"
+ '("HOME=/root" "USER=root")
+ (user-environment-variables "root" environment-variables))
+ (test-equal "id sets variables"
+ '("HOME=/root" "USER=root")
+ (user-environment-variables 0 environment-variables)))
+
+(test-end)
--
2.49.0
[Message part 3 (text/plain, inline)]
--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
Information forwarded
to
bug-guix <at> gnu.org
:
bug#77220
; Package
guix
.
(Tue, 08 Apr 2025 09:55:02 GMT)
Full text and
rfc822 format available.
Message #25 received at 77220 <at> debbugs.gnu.org (full text, mbox):
Hi,
Tomas Volf <~@wolfsden.cz> skribis:
> Would something like the attached work? I placed the procedure directly
> into the (shepherd service) module, since the point is to reduce
> boilerplate, I thought it better to not having to specify (modules
> '((shepherd support))) every time someone wants to use it, but I can
> move it if you prefer.
Yeah, it’s fine this way.
> +@deffn {Procedure} user-environment-variables @
> + [name-or-id (getuid)] @
> + [environment-variables (default-environment-variables)]
> +
> +Take the list of environment variables, replace @env{HOME} with home
“Take the list @var{environment-variables}, …”
> +(define-module (test-service)
> + #:use-module (shepherd service)
> + #:use-module (srfi srfi-64))
> +
> +
> +(test-begin "user-environment-variables")
(test-begin "service"), to create ‘service.log’.
> +(let ((environment-variables '("USER=foo"
> + "HOME=/foo"
> + "USER=bar"
> + "HOME=/bar")))
> + ;; Pretty much any system should have root in /etc/passwd.
> + (test-equal "name sets variables"
> + '("HOME=/root" "USER=root")
> + (user-environment-variables "root" environment-variables))
Use (passwd:name (getpwuid (getuid))) rather than “root” because
/etc/passwd in the Guix build environment does not have “root”. (You
can test with ‘guix build -f guix.scm’.)
OK with these changes, thank you!
Ludo’.
Information forwarded
to
bug-guix <at> gnu.org
:
bug#77220
; Package
guix
.
(Tue, 15 Apr 2025 22:39:02 GMT)
Full text and
rfc822 format available.
Message #28 received at 77220 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Ludovic Courtès <ludo <at> gnu.org> writes:
> [..]
>
>> +@deffn {Procedure} user-environment-variables @
>> + [name-or-id (getuid)] @
>> + [environment-variables (default-environment-variables)]
>> +
>> +Take the list of environment variables, replace @env{HOME} with home
>
> “Take the list @var{environment-variables}, …”
Done.
>
>> +(define-module (test-service)
>> + #:use-module (shepherd service)
>> + #:use-module (srfi srfi-64))
>> +
>> +
>> +(test-begin "user-environment-variables")
>
> (test-begin "service"), to create ‘service.log’.
Well, I did the change, but I would just like to note that the
`service.log' file was created (with expected content) even in the
previous version.
The runner in test-driver.scm used by Shepherd does not set the
group-begin handler, so the value passed to test-begin is effectively
ignored. At least it does not seem to be used for anything.
>
>> +(let ((environment-variables '("USER=foo"
>> + "HOME=/foo"
>> + "USER=bar"
>> + "HOME=/bar")))
>> + ;; Pretty much any system should have root in /etc/passwd.
>> + (test-equal "name sets variables"
>> + '("HOME=/root" "USER=root")
>> + (user-environment-variables "root" environment-variables))
>
> Use (passwd:name (getpwuid (getuid))) rather than “root” because
> /etc/passwd in the Guix build environment does not have “root”. (You
> can test with ‘guix build -f guix.scm’.)
I did not realize that, fixed.
>
> OK with these changes, thank you!
v2 attached. :)
Tomas
[v2-0001-service-Add-user-environment-variables-procedure.patch (text/x-patch, inline)]
From 9e93429cdb0aa6c0e133642c9cd53bdd8e3d9613 Mon Sep 17 00:00:00 2001
From: Tomas Volf <~@wolfsden.cz>
Date: Wed, 16 Apr 2025 00:16:14 +0200
Subject: [PATCH v2] service: Add user-environment-variables procedure.
* modules/shepherd/service.scm (user-environment-variables): New procedure.
* doc/shepherd.texi (Service De- and Constructors): Document it.
* tests/service.scm: And test it.
---
Makefile.am | 1 +
doc/shepherd.texi | 9 ++++++++
modules/shepherd/service.scm | 16 +++++++++++++-
tests/service.scm | 43 ++++++++++++++++++++++++++++++++++++
4 files changed, 68 insertions(+), 1 deletion(-)
create mode 100644 tests/service.scm
diff --git a/Makefile.am b/Makefile.am
index 7404009..a61b403 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -296,6 +296,7 @@ TESTS = \
tests/syslog-slow-output.sh \
tests/terminate-before-running.sh \
tests/unload.sh \
+ tests/service.scm \
tests/services/monitoring.sh \
tests/services/repl.sh \
tests/services/timer.sh \
diff --git a/doc/shepherd.texi b/doc/shepherd.texi
index f826b74..2da92e3 100644
--- a/doc/shepherd.texi
+++ b/doc/shepherd.texi
@@ -1203,6 +1203,15 @@ returns when the program starts (@pxref{Runtime Environment,
@code{environ},, guile, GNU Guile Reference Manual}).
@end defvar
+@deffn {Procedure} user-environment-variables @
+ [name-or-id (getuid)] @
+ [environment-variables (default-environment-variables)]
+
+Take the list @var{environment-variables}, replace @env{HOME} with home
+directory of the user and @env{USER} with the name of the user and
+return the result.
+@end deffn
+
@defvar default-pid-file-timeout
This parameter (@pxref{Parameters,,, guile, GNU Guile Reference Manual})
specifies the default PID file timeout in seconds, when
diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
index 2e39b72..5b66ab8 100644
--- a/modules/shepherd/service.scm
+++ b/modules/shepherd/service.scm
@@ -127,6 +127,7 @@
default-respawn-delay
default-service-termination-handler
default-environment-variables
+ user-environment-variables
default-service-directory
make-forkexec-constructor
make-kill-destructor
@@ -1486,6 +1487,20 @@ background:~{ ~a~}."
;; set when starting a service.
(make-parameter '()))
+(define* (user-environment-variables #:optional
+ (name-or-id (getuid))
+ (environment-variables
+ (default-environment-variables)))
+ "Return the value of @var{environment-variables} with @env{HOME} and
+@env{USER} replaced by correct values for user @var{name-or-id}."
+ (let ((pw (getpw name-or-id)))
+ (cons* (string-append "HOME=" (passwd:dir pw))
+ (string-append "USER=" (passwd:name pw))
+ (remove (lambda (x)
+ (or (string-prefix? "HOME=" x)
+ (string-prefix? "USER=" x)))
+ environment-variables))))
+
(define default-pid-file-timeout
;; Maximum number of seconds to wait for a PID file to show up.
(make-parameter 5))
@@ -2992,4 +3007,3 @@ we want to receive these signals."
"This does not work for the 'root' service."
(lambda (running)
(local-output (l10n "You must be kidding.")))))))
-
diff --git a/tests/service.scm b/tests/service.scm
new file mode 100644
index 0000000..a802a39
--- /dev/null
+++ b/tests/service.scm
@@ -0,0 +1,43 @@
+;; GNU Shepherd --- Test the service module.
+;; Copyright © 2025 Tomas Volf <~@wolfsden.cz>
+;;
+;; This file is part of the GNU Shepherd.
+;;
+;; The GNU Shepherd is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or (at
+;; your option) any later version.
+;;
+;; The GNU Shepherd is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with the GNU Shepherd. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-service)
+ #:use-module (shepherd service)
+ #:use-module (srfi srfi-64))
+
+
+(test-begin "service")
+
+(let* ((environment-variables '("USER=foo"
+ "HOME=/foo"
+ "USER=bar"
+ "HOME=/bar"))
+
+ (passwd (getpwuid (getuid)))
+ (user (passwd:name passwd))
+
+ (expected (list (string-append "HOME=" (passwd:dir passwd))
+ (string-append "USER=" user))))
+ (test-equal "name sets variables"
+ expected
+ (user-environment-variables user environment-variables))
+ (test-equal "id sets variables"
+ expected
+ (user-environment-variables (getuid) environment-variables)))
+
+(test-end)
--
2.49.0
[Message part 3 (text/plain, inline)]
--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
Information forwarded
to
bug-guix <at> gnu.org
:
bug#77220
; Package
guix
.
(Wed, 16 Apr 2025 14:20:06 GMT)
Full text and
rfc822 format available.
Message #31 received at 77220-done <at> debbugs.gnu.org (full text, mbox):
Tomas Volf <~@wolfsden.cz> writes:
> From 9e93429cdb0aa6c0e133642c9cd53bdd8e3d9613 Mon Sep 17 00:00:00 2001
> From: Tomas Volf <~@wolfsden.cz>
> Date: Wed, 16 Apr 2025 00:16:14 +0200
> Subject: [PATCH v2] service: Add user-environment-variables procedure.
>
> * modules/shepherd/service.scm (user-environment-variables): New procedure.
> * doc/shepherd.texi (Service De- and Constructors): Document it.
> * tests/service.scm: And test it.
Applied, thanks!
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Thu, 15 May 2025 11:24:06 GMT)
Full text and
rfc822 format available.
This bug report was last modified today.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.