| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [  <!ENTITY % general-entities SYSTEM "../general.ent">  %general-entities;]><sect1 id="ch-tools-settingenviron"><title>Setting up the environment</title><?dbhtml filename="settingenvironment.html"?><para>We're going to set up a good working environment by creating two newstartup files for the <command>bash</command> shell. While logged in asuser <emphasis>lfs</emphasis>, issue the following command to create a new<filename>.bash_profile</filename>:</para><screen><userinput>cat > ~/.bash_profile << "EOF"</userinput>exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash<userinput>EOF</userinput></screen><para>Normally, when you log on as user <emphasis>lfs</emphasis>,the initial shell is a <emphasis>login</emphasis> shell which reads the<filename>/etc/profile</filename> of your host (probably containing somesettings of environment variables) and then <filename>.bash_profile</filename>.The <command>exec env -i ... /bin/bash</command> command in the latter filereplaces the running shell with a new one with a completely empty environment,except for the HOME, TERM and PS1 variables. This ensures that no unwanted andpotentially hazardous environment variables from the host system leak into ourbuild environment. The technique used here is a little strange, but it achievesthe goal of enforcing a clean environment.</para><para>The new instance of the shell is a <emphasis>non-login</emphasis> shell,which doesn't read the <filename>/etc/profile</filename> or<filename>.bash_profile</filename> files, but reads the<filename>.bashrc</filename> file instead. Create this latter file now:</para><screen><userinput>cat > ~/.bashrc << "EOF"</userinput>set +humask 022LFS=/mnt/lfsLC_ALL=POSIXPATH=/tools/bin:/bin:/usr/binexport LFS LC_ALL PATH<userinput>EOF</userinput></screen><para>The <command>set +h</command> command turns off<command>bash</command>'s hash function. Normally hashing is a usefulfeature: <command>bash</command> uses a hash table to remember thefull pathnames of executable files to avoid searching the PATH time and timeagain to find the same executable. However, we'd like the new tools to beused as soon as they are installed. By switching off the hash function, our<quote>interactive</quote> commands (<command>make</command>,<command>patch</command>, <command>sed</command>,<command>cp</command> and so forth) will always usethe newest available version during the build process.</para><para>Setting the user file-creation mask to 022 ensures that newly createdfiles and directories are only writable for their owner, but readable andexecutable for anyone.</para><para>The LFS variable should of course be set to the mount point youchose.</para><para>The LC_ALL variable controls the localization of certain programs,making their messages follow the conventions of a specified country. If yourhost system uses a version of Glibc older than 2.2.4,having LC_ALL set to something other than <quote>POSIX</quote> or<quote>C</quote> during this chapter may cause trouble if you exit the chrootenvironment and wish to return later.  By setting LC_ALL to <quote>POSIX</quote>(or <quote>C</quote>, the two are equivalent) we ensure thateverything will work as expected in the chroot environment.</para><para>We prepend <filename>/tools/bin</filename> to the standard PATH sothat, as we move along through this chapter, the tools we build will get usedduring the rest of the building process.</para><para>Finally, to have our environment fully prepared for building thetemporary tools, source the just-created profile:</para><screen><userinput>source ~/.bash_profile</userinput></screen></sect1>
 |