diff mbox series

[bug#56777] Use absolute path for home activation script.

Message ID 87tu74z479.fsf@trop.in
State Accepted
Headers show
Series [bug#56777] Use absolute path for home activation script. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git-branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

Andrew Tropin Jan. 14, 2022, 6:16 a.m. UTC
* gnu/home/services.scm (compute-activation-script): Use absolute path for
home activation script.

---
 gnu/home/services.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ludovic Courtès Aug. 29, 2022, 9:24 p.m. UTC | #1
Hi Andrew,

Andrew Tropin <andrew@trop.in> skribis:

> * gnu/home/services.scm (compute-activation-script): Use absolute path for
> home activation script.
>
> ---
>  gnu/home/services.scm | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gnu/home/services.scm b/gnu/home/services.scm
> index b05ec53e2a..6d5e4308a0 100644
> --- a/gnu/home/services.scm
> +++ b/gnu/home/services.scm
> @@ -418,7 +418,7 @@ (define (compute-activation-script init-gexp gexps)
>              (new-home-env (getenv "GUIX_NEW_HOME"))
>              (new-home (or new-home-env
>                            ;; Path of the activation file if called interactively
> -                          (dirname (car (command-line)))))
> +                          (canonicalize-path (dirname (car (command-line))))))

Just wondering: what’s the rationale?

This is harmless-looking and perhaps it’s all fine, but IME calling
‘canonicalize-path’ might sometimes paper over problems related to file
name handling.

Thanks,
Ludo’.
Andrew Tropin Aug. 30, 2022, 7:01 a.m. UTC | #2
On 2022-08-29 23:24, Ludovic Courtès wrote:

> Hi Andrew,
>
> Andrew Tropin <andrew@trop.in> skribis:
>
>> * gnu/home/services.scm (compute-activation-script): Use absolute path for
>> home activation script.
>>
>> ---
>>  gnu/home/services.scm | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/gnu/home/services.scm b/gnu/home/services.scm
>> index b05ec53e2a..6d5e4308a0 100644
>> --- a/gnu/home/services.scm
>> +++ b/gnu/home/services.scm
>> @@ -418,7 +418,7 @@ (define (compute-activation-script init-gexp gexps)
>>              (new-home-env (getenv "GUIX_NEW_HOME"))
>>              (new-home (or new-home-env
>>                            ;; Path of the activation file if called interactively
>> -                          (dirname (car (command-line)))))
>> +                          (canonicalize-path (dirname (car (command-line))))))
>
> Just wondering: what’s the rationale?

It's been a while since I posted it, but IIRC, in case the activation
script called manually from other directory without this change the
relative new-home can be set, which can fail later if some of activation
code changes the current working directory, but reference home
environment by relative path.  Probably I faced this one, when was
working on prototype for https://issues.guix.gnu.org/56669

Another hypothetical case, which can fail:
ln -s /gnu/store/...-home ~/tmp/he
~/tmp/he/activate
rm ~/tmp/he
# Dangling symlink ~/.guix-home -> ~/tmp/he

Last one can be solved by resolving full path of new-home in
symlink-manager, but always setting new-home to absolute path to home
item in the store seems as a way to avoid both potential problems
mentioned above.

This change is pushed as ffc391500ac7eae1ef100d8d36f6c01f4f606170

>
> This is harmless-looking and perhaps it’s all fine, but IME calling
> ‘canonicalize-path’ might sometimes paper over problems related to file
> name handling.

Will keep it in mind.
diff mbox series

Patch

diff --git a/gnu/home/services.scm b/gnu/home/services.scm
index b05ec53e2a..6d5e4308a0 100644
--- a/gnu/home/services.scm
+++ b/gnu/home/services.scm
@@ -418,7 +418,7 @@  (define (compute-activation-script init-gexp gexps)
             (new-home-env (getenv "GUIX_NEW_HOME"))
             (new-home (or new-home-env
                           ;; Path of the activation file if called interactively
-                          (dirname (car (command-line)))))
+                          (canonicalize-path (dirname (car (command-line))))))
             (old-home-env (getenv "GUIX_OLD_HOME"))
             (old-home (or old-home-env
                           (if (file-exists? (he-init-file he-path))