On 2020-06-21 07:29 -0500, Bruce Dubbs via lfs-dev wrote: > On 6/21/20 5:33 AM, Xi Ruoyao via lfs-dev wrote: > > On 2020-06-21 18:22 +0800, Xi Ruoyao via lfs-dev wrote: > > > 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 :). > > > > Oh you mean "set", not "env". "set" prints many variables (including > > $SHELLOPTS). But all the variables are also there even if I rename > > /etc/bash.bashrc. > > > > What do you get with > > env -i bash --noprofile --init-file $HOME/.bash_profile
It loaded both $HOME/.bash_profile and /etc/bash.bashrc, but not $HOME/.bashrc. (I tested them with probes like `export DOT_BASH_PROFILE=1`.) > I'm also thinking that we ought to un-hide .bashrc and create lfs-bashrc. > > That is: > > cat > ~/.bash_profile << "EOF" > exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash --noprofile > --init-file $HOME/lfs-bashrc > EOF It would still load bash.bashrc. "--noprofile --login" will dismiss bash.bashrc. (Only tested on Ubuntu 18.04.) > Not tested as I don't have a commercial distro up at the moment. You can try https://distrotest.net, if your connection to it is fast enough. -- 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