source: chapter07/chroot.xml@ 490dc153

11.1 11.1-rc1 11.2 11.2-rc1 arm multilib s6-init trunk xry111/arm64 xry111/clfs-ng xry111/lfs-next xry111/pip3 xry111/queue-11.3 xry111/rust-wip-20221008
Last change on this file since 490dc153 was 490dc153, checked in by Xi Ruoyao <xry111@…>, 10 months ago

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

"+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.

  • Property mode set to 100644
File size: 2.9 KB
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
8<sect1 id="ch-tools-chroot">
9 <?dbhtml filename="chroot.html"?>
11 <title>Entering the Chroot Environment</title>
13 <para>Now that all the packages which are required to build the rest of the
14 needed tools are on the system, it is time to enter the chroot environment to
15 finish installing the remaining temporary tools. This environment will be in
16 use also for installing the final system. As user <systemitem
17 class="username">root</systemitem>, run the following command to enter the
18 environment that is, at the moment, populated with only the temporary
19 tools:</para>
21<screen role="nodump"><userinput>chroot "$LFS" /usr/bin/env -i \
22 HOME=/root \
23 TERM="$TERM" \
24 PS1='(lfs chroot) \u:\w\$ ' \
25 PATH=/usr/bin:/usr/sbin \
26 /bin/bash --login</userinput></screen>
28 <para>The <parameter>-i</parameter> option given to the <command>env</command>
29 command will clear all variables of the chroot environment. After that, only
30 the <envar>HOME</envar>, <envar>TERM</envar>, <envar>PS1</envar>, and
31 <envar>PATH</envar> variables are set again. The
32 <parameter>TERM=$TERM</parameter> construct will set the <envar>TERM</envar>
33 variable inside chroot to the same value as outside chroot. This variable is
34 needed for programs like <command>vim</command> and <command>less</command>
35 to operate properly. If other variables are desired, such as
36 <envar>CFLAGS</envar> or <envar>CXXFLAGS</envar>, this is a good place to set
37 them again.</para>
39 <para>From this point on, there is no need to use the
40 <envar>LFS</envar> variable anymore because all work will be restricted
41 to the LFS file system. This is because the Bash shell is told that
42 <filename class="directory">$LFS</filename> is now the root
43 (<filename class="directory">/</filename>) directory.</para>
45 <para>Notice that <filename class="directory">/tools/bin</filename> is not
46 in the <envar>PATH</envar>. This means that the cross toolchain will no longer be
47 used in the chroot environment.</para>
49 <para>Note that the <command>bash</command> prompt will say
50 <computeroutput>I have no name!</computeroutput> This is normal because the
51 <filename>/etc/passwd</filename> file has not been created yet.</para>
53 <note>
54 <para>It is important that all the commands throughout the remainder of this
55 chapter and the following chapters are run from within the chroot
56 environment. If you leave this environment for any reason (rebooting for
57 example), ensure that the virtual kernel filesystems are mounted as
58 explained in <xref linkend="ch-tools-bindmount"/> and <xref
59 linkend="ch-tools-kernfsmount"/> and enter chroot again before continuing
60 with the installation.</para>
61 </note>
Note: See TracBrowser for help on using the repository browser.