source: BOOK/final-preps/settingenviron.xml@ 04ef2143

clfs-1.2 clfs-2.1 clfs-3.0.0-systemd clfs-3.0.0-sysvinit systemd sysvinit
Last change on this file since 04ef2143 was e97d7d3, checked in by Jim Gifford <clfs@…>, 19 years ago

r3557@server (orig r1622): chris | 2006-05-17 09:28:48 -0700
More text updates and changes to references to 'LFS'

  • Property mode set to 100644
File size: 4.6 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
3 "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-final-preps-settingenviron">
9 <?dbhtml filename="settingenvironment.html"?>
10
11 <title>Setting Up the Environment</title>
12
13 <para os="a">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>
17
18<screen os="b"><userinput>cat &gt; ~/.bash_profile &lt;&lt; "EOF"
19<literal>exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash</literal>
20EOF</userinput></screen>
21
22 <para os="c">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>
34
35 <para os="d">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>
40
41<screen os="e"><userinput>cat &gt; ~/.bashrc &lt;&lt; "EOF"
42<literal>set +h
43umask 022
44LFS=/mnt/lfs
45LC_ALL=POSIX
46PATH=/cross-tools/bin:/bin:/usr/bin
47export LFS LC_ALL PATH</literal>
48EOF</userinput></screen>
49
50 <para os="f">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/cross-tools</filename> as soon as they are
59 available without remembering a previous version of the same program in a
60 different location.</para>
61
62 <para os="g">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>
67
68 <para os="h">The <envar>LFS</envar> variable should be set to the
69 chosen mount point.</para>
70
71 <para os="i">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>
81
82 <para os="j">By putting <filename class="directory">/cross-tools/bin</filename>
83 at the beginning of the <envar>PATH</envar>, the cross-compiler
84 built in <xref linkend="chapter-cross-tools"/> will be picked up by
85 the build process for the temp-system packages before anything that
86 may be installed on the host. This, combined with turning off
87 hashing, helps to ensure that you will be using the cross-compile
88 tools to build the temp-system in /tools.</para>
89
90 <para os="k">Finally, to have the environment fully prepared for building the
91 temporary tools, source the just-created user profile:</para>
92
93<screen os="l"><userinput>source ~/.bash_profile</userinput></screen>
94
95</sect1>
Note: See TracBrowser for help on using the repository browser.