[673b0d8] | 1 | <?xml version="1.0" encoding="ISO-8859-1"?>
|
---|
| 2 | <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
---|
| 3 | <!ENTITY % general-entities SYSTEM "../general.ent">
|
---|
| 4 | %general-entities;
|
---|
| 5 | ]>
|
---|
| 6 | <sect1 id="ch-tools-settingenviron">
|
---|
[69993f4] | 7 | <title>Setting Up the Environment</title>
|
---|
[673b0d8] | 8 | <?dbhtml filename="settingenvironment.html"?>
|
---|
| 9 |
|
---|
[78349b7] | 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>
|
---|
[673b0d8] | 14 |
|
---|
[05616e2] | 15 | <screen><userinput>cat > ~/.bash_profile << "EOF"
|
---|
[673b0d8] | 16 | exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
|
---|
[55851d6] | 17 | EOF</userinput></screen>
|
---|
[673b0d8] | 18 |
|
---|
[69993f4] | 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
|
---|
[78349b7] | 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 | <emphasis>HOME</emphasis>, <emphasis>TERM</emphasis>, and
|
---|
| 28 | <emphasis>PS1</emphasis> 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
|
---|
[69993f4] | 31 | of ensuring a clean environment.</para>
|
---|
[673b0d8] | 32 |
|
---|
[78349b7] | 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>
|
---|
[673b0d8] | 38 |
|
---|
[05616e2] | 39 | <screen><userinput>cat > ~/.bashrc << "EOF"
|
---|
[673b0d8] | 40 | 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
|
---|
[55851d6] | 46 | EOF</userinput></screen>
|
---|
[673b0d8] | 47 |
|
---|
| 48 | <para>The <command>set +h</command> command turns off
|
---|
[78349b7] | 49 | <command>bash</command>'s hash function. Hashing is
|
---|
[69993f4] | 50 | ordinarily a useful feature—bash uses a hash table to remember the
|
---|
[78349b7] | 51 | full pathnames of executable files to avoid searching the PATH time
|
---|
[69993f4] | 52 | and again to find the same executable. However, the new tools
|
---|
[78349b7] | 53 | should be used as soon as they are installed. By switching off the
|
---|
| 54 | hash function, the shell will always search the PATH when a program is
|
---|
[69993f4] | 55 | to be run. As such, the shell will find the newly compiled
|
---|
[78349b7] | 56 | tools in <filename class="directory">$LFS/tools</filename> as soon as
|
---|
| 57 | they are available without remembering a previous version of the same
|
---|
[69993f4] | 58 | program in a different location.</para>
|
---|
[673b0d8] | 59 |
|
---|
[78349b7] | 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>
|
---|
[673b0d8] | 65 |
|
---|
[78349b7] | 66 | <para>The <emphasis>LFS</emphasis> variable should be set to the
|
---|
| 67 | chosen mount point.</para>
|
---|
[673b0d8] | 68 |
|
---|
[78349b7] | 69 | <para>The <emphasis>LC_ALL</emphasis> 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 LC_ALL 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
|
---|
[69993f4] | 75 | later. Setting <emphasis>LC_ALL</emphasis> to <quote>POSIX</quote>
|
---|
| 76 | or <quote>C</quote> (the two are equivalent) ensures that
|
---|
[673b0d8] | 77 | everything will work as expected in the chroot environment.</para>
|
---|
| 78 |
|
---|
[78349b7] | 79 | <para>By putting <filename class="directory">/tools/bin</filename>
|
---|
| 80 | ahead of the standard PATH, all the programs installed in <xref
|
---|
| 81 | linkend="chapter-temporary-tools"/> are picked up by the shell
|
---|
[69993f4] | 82 | immediately after their installation. This, combined with turning off
|
---|
| 83 | hashing, limits the risk that old programs from
|
---|
[78349b7] | 84 | the host are being used when they should not be used any
|
---|
| 85 | longer.</para>
|
---|
[673b0d8] | 86 |
|
---|
[78349b7] | 87 | <para>Finally, to have the environment fully prepared for building the
|
---|
| 88 | temporary tools, source the just-created user profile:</para>
|
---|
[673b0d8] | 89 |
|
---|
| 90 | <screen><userinput>source ~/.bash_profile</userinput></screen>
|
---|
| 91 |
|
---|
| 92 | </sect1>
|
---|
[78349b7] | 93 |
|
---|