[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">
|
---|
| 7 | <title>Setting up the environment</title>
|
---|
| 8 | <?dbhtml filename="settingenvironment.html"?>
|
---|
| 9 |
|
---|
[ae79672] | 10 | <!--
|
---|
[673b0d8] | 11 | <para>We're going to set up a good working environment by creating two new
|
---|
| 12 | startup files for the <command>bash</command> shell. While logged in as
|
---|
| 13 | user <emphasis>lfs</emphasis>, issue the following command to create a new
|
---|
| 14 | <filename>.bash_profile</filename>:</para>
|
---|
[ae79672] | 15 | -->
|
---|
[673b0d8] | 16 |
|
---|
[05616e2] | 17 | <screen><userinput>cat > ~/.bash_profile << "EOF"
|
---|
[673b0d8] | 18 | exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
|
---|
[55851d6] | 19 | EOF</userinput></screen>
|
---|
[673b0d8] | 20 |
|
---|
[ae79672] | 21 | <!--
|
---|
[673b0d8] | 22 | <para>Normally, when you log on as user <emphasis>lfs</emphasis>,
|
---|
| 23 | the initial shell is a <emphasis>login</emphasis> shell which reads the
|
---|
| 24 | <filename>/etc/profile</filename> of your host (probably containing some
|
---|
| 25 | settings of environment variables) and then <filename>.bash_profile</filename>.
|
---|
| 26 | The <command>exec env -i ... /bin/bash</command> command in the latter file
|
---|
| 27 | replaces the running shell with a new one with a completely empty environment,
|
---|
| 28 | except for the HOME, TERM and PS1 variables. This ensures that no unwanted and
|
---|
| 29 | potentially hazardous environment variables from the host system leak into our
|
---|
| 30 | build environment. The technique used here is a little strange, but it achieves
|
---|
| 31 | the goal of enforcing a clean environment.</para>
|
---|
| 32 |
|
---|
| 33 | <para>The new instance of the shell is a <emphasis>non-login</emphasis> shell,
|
---|
| 34 | which doesn't read the <filename>/etc/profile</filename> or
|
---|
| 35 | <filename>.bash_profile</filename> files, but reads the
|
---|
| 36 | <filename>.bashrc</filename> file instead. Create this latter file now:</para>
|
---|
[ae79672] | 37 | -->
|
---|
[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 |
|
---|
[ae79672] | 48 | <!--
|
---|
[673b0d8] | 49 | <para>The <command>set +h</command> command turns off
|
---|
| 50 | <command>bash</command>'s hash function. Normally hashing is a useful
|
---|
| 51 | feature: <command>bash</command> uses a hash table to remember the
|
---|
| 52 | full pathnames of executable files to avoid searching the PATH time and time
|
---|
| 53 | again to find the same executable. However, we'd like the new tools to be
|
---|
| 54 | used as soon as they are installed. By switching off the hash function, our
|
---|
| 55 | <quote>interactive</quote> commands (<command>make</command>,
|
---|
| 56 | <command>patch</command>, <command>sed</command>,
|
---|
| 57 | <command>cp</command> and so forth) will always use
|
---|
| 58 | the newest available version during the build process.</para>
|
---|
| 59 |
|
---|
| 60 | <para>Setting the user file-creation mask to 022 ensures that newly created
|
---|
| 61 | files and directories are only writable for their owner, but readable and
|
---|
| 62 | executable for anyone.</para>
|
---|
| 63 |
|
---|
| 64 | <para>The LFS variable should of course be set to the mount point you
|
---|
| 65 | chose.</para>
|
---|
| 66 |
|
---|
| 67 | <para>The LC_ALL variable controls the localization of certain programs,
|
---|
| 68 | making their messages follow the conventions of a specified country. If your
|
---|
| 69 | host system uses a version of Glibc older than 2.2.4,
|
---|
| 70 | having LC_ALL set to something other than <quote>POSIX</quote> or
|
---|
| 71 | <quote>C</quote> during this chapter may cause trouble if you exit the chroot
|
---|
| 72 | environment and wish to return later. By setting LC_ALL to <quote>POSIX</quote>
|
---|
| 73 | (or <quote>C</quote>, the two are equivalent) we ensure that
|
---|
| 74 | everything will work as expected in the chroot environment.</para>
|
---|
| 75 |
|
---|
[55851d6] | 76 | <para>We prepend <filename class="directory">/tools/bin</filename> to the standard PATH so
|
---|
[673b0d8] | 77 | that, as we move along through this chapter, the tools we build will get used
|
---|
| 78 | during the rest of the building process.</para>
|
---|
| 79 |
|
---|
| 80 | <para>Finally, to have our environment fully prepared for building the
|
---|
| 81 | temporary tools, source the just-created profile:</para>
|
---|
[ae79672] | 82 | -->
|
---|
[673b0d8] | 83 |
|
---|
| 84 | <screen><userinput>source ~/.bash_profile</userinput></screen>
|
---|
| 85 |
|
---|
| 86 | </sect1>
|
---|