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