Changes in / [d6796c8:827cc05]
- Files:
-
- 6 deleted
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
chapter01/how.xml
rd6796c8 r827cc05 9 9 <?dbhtml filename="how.html"?> 10 10 11 <title>How to CrossBuild an LFS System</title>11 <title>How to Build an LFS System</title> 12 12 13 13 <para>The LFS system will be built by using an already installed 14 UNIX-like system (such as Debian Linux or Mac OS X). This15 existing UNIX-likesystem (the host) will be used as a starting point to14 Linux distribution (such as Debian, OpenMandriva, Fedora, or openSUSE). This 15 existing Linux system (the host) will be used as a starting point to 16 16 provide necessary programs, including a compiler, linker, and shell, 17 17 to build the new system. Select the <quote>development</quote> option … … 54 54 cross-compile basic utilities using the just built cross-toolchain.</para> 55 55 56 <para><xref linkend="chapter-chroot-temporary-tools"/> then boots the 57 minimal Linux environment on the target machine and uses the previously 58 built tools to build the additional tools needed to build and test the 59 final system. Note that in the book the minimal Linux environment may be 60 referred as <quote>chroot environment</quote> only to keep the consistency 61 with the original LFS book.</para> 56 <para><xref linkend="chapter-chroot-temporary-tools"/> then enters a 57 "chroot" environment and uses the previously built tools to build 58 the additional tools needed to build and test the final system.</para> 62 59 63 60 <para>This effort to isolate the new system from the host distribution may … … 66 63 67 64 <para>In <xref linkend="chapter-building-system"/>, The 68 full LFS system is built.</para> 65 full LFS system is built. Another advantage provided by the chroot 66 environment is that it allows you to continue using the host system 67 while LFS is being built. While waiting for package compilations to 68 complete, you can continue using your computer as normal.</para> 69 69 70 70 <para>To finish the installation, the basic system configuration is set up in -
chapter02/aboutlfs.xml
rd6796c8 r827cc05 16 16 directory where you will be building your LFS system - we will use 17 17 <filename class="directory">/mnt/lfs</filename> as an example, but the 18 directory choice is up to you. Choose a directory location and set the 19 variable with the following command:</para> 18 directory choice is up to you. If you are building LFS on a separate 19 partition, this directory will be the mount point for the partition. 20 Choose a directory location and set the variable with the 21 following command:</para> 20 22 21 23 <screen role="nodump"><userinput>export LFS=<replaceable>/mnt/lfs</replaceable></userinput></screen> … … 26 28 <quote>/mnt/lfs</quote> (or whatever the variable was set to) when it 27 29 processes the command line.</para> 28 29 <para>Create the directory:</para>30 31 <screen role="nodump"><userinput>mkdir -pv $LFS</userinput></screen>32 33 <para>If you don't have much space in the partition holding the directory,34 you can mount another partition on it.</para>35 30 36 31 <caution> -
chapter02/chapter02.xml
rd6796c8 r827cc05 15 15 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="hostreqs.xml"/> 16 16 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="stages.xml"/> 17 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="creatingpartition.xml"/> 18 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="creatingfilesystem.xml"/> 17 19 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="aboutlfs.xml"/> 20 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mounting.xml"/> 18 21 19 22 </chapter> -
chapter02/hostreqs.xml
rd6796c8 r827cc05 36 36 37 37 <listitem> 38 <!-- needed to cross build the kernel in chapter 6 -->39 <para><emphasis role="strong">Bc-1.07.0</emphasis></para>40 </listitem>41 42 <listitem>43 38 <para><emphasis role="strong">Bison-2.7</emphasis> (/usr/bin/yacc 44 39 should be a link to bison or small script that executes bison)</para> … … 76 71 <listitem> 77 72 <para><emphasis role="strong">Gzip-1.3.12</emphasis></para> 73 </listitem> 74 75 <listitem> 76 <para><emphasis role="strong">Linux Kernel-&min-kernel;</emphasis></para> 77 78 <para>The reason for the kernel version requirement is that we specify 79 that version when building <application>glibc</application> in 80 <xref linkend="chapter-cross-tools"/> and 81 <xref linkend="chapter-building-system"/>, 82 at the recommendation of the developers. It is also required by 83 udev.</para> 84 85 <para>If the host kernel is earlier than &min-kernel; you will need to replace 86 the kernel with a more up to date version. There are two ways 87 you can go about this. First, see if your Linux vendor provides a &min-kernel; 88 or later kernel package. If so, you may wish to install it. If your 89 vendor doesn't offer an acceptable kernel package, or you would prefer not to 90 install it, you can compile a kernel yourself. Instructions for 91 compiling the kernel and configuring the boot loader (assuming the host 92 uses GRUB) are located in <xref linkend="chapter-bootable"/>.</para> 93 78 94 </listitem> 79 95 … … 145 161 unset MYSH 146 162 147 bc --version | head -n1148 163 echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3- 149 164 bison --version | head -n1 -
chapter02/stages.xml
rd6796c8 r827cc05 65 65 <itemizedlist> 66 66 <listitem> 67 <para>You must boot the temporary system on the target machine.</para>67 <para>The /mnt/lfs partition must be mounted.</para> 68 68 </listitem> 69 69 70 70 <listitem> 71 <para>A few operations, from 72 <quote>Preparing Virtual Kernel File Systems</quote> to 73 <quote>Setting up Environment</quote> must be done.</para> 71 <para>A few operations, from <quote>Changing Ownership</quote> to 72 <quote>Entering the Chroot Environment</quote> must be done as the 73 <systemitem class="username">root</systemitem> user, with the LFS 74 environment variable set for the 75 <systemitem class="username">root</systemitem>user.</para> 74 76 </listitem> 75 77 76 78 <listitem> 77 <para>The operations in <xref linkend="ch-tools-lo"/> must be done78 before starting or continuing from79 <xref linkend="chapter-building-system"/>.</para>79 <para> When entering chroot, the LFS environment variable must be set 80 for <systemitem class="username">root</systemitem>. The LFS 81 variable is not used afterwards.</para> 80 82 </listitem> 81 83 84 <listitem> 85 <para> The virtual file systems must be mounted. This can be done 86 before or after entering chroot by changing to a host virtual terminal 87 and, as <systemitem class="username">root</systemitem>, running the 88 commands in 89 <xref linkend='ch-tools-bindmount'/> and 90 <xref linkend='ch-tools-kernfsmount'/>.</para> 91 </listitem> 82 92 </itemizedlist> 83 93 </sect2> -
chapter04/aboutsbus.xml
rd6796c8 r827cc05 38 38 39 39 <note> 40 <para>In the cross edition, the SBUs are kept same as the original LFS41 book. They should only be considered as a reference. It obviously does42 not make sense to predict the building time in Chapter 7 or 8 with43 <quote>1 SBU</quote> measured in Chapter 5, as the target machine and44 the machine running the host distro may be completely different.</para>45 </note>46 47 <note>48 40 <para>For many modern systems with multiple processors (or cores) the 49 41 compilation time for a package can be reduced by performing a "parallel -
chapter04/addinguser.xml
rd6796c8 r827cc05 81 81 <systemitem class="username">lfs</systemitem> the directory owner:</para> 82 82 83 <screen><userinput>chown -v lfs $LFS/{usr{,/*},lib*,boot,var,etc,bin,sbin,tools}</userinput></screen> 83 <screen><userinput>chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools} 84 case $(uname -m) in 85 x86_64) chown -v lfs $LFS/lib64 ;; 86 esac</userinput></screen> 84 87 85 88 <note><para>In some host systems, the following command does not complete -
chapter04/creatingminlayout.xml
rd6796c8 r827cc05 21 21 <systemitem class="username">root</systemitem>:</para> 22 22 23 <screen><userinput>mkdir -pv $LFS/{ boot,etc,var} $LFS/usr/{bin,lib,sbin}23 <screen><userinput>mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin} 24 24 25 25 for i in bin lib sbin; do 26 26 ln -sv usr/$i $LFS/$i 27 done </userinput></screen>27 done 28 28 29 <para>Some targets (for example, x86_64) needs 30 <filename class="directory">/lib64</filename> directory. If you are 31 building for one of those targets, create it as 32 <systemitem class="username">root</systemitem>:</para> 33 34 <screen><userinput>mkdir -pv $LFS/lib64</userinput></screen> 29 case $(uname -m) in 30 x86_64) mkdir -pv $LFS/lib64 ;; 31 esac</userinput></screen> 35 32 36 33 <para>Programs in <xref linkend="chapter-temporary-tools"/> will be compiled -
chapter04/settingenviron.xml
rd6796c8 r827cc05 43 43 LFS=/mnt/lfs 44 44 LC_ALL=POSIX 45 LFS_TGT= <replaceable>x86_64</replaceable>-lfs-linux-gnu45 LFS_TGT=$(uname -m)-lfs-linux-gnu 46 46 PATH=/usr/bin 47 47 if [ ! -L /bin ]; then PATH=/bin:$PATH; fi … … 104 104 105 105 <varlistentry> 106 <term><parameter>LFS_TGT= <replaceable>x86_64</replaceable>-lfs-linux-gnu</parameter></term>106 <term><parameter>LFS_TGT=(uname -m)-lfs-linux-gnu</parameter></term> 107 107 <listitem> 108 108 <para>The <envar>LFS_TGT</envar> variable sets a non-default, but compatible machine 109 109 description for use when building our cross compiler and linker and when cross 110 110 compiling our temporary toolchain. More information is contained in 111 <xref linkend="ch-tools-toolchaintechnotes" role=""/>. 112 If you are not building for 64-bit x86, replace 113 <replaceable>x86_64</replaceable> with some value suitable for your target 114 machine, for example <literal>i686</literal> for 32-bit x86.</para> 111 <xref linkend="ch-tools-toolchaintechnotes" role=""/>.</para> 115 112 </listitem> 116 113 </varlistentry> -
chapter05/gcc-pass1.xml
rd6796c8 r827cc05 63 63 mv -v mpc-&mpc-version; mpc</userinput></screen> 64 64 65 <para>For x86_64 target, set the default directory name for 66 64-bit libraries to <quote>lib</quote>. The command is unnecessary, 67 but harmless for 32-bit x86. If you are building for another target, 68 you may need to adjust the command for your target.</para> 69 70 <screen><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \ 71 -i.orig gcc/config/i386/t-linux64</userinput></screen> 65 <para>On x86_64 hosts, set the default directory name for 66 64-bit libraries to <quote>lib</quote>:</para> 67 68 <screen><userinput remap="pre">case $(uname -m) in 69 x86_64) 70 sed -e '/m64=/s/lib64/lib/' \ 71 -i.orig gcc/config/i386/t-linux64 72 ;; 73 esac</userinput></screen> 72 74 73 75 <para>The GCC documentation recommends building GCC -
chapter05/glibc.xml
rd6796c8 r827cc05 46 46 <para>First, create a symbolic link for LSB compliance. Additionally, 47 47 for x86_64, create a compatibility symbolic link required for proper 48 operation of the dynamic library loader. It's needed to adjust the 49 command if you are building LFS for a target other than 32-bit or 50 64-bit x86.</para> 51 52 <screen><userinput remap="pre">case $LFS_TGT in 53 i?86*) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 48 operation of the dynamic library loader:</para> 49 50 <screen><userinput remap="pre">case $(uname -m) in 51 i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 54 52 ;; 55 x86_64 *) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib6456 53 x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 54 ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3 57 55 ;; 58 56 esac</userinput></screen> … … 92 90 --host=$LFS_TGT \ 93 91 --build=$(../scripts/config.guess) \ 94 --enable-kernel=& linux-major-version;.&linux-minor-version;\92 --enable-kernel=&min-kernel; \ 95 93 --with-headers=$LFS/usr/include \ 96 94 libc_cv_slibdir=/usr/lib</userinput></screen> … … 109 107 110 108 <varlistentry> 111 <term><parameter>--enable-kernel=&linux-major-version;.&linux-minor-version;</parameter></term> 112 <listitem> 113 <para>This option tells the build system that this glibc may 114 be used with kernels as old as 115 &linux-major-version;.&linux-minor-version;. This means generating 116 workarounds in case a system call introduced in a later version 117 cannot be used.</para> 109 <term><parameter>--enable-kernel=&min-kernel;</parameter></term> 110 <listitem> 111 <para>This tells Glibc to compile the library with support 112 for &min-kernel; and later Linux kernels. Workarounds for older 113 kernels are not enabled.</para> 118 114 </listitem> 119 115 </varlistentry> -
chapter05/linux-headers.xml
rd6796c8 r827cc05 57 57 be available. The headers are first placed in 58 58 <filename class="directory">./usr</filename>, then copied to the needed 59 location. Replace <replaceable>x86</replaceable> with a value suitable 60 for your target machine if it's not a 32-bit or 64-bit x86:</para> 61 62 <screen><userinput remap="make">make headers ARCH=<replaceable>x86</replaceable> 59 location.</para> 60 61 <screen><userinput remap="make">make headers 63 62 find usr/include -name '.*' -delete 64 63 rm usr/include/Makefile -
chapter06/chapter06.xml
rd6796c8 r827cc05 32 32 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gcc-pass2.xml"/> 33 33 34 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="util-linux.xml"/>35 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grub.xml"/>36 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kernel.xml"/>37 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grub-cfg.xml"/>38 39 34 </chapter> -
chapter06/gcc-pass2.xml
rd6796c8 r827cc05 55 55 mv -v mpc-&mpc-version; mpc</userinput></screen> 56 56 57 <para>For x86_64 target, set the default directory name for 58 64-bit libraries to <quote>lib</quote>. The command is unnecessary, 59 but harmless for 32-bit x86. If you are building for another target, 60 you may need to adjust the command for your target.</para> 57 <para>If building on x86_64, change the default directory name for 64-bit 58 libraries to <quote>lib</quote>:</para> 61 59 62 <screen><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \ 63 -i.orig gcc/config/i386/t-linux64</userinput></screen> 60 <screen><userinput remap="pre">case $(uname -m) in 61 x86_64) 62 sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 63 ;; 64 esac</userinput></screen> 64 65 65 66 <!-- https://gcc.gnu.org/PR100017 --> -
chapter07/chapter07.xml
rd6796c8 r827cc05 10 10 <?dbhtml filename="chapter07.html"?> 11 11 12 <title> Booting the Target Systemand Building Additional Temporary Tools</title>12 <title>Entering Chroot and Building Additional Temporary Tools</title> 13 13 14 14 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introduction.xml"/> 15 < !--xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="changingowner.xml"/-->15 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="changingowner.xml"/> 16 16 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kernfs.xml"/> 17 17 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chroot.xml"/> … … 24 24 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="texinfo.xml"/> 25 25 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="util-linux.xml"/> 26 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="iproute2.xml"/>27 26 28 27 <!-- -
chapter07/chroot.xml
rd6796c8 r827cc05 7 7 8 8 <sect1 id="ch-tools-chroot"> 9 <?dbhtml filename=" env.html"?>9 <?dbhtml filename="chroot.html"?> 10 10 11 <title> Setting up theEnvironment</title>11 <title>Entering the Chroot Environment</title> 12 12 13 <para>The standard I/O streams of the initial shell process is connected 14 with <filename>/dev/console</filename>. However, the testsuite of some 15 packages may expect the standard I/O streams to be connected with a 16 <quote>real</quote> TTY device node. Spawn a new shell process on the 17 TTY device with <command>agetty</command>:</para> 13 <para>Now that all the packages which are required to build the rest of the 14 needed tools are on the system, it is time to enter the chroot environment to 15 finish installing the remaining temporary tools. This environment will be in 16 use also for installing the final system. As user <systemitem 17 class="username">root</systemitem>, run the following command to enter the 18 environment that is, at the moment, populated with only the temporary 19 tools:</para> 18 20 19 <screen role="nodump"><userinput>agetty -n -l /bin/bash <replaceable>tty0</replaceable></userinput></screen> 20 21 <para>If you are working via a serial console, replace 22 <replaceable>tty0</replaceable> with the name of the serial console 23 device node, for example <literal>ttyS0</literal>.</para> 24 25 <para>The command above spawns a new shell process on the TTY device 26 specified in the command, and the initial shell process will run in 27 background as an init process with very limited functions. The new shell 28 process will output:</para> 29 30 <screen role="nodump"><computeroutput>bash: cannot set terminal process group (-1): Inappropriate ioctl for device 31 bash: no job control in this shell</computeroutput></screen> 32 33 <para>This is normal because the shell is not assigned with a 34 controlling terminal yet. Now set up controlling terminal and 35 environment variables:</para> 36 37 <screen><userinput>exec setsid -c /usr/bin/env -i \ 21 <screen role="nodump"><userinput>chroot "$LFS" /usr/bin/env -i \ 38 22 HOME=/root \ 39 23 TERM="$TERM" \ 40 PS1='(lfs ) \u:\w\$ '\24 PS1='(lfs chroot) \u:\w\$ ' \ 41 25 PATH=/usr/bin:/usr/sbin \ 42 26 /bin/bash --login</userinput></screen> 43 27 44 <para>The command replace the current shell process with a new shell45 process, with controlling terminal set up.</para>46 47 28 <para>The <parameter>-i</parameter> option given to the <command>env</command> 48 command will clear all variables of the environment. After that, only29 command will clear all variables of the chroot environment. After that, only 49 30 the <envar>HOME</envar>, <envar>TERM</envar>, <envar>PS1</envar>, and 50 31 <envar>PATH</envar> variables are set again. The 51 32 <parameter>TERM=$TERM</parameter> construct will set the <envar>TERM</envar> 52 variable to the default value specified by <command>agetty</command>. This variable is33 variable inside chroot to the same value as outside chroot. This variable is 53 34 needed for programs like <command>vim</command> and <command>less</command> 54 35 to operate properly. If other variables are desired, such as … … 56 37 them again.</para> 57 38 39 <para>From this point on, there is no need to use the 40 <envar>LFS</envar> variable anymore because all work will be restricted 41 to the LFS file system. This is because the Bash shell is told that 42 <filename class="directory">$LFS</filename> is now the root 43 (<filename class="directory">/</filename>) directory.</para> 44 58 45 <para>Notice that <filename class="directory">/tools/bin</filename> is not 59 46 in the <envar>PATH</envar>. This means that the cross toolchain will no longer be 60 used on the target machine.</para>47 used in the chroot environment.</para> 61 48 62 49 <para>Note that the <command>bash</command> prompt will say … … 64 51 <filename>/etc/passwd</filename> file has not been created yet.</para> 65 52 66 <para>Now set up a temporary hostname, which is required by test suite of67 some packages:</para>68 69 <screen><userinput>hostname lfs</userinput></screen>70 71 53 <note> 72 54 <para>It is important that all the commands throughout the remainder of this 73 chapter and the following chapters are run from within the environment74 we've set. If you leave this environment for any reason (rebooting for55 chapter and the following chapters are run from within the chroot 56 environment. If you leave this environment for any reason (rebooting for 75 57 example), ensure that the virtual kernel filesystems are mounted as 76 explained in <xref linkend="ch-tools- kernfsmount"/> and77 <xref linkend="ch-tools-devadjust"/> and set up the environment again before78 continuingwith the installation.</para>58 explained in <xref linkend="ch-tools-bindmount"/> and <xref 59 linkend="ch-tools-kernfsmount"/> and enter chroot again before continuing 60 with the installation.</para> 79 61 </note> 80 62 -
chapter07/cleanup.xml
rd6796c8 r827cc05 21 21 <para>Second, the libtool .la files are only useful when linking with static 22 22 libraries. They are unneeded and potentially harmful when using dynamic 23 shared libraries, specially when using non-autotools build systems.24 While still on the target machine, remove those files now:</para>23 shared libraries, especially when using non-autotools build systems. 24 While still in chroot, remove those files now:</para> 25 25 26 26 <screen><userinput>find /usr/{lib,libexec} -name \*.la -delete</userinput></screen> … … 58 58 59 59 <para> 60 If you are making a backup, mount the partition for backup: 60 The following steps are performed from outside the chroot 61 environment. That means, you have to leave the chroot environment 62 first before continuing. The reason for that is to 63 get access to file system locations outside of the chroot 64 environment to store/read the backup archive which should 65 not be placed within the 66 <filename class="directory">$LFS</filename> hierarchy for 67 safety reasons. 61 68 </para> 62 69 63 <screen role="nodump"><userinput>mount -v /dev/sda<replaceable>4</replaceable> /mnt</userinput></screen> 70 <para> 71 If you have decided to make a backup, leave the chroot environment: 72 </para> 73 74 <screen role="nodump"><userinput>exit</userinput></screen> 75 76 <important> 77 <para> 78 All of the following instructions are executed by 79 <systemitem class="username">root</systemitem> on your host system. 80 Take extra care about the commands you're going to run as mistakes 81 here can modify your host system. Be aware that the 82 environment variable <envar>LFS</envar> 83 is set for user <systemitem class="username">lfs</systemitem> by default 84 but may <emphasis>not</emphasis> be set for 85 <systemitem class="username">root</systemitem>. 86 </para> 87 <para> 88 Whenever commands are to be executed by <systemitem class="username">root</systemitem>, 89 make sure you have set <envar>LFS</envar>. 90 </para> 91 <para> 92 This has been discussed in <xref linkend='ch-partitioning-aboutlfs'/>. 93 </para> 94 </important> 95 96 <para>Before making a backup, unmount the virtual file systems:</para> 97 98 <screen role="nodump"><userinput>umount $LFS/dev/pts 99 umount $LFS/{sys,proc,run,dev}</userinput></screen> 64 100 65 101 <para> 66 102 Make sure you have at least 1 GB free disk space (the source tarballs 67 will be included in the backup archive) in the partition prepared for68 backup.103 will be included in the backup archive) on the filesystem containing 104 directory where you create the backup archive. 69 105 </para> 70 106 … … 92 128 </note> 93 129 94 <screen role="nodump"><userinput>cd / 95 tar -cJpf /mnt/lfs-temp-tools-&version;.tar.xz . \ 96 --exclude="dev/*" --exclude="proc/*" 97 --exclude="sys/*" --exclude="run/*" 98 --exclude="mnt/*"</userinput></screen> 130 <screen role="nodump"><userinput>cd $LFS 131 tar -cJpf $HOME/lfs-temp-tools-&version;.tar.xz .</userinput></screen> 99 132 100 <para>Unmount the partition containing the backup:</para> 101 102 <screen role="nodump"><userinput>umount /mnt</userinput></screen> 133 <note> 134 <para> 135 If continuing to chapter 8, don't forget to reenter the chroot 136 environment as explained in the <quote>Important</quote> box below. 137 </para> 138 </note> 103 139 104 140 </sect2> … … 110 146 In case some mistakes have been made and you need to start over, you can 111 147 use this backup to restore the system and save some recovery time. 112 Since the sources are included in the 113 backup archive as well, so they do not need to be downloaded again. 148 Since the sources are located under 149 <filename class="directory">$LFS</filename>, they are included in the 150 backup archive as well, so they do not need to be downloaded again. After 151 checking that <envar>$LFS</envar> is set properly, 152 restore the backup by executing the following commands: 114 153 </para> 115 116 <warning><para>117 Power off the target system and reconnect the disk containing LFS118 temporary system to the host for restoring the backup. It's necessary119 to avoid overwriting some binaries being used. Because the package120 providing <command>shutdown</command> command is not built yet, the121 system can't be shut down cleanly. Issue <command>sync</command> to122 ensure all filesystem writes cached in memory to be really written123 into the disk, then power off the system physically (for example,124 unplug the AC cord).125 </para></warning>126 127 <para>Mount the LFS partition and the backup partition on128 <emphasis role="bold">the host system</emphasis>:</para>129 154 130 155 <!-- Make the following look different so users don't blindly run the 131 156 restore when they don't need to. --> 132 157 133 <screen role="nodump"><computeroutput>mkdir -pv /mnt/lfs-{target,backup}134 mount -v -t ext4 <replaceable>/dev/sdx</replaceable>3 /mnt/lfs-target135 mount -v -t ext4 <replaceable>/dev/sdx4</replaceable> /mnt/lfs-backup</computeroutput></screen>136 137 138 158 <warning><para>The following commands are extremely dangerous. If 139 159 you run <command>rm -rf ./*</command> as the root user and you 140 do not change to the <filename>lfs-target</filename> directory,141 it will destroy your entire host system.142 YOU ARE WARNED.</para></warning>160 do not change to the $LFS directory or the <envar>LFS</envar> 161 environment variable is not set for the root user, it will destroy 162 your entire host system. YOU ARE WARNED.</para></warning> 143 163 144 <screen role="nodump"><computeroutput>cd /mnt/lfs-target164 <screen role="nodump"><computeroutput>cd $LFS 145 165 rm -rf ./* 146 tar -xpf /mnt/lfs-backup/lfs-temp-tools-&version;.tar.xz</computeroutput></screen>166 tar -xpf $HOME/lfs-temp-tools-&version;.tar.xz</computeroutput></screen> 147 167 148 168 <para> 149 Again, unmount the two partitions, reconnect the device to the target150 machine, boot it and continue building the rest of system:169 Again, double check that the environment has been setup properly 170 and continue building the rest of the system. 151 171 </para> 152 153 <screen role="nodump"><computeroutput>umount /mnt/lfs-{target,backup}</computeroutput></screen>154 172 155 173 <important> 156 174 <para> 157 If you reboot your target machine and restart 158 building using a restore, remount the virtual filesystems now as 159 described in <xref linkend='ch-tools-kernfs'/> and re-enter the build 175 If you left the chroot environment to create a backup or restart 176 building using a restore, remember to check that the virtual 177 filesystems are still mounted (<command>findmnt | grep 178 $LFS</command>). If they are not mounted, remount them now as 179 described in <xref linkend='ch-tools-kernfs'/> and re-enter the chroot 160 180 environment (see <xref linkend='ch-tools-chroot'/>) before continuing. 161 181 </para> -
chapter07/introduction.xml
rd6796c8 r827cc05 11 11 <title>Introduction</title> 12 12 13 <warning>14 <para>Please make sure the temporary system is already booted on the15 target machine. All commands in this chapter and the following chapters16 should be executed on the target machine instead of the host distro,17 unless the book explicitly says a command is for the host. Running a18 command for the temporary system on the host can completely destroy the19 host distro.</para>20 </warning>21 22 13 <para>This chapter shows how to build the last missing bits of the temporary 23 14 system: the tools needed by the build machinery of various packages. Now 24 that all circular dependencies have been resolved and the temporary system 25 is already bootable, we can boot it on the target machine and it would be 26 completely isolated from the host operating system. Then we can continue 27 to build on the target machine.</para> 15 that all circular dependencies have been resolved, a <quote>chroot</quote> 16 environment, completely isolated from the host operating system (except for 17 the running kernel), can be used for the build.</para> 28 18 29 <para>For proper operation of the temporary system, some communication19 <para>For proper operation of the isolated environment, some communication 30 20 with the running kernel must be established. This is done through the 31 21 so-called <emphasis>Virtual Kernel File Systems</emphasis>, which must be 32 mounted as soon as possible after boot. You may want to check33 that they are mounted by issuing <command> mount</command>.</para>22 mounted when entering the chroot environment. You may want to check 23 that they are mounted by issuing <command>findmnt</command>.</para> 34 24 35 <para>All commands in this and following chapters are run as root on the 36 target system, fortunately without access to the host system. 37 Be careful anyway, as if the storage devices of your target system already 38 contain some important data, it's possible to destroy them with badly 39 formed commands.</para> 25 <para>Until <xref linkend="ch-tools-chroot"/>, the commands must be 26 run as <systemitem class="username">root</systemitem>, with the 27 <envar>LFS</envar> variable set. After entering chroot, all commands 28 are run as root, fortunately without access to the OS of the computer 29 you built LFS on. Be careful anyway, as it is easy to destroy the whole 30 LFS system with badly formed commands.</para> 40 31 41 32 </sect1> -
chapter07/kernfs.xml
rd6796c8 r827cc05 23 23 mounted:</para> 24 24 25 <screen><userinput>mkdir -pv /{proc,sys,run}</userinput></screen> 25 <screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen> 26 27 <sect2 id="ch-tools-bindmount"> 28 <title>Mounting and Populating /dev</title> 29 30 <para>During a normal boot, the kernel automatically mounts the 31 <systemitem class="filesystem">devtmpfs</systemitem> filesystem on the 32 <filename class="directory">/dev</filename> directory, and allow the 33 devices to be created dynamically on that virtual filesystem as they 34 are detected or accessed. Device creation is generally done during the 35 boot process by the kernel and Udev. 36 Since this new system does not yet have Udev and 37 has not yet been booted, it is necessary to mount and populate 38 <filename class="directory">/dev</filename> manually. This is 39 accomplished by bind mounting the host system's 40 <filename class="directory">/dev</filename> directory. A bind mount is 41 a special type of mount that allows you to create a mirror of a 42 directory or mount point to some other location. Use the following 43 command to achieve this:</para> 44 45 <screen><userinput>mount -v --bind /dev $LFS/dev</userinput></screen> 46 47 </sect2> 26 48 27 49 <sect2 id="ch-tools-kernfsmount"> 28 50 <title>Mounting Virtual Kernel File Systems</title> 29 51 30 <para>The kernel has already mounted 31 <systemitem class="filesystem">devtmpfs</systemitem>. 32 Mount the remaining virtual kernel filesystems:</para> 52 <para>Now mount the remaining virtual kernel filesystems:</para> 33 53 34 <screen><userinput>mkdir -pv /dev/{pts,shm} 35 mount -vt devpts /dev/pts /dev/pts -o gid=5,mode=620 36 mount -vt proc proc /proc 37 mount -vt sysfs sysfs /sys 38 mount -vt tmpfs tmpfs /run 39 mount -vt tmpfs tmpfs /dev/shm</userinput></screen> 40 54 <screen><userinput>mount -v --bind /dev/pts $LFS/dev/pts 55 mount -vt proc proc $LFS/proc 56 mount -vt sysfs sysfs $LFS/sys 57 mount -vt tmpfs tmpfs $LFS/run</userinput></screen> 58 <!-- 41 59 <variablelist> 42 60 <title>The meaning of the mount options for devpts:</title> … … 66 84 67 85 </variablelist> 86 --> 87 <para>In some host systems, <filename>/dev/shm</filename> is a 88 symbolic link to <filename class="directory">/run/shm</filename>. 89 The /run tmpfs was mounted above so in this case only a 90 directory needs to be created.</para> 68 91 69 </sect2> 70 71 <sect2 id="ch-tools-devadjust"> 72 <title>Adjusting devtmpfs</title> 73 74 <para>Now <systemitem class='filesystem'>proc</systemitem> filesystem 75 is mounted, we can replace the device nodes for standard I/O streams 76 with symlinks to pseudo files in 77 <filename class="directory">/proc/self/fd</filename> (which are symlinks 78 to the files connected to the standard I/O streams for the current 79 process). And, create another symlink recommended by the kernel 80 documentation. These are necessary for I/O redirection in the building 81 system of some packages to function properly:</para> 82 83 <screen><userinput>ln -sfv /proc/self/fd/0 /dev/stdin 84 ln -sfv /proc/self/fd/1 /dev/stdout 85 ln -sfv /proc/self/fd/2 /dev/stderr 86 ln -sv /proc/self/fd /dev</userinput></screen> 92 <screen><userinput>if [ -h $LFS/dev/shm ]; then 93 mkdir -pv $LFS/$(readlink $LFS/dev/shm) 94 fi</userinput></screen> 87 95 88 96 </sect2> -
chapter08/coreutils.xml
rd6796c8 r827cc05 115 115 meant to be run as user <systemitem class="username">root</systemitem>:</para> 116 116 117 <!-- CLFS note: "su -c" to set the supplementary group IDs. 118 For a normal LFS build, they are already set by 'login' or 'su'. 119 But for CLFS there is no such tool available at the beginning of 120 chapter 7. Currently coreutils is the only package of which the 121 test suite needs the supplementary GIDs set up. --> 122 <screen><userinput remap="test">su -c 'make NON_ROOT_USERNAME=tester check-root'</userinput></screen> 117 <screen><userinput remap="test">make NON_ROOT_USERNAME=tester check-root</userinput></screen> 123 118 124 119 <para>We're going to run the remainder of the tests as the -
chapter08/gcc.xml
rd6796c8 r827cc05 50 50 -i libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp</userinput></screen> 51 51 52 <para>For x86_64 target, set the default directory name for 53 64-bit libraries to <quote>lib</quote>. The command is unnecessary, 54 but harmless for 32-bit x86. If you are building for another target, 55 you may need to adjust the command for your target.</para> 56 57 <screen><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \ 58 -i.orig gcc/config/i386/t-linux64</userinput></screen> 52 <para>If building on x86_64, change the default directory name for 64-bit 53 libraries to <quote>lib</quote>:</para> 54 55 <screen><userinput remap="pre">case $(uname -m) in 56 x86_64) 57 sed -e '/m64=/s/lib64/lib/' \ 58 -i.orig gcc/config/i386/t-linux64 59 ;; 60 esac</userinput></screen> 59 61 60 62 <para>The GCC documentation recommends building GCC in a dedicated build directory:</para> -
chapter08/glibc.xml
rd6796c8 r827cc05 73 73 <screen><userinput remap="configure">../configure --prefix=/usr \ 74 74 --disable-werror \ 75 --enable-kernel=& linux-major-version;.&linux-minor-version;\75 --enable-kernel=&min-kernel; \ 76 76 --enable-stack-protector=strong \ 77 77 --with-headers=/usr/include \ … … 90 90 91 91 <varlistentry> 92 <term><parameter>--enable-kernel=& linux-major-version;.&linux-minor-version;</parameter></term>92 <term><parameter>--enable-kernel=&min-kernel;</parameter></term> 93 93 <listitem> 94 94 <para>This option tells the build system that this glibc may 95 be used with kernels as old as 96 &linux-major-version;.&linux-minor-version;. This means generating 95 be used with kernels as old as &min-kernel;. This means generating 97 96 workarounds in case a system call introduced in a later version 98 97 cannot be used.</para> -
chapter10/fstab.xml
rd6796c8 r827cc05 26 26 # order 27 27 28 /dev/<replaceable> sda</replaceable>3 / ext4defaults 1 129 /dev/<replaceable> sda</replaceable>2 /boot ext4 defaults 0 228 /dev/<replaceable><xxx></replaceable> / <replaceable><fff></replaceable> defaults 1 1 29 /dev/<replaceable><yyy></replaceable> swap swap pri=1 0 0 30 30 proc /proc proc nosuid,noexec,nodev 0 0 31 31 sysfs /sys sysfs nosuid,noexec,nodev 0 0 … … 43 43 # order 44 44 45 /dev/<replaceable> sda</replaceable>3 / ext4defaults 1 146 /dev/<replaceable> sda</replaceable>2 /boot ext4 defaults 0 245 /dev/<replaceable><xxx></replaceable> / <replaceable><fff></replaceable> defaults 1 1 46 /dev/<replaceable><yyy></replaceable> swap swap pri=1 0 0 47 47 48 48 # End /etc/fstab</literal> 49 49 EOF</userinput></screen> 50 50 51 <para>Replace <replaceable>sda</replaceable> to the name of the device 52 node for your disk where LFS is being built. For details on the six 51 <para>Replace <replaceable><xxx></replaceable>, 52 <replaceable><yyy></replaceable>, and <replaceable><fff></replaceable> 53 with the values appropriate for the system, for example, <filename 54 class="partition">sda2</filename>, <filename 55 class="partition">sda5</filename>, and <systemitem 56 class="filesystem">ext4</systemitem>. For details on the six 53 57 fields in this file, see <command>man 5 fstab</command>.</para> 54 58 -
chapter10/grub.xml
rd6796c8 r827cc05 77 77 is /boot/grub/.</para> 78 78 79 <para>For the following example, it is assumed that the root 80 partition is <filename class="partition">sda3</filename>, and the 81 seperate boot partition is 82 <filename class="partition">sda2</filename>. Replace 83 <replaceable>sda</replaceable> to the name of the device node for your 84 disk where LFS is being built.</para> 79 <para>The location of the boot partition is a choice of the user that 80 affects the configuration. One recommendation is to have a separate small 81 (suggested size is 200 MB) partition just for boot information. That way 82 each build, whether LFS or some commercial distro, can access the same boot 83 files and access can be made from any booted system. If you choose to do 84 this, you will need to mount the separate partition, move all files in the 85 current <filename class="directory">/boot</filename> directory (e.g. the 86 linux kernel you just built in the previous section) to the new partition. 87 You will then need to unmount the partition and remount it as <filename 88 class="directory">/boot</filename>. If you do this, be sure to update 89 <filename>/etc/fstab</filename>.</para> 90 91 <para>Using the current lfs partition will also work, but configuration 92 for multiple systems is more difficult.</para> 93 94 <para>Using the above information, determine the appropriate 95 designator for the root partition (or boot partition, if a separate 96 one is used). For the following example, it is assumed that the root 97 (or separate boot) partition is <filename 98 class="partition">sda2</filename>.</para> 85 99 86 100 <para>Install the GRUB files into <filename … … 131 145 132 146 menuentry "GNU/Linux, Linux &linux-version;-lfs-&version;" { 133 linux / vmlinuz-&linux-version;-lfs-&version; root=/dev/sda3ro147 linux /boot/vmlinuz-&linux-version;-lfs-&version; root=/dev/sda2 ro 134 148 }</literal> 135 149 EOF</userinput></screen> -
chapter10/kernel.xml
rd6796c8 r827cc05 247 247 248 248 <caution> 249 <para>As the cross-built LFS system has a separate /boot partition, 250 the files copied below should go there. The easiest way to do that is 251 to mount <filename class="directory">/boot</filename> before 252 proceeding. As the root user:</para> 253 254 <screen role="nodump"><userinput>mount /boot</userinput></screen> 255 256 <para>We don't need to specify the path to the device node, as it's 257 already given in <filename>/etc/fstab</filename>.</para> 249 <para>If the host system has a separate /boot partition, the files copied 250 below should go there. The easiest way to do that is to bind /boot on the 251 host (outside chroot) to /mnt/lfs/boot before proceeding. As the root 252 user in the <emphasis>host system</emphasis>:</para> 253 254 <screen role="nodump"><userinput>mount --bind /boot /mnt/lfs/boot</userinput></screen> 258 255 </caution> 259 256 -
chapter11/reboot.xml
rd6796c8 r827cc05 82 82 83 83 <para>Now that we have said that, let's move on to booting our shiny new LFS 84 installation for the first time! </para>84 installation for the first time! First exit from the chroot environment:</para> 85 85 86 <para>Unmount the boot partition:</para> 86 <screen><userinput>logout</userinput></screen> 87 <!-- We need to show the user the details... 88 <para>Unmount the LFS file system hierarchy:</para> 87 89 88 <screen role="nodump"><userinput>umount /boot</userinput></screen> 90 <screen><userinput>umount -Rv $LFS</userinput></screen> 91 --> 89 92 90 <para>Synchronize cached writes to prevent data loss on reboot without a 91 fully functional <command>init</command> process:</para> 93 <para>Then unmount the virtual file systems:</para> 92 94 93 <screen role="nodump"><userinput>sync</userinput></screen> 95 <screen><userinput>umount -v $LFS/dev/pts 96 umount -v $LFS/dev 97 umount -v $LFS/run 98 umount -v $LFS/proc 99 umount -v $LFS/sys</userinput></screen> 100 101 <para>If multiple partitions were created, unmount the other 102 partitions before unmounting the main one, like this:</para> 103 104 <screen role="nodump"><userinput>umount -v $LFS/usr 105 umount -v $LFS/home 106 umount -v $LFS</userinput></screen> 107 108 <para>Unmount the LFS file system itself:</para> 109 110 <screen role="nodump"><userinput>umount -v $LFS</userinput></screen> 94 111 95 112 <para>Now, reboot the system with:</para> 96 113 97 <screen role="nodump"><userinput>reboot -ff</userinput></screen> 98 99 <para><parameter>-ff</parameter> option allows to reboot the system 100 without support from the <command>init</command> process.</para> 114 <screen role="nodump"><userinput>shutdown -r now</userinput></screen> 101 115 102 116 <para>Assuming the GRUB boot loader was set up as outlined earlier, the menu -
git-version.sh
rd6796c8 r827cc05 50 50 sha="$(git describe --abbrev=1)" 51 51 rev=$(echo "$sha" | sed 's/-g[^-]*$//') 52 version=" cross-$rev"53 versiond=" cross-$rev-systemd"52 version="$rev" 53 versiond="$rev-systemd" 54 54 55 55 if [ "$(git diff HEAD | wc -l)" != "0" ]; then -
packages.ent
rd6796c8 r827cc05 310 310 <!ENTITY grub-fin-du "158 MB"> 311 311 <!ENTITY grub-fin-sbu "0.7 SBU"> 312 <!ENTITY grub-tmp-du "158 MB">313 <!ENTITY grub-tmp-sbu "0.7 SBU">314 312 315 313 <!ENTITY gzip-version "1.11"> … … 355 353 <!ENTITY iproute2-fin-du "15 MB"> 356 354 <!ENTITY iproute2-fin-sbu "0.2 SBU"> 357 <!ENTITY iproute2-tmp-du "15 MB">358 <!ENTITY iproute2-tmp-sbu "less than 0.1 SBU">359 355 360 356 <!ENTITY jinja2-version "3.0.3"> … … 444 440 <!ENTITY linux-knl-du "1200 - 8800 MB (typically about 1700 MB)"> 445 441 <!ENTITY linux-knl-sbu "1.5 - 130.0 SBU (typically about 12 SBU)"> 446 <!ENTITY linux-tmp-du "1200 MB">447 <!ENTITY linux-tmp-sbu "1.5 SBU">448 442 449 443 <!ENTITY linux-headers-tmp-du "1.2 GB"> … … 726 720 <!ENTITY util-linux-fin-du "261 MB"> 727 721 <!ENTITY util-linux-fin-sbu "1.1 SBU"> 728 <!ENTITY mount-setsid-du "85 MB">729 <!ENTITY mount-setsid-sbu "less than 0.1 SBU">730 722 731 723 <!ENTITY vim-version "8.2.4567"> -
prologue/architecture.xml
rd6796c8 r827cc05 13 13 <para>The primary target architectures of LFS are the AMD/Intel x86 (32-bit) 14 14 and x86_64 (64-bit) CPUs. On the other hand, the instructions in this book are 15 also known to work, with some modifications, with the Power PC and ARM 16 CPUs.</para> 15 also known to work, with some modifications, with the Power PC and ARM CPUs. To 16 build a system that utilizes one of these CPUs, the main prerequisite, in 17 addition to those on the next page, is an existing Linux system such as an 18 earlier LFS installation, Ubuntu, Red Hat/Fedora, SuSE, or other distribution 19 that targets the architecture that you have. Also note that a 32-bit 20 distribution can be installed and used as a host system on a 64-bit AMD/Intel 21 computer.</para> 17 22 18 23 <para>For building LFS, the gain of building on a 64-bit system -
prologue/preface.xml
rd6796c8 r827cc05 16 16 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="architecture.xml"/> 17 17 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="prerequisites.xml"/> 18 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="cross.xml"/>19 18 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="standards.xml"/> 20 19 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="why.xml"/>
Note:
See TracChangeset
for help on using the changeset viewer.