source: final-preps/settingenviron.xml @ bf8c11f

Last change on this file since bf8c11f was bf8c11f, checked in by Jim Gifford <clfs@…>, 17 years ago

r627@server (orig r625): jim | 2005-10-31 12:59:34 -0800
Import of Cross-LFS Book

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