aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXi Ruoyao <xry111@mengyan1223.wang>2022-02-05 11:36:39 +0800
committerXi Ruoyao <xry111@mengyan1223.wang>2022-02-05 20:48:27 +0800
commit490dc15317e18e4f87d2a2555adc6ce2c2a774ba (patch)
treecdd4f927f4ca62b6cbd3ddc26260015232ba0aaf
parent69c4524b6df4f5ac7b87e868afe55569b61752a8 (diff)
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.
-rw-r--r--chapter01/changelog.xml5
-rw-r--r--chapter04/settingenviron.xml8
-rw-r--r--chapter07/chroot.xml7
-rw-r--r--chapter07/createfiles.xml9
-rw-r--r--chapter08/bash.xml8
-rw-r--r--chapter08/revisedchroot.xml22
6 files changed, 14 insertions, 45 deletions
diff --git a/chapter01/changelog.xml b/chapter01/changelog.xml
index 155b12f50..217aad0d1 100644
--- a/chapter01/changelog.xml
+++ b/chapter01/changelog.xml
@@ -43,6 +43,11 @@
<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>
</listitem>
diff --git a/chapter04/settingenviron.xml b/chapter04/settingenviron.xml
index 4c419d00a..b0c3441e5 100644
--- a/chapter04/settingenviron.xml
+++ b/chapter04/settingenviron.xml
@@ -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>
diff --git a/chapter07/chroot.xml b/chapter07/chroot.xml
index d018cb218..6404c0625 100644
--- a/chapter07/chroot.xml
+++ b/chapter07/chroot.xml
@@ -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
diff --git a/chapter07/createfiles.xml b/chapter07/createfiles.xml
index 9c4f6ac54..009806b3f 100644
--- a/chapter07/createfiles.xml
+++ b/chapter07/createfiles.xml
@@ -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
diff --git a/chapter08/bash.xml b/chapter08/bash.xml
index 36bbcf0d9..787882b59 100644
--- a/chapter08/bash.xml
+++ b/chapter08/bash.xml
@@ -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>
diff --git a/chapter08/revisedchroot.xml b/chapter08/revisedchroot.xml
index bc519d491..52c74a381 100644
--- a/chapter08/revisedchroot.xml
+++ b/chapter08/revisedchroot.xml
@@ -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