Zsh does not load /etc/profile values by default

OpenSubmitted by Danny O'Brien.
Details
3 participants
  • Danny O'Brien
  • Leo Prikler
  • Ludovic Courtès
Owner
unassigned
Severity
normal
D
D
Danny O'Brien wrote on 17 Nov 2019 08:14
(address . bug-guix@gnu.org)
CAAkY2scspbLnrX2Ufg10_w2SvkwdFqtDO7Xbm0oyw0BthgPhtg@mail.gmail.com
Right now, an installation of zsh as a primary shell won't read in theenvironmental settings in /etc/profile -- it looks for (but doesn'tfind) 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 thecanonical location for any user-wide environment settings? Will it beguaranteed to be POSIXly correct, rather than having any bashisms?
Thanks for your work,
d.
Attachment: file
L
L
Leo Prikler wrote on 17 Nov 2019 14:21
(address . danny@spesh.com)(address . 38243@debbugs.gnu.org)
02c4cef07e9f519697b9bbe9c6ab116fa2e2a404.camel@student.tugraz.at
Toggle quote (4 lines)> 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 currentbehaviour is known to cause problems with fish, though, so a propersolution would be appreciated. The real culprit seems likely to be$GUIX_PROFILE/etc/profile, which are sourced by /etc/profile. As faras zsh is concerned, it does seem to work despite the bashisms, as longas you can get it to source /etc/profile.
Toggle quote (5 lines)> 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 toexpand fpath to include Guix' autocompletion stuff, which works out ofthe 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 profilesPOSIXly correct instead.
Regards,Leo
L
L
Ludovic Courtès wrote on 17 Nov 2019 22:42
(name . Danny O'Brien)(address . danny@spesh.com)(address . 38243@debbugs.gnu.org)
878soei3ih.fsf@gnu.org
Hi Danny,
"Danny O'Brien" <danny@spesh.com> skribis:
Toggle quote (12 lines)> 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 thusshell-independent.
Toggle quote (3 lines)> 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 cansurely remove those (I see a couple of “export VAR=value”, which is notPOSIX, but maybe Zsh supports it?).
Let us know what’s needed!
Thanks,Ludo’.
D
D
Danny O'Brien wrote on 8 Dec 2019 07:15
(name . Leo Prikler)(address . leo.prikler@student.tugraz.at)(address . 38243@debbugs.gnu.org)
CAAkY2sdQN9Vczi=5_a_-=tZU8kwnd+Mhen--Lh_3maCu7NfaVQ@mail.gmail.com
On Sun, Nov 17, 2019 at 5:22 AM Leo Prikler <leo.prikler@student.tugraz.at>wrote:
Toggle quote (7 lines)> > 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/profileincluded in their environment by virtue of a default $HOME/.zprofile, whichis 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 thecurrent default ~/.zprofile already in their home directories`. OTOH, ifusers come to Guix System with their own pre-existing home directory, thenthey may well struggle --- as I did -- because important environmentvariables 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/.zprofileand establish that /etc/zprofile (and other shells) should source/etc/profile . Guix System does a lot of setup in /etc/profile includingincluding $GUIX_PROFILE/etc/profile. It would be best if thisautomatically happened, whatever is going on in individual homedirectories. I'm a Guix newbie though, so I'm happy to take advice!Archlinux has a one-line /etc/zprofile which sources /etc/profile ; Debiandoes not; I have not checked other distributions, but I could.
A couple of Guix commits where the current behavior was established:
commit 2f4d43584cb26315c028dfbd2197da0d175933a2Author: Chris Marusich <cmmarusich@gmail.com>Date: Sat Oct 13 22:50:36 2018 -0700
system: Rename .zlogin to .zprofile.
Reported by Meiyo Peng <meiyo.peng@gmail.com>.
* gnu/system/shadow.scm (default-skeletons): Rename zlogin to zprofile.
commit 02f707c590fa3c5bbd74168468bf561b47317f71Author: Sou Bunnbu (宋文武) <iyzsong@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.
Attachment: file
L
L
Leo Prikler wrote on 8 Dec 2019 10:01
(name . Danny O'Brien)(address . danny@spesh.com)(address . 38243@debbugs.gnu.org)
59bddacf16b64ab6f5409958704608b1280b7819.camel@student.tugraz.at
Am Samstag, den 07.12.2019, 22:15 -0800 schrieb Danny O'Brien:
Toggle quote (4 lines)> 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, perhapsthose who used it before the change.
Toggle quote (7 lines)> 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 wewrite channel news describing the move of .zprofile to /etc/zprofile,people ought to see it and be able to prevent the double-sourcing.

Toggle quote (9 lines)> 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-specificbehaviour. The weird syntax used there *happens* to be supported byzsh, but other shells (most notably fish, but e.g. also Eshell[1]) donot like it.To solve this problem not just for one shell, but for all of them, weshould 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 zshhappens to eat this syntax without complaints, but other shells do notlike it.
Regards,Leo
[1] Eshell is a weird one. Sourceing the file directly appears towork, but does nothing. Setting $GUIX_PROFILE instead causes the userto be prompted for an alias.
?