remove "+h" in bash commands in chroot (#4998)

In the new cross-compilation approach, the $PATH in chroot does not
contain '/tools/bin'.  So "+h" is useless in chroot as the newly
installed tools always replace the temporary counterpart at the same
location.

"+h" in chapter4/settingenviron.xml is kept deliberately.  Currently
$LFS/tools/bin only contains programs prefixed with
"x86_64-lfs-linux-gnu-", and it's highly unlikely that any distro will
ever ship a program named with such prefix.  So it may seems that we can
remove this "+h" as well.  However, the situation may change in future
and we can take this oppertunity to teach the advantage and disvantage
of bash hash feature.
This commit is contained in:
Xi Ruoyao 2022-02-05 11:36:39 +08:00
parent 69c4524b6d
commit 490dc15317
No known key found for this signature in database
GPG Key ID: D95E4716CCBB34DC
6 changed files with 14 additions and 45 deletions

View File

@ -42,6 +42,11 @@
<listitem>
<para>2022-02-04</para>
<itemizedlist>
<listitem>
<para>[xry111] - Rename <command>bash</command>
<literal>+h</literal> directives in chroot. Fixes
<ulink url="&lfs-ticket-root;4998">#4998</ulink>.</para>
</listitem>
<listitem>
<para>[xry111] - Update to man-db-2.10.0. Fixes
<ulink url="&lfs-ticket-root;5002">#5002</ulink>.</para>

View File

@ -64,9 +64,11 @@ EOF</userinput></screen>
be used as soon as they are installed. By switching off the hash function,
the shell will always search the <envar>PATH</envar> when a program is to
be run. As such, the shell will find the newly compiled tools in
<filename class="directory">$LFS/tools</filename> as soon as they are
available without remembering a previous version of the same program in a
different location.</para>
<filename class="directory">$LFS/tools/bin</filename> as soon as they are
available without remembering a previous version of the same program
provided by the host distro, in
<filename class='directory'>/usr/bin</filename> or
<filename class='directory'>/bin</filename>.</para>
</listitem>
</varlistentry>

View File

@ -23,7 +23,7 @@
TERM="$TERM" \
PS1='(lfs chroot) \u:\w\$ ' \
PATH=/usr/bin:/usr/sbin \
/bin/bash --login +h</userinput></screen>
/bin/bash --login</userinput></screen>
<para>The <parameter>-i</parameter> option given to the <command>env</command>
command will clear all variables of the chroot environment. After that, only
@ -44,10 +44,7 @@
<para>Notice that <filename class="directory">/tools/bin</filename> is not
in the <envar>PATH</envar>. This means that the cross toolchain will no longer be
used in the chroot environment. This occurs when the shell does not
<quote>remember</quote> the locations of executed binaries&mdash;for this
reason, hashing is switched off by passing the <parameter>+h</parameter> option
to <command>bash</command>.</para>
used in the chroot environment.</para>
<para>Note that the <command>bash</command> prompt will say
<computeroutput>I have no name!</computeroutput> This is normal because the

View File

@ -184,14 +184,7 @@ install -o tester -d /home/tester</userinput></screen>
files have been created, user name and group name resolution will now
work:</para>
<screen role="nodump"><userinput>exec /usr/bin/bash --login +h</userinput></screen>
<para>Note the use of the <parameter>+h</parameter> directive. This tells
<command>bash</command> not to use its internal path hashing. Without this
directive, <command>bash</command> would remember the paths to binaries it has
executed. To ensure the use of the newly compiled binaries as soon as they are
installed, the <parameter>+h</parameter> directive will be used for the duration
of this and the next chapter.</para>
<screen role="nodump"><userinput>exec /usr/bin/bash --login</userinput></screen>
<para>The <command>login</command>, <command>agetty</command>, and
<command>init</command> programs (and others) use a number of log

View File

@ -94,13 +94,7 @@ EOF</userinput></screen>
<para>Run the newly compiled <command>bash</command> program (replacing the one that is
currently being executed):</para>
<screen role="nodump"><userinput>exec /usr/bin/bash --login +h</userinput></screen>
<note>
<para>The parameters used make the <command>bash</command>
process an interactive login shell and continues to disable hashing so
that new programs are found as they become available.</para>
</note>
<screen role="nodump"><userinput>exec /usr/bin/bash --login</userinput></screen>
</sect2>

View File

@ -14,28 +14,6 @@
<screen><userinput>rm -rf /tmp/*</userinput></screen>
<para>Now log out and reenter the chroot environment with an updated
chroot command. From now on, use this updated chroot command any time
you need to reenter the chroot environment after exiting:</para>
<screen role="nodump"><userinput>logout
chroot "$LFS" /usr/bin/env -i \
HOME=/root TERM="$TERM" \
PS1='(lfs chroot) \u:\w\$ ' \
PATH=/usr/bin:/usr/sbin \
/usr/bin/bash --login</userinput></screen>
<para>Here the <parameter>+h</parameter> option is not used anymore, since
all the previous programs have been replaced: hashing is therefore
possible.</para>
<para>If the virtual kernel file systems have been unmounted, either manually
or through a reboot, ensure that the virtual kernel file systems are mounted
when reentering the chroot. This process was explained in <xref
linkend="ch-tools-bindmount"/> and <xref
linkend="ch-tools-kernfsmount"/>.</para>
<para>There are also several files installed in the /usr/lib and /usr/libexec
directories with a file name extension of .la. These are "libtool archive"
files. As already said, they are only useful when linking with static