environment: Fix '--emulate-fhs' option overriding $PATH.
Fixes <https://issues.guix.gnu.org/60566> where even if "--preserve='^PATH$'" was passed to 'guix shell' it would be replaced by just the FHS directories when '--emulate-fhs' was also set. * gnu/scripts/environment.scm (launch-environment): Add the FHS directories to $PATH rather than overriding $PATH completely. * tests/guix-environment-container.sh: Test that FHS directories are in $PATH in the container and that $PATH can be preserved. Co-authored-by: Ludovic Courtès <ludo@gnu.org>master
parent
a5b914156e
commit
3bfbfa2946
|
@ -1,8 +1,8 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2014, 2015, 2018 David Thompson <davet@gnu.org>
|
;;; Copyright © 2014, 2015, 2018 David Thompson <davet@gnu.org>
|
||||||
;;; Copyright © 2015-2022 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2015-2023 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2018 Mike Gerwitz <mtg@gnu.org>
|
;;; Copyright © 2018 Mike Gerwitz <mtg@gnu.org>
|
||||||
;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
|
;;; Copyright © 2022, 2023 John Kehayias <john.kehayias@protonmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -475,10 +475,13 @@ cache."
|
||||||
(catch 'system-error
|
(catch 'system-error
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(when emulate-fhs?
|
(when emulate-fhs?
|
||||||
;; When running in a container with EMULATE-FHS?, override $PATH
|
;; When running in a container with EMULATE-FHS?, augment $PATH
|
||||||
;; (optional, but to better match FHS expectations), and generate
|
;; (optional, but to better match FHS expectations), and generate
|
||||||
;; /etc/ld.so.cache.
|
;; /etc/ld.so.cache.
|
||||||
(setenv "PATH" "/bin:/usr/bin:/sbin:/usr/sbin")
|
(setenv "PATH" (string-append "/bin:/usr/bin:/sbin:/usr/sbin"
|
||||||
|
(if (getenv "PATH")
|
||||||
|
(string-append ":" (getenv "PATH"))
|
||||||
|
"")))
|
||||||
(invoke "ldconfig" "-X"))
|
(invoke "ldconfig" "-X"))
|
||||||
(apply execlp program program args))
|
(apply execlp program program args))
|
||||||
(lambda _
|
(lambda _
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# GNU Guix --- Functional package management for GNU
|
# GNU Guix --- Functional package management for GNU
|
||||||
# Copyright © 2015 David Thompson <davet@gnu.org>
|
# Copyright © 2015 David Thompson <davet@gnu.org>
|
||||||
# Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
|
# Copyright © 2022, 2023 John Kehayias <john.kehayias@protonmail.com>
|
||||||
|
# Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Guix.
|
# This file is part of GNU Guix.
|
||||||
#
|
#
|
||||||
|
@ -242,6 +243,16 @@ guix shell -CF --bootstrap guile-bootstrap glibc \
|
||||||
0
|
0
|
||||||
1))'
|
1))'
|
||||||
|
|
||||||
|
# Test that $PATH inside the container includes the FHS directories.
|
||||||
|
guix shell -CF coreutils -- env | grep ^PATH=/bin:/usr/bin:/sbin:/usr/sbin.*
|
||||||
|
|
||||||
|
# Make sure '--preserve' is honored for $PATH, which the '--emulate-fhs'
|
||||||
|
# option modifies. We can't (easily) check the whole $PATH as it will differ
|
||||||
|
# inside and outside the container, so just check our test $PATH is still
|
||||||
|
# present. See <https://issues.guix.gnu.org/60566>.
|
||||||
|
PATH=/foo $(type -P guix) shell -CF -E ^PATH$ coreutils \
|
||||||
|
-- env | grep ^PATH=.*:/foo
|
||||||
|
|
||||||
# '--symlink' works.
|
# '--symlink' works.
|
||||||
echo "TESTING SYMLINK IN CONTAINER"
|
echo "TESTING SYMLINK IN CONTAINER"
|
||||||
guix shell --bootstrap guile-bootstrap --container \
|
guix shell --bootstrap guile-bootstrap --container \
|
||||||
|
|
Reference in New Issue