GNU bug report logs -
#38243
Zsh does not load /etc/profile values by default
Previous Next
To reply to this bug, email your comments to 38243 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-guix <at> gnu.org
:
bug#38243
; Package
guix
.
(Sun, 17 Nov 2019 07:15:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
"Danny O'Brien" <danny <at> spesh.com>
:
New bug report received and forwarded. Copy sent to
bug-guix <at> gnu.org
.
(Sun, 17 Nov 2019 07:15:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Right now, an installation of zsh as a primary shell won't read in the
environmental settings in /etc/profile -- it looks for (but doesn't
find) a /etc/zprofile file instead.
Not sure what the correct approach should be here. We could symlink
/etc/zprofile to /etc/profile , but that would require knowing that
/etc/profile was always available. Or we could include a source'ing of
/etc/profile in /etc/zprofile.
I'm not sure what status /etc/profile holds in Guix -- is it the
canonical location for any user-wide environment settings? Will it be
guaranteed to be POSIXly correct, rather than having any bashisms?
Thanks for your work,
d.
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-guix <at> gnu.org
:
bug#38243
; Package
guix
.
(Sun, 17 Nov 2019 13:23:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 38243 <at> debbugs.gnu.org (full text, mbox):
> I'm not sure what status /etc/profile holds in Guix -- is it the
> canonical location for any user-wide environment settings? Will it
> be
> guaranteed to be POSIXly correct, rather than having any bashisms?
It is currently not and I'm not sure whether it will be. The current
behaviour is known to cause problems with fish, though, so a proper
solution would be appreciated. The real culprit seems likely to be
$GUIX_PROFILE/etc/profile, which are sourced by /etc/profile. As far
as zsh is concerned, it does seem to work despite the bashisms, as long
as you can get it to source /etc/profile.
> Not sure what the correct approach should be here. We could symlink
> /etc/zprofile to /etc/profile , but that would require knowing that
> /etc/profile was always available. Or we could include a source'ing
> of
> /etc/profile in /etc/zprofile.
I'd rather generate a separate file. In zsh, you would also have to
expand fpath to include Guix' autocompletion stuff, which works out of
the box for bash. Given the aforementioned bashisms in
$GUIX_PROFILE/etc/profile, we may also want to keep a
$GUIX_PROFILE/etc/zprofile, although ideally we would make our profiles
POSIXly correct instead.
Regards,
Leo
Information forwarded
to
bug-guix <at> gnu.org
:
bug#38243
; Package
guix
.
(Sun, 17 Nov 2019 21:43:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 38243 <at> debbugs.gnu.org (full text, mbox):
Hi Danny,
"Danny O'Brien" <danny <at> spesh.com> skribis:
> Right now, an installation of zsh as a primary shell won't read in the
> environmental settings in /etc/profile -- it looks for (but doesn't
> find) a /etc/zprofile file instead.
>
> Not sure what the correct approach should be here. We could symlink
> /etc/zprofile to /etc/profile , but that would require knowing that
> /etc/profile was always available. Or we could include a source'ing of
> /etc/profile in /etc/zprofile.
>
> I'm not sure what status /etc/profile holds in Guix -- is it the
> canonical location for any user-wide environment settings?
There’s also /etc/environment, honored by ‘pam_env’, and thus
shell-independent.
> Will it be guaranteed to be POSIXly correct, rather than having any
> bashisms?
It’s meant to be POSIX. If you notice Bash-specific constructs, we can
surely remove those (I see a couple of “export VAR=value”, which is not
POSIX, but maybe Zsh supports it?).
Let us know what’s needed!
Thanks,
Ludo’.
Information forwarded
to
bug-guix <at> gnu.org
:
bug#38243
; Package
guix
.
(Sun, 08 Dec 2019 06:17:01 GMT)
Full text and
rfc822 format available.
Message #14 received at 38243 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
On Sun, Nov 17, 2019 at 5:22 AM Leo Prikler <leo.prikler <at> student.tugraz.at>
wrote:
> > Not sure what the correct approach should be here. We could symlink
> > /etc/zprofile to /etc/profile , but that would require knowing that
> > /etc/profile was always available. Or we could include a source'ing
> > of
> > /etc/profile in /etc/zprofile.
>
I took a closer look at this, and currently Zsh users have /etc/profile
included in their environment by virtue of a default $HOME/.zprofile, which
is created in their home directory when they are created (via `useradd` and
/etc/skel ).
I'm a little stuck to know what to do here -- if we source /etc/profile in
/etc/zprofile, then we risk sourcing it twice for users who have the
current default ~/.zprofile already in their home directories`. OTOH, if
users come to Guix System with their own pre-existing home directory, then
they may well struggle --- as I did -- because important environment
variables aren't set by their established ~/.zshrc, ~/.zprofile or
~/.zlogin setups.
I *think* the right thing to do is to drop the current /etc/skel/.zprofile
and establish that /etc/zprofile (and other shells) should source
/etc/profile . Guix System does a lot of setup in /etc/profile including
including $GUIX_PROFILE/etc/profile. It would be best if this
automatically happened, whatever is going on in individual home
directories. I'm a Guix newbie though, so I'm happy to take advice!
Archlinux has a one-line /etc/zprofile which sources /etc/profile ; Debian
does not; I have not checked other distributions, but I could.
A couple of Guix commits where the current behavior was established:
commit 2f4d43584cb26315c028dfbd2197da0d175933a2
Author: Chris Marusich <cmmarusich <at> gmail.com>
Date: Sat Oct 13 22:50:36 2018 -0700
system: Rename .zlogin to .zprofile.
Reported by Meiyo Peng <meiyo.peng <at> gmail.com>.
* gnu/system/shadow.scm (default-skeletons): Rename zlogin to zprofile.
commit 02f707c590fa3c5bbd74168468bf561b47317f71
Author: Sou Bunnbu (宋文武) <iyzsong <at> gmail.com>
Date: Fri Dec 5 21:17:49 2014 +0800
system: Add skeleton '.zlogin'.
* gnu/system/shadow.scm (default-skeletons): Add .zlogin.
Best,
d.
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-guix <at> gnu.org
:
bug#38243
; Package
guix
.
(Sun, 08 Dec 2019 09:02:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 38243 <at> debbugs.gnu.org (full text, mbox):
Am Samstag, den 07.12.2019, 22:15 -0800 schrieb Danny O'Brien:
> I took a closer look at this, and currently Zsh users have
> /etc/profile included in their environment by virtue of a default
> $HOME/.zprofile, which is created in their home directory when they
> are created (via `useradd` and /etc/skel ).
It appears, though, that some Guix users lack this skeleton, perhaps
those who used it before the change.
> I'm a little stuck to know what to do here -- if we source
> /etc/profile in /etc/zprofile, then we risk sourcing it twice for
> users who have the current default ~/.zprofile already in their home
> directories`. OTOH, if users come to Guix System with their own pre-
> existing home directory, then they may well struggle --- as I did --
> because important environment variables aren't set by their
> established ~/.zshrc, ~/.zprofile or ~/.zlogin setups.
I don't think the problem is as bad as you make it out to be. If we
write channel news describing the move of .zprofile to /etc/zprofile,
people ought to see it and be able to prevent the double-sourcing.
> I *think* the right thing to do is to drop the current
> /etc/skel/.zprofile and establish that /etc/zprofile (and other
> shells) should source /etc/profile . Guix System does a lot of setup
> in /etc/profile including including $GUIX_PROFILE/etc/profile. It
> would be best if this automatically happened, whatever is going on in
> individual home directories. I'm a Guix newbie though, so I'm happy
> to take advice! Archlinux has a one-line /etc/zprofile which sources
> /etc/profile ; Debian does not; I have not checked other
> distributions, but I could.
The real problem with $GUIX_PROFILE/etc/profile is its shell-specific
behaviour. The weird syntax used there *happens* to be supported by
zsh, but other shells (most notably fish, but e.g. also Eshell[1]) do
not like it.
To solve this problem not just for one shell, but for all of them, we
should write a portable $GUIX_PROFILE/etc/profile. Same for
/etc/profile. Then we can source it from other shells. Again,
sourcing it from /etc/zprofile is fine even without that change, as zsh
happens to eat this syntax without complaints, but other shells do not
like it.
Regards,
Leo
[1] Eshell is a weird one. Sourceing the file directly appears to
work, but does nothing. Setting $GUIX_PROFILE instead causes the user
to be prompted for an alias.
This bug report was last modified 5 years and 186 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.