1 | <?xml version="1.0" encoding="ISO-8859-1"?>
|
---|
2 | <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
|
---|
3 | <!ENTITY % general-entities SYSTEM "../general.ent">
|
---|
4 | %general-entities;
|
---|
5 | ]>
|
---|
6 | <sect1 id="ch-tools-settingenviron">
|
---|
7 | <title>Setting Up the Environment</title>
|
---|
8 | <?dbhtml filename="settingenvironment.html"?>
|
---|
9 |
|
---|
10 | <para>Set up a good working environment by creating two new startup
|
---|
11 | files for the <command>bash</command> shell. While logged in as user
|
---|
12 | <emphasis>lfs</emphasis>, issue the
|
---|
13 | following command to create a new <filename>.bash_profile</filename>:</para>
|
---|
14 |
|
---|
15 | <screen><userinput>cat > ~/.bash_profile << "EOF"
|
---|
16 | <literal>exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash</literal>
|
---|
17 | EOF</userinput></screen>
|
---|
18 |
|
---|
19 | <para>When logged on as user <emphasis>lfs</emphasis>, the
|
---|
20 | initial shell is usually a <emphasis>login</emphasis> shell which reads the
|
---|
21 | <filename>/etc/profile</filename> of the host (probably containing
|
---|
22 | some settings and environment variables) and then
|
---|
23 | <filename>.bash_profile</filename>. The <command>exec env
|
---|
24 | -i.../bin/bash</command> command in the
|
---|
25 | <filename>.bash_profile</filename> file replaces the running shell
|
---|
26 | with a new one with a completely empty environment, except for the
|
---|
27 | <envar>HOME</envar>, <envar>TERM</envar>, and
|
---|
28 | <envar>PS1</envar> variables. This ensures that no unwanted and
|
---|
29 | potentially hazardous environment variables from the host system leak
|
---|
30 | into the build environment. The technique used here achieves the goal
|
---|
31 | of ensuring a clean environment.</para>
|
---|
32 |
|
---|
33 | <para>The new instance of the shell is a <emphasis>non-login</emphasis>
|
---|
34 | shell, which does not read the <filename>/etc/profile</filename> or
|
---|
35 | <filename>.bash_profile</filename> files, but rather reads the
|
---|
36 | <filename>.bashrc</filename> file instead. Create the
|
---|
37 | <filename>.bashrc</filename> file now:</para>
|
---|
38 |
|
---|
39 | <screen><userinput>cat > ~/.bashrc << "EOF"
|
---|
40 | <literal>set +h
|
---|
41 | umask 022
|
---|
42 | LFS=/mnt/lfs
|
---|
43 | LC_ALL=POSIX
|
---|
44 | PATH=/tools/bin:/bin:/usr/bin
|
---|
45 | export LFS LC_ALL PATH</literal>
|
---|
46 | EOF</userinput></screen>
|
---|
47 |
|
---|
48 | <para>The <command>set +h</command> command turns off
|
---|
49 | <command>bash</command>'s hash function. Hashing is ordinarily a useful
|
---|
50 | feature—<command>bash</command> uses a hash table to remember the
|
---|
51 | full path of executable files to avoid searching the <envar>PATH</envar> time
|
---|
52 | and again to find the same executable. However, the new tools
|
---|
53 | should be used as soon as they are installed. By switching off the
|
---|
54 | hash function, the shell will always search the <envar>PATH</envar> when a program is
|
---|
55 | to be run. As such, the shell will find the newly compiled
|
---|
56 | tools in <filename class="directory">$LFS/tools</filename> as soon as
|
---|
57 | they are available without remembering a previous version of the same
|
---|
58 | program in a different location.</para>
|
---|
59 |
|
---|
60 | <para>Setting the user file-creation mask (umask) to 022 ensures that newly
|
---|
61 | created files and directories are only writable by their owner, but
|
---|
62 | are readable and executable by anyone (assuming default modes are used
|
---|
63 | by the open(2) system call, new files will end up with permission mode
|
---|
64 | 644 and directories with mode 755).</para>
|
---|
65 |
|
---|
66 | <para>The <envar>LFS</envar> variable should be set to the
|
---|
67 | chosen mount point.</para>
|
---|
68 |
|
---|
69 | <para>The <envar>LC_ALL</envar> variable controls the
|
---|
70 | localization of certain programs, making their messages follow the
|
---|
71 | conventions of a specified country. If the host system uses a version
|
---|
72 | of Glibc older than 2.2.4, having <envar>LC_ALL</envar> set to something other than
|
---|
73 | <quote>POSIX</quote> or <quote>C</quote> (during this chapter) may
|
---|
74 | cause issues if you exit the chroot environment and wish to return
|
---|
75 | later. Setting <envar>LC_ALL</envar> to <quote>POSIX</quote>
|
---|
76 | or <quote>C</quote> (the two are equivalent) ensures that
|
---|
77 | everything will work as expected in the chroot environment.</para>
|
---|
78 |
|
---|
79 | <para>By putting <filename class="directory">/tools/bin</filename> ahead of the
|
---|
80 | standard <envar>PATH</envar>, all the programs installed in <xref
|
---|
81 | linkend="chapter-temporary-tools"/> are picked up by the shell immediately after
|
---|
82 | their installation. This, combined with turning off hashing, limits the risk
|
---|
83 | that old programs are used from the host when the same programs are available in
|
---|
84 | the chapter 5 environment.</para>
|
---|
85 |
|
---|
86 | <beginpage/>
|
---|
87 |
|
---|
88 | <para>Finally, to have the environment fully prepared for building the
|
---|
89 | temporary tools, source the just-created user profile:</para>
|
---|
90 |
|
---|
91 | <screen><userinput>source ~/.bash_profile</userinput></screen>
|
---|
92 |
|
---|
93 | </sect1>
|
---|
94 |
|
---|