diff options
author | Xi Ruoyao <xry111@mengyan1223.wang> | 2022-02-05 11:36:39 +0800 |
---|---|---|
committer | Xi Ruoyao <xry111@mengyan1223.wang> | 2022-02-05 20:48:27 +0800 |
commit | 490dc15317e18e4f87d2a2555adc6ce2c2a774ba (patch) | |
tree | cdd4f927f4ca62b6cbd3ddc26260015232ba0aaf | |
parent | 69c4524b6df4f5ac7b87e868afe55569b61752a8 (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.xml | 5 | ||||
-rw-r--r-- | chapter04/settingenviron.xml | 8 | ||||
-rw-r--r-- | chapter07/chroot.xml | 7 | ||||
-rw-r--r-- | chapter07/createfiles.xml | 9 | ||||
-rw-r--r-- | chapter08/bash.xml | 8 | ||||
-rw-r--r-- | chapter08/revisedchroot.xml | 22 |
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—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 |