On 2020-06-21 05:16 -0500, Bruce Dubbs via lfs-dev wrote:
> On 6/21/20 12:57 AM, Xi Ruoyao via lfs-dev wrote:
> > On 2020-06-21 13:24 +0800, Xi Ruoyao via lfs-dev wrote:
> > > On 2020-06-20 21:24 -0500, Bruce Dubbs via lfs-dev wrote:
> > > > On 6/20/20 8:30 PM, Bruce Dubbs wrote:
> > > > > On 6/20/20 7:07 PM, Xi Ruoyao via lfs-dev wrote:
> > > > > > On 2020-06-20 16:58 -0500, Bruce Dubbs via lfs-dev wrote:
> > > > > > > On 6/20/20 2:42 PM, Xi Ruoyao via lfs-dev wrote:
> > > > > > > > The discussion with Frans de Boer in lfs-support shown that the
> > > > > > > > environment
> > > > > > > > variables from host can catch us completely off guard.  Though
> > > > > > > > in
> > > > > > > > his case
> > > > > > > > the
> > > > > > > > problem is that he forgot to create /home/lfs/.bash_profile,
> > > > > > > > normally
> > > > > > > > /etc/bash.bashrc would be more dangerous (the book has no
> > > > > > > > consideration of
> > > > > > > > this
> > > > > > > > file), and used by many distros.
> > > > > > > > 
> > > > > > > > So if there is no objection I'll commit the change we've
> > > > > > > > discussed
> > > > > > > > in last
> > > > > > > > Nov.:
> > > > > > > > 
> > > > > > > > /home/lfs/.bash_profile:
> > > > > > > > 
> > > > > > > >        exec env -i ENV=$HOME/.lfs_bashrc \
> > > > > > > >                    HOME=$HOME            \
> > > > > > > >                    TERM=$TERM            \
> > > > > > > >                    PS1='\u:\w\$ '        \
> > > > > > > >                    /bin/bash --posix
> > > > > > > > 
> > > > > > > > /home/lfs/.lfs_bashrc:
> > > > > > > > 
> > > > > > > >        set +o posix
> > > > > > > >        set +h
> > > > > > > >        umask 022
> > > > > > > >        LFS=/mnt/lfs
> > > > > > > >        LC_ALL=POSIX
> > > > > > > >        LFS_TGT=$(uname -m)-lfs-linux-gnu
> > > > > > > >        PATH=/usr/bin
> > > > > > > >        if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
> > > > > > > >        PATH=$LFS/tools/bin:$PATH
> > > > > > > >        export LFS LC_ALL LFS_TGT PATH
> > > > > > > 
> > > > > > > So the --posix in .bash_profile allows the use of
> > > > > > > ENV=$HOME/.lfs_bashrc and then the first line in .lfs_bashrc turns
> > > > > > > posix
> > > > > > > mode off?
> > > > > > > 
> > > > > > > At a minimum this looks like a hack that needs a fair amount of
> > > > > > > explanation.
> > > > > > > 
> > > > > > > The reason for this is because a user forgot to create
> > > > > > > .bash_profile?
> > > > > > > In that case the above doesn't work.
> > > > > > 
> > > > > > The discussion just proved that environment variables from host are
> > > > > > really
> > > > > > harmful.
> > > > > > 
> > > > > > >    From https://sources.debian.org/src/bash/5.0-6/debian/README/
> > > > > > > 
> > > > > > > 5. What is /etc/bash.bashrc? It doesn't seem to be documented.
> > > > > > > 
> > > > > > >       The Debian version of bash is compiled with a special option
> > > > > > >       (-DSYS_BASHRC) that makes bash read /etc/bash.bashrc before
> > > > > > > ~/.bashrc
> > > > > > >       for interactive non-login shells. So, on Debian systems,
> > > > > > >       /etc/bash.bashrc is to ~/.bashrc as /etc/profile is to
> > > > > > >       ~/.bash_profile.
> > > > > > > 
> > > > > > > When I look at a debian system's /etc/bash.bashrc, I don't see
> > > > > > > what
> > > > > > > would affect what we have now.  What was the reported problem?
> > > > > > > 
> > > > > > > We've been using the current structure for a long time without a
> > > > > > > reported issue.  What's new?
> > > > > > 
> > > > > > I studied OpenSUSE bash.bashrc a little.  It's a giant monster
> > > > > > script
> > > > > > (even
> > > > > > sourcing some scripts from /etc/profile.d) so I won't be suprised if
> > > > > > one day a
> > > > > > bash.bashrc breaks some package.
> > > > > > 
> > > > > > And after a sleep I realized a more serious issue:  if some distro
> > > > > > has a
> > > > > > /usr/share/config.site (or /usr/etc/config.site, which is not FHS
> > > > > > and
> > > > > > shouldn't
> > > > > > exist), it would be used by autotools configure script *even if we
> > > > > > are
> > > > > > cross
> > > > > > compiling*, and break temporary glibc build.  Perhaps we should
> > > > > > "export
> > > > > > CONFIG_SITE=/dev/null" in /home/lfs/.bashrc to override it.
> > > > > 
> > > > > I wrote the above before I saw the messages in -support.  I do note
> > > > > that
> > > > > in my debian system I used to get LFS up on my new system I edited
> > > > > /etc/bash.bashrc so the first line was 'return'.  I did that primarily
> > > > > because I don't like polluting the environment with bash completion
> > > > > stuff.
> > > > > 
> > > > > I think the problem is not 'exec env ... /bin/bash' directly, but the
> > > > > changes to bash invocation by some distros.
> > > > > 
> > > > > I wonder if 'exec env ... /bin/bash --init-file ~/.bashrc' would work.
> > > > > I'll do a test of that.
> > > > 
> > > > I tested several options.  That /etc/bash.bashrc thing is evil.  I
> > > > edited it to put at the top: echo "IN /etc/bash.bashrc"
> > > > 
> > > > Even with your line
> > > > 
> > > > exec env -i ENV=$HOME/lfs-bashrc HOME=$HOME TERM=$TERM PS1='\u:\w\$ '
> > > > /bin/bash --posix
> > > > 
> > > > (Note that I changed the file name to make it a non-hidden file.)
> > > > 
> > > > it STILL runs bash.bashrc.  --norc doesn't change that either.  Nor does
> > > > --init-file $HOME/lfs-bashrc
> > > > 
> > > > In the case if ubuntu though the posix setting does not install the
> > > > function command_not_found_handle, but I don't think we can really count
> > > > on that.
> > > > 
> > > > Really the I think the only way to handle this is to edit
> > > > /etc/bash.bashrc to put a return in on the first line or to rename the
> > > > file and let the user restore it if desired later.
> > > 
> > > It's strange.  I read bash code and commit history but found --norc should
> > > disable loading of SYS_BASHRC, since bash-2.0. It also really works on
> > > latest
> > > Arch (but it didn't work on Arch in Nov 2019).
> > 
> > Which distro are you using?  I tried Arch (latest) and Ubuntu (18.04) on my
> > laptops, and SUSE (leap 15.2) on distrotest.net.  On all of these --norc
> > works
> > so maybe we can throw every environment variables into env command in
> > .bash_profile and use --norc.
> 
> I was using the system installed by ubuntu-20.04-desktop-amd64.iso for 
> testing.
> 
> If you do 'env -i bash --norc' and then 'set', do you get all the bash 
> completion macros?

No.  I tried:

$ env -i PS1='(test shell)$ ' bash --norc
(test shell)$ env

The output:

PWD=/home/xry111
SHLVL=1
PS1=(test shell)$ 
_=/usr/bin/env

It seems very clean.  But my test system is a Ubuntu 18.04.  I'll try 20.04 via
distrotest.net :).

I broken a server trying to upgrade to 20.04 remotely yesterday.  I'll have to
go to the server room to fix it :(.
-- 
Xi Ruoyao <xry...@mengyan1223.wang>
School of Aerospace Science and Technology, Xidian University

-- 
http://lists.linuxfromscratch.org/listinfo/lfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to