Linux From Scratch
Linux From Scratch
Version 5.0
Gerard Beekmans
Copyright © 1999−2003 Gerard Beekmans
This book describes the process of creating a Linux system from scratch, using nothing but the sources of the
required software.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that
the following conditions are met:
• Redistributions in any form must retain the above copyright notice, this list of conditions and the
following disclaimer.
• Neither the name of "Linux From Scratch" nor the names of its contributors may be used to endorse
or promote products derived from this material without specific prior written permission.
• Any material derived from Linux From Scratch must contain a reference to the "Linux From Scratch"
project.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Dedication
This book is dedicated to my loving and supportive wife Beverly Beekmans.
Linux From Scratch
Table of Contents
Preface..................................................................................................................................................................1
1. Foreword..............................................................................................................................................1
2. Audience..............................................................................................................................................1
2.1. Who would want to read this book.............................................................................................1
2.2. Who would not want to read this book.......................................................................................2
3. Prerequisites.........................................................................................................................................2
4. Structure...............................................................................................................................................3
4.1. Part I − Introduction...................................................................................................................3
4.2. Part II − Preparing for the build.................................................................................................3
4.3. Part III − Building the LFS system............................................................................................3
4.4. Part IV − Appendices.................................................................................................................3
I. Part I − Introduction.......................................................................................................................................4
Chapter 1. Introduction......................................................................................................................................5
1.1. How things are going to be done......................................................................................................5
1.2. Conventions used in this book..........................................................................................................6
1.3. Book version.....................................................................................................................................6
1.4. Changelog.........................................................................................................................................7
1.5. Resources........................................................................................................................................16
1.5.1. FAQ.......................................................................................................................................16
1.5.2. IRC........................................................................................................................................16
1.5.3. Mailing lists...........................................................................................................................16
1.5.4. News server...........................................................................................................................16
1.5.5. Mirror sites............................................................................................................................17
1.5.6. Contact information...............................................................................................................17
1.6. Acknowledgments...........................................................................................................................17
1.6.1. Current Project Team Members............................................................................................17
1.6.2. Translators.............................................................................................................................18
1.6.3. Mirror Maintainers................................................................................................................18
1.6.4. Donators................................................................................................................................18
1.6.5. Former Team Members and Contributors.............................................................................19
i
Linux From Scratch
Table of Contents
Chapter 3. Preparing a new partition
3.3. Creating a file system on the new partition....................................................................................24
3.4. Mounting the new partition.............................................................................................................25
ii
Linux From Scratch
Table of Contents
Chapter 5. Constructing a temporary system
5.12.1. Contents of Expect..............................................................................................................49
5.12.2...............................................................................................................................................49
5.12.3. Expect Installation Dependencies.......................................................................................49
5.12.4...............................................................................................................................................49
5.12.5. Installation of Expect...........................................................................................................49
5.13. Installing DejaGnu−1.4.3..............................................................................................................50
5.13.1. Contents of DejaGnu...........................................................................................................50
5.13.2...............................................................................................................................................50
5.13.3. DejaGnu Installation Dependencies....................................................................................50
5.13.4...............................................................................................................................................50
5.13.5. Installation of DejaGnu.......................................................................................................50
5.14. Installing GCC−3.3.1 − Pass 2......................................................................................................50
5.14.1...............................................................................................................................................50
5.14.2. Re−installation of GCC.......................................................................................................51
5.15. Installing Binutils−2.14 − Pass 2..................................................................................................53
5.15.1...............................................................................................................................................53
5.15.2. Re−installation of Binutils..................................................................................................53
5.16. Installing Gawk−3.1.3...................................................................................................................54
5.16.1. Contents of Gawk................................................................................................................54
5.16.2...............................................................................................................................................54
5.16.3. Gawk Installation Dependencies.........................................................................................54
5.16.4...............................................................................................................................................55
5.16.5. Installation of Gawk............................................................................................................55
5.17. Installing Coreutils−5.0................................................................................................................55
5.17.1. Contents of Coreutils...........................................................................................................55
5.17.2...............................................................................................................................................55
5.17.3. Coreutils Installation Dependencies....................................................................................55
5.17.4...............................................................................................................................................55
5.17.5. Installation of Coreutils.......................................................................................................56
5.18. Installing Bzip2−1.0.2...................................................................................................................56
5.18.1. Contents of Bzip2................................................................................................................56
5.18.2...............................................................................................................................................56
5.18.3. Bzip2 Installation Dependencies.........................................................................................56
5.18.4...............................................................................................................................................57
5.18.5. Installation of Bzip2............................................................................................................57
5.19. Installing Gzip−1.3.5....................................................................................................................57
5.19.1. Contents of Gzip..................................................................................................................57
5.19.2...............................................................................................................................................57
5.19.3. Gzip Installation Dependencies...........................................................................................57
5.19.4...............................................................................................................................................57
5.19.5. Installation of Gzip..............................................................................................................57
5.20. Installing Diffutils−2.8.1...............................................................................................................57
5.20.1. Contents of Diffutils............................................................................................................58
5.20.2...............................................................................................................................................58
5.20.3. Diffutils Installation Dependencies.....................................................................................58
5.20.4...............................................................................................................................................58
5.20.5. Installation of Diffutils........................................................................................................58
iii
Linux From Scratch
Table of Contents
Chapter 5. Constructing a temporary system
5.21. Installing Findutils−4.1.20............................................................................................................58
5.21.1. Contents of Findutils...........................................................................................................58
5.21.2...............................................................................................................................................58
5.21.3. Findutils Installation Dependencies....................................................................................59
5.21.4...............................................................................................................................................59
5.21.5. Installing Findutils...............................................................................................................59
5.22. Installing Make−3.80....................................................................................................................59
5.22.1. Contents of Make................................................................................................................59
5.22.2...............................................................................................................................................59
5.22.3. Make Installation Dependencies.........................................................................................59
5.22.4...............................................................................................................................................60
5.22.5. Installation of Make.............................................................................................................60
5.23. Installing Grep−2.5.1....................................................................................................................60
5.23.1. Contents of Grep.................................................................................................................60
5.23.2...............................................................................................................................................60
5.23.3. Grep Installation Dependencies...........................................................................................60
5.23.4...............................................................................................................................................60
5.23.5. Installation of Grep..............................................................................................................60
5.24. Installing Sed−4.0.7......................................................................................................................61
5.24.1. Contents of Sed...................................................................................................................61
5.24.2...............................................................................................................................................61
5.24.3. Sed Installation Dependencies.............................................................................................61
5.24.4...............................................................................................................................................61
5.24.5. Installation of Sed................................................................................................................61
5.25. Installing Gettext−0.12.1..............................................................................................................62
5.25.1. Contents of Gettext..............................................................................................................62
5.25.2...............................................................................................................................................62
5.25.3. Gettext Installation Dependencies.......................................................................................62
5.25.4...............................................................................................................................................62
5.25.5. Installation of Gettext..........................................................................................................62
5.26. Installing Ncurses−5.3..................................................................................................................63
5.26.1. Contents of Ncurses.............................................................................................................63
5.26.2...............................................................................................................................................63
5.26.3. Ncurses Installation Dependencies......................................................................................63
5.26.4...............................................................................................................................................63
5.26.5. Installation of Ncurses.........................................................................................................63
5.27. Installing Patch−2.5.4...................................................................................................................64
5.27.1. Contents of Patch.................................................................................................................64
5.27.2...............................................................................................................................................64
5.27.3. Patch Installation Dependencies..........................................................................................64
5.27.4...............................................................................................................................................64
5.27.5. Installation of Patch.............................................................................................................64
5.28. Installing Tar−1.13.25...................................................................................................................65
5.28.1. Contents of Tar....................................................................................................................65
5.28.2...............................................................................................................................................65
5.28.3. Tar Installation Dependencies.............................................................................................65
5.28.4...............................................................................................................................................65
iv
Linux From Scratch
Table of Contents
Chapter 5. Constructing a temporary system
5.28.5. Installation of Tar................................................................................................................65
5.29. Installing Texinfo−4.6..................................................................................................................65
5.29.1. Contents of Texinfo.............................................................................................................66
5.29.2...............................................................................................................................................66
5.29.3. Texinfo Installation Dependencies......................................................................................66
5.29.4...............................................................................................................................................66
5.29.5. Installation of Texinfo.........................................................................................................66
5.30. Installing Bash−2.05b...................................................................................................................66
5.30.1. Contents of Bash.................................................................................................................66
5.30.2...............................................................................................................................................67
5.30.3. Bash Installation Dependencies...........................................................................................67
5.30.4...............................................................................................................................................67
5.30.5. Installation of Bash..............................................................................................................67
5.31. Installing Util−linux−2.12............................................................................................................67
5.31.1. Contents of Util−linux.........................................................................................................67
5.31.2...............................................................................................................................................68
5.31.3. Util−linux Installation Dependencies..................................................................................68
5.31.4...............................................................................................................................................68
5.31.5. Installation of Util−linux.....................................................................................................68
5.32. Installing Perl−5.8.0......................................................................................................................68
5.32.1. Contents of Perl...................................................................................................................68
5.32.2...............................................................................................................................................69
5.32.3. Perl Installation Dependencies............................................................................................69
5.32.4...............................................................................................................................................69
5.32.5. Installation of Perl...............................................................................................................69
5.33. Stripping........................................................................................................................................69
v
Linux From Scratch
Table of Contents
Chapter 6. Installing basic system software
6.10.2...............................................................................................................................................79
6.10.3. Linux Installation Dependencies.........................................................................................79
6.10.4...............................................................................................................................................79
6.10.5. Installation of the kernel headers.........................................................................................79
6.10.6...............................................................................................................................................80
6.10.7. Why we copy the kernel headers and don't symlink them..................................................80
6.11. Installing Man−pages−1.60..........................................................................................................81
6.11.1. Contents of Man−pages.......................................................................................................81
6.11.2...............................................................................................................................................81
6.11.3. Man−pages Installation Dependencies................................................................................81
6.11.4...............................................................................................................................................81
6.11.5. Installation of Man−pages...................................................................................................81
6.12. Installing Glibc−2.3.2...................................................................................................................82
6.12.1. Contents of Glibc.................................................................................................................82
6.12.2...............................................................................................................................................82
6.12.3. Glibc Installation Dependencies..........................................................................................82
6.12.4...............................................................................................................................................82
6.12.5. Glibc installation.................................................................................................................82
6.12.6...............................................................................................................................................84
6.12.7. Configuring Glibc................................................................................................................84
6.12.8...............................................................................................................................................85
6.12.9. Configuring Dynamic Loader.............................................................................................85
6.13. Re−adjusting the toolchain...........................................................................................................85
6.14. Installing Binutils−2.14................................................................................................................87
6.14.1. Contents of Binutils.............................................................................................................87
6.14.2...............................................................................................................................................87
6.14.3. Binutils Installation Dependencies......................................................................................87
6.14.4...............................................................................................................................................87
6.14.5. Installation of Binutils.........................................................................................................87
6.15. Installing GCC−3.3.1....................................................................................................................88
6.15.1. Contents of GCC.................................................................................................................88
6.15.2...............................................................................................................................................89
6.15.3. GCC Installation Dependencies..........................................................................................89
6.15.4...............................................................................................................................................89
6.15.5. Installation of GCC.............................................................................................................89
6.16. Installing Coreutils−5.0................................................................................................................90
6.16.1. Contents of Coreutils...........................................................................................................90
6.16.2...............................................................................................................................................90
6.16.3. Coreutils Installation Dependencies....................................................................................90
6.16.4...............................................................................................................................................90
6.16.5. Installation of Coreutils.......................................................................................................91
6.17. Installing Zlib−1.1.4.....................................................................................................................92
6.17.1. Contents of Zlib...................................................................................................................92
6.17.2...............................................................................................................................................92
6.17.3. Zlib Installation Dependencies............................................................................................92
6.17.4...............................................................................................................................................92
6.17.5. Installation of Zlib...............................................................................................................92
vi
Linux From Scratch
Table of Contents
Chapter 6. Installing basic system software
6.18. Installing Lfs−Utils−0.3................................................................................................................93
6.18.1. Contents of Lfs−Utils..........................................................................................................93
6.18.2...............................................................................................................................................94
6.18.3. Lfs−Utils Installation Dependencies...................................................................................94
6.18.4...............................................................................................................................................94
6.18.5. Installation of Lfs−Utils......................................................................................................94
6.19. Installing Findutils−4.1.20............................................................................................................94
6.19.1. Contents of Findutils...........................................................................................................94
6.19.2...............................................................................................................................................94
6.19.3. Findutils Installation Dependencies....................................................................................94
6.19.4...............................................................................................................................................95
6.19.5. Installing Findutils...............................................................................................................95
6.20. Installing Gawk−3.1.3...................................................................................................................95
6.20.1. Contents of Gawk................................................................................................................95
6.20.2...............................................................................................................................................95
6.20.3. Gawk Installation Dependencies.........................................................................................95
6.20.4...............................................................................................................................................95
6.20.5. Installation of Gawk............................................................................................................96
6.21. Installing Ncurses−5.3..................................................................................................................96
6.21.1. Contents of Ncurses.............................................................................................................96
6.21.2...............................................................................................................................................97
6.21.3. Ncurses Installation Dependencies......................................................................................97
6.21.4...............................................................................................................................................97
6.21.5. Installation of Ncurses.........................................................................................................97
6.22. Installing Vim−6.2........................................................................................................................98
6.22.1. Alternatives to Vim.............................................................................................................98
6.22.2. Contents of Vim..................................................................................................................98
6.22.3...............................................................................................................................................98
6.22.4. Vim Installation Dependencies...........................................................................................98
6.22.5...............................................................................................................................................98
6.22.6. Installation of Vim...............................................................................................................98
6.22.7...............................................................................................................................................99
6.22.8. Configuring Vim.................................................................................................................99
6.23. Installing M4−1.4..........................................................................................................................99
6.23.1. Contents of M4....................................................................................................................99
6.23.2...............................................................................................................................................99
6.23.3. M4 Installation Dependencies.............................................................................................99
6.23.4...............................................................................................................................................99
6.23.5. Installation of M4..............................................................................................................100
6.24. Installing Bison−1.875................................................................................................................100
6.24.1. Contents of Bison..............................................................................................................100
6.24.2.............................................................................................................................................100
6.24.3. Bison Installation Dependencies.......................................................................................100
6.24.4.............................................................................................................................................100
6.24.5. Installation of Bison..........................................................................................................100
6.25. Installing Less−381.....................................................................................................................101
6.25.1. Contents of Less................................................................................................................101
vii
Linux From Scratch
Table of Contents
Chapter 6. Installing basic system software
6.25.2.............................................................................................................................................101
6.25.3. Less Installation Dependencies.........................................................................................101
6.25.4.............................................................................................................................................101
6.25.5. Installation of Less............................................................................................................101
6.26. Installing Groff−1.19..................................................................................................................102
6.26.1. Contents of Groff...............................................................................................................102
6.26.2.............................................................................................................................................102
6.26.3. Groff Installation Dependencies........................................................................................102
6.26.4.............................................................................................................................................102
6.26.5. Installation of Groff...........................................................................................................102
6.27. Installing Sed−4.0.7....................................................................................................................103
6.27.1. Contents of Sed.................................................................................................................103
6.27.2.............................................................................................................................................103
6.27.3. Sed Installation Dependencies...........................................................................................103
6.27.4.............................................................................................................................................103
6.27.5. Installation of Sed..............................................................................................................103
6.28. Installing Flex−2.5.4a.................................................................................................................104
6.28.1. Contents of Flex................................................................................................................104
6.28.2.............................................................................................................................................104
6.28.3. Flex Installation Dependencies.........................................................................................104
6.28.4.............................................................................................................................................104
6.28.5. Installation of Flex.............................................................................................................104
6.29. Installing Gettext−0.12.1............................................................................................................105
6.29.1. Contents of Gettext............................................................................................................105
6.29.2.............................................................................................................................................105
6.29.3. Gettext Installation Dependencies.....................................................................................105
6.29.4.............................................................................................................................................105
6.29.5. Installation of Gettext........................................................................................................105
6.30. Installing Net−tools−1.60...........................................................................................................106
6.30.1. Contents of Net−tools........................................................................................................106
6.30.2.............................................................................................................................................106
6.30.3. Net−tools Installation Dependencies.................................................................................106
6.30.4.............................................................................................................................................106
6.30.5. Installation of Net−tools....................................................................................................106
6.31. Installing Inetutils−1.4.2.............................................................................................................107
6.31.1. Contents of Inetutils..........................................................................................................107
6.31.2.............................................................................................................................................107
6.31.3. Inetutils Installation Dependencies...................................................................................107
6.31.4.............................................................................................................................................107
6.31.5. Installation of Inetutils.......................................................................................................107
6.32. Installing Perl−5.8.0....................................................................................................................108
6.32.1. Contents of Perl.................................................................................................................108
6.32.2.............................................................................................................................................108
6.32.3. Perl Installation Dependencies..........................................................................................108
6.32.4.............................................................................................................................................108
6.32.5. Installation of Perl.............................................................................................................108
6.33. Installing Texinfo−4.6................................................................................................................109
viii
Linux From Scratch
Table of Contents
Chapter 6. Installing basic system software
6.33.1. Contents of Texinfo...........................................................................................................109
6.33.2.............................................................................................................................................109
6.33.3. Texinfo Installation Dependencies....................................................................................109
6.33.4.............................................................................................................................................109
6.33.5. Installation of Texinfo.......................................................................................................109
6.34. Installing Autoconf−2.57............................................................................................................110
6.34.1. Contents of Autoconf........................................................................................................110
6.34.2.............................................................................................................................................110
6.34.3. Autoconf Installation Dependencies.................................................................................110
6.34.4.............................................................................................................................................110
6.34.5. Installation of Autoconf.....................................................................................................110
6.35. Installing Automake−1.7.6.........................................................................................................111
6.35.1. Contents of Automake.......................................................................................................111
6.35.2.............................................................................................................................................111
6.35.3. Automake Installation Dependencies................................................................................111
6.35.4.............................................................................................................................................111
6.35.5. Installation of Automake...................................................................................................111
6.36. Installing Bash−2.05b.................................................................................................................112
6.36.1. Contents of Bash...............................................................................................................112
6.36.2.............................................................................................................................................112
6.36.3. Bash Installation Dependencies.........................................................................................112
6.36.4.............................................................................................................................................112
6.36.5. Installation of Bash............................................................................................................112
6.37. Installing File−4.04.....................................................................................................................113
6.37.1. Contents of File.................................................................................................................113
6.37.2.............................................................................................................................................113
6.37.3. File Installation Dependencies..........................................................................................113
6.37.4.............................................................................................................................................113
6.37.5. Installation of File.............................................................................................................113
6.38. Installing Libtool−1.5.................................................................................................................113
6.38.1. Contents of Libtool............................................................................................................113
6.38.2.............................................................................................................................................114
6.38.3. Libtool Installation Dependencies.....................................................................................114
6.38.4.............................................................................................................................................114
6.38.5. Installation of Libtool........................................................................................................114
6.39. Installing Bzip2−1.0.2.................................................................................................................114
6.39.1. Contents of Bzip2..............................................................................................................114
6.39.2.............................................................................................................................................115
6.39.3. Bzip2 Installation Dependencies.......................................................................................115
6.39.4.............................................................................................................................................115
6.39.5. Installation of Bzip2..........................................................................................................115
6.40. Installing Diffutils−2.8.1.............................................................................................................115
6.40.1. Contents of Diffutils..........................................................................................................115
6.40.2.............................................................................................................................................116
6.40.3. Diffutils Installation Dependencies...................................................................................116
6.40.4.............................................................................................................................................116
6.40.5. Installation of Diffutils......................................................................................................116
ix
Linux From Scratch
Table of Contents
Chapter 6. Installing basic system software
6.41. Installing Ed−0.2.........................................................................................................................116
6.41.1. Contents of Ed...................................................................................................................116
6.41.2.............................................................................................................................................116
6.41.3. Ed Installation Dependencies............................................................................................116
6.41.4.............................................................................................................................................116
6.41.5. Installation of Ed...............................................................................................................116
6.42. Installing Kbd−1.08....................................................................................................................117
6.42.1. Contents of Kbd.................................................................................................................117
6.42.2.............................................................................................................................................118
6.42.3. Kbd Installation Dependencies..........................................................................................118
6.42.4.............................................................................................................................................118
6.42.5. Installation of Kbd.............................................................................................................118
6.43. Installing E2fsprogs−1.34...........................................................................................................118
6.43.1. Contents of E2fsprogs.......................................................................................................118
6.43.2.............................................................................................................................................119
6.43.3. E2fsprogs Installation Dependencies................................................................................119
6.43.4.............................................................................................................................................119
6.43.5. Installation of E2fsprogs...................................................................................................119
6.44. Installing Grep−2.5.1..................................................................................................................120
6.44.1. Contents of Grep...............................................................................................................120
6.44.2.............................................................................................................................................120
6.44.3. Grep Installation Dependencies.........................................................................................120
6.44.4.............................................................................................................................................120
6.44.5. Installation of Grep............................................................................................................120
6.45. Installing Grub−0.93...................................................................................................................120
6.45.1. Contents of Grub...............................................................................................................121
6.45.2.............................................................................................................................................121
6.45.3. Grub Installation Dependencies........................................................................................121
6.45.4.............................................................................................................................................121
6.45.5. Installation of Grub...........................................................................................................121
6.46. Installing Gzip−1.3.5..................................................................................................................121
6.46.1. Contents of Gzip................................................................................................................122
6.46.2.............................................................................................................................................122
6.46.3. Gzip Installation Dependencies.........................................................................................122
6.46.4.............................................................................................................................................122
6.46.5. Installation of Gzip............................................................................................................122
6.47. Installing Man−1.5m2.................................................................................................................122
6.47.1. Contents of Man................................................................................................................123
6.47.2.............................................................................................................................................123
6.47.3. Man Installation Dependencies.........................................................................................123
6.47.4.............................................................................................................................................123
6.47.5. Installation of Man............................................................................................................123
6.48. Installing Make−3.80..................................................................................................................124
6.48.1. Contents of Make..............................................................................................................124
6.48.2.............................................................................................................................................124
6.48.3. Make Installation Dependencies.......................................................................................124
6.48.4.............................................................................................................................................124
x
Linux From Scratch
Table of Contents
Chapter 6. Installing basic system software
6.48.5. Installation of Make...........................................................................................................124
6.49. Installing Modutils−2.4.25..........................................................................................................125
6.49.1. Contents of Modutils.........................................................................................................125
6.49.2.............................................................................................................................................125
6.49.3. Modutils Installation Dependencies..................................................................................125
6.49.4.............................................................................................................................................125
6.49.5. Installation of Modutils.....................................................................................................125
6.50. Installing Patch−2.5.4.................................................................................................................125
6.50.1. Contents of Patch...............................................................................................................125
6.50.2.............................................................................................................................................126
6.50.3. Patch Installation Dependencies........................................................................................126
6.50.4.............................................................................................................................................126
6.50.5. Installation of Patch...........................................................................................................126
6.51. Installing Procinfo−18................................................................................................................126
6.51.1. Contents of Procinfo..........................................................................................................126
6.51.2.............................................................................................................................................126
6.51.3. Procinfo Installation Dependencies...................................................................................126
6.51.4.............................................................................................................................................127
6.51.5. Installation of Procinfo......................................................................................................127
6.52. Installing Procps−3.1.11.............................................................................................................127
6.52.1. Contents of Procps.............................................................................................................127
6.52.2.............................................................................................................................................127
6.52.3. Procps Installation Dependencies......................................................................................127
6.52.4.............................................................................................................................................127
6.52.5. Installation of Procps.........................................................................................................127
6.53. Installing Psmisc−21.3................................................................................................................128
6.53.1. Contents of Psmisc............................................................................................................128
6.53.2.............................................................................................................................................128
6.53.3. Psmisc Installation Dependencies.....................................................................................128
6.53.4.............................................................................................................................................128
6.53.5. Installation of Psmisc........................................................................................................128
6.54. Installing Shadow−4.0.3.............................................................................................................129
6.54.1. Contents of Shadow...........................................................................................................129
6.54.2.............................................................................................................................................129
6.54.3. Shadow Installation Dependencies....................................................................................129
6.54.4.............................................................................................................................................129
6.54.5. Installation of Shadow.......................................................................................................129
6.54.6.............................................................................................................................................131
6.54.7. Configuring Shadow..........................................................................................................131
6.55. Installing Sysklogd−1.4.1...........................................................................................................131
6.55.1. Contents of Sysklogd.........................................................................................................131
6.55.2.............................................................................................................................................131
6.55.3. Sysklogd Installation Dependencies..................................................................................132
6.55.4.............................................................................................................................................132
6.55.5. Installation of Sysklogd.....................................................................................................132
6.55.6.............................................................................................................................................132
6.55.7. Configuring Sysklogd........................................................................................................132
xi
Linux From Scratch
Table of Contents
Chapter 6. Installing basic system software
6.56. Installing Sysvinit−2.85..............................................................................................................132
6.56.1. Contents of Sysvinit..........................................................................................................132
6.56.2.............................................................................................................................................133
6.56.3. Sysvinit Installation Dependencies...................................................................................133
6.56.4.............................................................................................................................................133
6.56.5. Installation of Sysvinit.......................................................................................................133
6.56.6.............................................................................................................................................133
6.56.7. Configuring Sysvinit.........................................................................................................133
6.57. Installing Tar−1.13.25.................................................................................................................134
6.57.1. Contents of Tar..................................................................................................................134
6.57.2.............................................................................................................................................134
6.57.3. Tar Installation Dependencies...........................................................................................134
6.57.4.............................................................................................................................................134
6.57.5. Installation of Tar..............................................................................................................134
6.58. Installing Util−linux−2.12..........................................................................................................135
6.58.1. Contents of Util−linux.......................................................................................................135
6.58.2.............................................................................................................................................135
6.58.3. Util−linux Installation Dependencies................................................................................135
6.58.4.............................................................................................................................................135
6.58.5. FHS compliance notes.......................................................................................................135
6.58.6. Installation of Util−linux...................................................................................................135
6.59. Installing GCC−2.95.3................................................................................................................136
6.59.1.............................................................................................................................................136
6.59.2. Installation of GCC...........................................................................................................136
6.60. Revised chroot command............................................................................................................137
6.61. Installing LFS−Bootscripts−1.12................................................................................................137
6.61.1. Contents of LFS−bootscripts.............................................................................................137
6.61.2.............................................................................................................................................137
6.61.3. LFS−Bootscripts Installation Dependencies.....................................................................137
6.61.4.............................................................................................................................................137
6.61.5. Installation of LFS−Bootscripts........................................................................................137
6.62. Configuring system components................................................................................................138
6.62.1. Configuring your keyboard...............................................................................................138
6.62.2. Setting the root password..................................................................................................138
xii
Linux From Scratch
Table of Contents
Chapter 8. Making the LFS system bootable...............................................................................................144
8.1. Introduction...................................................................................................................................144
8.2. Creating the /etc/fstab file.............................................................................................................144
8.3. Installing Linux−2.4.22.................................................................................................................145
8.3.1. Contents of Linux................................................................................................................145
8.3.2...............................................................................................................................................145
8.3.3. Linux Installation Dependencies.........................................................................................145
8.3.4...............................................................................................................................................145
8.3.5. Installation of the kernel......................................................................................................145
8.4. Making the LFS system bootable.................................................................................................146
xiii
Linux From Scratch
Table of Contents
Appendix A. Package descriptions and dependencies
A.5.6. Binutils Installation Dependencies.....................................................................................159
A.6. Bison............................................................................................................................................159
A.6.1. Official Download Location...............................................................................................159
A.6.2. Contents of Bison...............................................................................................................159
A.6.3..............................................................................................................................................160
A.6.4. Short descriptions...............................................................................................................160
A.6.5..............................................................................................................................................160
A.6.6. Bison Installation Dependencies........................................................................................160
A.7. Bzip2............................................................................................................................................160
A.7.1. Official Download Location...............................................................................................160
A.7.2. Contents of Bzip2...............................................................................................................160
A.7.3..............................................................................................................................................160
A.7.4. Short descriptions...............................................................................................................160
A.7.5..............................................................................................................................................161
A.7.6. Bzip2 Installation Dependencies........................................................................................161
A.8. Coreutils.......................................................................................................................................161
A.8.1. Official Download Location...............................................................................................161
A.8.2. Contents of Coreutils..........................................................................................................161
A.8.3..............................................................................................................................................162
A.8.4. Short descriptions...............................................................................................................162
A.8.5..............................................................................................................................................165
A.8.6. Coreutils Installation Dependencies...................................................................................165
A.9. DejaGnu.......................................................................................................................................166
A.9.1. Official Download Location...............................................................................................166
A.9.2. Contents of DejaGnu..........................................................................................................166
A.9.3..............................................................................................................................................166
A.9.4. Short description.................................................................................................................166
A.9.5..............................................................................................................................................166
A.9.6. DejaGnu Installation Dependencies...................................................................................166
A.10. Diffutils......................................................................................................................................166
A.10.1. Official Download Location.............................................................................................166
A.10.2. Contents of Diffutils.........................................................................................................166
A.10.3............................................................................................................................................167
A.10.4. Short descriptions.............................................................................................................167
A.10.5............................................................................................................................................167
A.10.6. Diffutils Installation Dependencies..................................................................................167
A.11. E2fsprogs...................................................................................................................................167
A.11.1. Official Download Location.............................................................................................167
A.11.2. Contents of E2fsprogs......................................................................................................167
A.11.3............................................................................................................................................167
A.11.4. Short descriptions.............................................................................................................167
A.11.5............................................................................................................................................169
A.11.6. E2fsprogs Installation Dependencies...............................................................................169
A.12. Ed...............................................................................................................................................169
A.12.1. Official Download Location.............................................................................................169
A.12.2. Contents of Ed..................................................................................................................169
A.12.3............................................................................................................................................169
xiv
Linux From Scratch
Table of Contents
Appendix A. Package descriptions and dependencies
A.12.4. Short descriptions.............................................................................................................169
A.12.5............................................................................................................................................169
A.12.6. Ed Installation Dependencies...........................................................................................169
A.13. Expect.........................................................................................................................................169
A.13.1. Official Download Location.............................................................................................170
A.13.2. Contents of Expect...........................................................................................................170
A.13.3............................................................................................................................................170
A.13.4. Short description...............................................................................................................170
A.13.5............................................................................................................................................170
A.13.6. Expect Installation Dependencies.....................................................................................170
A.14. File.............................................................................................................................................170
A.14.1. Official Download Location.............................................................................................170
A.14.2. Contents of File................................................................................................................170
A.14.3............................................................................................................................................171
A.14.4. Short description...............................................................................................................171
A.14.5............................................................................................................................................171
A.14.6. File Installation Dependencies.........................................................................................171
A.15. Findutils.....................................................................................................................................171
A.15.1. Official Download Location.............................................................................................171
A.15.2. Contents of Findutils........................................................................................................171
A.15.3............................................................................................................................................171
A.15.4. Short descriptions.............................................................................................................171
A.15.5............................................................................................................................................172
A.15.6. Findutils Installation Dependencies.................................................................................172
A.16. Flex............................................................................................................................................172
A.16.1. Official Download Location.............................................................................................172
A.16.2. Contents of Flex...............................................................................................................172
A.16.3............................................................................................................................................172
A.16.4. Short descriptions.............................................................................................................172
A.16.5............................................................................................................................................172
A.16.6. Flex Installation Dependencies.........................................................................................173
A.17. Gawk..........................................................................................................................................173
A.17.1. Official Download Location.............................................................................................173
A.17.2. Contents of Gawk.............................................................................................................173
A.17.3............................................................................................................................................173
A.17.4. Short descriptions.............................................................................................................173
A.17.5............................................................................................................................................173
A.17.6. Gawk Installation Dependencies......................................................................................173
A.18. GCC...........................................................................................................................................173
A.18.1. Official Download Location.............................................................................................174
A.18.2. Contents of GCC..............................................................................................................174
A.18.3............................................................................................................................................174
A.18.4. Short descriptions.............................................................................................................174
A.18.5............................................................................................................................................175
A.18.6. GCC Installation Dependencies.......................................................................................175
A.19. Gettext........................................................................................................................................175
A.19.1. Official Download Location.............................................................................................175
xv
Linux From Scratch
Table of Contents
Appendix A. Package descriptions and dependencies
A.19.2. Contents of Gettext...........................................................................................................175
A.19.3............................................................................................................................................175
A.19.4. Short descriptions.............................................................................................................175
A.19.5............................................................................................................................................177
A.19.6. Gettext Installation Dependencies....................................................................................177
A.20. Glibc...........................................................................................................................................177
A.20.1. Official Download Location.............................................................................................177
A.20.2. Contents of Glibc..............................................................................................................177
A.20.3............................................................................................................................................177
A.20.4. Short descriptions.............................................................................................................177
A.20.5............................................................................................................................................179
A.20.6. Glibc Installation Dependencies.......................................................................................179
A.21. Grep............................................................................................................................................180
A.21.1. Official Download Location.............................................................................................180
A.21.2. Contents of Grep...............................................................................................................180
A.21.3............................................................................................................................................180
A.21.4. Short descriptions.............................................................................................................180
A.21.5............................................................................................................................................180
A.21.6. Grep Installation Dependencies........................................................................................180
A.22. Groff...........................................................................................................................................180
A.22.1. Official Download Location.............................................................................................180
A.22.2. Contents of Groff..............................................................................................................180
A.22.3............................................................................................................................................181
A.22.4. Short descriptions.............................................................................................................181
A.22.5............................................................................................................................................182
A.22.6. Groff Installation Dependencies.......................................................................................182
A.23. Grub...........................................................................................................................................182
A.23.1. Official Download Location.............................................................................................183
A.23.2. Contents of Grub..............................................................................................................183
A.23.3............................................................................................................................................183
A.23.4. Short descriptions.............................................................................................................183
A.23.5............................................................................................................................................183
A.23.6. Grub Installation Dependencies.......................................................................................183
A.24. Gzip............................................................................................................................................183
A.24.1. Official Download Location.............................................................................................183
A.24.2. Contents of Gzip...............................................................................................................184
A.24.3............................................................................................................................................184
A.24.4. Short descriptions.............................................................................................................184
A.24.5............................................................................................................................................184
A.24.6. Gzip Installation Dependencies........................................................................................184
A.25. Inetutils......................................................................................................................................184
A.25.1............................................................................................................................................185
A.25.2. Official Download Location.............................................................................................185
A.25.3. Contents of Inetutils.........................................................................................................185
A.25.4............................................................................................................................................185
A.25.5. Short descriptions.............................................................................................................185
A.25.6............................................................................................................................................185
xvi
Linux From Scratch
Table of Contents
Appendix A. Package descriptions and dependencies
A.25.7. Inetutils Installation Dependencies...................................................................................185
A.26. Kbd.............................................................................................................................................185
A.26.1. Official Download Location.............................................................................................186
A.26.2. Contents of Kbd................................................................................................................186
A.26.3............................................................................................................................................186
A.26.4. Short descriptions.............................................................................................................186
A.26.5............................................................................................................................................187
A.26.6. Kbd Installation Dependencies.........................................................................................187
A.27. Less............................................................................................................................................187
A.27.1. Official Download Location.............................................................................................187
A.27.2. Contents of Less...............................................................................................................187
A.27.3............................................................................................................................................188
A.27.4. Short descriptions.............................................................................................................188
A.27.5............................................................................................................................................188
A.27.6. Less Installation Dependencies........................................................................................188
A.28. LFS−Bootscripts........................................................................................................................188
A.28.1. Official Download Location.............................................................................................188
A.28.2. Contents of LFS−bootscripts............................................................................................188
A.28.3............................................................................................................................................188
A.28.4. Short descriptions.............................................................................................................188
A.28.5............................................................................................................................................189
A.28.6. LFS−Bootscripts Installation Dependencies....................................................................189
A.29. Lfs−Utils....................................................................................................................................189
A.29.1............................................................................................................................................189
A.29.2. Official Download Location.............................................................................................189
A.29.3. Contents of Lfs−Utils.......................................................................................................190
A.29.4............................................................................................................................................190
A.29.5. Short descriptions.............................................................................................................190
A.29.6............................................................................................................................................190
A.29.7. Lfs−Utils Installation Dependencies................................................................................190
A.30. Libtool........................................................................................................................................190
A.30.1. Official Download Location.............................................................................................190
A.30.2. Contents of Libtool...........................................................................................................190
A.30.3............................................................................................................................................191
A.30.4. Short descriptions.............................................................................................................191
A.30.5............................................................................................................................................191
A.30.6. Libtool Installation Dependencies....................................................................................191
A.31. Linux (the kernel).......................................................................................................................191
A.31.1. Official Download Location.............................................................................................191
A.31.2. Contents of Linux.............................................................................................................191
A.31.3............................................................................................................................................191
A.31.4. Short descriptions.............................................................................................................191
A.31.5............................................................................................................................................192
A.31.6. Linux Installation Dependencies......................................................................................192
A.32. M4..............................................................................................................................................192
A.32.1. Official Download Location.............................................................................................192
A.32.2. Contents of M4.................................................................................................................192
xvii
Linux From Scratch
Table of Contents
Appendix A. Package descriptions and dependencies
A.32.3............................................................................................................................................192
A.32.4. Short descriptions.............................................................................................................192
A.32.5............................................................................................................................................192
A.32.6. M4 Installation Dependencies..........................................................................................192
A.33. Make...........................................................................................................................................193
A.33.1. Official Download Location.............................................................................................193
A.33.2. Contents of Make.............................................................................................................193
A.33.3............................................................................................................................................193
A.33.4. Short description...............................................................................................................193
A.33.5............................................................................................................................................193
A.33.6. Make Installation Dependencies.......................................................................................193
A.34. MAKEDEV................................................................................................................................193
A.34.1. Official Download Location.............................................................................................193
A.34.2. Contents of MAKEDEV...................................................................................................193
A.34.3............................................................................................................................................194
A.34.4. Short description...............................................................................................................194
A.34.5............................................................................................................................................194
A.34.6. MAKEDEV Installation Dependencies............................................................................194
A.35. Man............................................................................................................................................194
A.35.1. Official Download Location.............................................................................................194
A.35.2. Contents of Man...............................................................................................................194
A.35.3............................................................................................................................................194
A.35.4. Short descriptions.............................................................................................................194
A.35.5............................................................................................................................................195
A.35.6. Man Installation Dependencies........................................................................................195
A.36. Man−pages.................................................................................................................................195
A.36.1. Official Download Location.............................................................................................195
A.36.2. Contents of Man−pages....................................................................................................195
A.36.3............................................................................................................................................195
A.36.4. Short description...............................................................................................................195
A.36.5............................................................................................................................................195
A.36.6. Man−pages Installation Dependencies.............................................................................195
A.37. Modutils.....................................................................................................................................196
A.37.1. Official Download Location.............................................................................................196
A.37.2. Contents of Modutils........................................................................................................196
A.37.3............................................................................................................................................196
A.37.4. Short descriptions.............................................................................................................196
A.37.5............................................................................................................................................197
A.37.6. Modutils Installation Dependencies.................................................................................197
A.38. Ncurses.......................................................................................................................................197
A.38.1. Official Download Location.............................................................................................197
A.38.2. Contents of Ncurses..........................................................................................................197
A.38.3............................................................................................................................................197
A.38.4. Short descriptions.............................................................................................................197
A.38.5............................................................................................................................................198
A.38.6. Ncurses Installation Dependencies...................................................................................198
A.39. Net−tools....................................................................................................................................198
xviii
Linux From Scratch
Table of Contents
Appendix A. Package descriptions and dependencies
A.39.1. Official Download Location.............................................................................................198
A.39.2. Contents of Net−tools.......................................................................................................198
A.39.3............................................................................................................................................199
A.39.4. Short descriptions.............................................................................................................199
A.39.5............................................................................................................................................199
A.39.6. Net−tools Installation Dependencies................................................................................199
A.40. Patch...........................................................................................................................................199
A.40.1. Official Download Location.............................................................................................199
A.40.2. Contents of Patch..............................................................................................................200
A.40.3............................................................................................................................................200
A.40.4. Short description...............................................................................................................200
A.40.5............................................................................................................................................200
A.40.6. Patch Installation Dependencies.......................................................................................200
A.41. Perl.............................................................................................................................................200
A.41.1. Official Download Location.............................................................................................200
A.41.2. Contents of Perl................................................................................................................200
A.41.3............................................................................................................................................201
A.41.4. Short descriptions.............................................................................................................201
A.41.5............................................................................................................................................202
A.41.6. Perl Installation Dependencies.........................................................................................202
A.42. Procinfo......................................................................................................................................202
A.42.1. Official Download Location.............................................................................................202
A.42.2. Contents of Procinfo.........................................................................................................202
A.42.3............................................................................................................................................202
A.42.4. Short descriptions.............................................................................................................202
A.42.5............................................................................................................................................202
A.42.6. Procinfo Installation Dependencies..................................................................................203
A.43. Procps.........................................................................................................................................203
A.43.1. Official Download Location.............................................................................................203
A.43.2. Contents of Procps............................................................................................................203
A.43.3............................................................................................................................................203
A.43.4. Short descriptions.............................................................................................................203
A.43.5............................................................................................................................................204
A.43.6. Procps Installation Dependencies.....................................................................................204
A.44. Psmisc........................................................................................................................................204
A.44.1. Official Download Location.............................................................................................204
A.44.2. Contents of Psmisc...........................................................................................................204
A.44.3............................................................................................................................................204
A.44.4. Short descriptions.............................................................................................................204
A.44.5............................................................................................................................................205
A.44.6. Psmisc Installation Dependencies....................................................................................205
A.45. Sed..............................................................................................................................................205
A.45.1. Official Download Location.............................................................................................205
A.45.2. Contents of Sed.................................................................................................................205
A.45.3............................................................................................................................................205
A.45.4. Short description...............................................................................................................205
A.45.5............................................................................................................................................205
xix
Linux From Scratch
Table of Contents
Appendix A. Package descriptions and dependencies
A.45.6. Sed Installation Dependencies..........................................................................................205
A.46. Shadow.......................................................................................................................................205
A.46.1. Official Download Location.............................................................................................206
A.46.2. Contents of Shadow..........................................................................................................206
A.46.3............................................................................................................................................206
A.46.4. Short descriptions.............................................................................................................206
A.46.5............................................................................................................................................207
A.46.6. Shadow Installation Dependencies...................................................................................207
A.47. Sysklogd.....................................................................................................................................207
A.47.1. Official Download Location.............................................................................................208
A.47.2. Contents of Sysklogd........................................................................................................208
A.47.3............................................................................................................................................208
A.47.4. Short descriptions.............................................................................................................208
A.47.5............................................................................................................................................208
A.47.6. Sysklogd Installation Dependencies.................................................................................208
A.48. Sysvinit......................................................................................................................................208
A.48.1. Official Download Location.............................................................................................208
A.48.2. Contents of Sysvinit.........................................................................................................208
A.48.3............................................................................................................................................209
A.48.4. Short descriptions.............................................................................................................209
A.48.5............................................................................................................................................209
A.48.6. Sysvinit Installation Dependencies...................................................................................209
A.49. Tar..............................................................................................................................................210
A.49.1. Official Download Location.............................................................................................210
A.49.2. Contents of Tar.................................................................................................................210
A.49.3............................................................................................................................................210
A.49.4. Short descriptions.............................................................................................................210
A.49.5............................................................................................................................................210
A.49.6. Tar Installation Dependencies..........................................................................................210
A.50. Tcl..............................................................................................................................................210
A.50.1. Official Download Location.............................................................................................210
A.50.2. Contents of Tcl.................................................................................................................210
A.50.3............................................................................................................................................211
A.50.4. Short description...............................................................................................................211
A.50.5............................................................................................................................................211
A.50.6. Tcl Installation Dependencies..........................................................................................211
A.51. Texinfo.......................................................................................................................................211
A.51.1. Official Download Location.............................................................................................211
A.51.2. Contents of Texinfo..........................................................................................................211
A.51.3............................................................................................................................................211
A.51.4. Short descriptions.............................................................................................................211
A.51.5............................................................................................................................................212
A.51.6. Texinfo Installation Dependencies...................................................................................212
A.52. Util−linux...................................................................................................................................212
A.52.1. Official Download Location.............................................................................................212
A.52.2. Contents of Util−linux......................................................................................................212
A.52.3............................................................................................................................................212
xx
Linux From Scratch
Table of Contents
Appendix A. Package descriptions and dependencies
A.52.4. Short descriptions.............................................................................................................212
A.52.5............................................................................................................................................215
A.52.6. Util−linux Installation Dependencies...............................................................................215
A.53. Vim............................................................................................................................................215
A.53.1. Official Download Location.............................................................................................215
A.53.2. Contents of Vim...............................................................................................................215
A.53.3............................................................................................................................................215
A.53.4. Short descriptions.............................................................................................................215
A.53.5............................................................................................................................................216
A.53.6. Vim Installation Dependencies.........................................................................................216
A.54. Zlib.............................................................................................................................................216
A.54.1............................................................................................................................................216
A.54.2. Official Download Location.............................................................................................216
A.54.3. Contents of Zlib................................................................................................................217
A.54.4............................................................................................................................................217
A.54.5. Short description...............................................................................................................217
A.54.6............................................................................................................................................217
A.54.7. Zlib Installation Dependencies.........................................................................................217
xxi
Preface
1. Foreword
Having used a number of different Linux distributions, I was never fully satisfied with any of them. I didn't
like the arrangement of the bootscripts. I didn't like the way certain programs were configured by default.
Much more of that sort of thing bothered me. Finally I realized that if I wanted full satisfaction from my
Linux system I would have to build my own system from scratch, using only the source code. I resolved not to
use pre−compiled packages of any kind, nor CD−ROM or boot disk that would install some basic utilities. I
would use my current Linux system to develop my own.
This wild idea seemed very difficult at the time and often seemed an impossible task. After sorting out all
kinds of problems, such as dependencies and compile−time errors, a custom−built Linux system was created
that was fully operational. I called this system a Linux From Scratch system, or LFS for short.
I hope you will have a great time working on your own LFS!
−−
Gerard Beekmans
[email protected]
2. Audience
2.1. Who would want to read this book
There are many reasons why somebody would want to read this book. The principal reason being to install a
Linux system straight from the source code. A question many people raise is "Why go through all the hassle
of manually building a Linux system from scratch when you can just download and install an existing one?".
That is a good question and is the impetus for this section of the book.
One important reason for LFS's existence is to help people learn how a Linux system works from the inside
out. Building an LFS system helps demonstrate to you what makes Linux tick, how things work together and
depend on each other. One of the best things that this learning experience provides is the ability to customize
Linux to your own tastes and needs.
A key benefit of LFS is that you have more control of your system without relying on someone else's Linux
implementation. With LFS, you are in the driver's seat and dictate every aspect of your system, such as the
directory layout and bootscript setup. You also dictate where, why and how programs are installed.
Another benefit of LFS is the ability to create a very compact Linux system. When installing a regular
distribution, you are usually forced to install several programs which you are likely never to use. They're just
sitting there wasting precious disk space (or worse, CPU cycles). It isn't difficult to build an LFS system less
than 100 MB. Does that still sound like a lot? A few of us have been working on creating a very small
embedded LFS system. We successfully built a system that was just enough to run the Apache web server
with approximately 8MB of disk space used. Further stripping could bring that down to 5 MB or less. Try that
with a regular distribution.
Preface 1
Linux From Scratch
We could compare distributed Linux to a hamburger you buy at a fast−food restaurant −− you have no idea
what you are eating. LFS, on the other hand, doesn't give you a hamburger, but the recipe to make a
hamburger. This allows you to review it, to omit unwanted ingredients, and to add your own ingredients
which enhance the flavor of your burger. When you are satisfied with the recipe, you go on to preparing it.
You make it just the way you like it: broil it, bake it, deep−fry it, barbecue it, or eat it tar−tar (raw).
Another analogy that we can use is that of comparing LFS with a finished house. LFS will give you the
skeletal plan of a house, but it's up to you to build it. You have the freedom to adjust your plans as you go.
One last advantage of a custom built Linux system is security. By compiling the entire system from source
code, you are empowered to audit everything and apply all the security patches you feel are needed. You don't
have to wait for somebody else to compile binary packages that fix a security hole. Unless you examine the
patch and implement it yourself you have no guarantee that the new binary package was built correctly and
actually fixes the problem (adequately).
There are too many good reasons to build your own LFS system for them all to be listed here. This section is
only the tip of the iceberg. As you continue in your LFS experience, you will find on your own the power that
information and knowledge truly bring.
While you decide which to read, consider your objective. If you wish to build a Linux system while learning a
bit along the way, then this book is probably your best choice. If your objective is strictly educational and you
do not have any plans for your finished system, then the "From Power Up To Bash Prompt" HOWTO is
probably a better choice.
3. Prerequisites
This book assumes that its reader has a good deal of knowledge about using and installing Linux software.
Before you begin building your LFS system, you should read the following HOWTOs:
• Software−Building−HOWTO
This is a comprehensive guide to building and installing "generic" UNIX software distributions under
Linux. This HOWTO is available at
http://www.tldp.org/HOWTO/Software−Building−HOWTO.html.
• The Linux Users' Guide
Preface 2
Linux From Scratch
This guide covers the usage of assorted Linux software and is available at
http://espc22.murdoch.edu.au/~stewart/guide/guide.html.
• The Essential Pre−Reading Hint
This is an LFS Hint written specifically for new users of Linux. It is mostly a list of links to excellent
sources of information on a wide range of topics. Any person attempting to install LFS, should at least
have an understanding of many of the topics in this hint. It is available at
http://www.linuxfromscratch.org/hints/downloads/files/essential_prereading.txt
4. Structure
This book is divided into the following four parts:
(Much of the first appendix is integrated into Parts II and III. This enlarges the book somewhat, but we
believe it makes for easier reading. Now you don't have to keep referencing the appendix while doing the
installation. This going back and forth would be a real chore, especially if you're reading a plain text version
of the book.)
Preface 3
I. Part I − Introduction
Table of Contents
1. Introduction
1.1. How things are going to be done
1.2. Conventions used in this book
1.3. Book version
1.4. Changelog
1.5. Resources
1.6. Acknowledgments
2. Important information
2.1. About $LFS
2.2. About SBUs
2.3. About the test suites
2.4. How to ask for help
I. Part I − Introduction 4
Chapter 1. Introduction
1.1. How things are going to be done
You are going to build your LFS system by using a previously installed Linux distribution (such as Debian,
Mandrake, Red Hat, or SuSE). This existing Linux system (the host) will be used as a starting point, because
you will need programs like a compiler, linker and shell to build the new system. Normally all the required
tools are available if you selected "development" as one of the options when you installed your distribution.
In Chapter 3 you will first create a new Linux native partition and file system, the place where your new LFS
system will be compiled and installed. Then in Chapter 4 you download all the packages and patches required
to build an LFS system, and store them on the new file system.
Chapter 5 then discusses the installation of a number of packages that will form the basic development suite
(or toolchain) which is used to build the actual system in Chapter 6. Some of these packages are needed to
resolve circular dependencies −− for example, to compile a compiler you need a compiler.
The first thing to be done in Chapter 5 is build a first pass of the toolchain, made up of Binutils and GCC. The
programs from these packages will be linked statically in order for them to be usable independently of the host
system. The second thing to do is build Glibc, the C library. Glibc will be compiled by the toolchain programs
we just built in the first pass. The third thing to do is build a second pass of the toolchain. This time the
toolchain will be dynamically linked against the newly built Glibc. The remaining Chapter 5 packages are all
built using this second pass toolchain and dynamically linked against the new host−independent Glibc. When
this is done, the LFS installation process will no longer depend on the host distribution, with the exception of
the running kernel.
You may be thinking that "this seems like a lot of work, just to get away from my host distribution". Well, a
full technical explanation is provided at the start of Chapter 5, including some notes on the differences
between statically and dynamically linked programs.
In Chapter 6 your real LFS system will be built. The chroot (change root) program is used to enter a virtual
environment and start a new shell whose root directory will be set to the LFS partition. This is very similar to
rebooting and instructing the kernel to mount the LFS partition as the root partition. The reason that you don't
actually reboot, but instead chroot, is that creating a bootable system requires additional work which isn't
necessary just yet. But the major advantage is that chrooting allows you to continue using the host while LFS
is being built. While waiting for package compilation to complete, you can simply switch to a different VC
(Virtual Console) or X desktop and continue using the computer as you normally would.
To finish the installation, the bootscripts are set up in Chapter 7, the kernel and bootloader are set up in
Chapter 8, and Chapter 9 contains some pointers to help you after you finish the book. Then, finally, you're
ready to reboot your computer into your new LFS system.
This is the process in a nutshell. Detailed information on the steps you will take are discussed in the chapters
and package descriptions as you progress through them. If something isn't completely clear now, don't worry,
everything will fall into place soon.
Please read Chapter 2 carefully as it explains a few important things you should be aware of before you begin
to work through Chapter 5 and beyond.
Chapter 1. Introduction 5
Linux From Scratch
./configure −−prefix=/usr
This form of text is designed to be typed exactly as seen unless otherwise noted in the
surrounding text. It is also used in the explanation sections to identify which of the commands
is being referenced.
This form of text (fixed width text) is showing screen output, probably as the result of
commands issued, and is also used to show filenames, such as /etc/ld.so.conf.
Emphasis
This form of text is used for several purposes in the book, mainly to emphasize important
points, and to give examples of what to type.
http://www.linuxfromscratch.org/
This form of text is used for hyperlinks, both within the book and to external pages such as
HOWTOs, download locations and websites.
This type of section is used mainly when creating configuration files. The first command tells
the system to create the file $LFS/etc/group from whatever is typed on the following lines
until the sequence EOF is encountered. Therefore, this whole section is generally typed as
seen.
Chapter 1. Introduction 6
Linux From Scratch
1.4. Changelog
5.0 − November 5th, 2003
• Upgraded to:
♦ automake−1.7.6
♦ bash−2.05b
♦ binutils−2.14
♦ e2fsprogs−1.34
♦ file−4.04
♦ findutils−4.1.20
♦ gawk−3.1.3
♦ gcc−3.3.1
♦ gettext−0.12.1
♦ glibc−2.3.2
♦ glibc−2.3.2−sscanf−1.patch
♦ grep−2.5.1
♦ groff−1.19
♦ gzip−1.3.5
♦ less−381
♦ lfs−bootscripts−1.12
♦ libtool−1.5
♦ linux−2.4.22
♦ man−1.5m2
♦ man−1.5m2−80cols.patch
♦ man−1.5m2−manpath.patch
♦ man−1.5m2−pager.patch
♦ man−pages−1.60
♦ modutils−2.4.25
♦ procps−3.1.11
♦ procps−3.1.11.patch
♦ psmisc−21.3
♦ sed−4.0.7
♦ sysvinit−2.85
♦ tar−1.13.25
♦ texinfo−4.6
♦ util−linux−2.12
♦ vim−6.2
• Added:
♦ bash−2.05b−2.patch
♦ bison−1.875−attribute.patch
♦ coreutils−5.0
♦ coreutils−5.0−uname.patch
♦ coreutils−5.0−hostname−2.patch
♦ dejagnu−1.4.3
♦ expect−5.39.0
♦ expect−5.39.0.patch
♦ gawk−3.1.3.patch
Chapter 1. Introduction 7
Linux From Scratch
♦ gcc−2.95.3
♦ gcc−2.95.3−2.patch
♦ gcc−2.95.3−no−fixinc.patch
♦ gcc−2.95.3−returntype−fix.patch
♦ gcc−3.3.1−no_fixincludes−2.patch
♦ gcc−3.3.1−specs−2.patch
♦ gcc−3.3.1−suppress−libiberty.patch
♦ grub−0.93
♦ grub−0.93−gcc33−1.patch
♦ inetutils−1.4.2
♦ lfs−utils−0.3
♦ ncurses−5.3−etip−2.patch
♦ ncurses−5.3−vsscanf.patch
♦ perl−5.8.0−libc−3.patch
♦ shadow−4.0.3−newgroup−fix.patch
♦ tcl−8.4.4
♦ zlib−1.1.4−vsnprintf.patch
• Removed:
♦ bin86−0.16.3
♦ fileutils−4.1
♦ fileutils−4.1.patch
♦ findutils−4.1−segfault.patch
♦ findutils−4.1.patch
♦ glibc−2.3.1−libnss.patch
♦ glibc−2.3.1−root−perl.patch
♦ gzip−1.2.4b.patch
♦ lilo−22.2
♦ netkit−base−0.17
♦ sh−utils−2.0
♦ sh−utils−2.0.patch
♦ sh−utils−2.0−hostname.patch
♦ tar−1.13.patch
♦ textutils−2.1
♦ vim−6.1.patch
• November 2nd, 2003 [alex]: Appendix A − Commented out all the "last checked against" lines.
• October 28th, 2003 [greg]: Strengthened the seds in "Locking in Glibc" and "Re−adjusting the
toolchain" sections.
• October 26th, 2003 [greg]: Chapter 6 − Glibc: Added command to create /etc/ld.so.conf to match
Chapter 5 Glibc. Closes bug 700.
• October 24th, 2003 [alex]: Appendix A − Changed the dependencies to the concise format, based on
Tushar's post .
• October 23rd, 2003 [gerard] Chapter 9 − The End: Changed the /etc/lfs filename to
/etc/lfs−release to be more consistent with other distributions out there.
• October 23rd, 2003 [alex]: Changed most of the "Chapter" references to proper "xref" cross
references .
• October 22nd, 2003 [alex]: Chapter 6 − Gawk and Shadow: Adjusted the text. And added some
markup elsewhere.
• October 22nd, 2003 [alex]: Chapter 6 − Entering the chroot environment: Dropped the set +h
command, as it is pointless there: it's redone several sections later.
Chapter 1. Introduction 8
Linux From Scratch
• October 15th, 2003 [greg]: Chapter 9: Reworked final strip command. Relocated paragraphs about
directory removal from Chapter 6.
• October 14th, 2003 [greg]: Chapter 8 − Making the LFS system bootable: Expanded Grub details and
added a warning.
• October 14th, 2003 [alex]: Appendix A − Updated the contents of Perl and Procps.
• October 14th, 2003 [alex]: Chapter 4 and 5 − Added a suggestion to use $LFS/sources as the working
and storage place.
• October 13th, 2003 [greg]: Chapter 9 − Rebooting the system: Reworked umount commands.
• October 11th, 2003 [alex]: Adapted the required disk space values and SBUs, as posted by Bruce
Dubbs.
• October 11th, 2003 [alex]: Chapter 5 − Toolchain technical notes: Added and changed some markup.
• October 9th, 2003 [gerard]: Upgraded to lfs−bootscripts−1.12.
• October 9th, 2003 [greg]: Performed internal markup reworking to fix an extraneous whitespace
problem in "tidy generated" web site pages. Essentially replace all occurrences of <para><screen>
with <screen> (and the matching closing tags).
• October 9th, 2003 [alex]: Chapter 6 − Basic Networking: Moved one half to the Lfs−Utils section, the
other half to Perl.
• October 8th, 2003 [alex]: Chapter 8 − Making bootable: Adapted the style of the screens, and
reworded some paragraphs.
• October 8th, 2003 [alex]: Removed a series of unused entities.
• October 7th, 2003 [jeremy]: Added notes to the linking tests in chapter 5 and 6 stating that blank
output is a bad thing.
• October 7th, 2003 [alex]: Changed the patch entities to contain the full filename instead of just the
version number.
• October 7th, 2003 [jeremy]: Chapter 1 − Added a note regarding #LFS−support on IRC.
• October 7th, 2003 [greg]: Preface: Add note about the Essential Pre−Reading Hint. Closes Bug 585.
• October 6th, 2003 [alex]: Changed the style of the Contents subsections in Chapters 5 and 6 and
Appendix A.
• October 6th, 2003 [greg]: Simplified seds in "Locking in Glibc" and "Re−adjusting the toolchain"
sections. Rearranged "How things are going to be done" section.
• October 5th, 2003 [greg]: Chapter 5: Added new section "Toolchain technical notes". Integrated and
scaled back the old "Why we use static linking" section. Closes Bug 658.
• October 4th, 2003 [alex]: Minor rewordings and additions of markup here and there.
• October 4th, 2003 [greg]: Chapter 5 − Binutils Pass 1: Added extra LDFLAGS to ensure static rebuild
of ld.
• October 2nd, 2003 [greg]: Chapter 6: Reinstated INSTALL=/tools/bin/install for linker adjustment
command due to issues on hosts where a ginstall symlink exists. This renders the "install" symlinks
redundant, so removed those too.
• October 2nd, 2003 [greg]: Chapter 6 − Shadow: Enabled MD5 passwords. Closes Bug 600.
• September 27th, 2003 [greg]: Chapter 5 − Expect: Tweaked install so that redundant scripts are not
installed. Chapter 6 − Creating essential symlinks: Removed redundant links. Chapter 6 − man:
Removed PATH, closes Bug 574.
• September 27th, 2003 [greg]: Added Tcl, Expect and DejaGnu items to Appendix A. Closes Bug 661.
• September 26th, 2003 [jeremy]: Added new workaround for the devpts problems.
• September 24th, 2003 [greg]: Various changes across the board addressing Bug 675.
• September 24th, 2003 [alex]: Appendix A − Changed the style of the short descriptions, and the
content of most of them too.
• September 22nd, 2003 [greg]: Chapter 8 − Creating the /etc/fstab file: Made mounting devpts the
default.
• September 22nd, 2003 [jeremy]: Added Net−tools patch to fix mii−tool compilation.
Chapter 1. Introduction 9
Linux From Scratch
• September 22nd, 2003 [jwrober]: Chapter 5 − Updated the Why Static page to more accurately
represent the difference between statically and dynamically linked binaries. Thanks to Ian Molton for
pointing this out. Fixes Bug 602.
• September 22nd, 2003 [jeremy]: Removed the make command from DejaGnu, since it performs
nothing.
• September 22nd, 2003 [jeremy]: Removed the −k from Tcl's make check, since it's not expected to
have failures anymore
• September 22nd, 2003 [jeremy]: Changed the reference to the man hint to a pointer to BLFS.
• September 22nd, 2003 [jeremy]: Added a note to remember to mount devpts if you exit and re−enter
chroot.
• September 22nd, 2003 [jeremy]: Removed make check from Patch and Diffutils, since these tests
perform no actions.
• September 22nd, 2003 [greg]: Chapter 5 − Setting up the environment: Added unset CC CXX CPP
LD_LIBRARY_PATH LD_PRELOAD to .bash_profile to stop accidental build breakage.
• September 20th, 2003 [greg]: Chapter 5 − GCC Pass 2: Updated to gcc−3.3.1−specs−2.patch.
Ncurses: added −−enable−overwrite and description.
• September 19th, 2003 [jeremy]: Corrected bash tags for proper use of the +h flag to bash.
• September 19th, 2003 [jwrober]: Various updates to the acknowledgments page.
• September 18th, 2003 [jeremy]: Chapter 5 − GCC Pass 2: Added some extra comments regarding the
3 tarballs to unpack.
• September 17th, 2003 [greg]: Chapter 6 − GCC−2.95.3: Added rationale notes.
• September 17th, 2003 [jwrober]: Updated the acknowledgments page to match the website.
• September 17th, 2003 [jeremy]: Upgraded File to 4.04.
• September 17th, 2003 [jeremy]: Chapter 6 − Changed 2 of the occurrences of exec bash −−login to
include the +h directive.
• September 17th, 2003 [greg]: Chapters 5 and 6 − Locking in Glibc and Re−adjusting the toolchain:
Do "make −C ld install" instead of "make −C ld install−data−local" to install a whole new linker
instead of just the new ldscripts.
• September 17th, 2003 [alex]: Normalized the spelling of 'Tcl' and 'DejaGnu', following their own
documentation.
• September 17th, 2003 [alex]: Properly alphabetized the dependencies.
• September 16th, 2003 [alex]: Finally updated the dependencies for the new Coreutils.
• September 16th, 2003 [greg]: Chapters 5 and 6 − Locking in Glibc and Re−adjusting the toolchain:
Added sanity checks.
• September 16th, 2003 [greg]: Chapters 5 and 6 − Binutils, GCC, and Glibc: Added notes on the test
suites.
• September 15th, 2003 [alex]: Corrected several typos and some inconsistencies.
• September 14th, 2003 [greg]: Chapter 6 − Revised chroot command: Removed no longer needed set
+h.
• September 14th, 2003 [alex]: Fixed some typos, and added some markup. Dropped the removal of
program files from the Stripping section in Chapter 5.
• September 14th, 2003 [greg]: Chapter 6 − Create essential symlinks: Add symlink
/usr/lib/libgcc_s.so.1 to allow GCC abi_check to run. Future NPTL needs this as well.
• September 13th, 2003 [jwrober]: Added PLFS hint text to the page in Chapter 6 for creating passwd
and group: bug 596.
• September 13th, 2003 [jwrober]: Updated the "How things are going to be done" page to include
more of the PLFS hint's text.
• September 13th, 2003 [jwrober]: Preface − Merged whoread and whonotread into a single audience
page.
• September 13th, 2003 [greg]: Chapter 2 − Added new section about the test suites.
Chapter 1. Introduction 10
Linux From Scratch
• September 12th, 2003 [jeremy]: Chapter 5 − Ncurses: Added description for the −−without−ada
configure switch.
• September 12th, 2003 [jeremy]: Chapter 5 − Gawk: Added the test suite
• September 12th, 2003 [jeremy]: Chapter 5 − Grep: Added descriptions of configure switches courtesy
of Anderson Lizardo
• September 12th, 2003 [gerard]: Removed /usr/lib/locale directory creation − it's created during
Chapter 6 − Glibc where it's more relevant.
• September 11th, 2003 [jwrober]: Chapter 5 − Fixed GCC Pass 2 specs patch text to be more vague,
but in actuality more accurate − provided by Anderson Lizardo.
• September 11th, 2003 [jwrober]: Chapter 5 − Grammar fix in Tcl install directions provided by
Anderson Lizardo.
• September 11th, 2003 [jwrober]: Chapter 5 − Small textual change in the locking in Glibc page for
/lib/ld.so.1 provided by Anderson Lizardo.
• September 11th, 2003 [jeremy]: Added bootloader setup to Chapter 8, after the addition of Grub to the
book.
• September 11th, 2003 [gerard]: Removed Bin86 and LILO and replaced it with Grub.
• September 11th, 2003 [jeremy]: Dropped non−toolchain tests to optional actions. Added a note to use
the Wiki for failed tests.
• September 11th, 2003 [jeremy]: Added Bison patch, backported from CVS, to fix pwlib compilation
problems
• September 11th, 2003 [jeremy]: Added Greg's patch to GCC to suppress the installation of libiberty,
and changed Binutils to allow its libiberty to stay.
• September 11th, 2003 [jeremy]: Added caution tags around the reminder to not delete the Binutils
source and build directories in Chapter 5.
• September 11th, 2003 [jeremy]: Added new perl−libc−3 patch from Anderson Lizardo
• September 9th, 2003 [jwrober]: Fixed the Findutils package download link on the packages page
closing bug 578.
• September 9th, 2003 [jeremy]: Chapter 6 − GCC 2.95.3: Removed compilation of C++, added Zack's
return−type patch.
• September 9th, 2003 [jeremy]: Chapter 6 − Coreutils: Added coreutils−5.0−hostname−2.patch, which
suppresses the build of the hostname binary, and also suppresses its check.
• September 9th, 2003 [jeremy]: Added some notes regarding failed tests to Glibc and DejaGnu.
• September 9th, 2003 [jeremy]: Glibc − Added commands to both Chapter 5 and 6 to include
minimum locales necessary for checks.
• September 9th, 2003 [jeremy]: Chapter 6 − Removed Zlib's munging of CFLAGS in favor of a note to
add −fPIC.
• September 8th, 2003 [matt]: Chapter 5 − Fixed the rm command that deletes unneeded documentation
from /tools/share.
• September 6th, 2003 [matt]: Chapter 6 − Removed a reference to "the static" directory in the intro.
• September 6th, 2003 [jeremy]: Chapter 4 − Updated download locations for some packages.
• September 5th, 2003 [jeremy]: Chapter 5 − GCC Pass 2: Corrected the make check error explanation
• September 5th, 2003 [jeremy]: Chapter 6 − Makedev: Changed the default device creation to
generic−nopty, because we now use devpts by default.
• September 5th, 2003 [jeremy]: Chapter 6 − GCC: Corrected wording to reflect the removal of the
/usr/lib/cpp symlink.
• September 5th, 2003 [jeremy]: Corrected perl libc patch to −2, changing the old /stage1 structure to
/tools
• September 5th, 2003 [matt]: Chapter 6 − Updated GCC specs patch and upgraded to man−1.5m2
• September 4th, 2003 [jeremy]: Chapter 6 − Creating Directories: Eliminated the creation of /usr/tmp −
Closes bug 176.
Chapter 1. Introduction 11
Linux From Scratch
• September 4th, 2003 [jeremy]: Chapter 6 − Mounting Proc: Added mounting the devpts filesystem
into chroot here. Closes bug 533.
• September 4th, 2003 [jeremy]: Chapter 6 − Mounting Proc: Added a warning at the end regarding
checking that proc is still mounted if you stop and restart the lfs process.
• September 4th, 2003 [jeremy]: Chapter 6 − Gzip: Altered text to better explain the reason behind the
sed command used in the gzip installation. Closes bug 551.
• September 4th, 2003 [jeremy]: Chapter 4 − Downloading patches: Added a note regarding Tushar's
patches project, and a link to the patches home page.
• September 3rd, 2003 [matt]: Fixed issue with Util−linux not utilizing headers and libraries installed in
/stage1.
• September 3rd, 2003 [matt]: Removed "rm /bin/pwd" instruction from Chapter 6 kernel−headers
installation as the link is still required by Glibc's installation.
• September 2nd, 2003 [alex]: Adjusted all the SBUs from the values posted by Jeremy.
• September 2nd, 2003 [alex]: Finally got around to renaming /stage1 to /tools.
• September 2nd, 2003 [alex]: Merged several of the main book structure files.
• September 2nd, 2003 [alex]: Alphabetized download lists, added note to Tcl instructions.
• September 2nd, 2003 [alex]: Reworded Organization, $LFS and SBUs sections.
• September 1, 2003 [jeremy] − Chapter 6 − Groff − Added note about choice of A4 or letter for the
PAGE variable.
• September 1, 2003 [jeremy] − Added in shadow newgrp patch from Greg Schafer
• August 31, 2003 [jeremy] − Chapter 6 − Inetutils − added the −−disable−whois and
−−disable−servers flags
• August 31, 2003 [jeremy] − Added in Greg's new instructions for GCC 3.3.1 with respect to the
fixincludes process. Also added extra verbiage to the Locking in Glibc and GCC Pass 2 pages on the
fixincludes process.
• August 31st, 2003 [alex]: Reworded some paragraphs, added missing markup, and rearranged the
changelog.
• August 31st, 2003 [alex]: Wrapped the 'Last checked' lines in parentheses. Several other small
retouches.
• August 30, 2003 [jeremy] − Updated fix−includes patch to GCC 3.3.1
• August 29, 2003 [jeremy] − Glibc − updated instructions with the sscanf patch from patches.
• August 29, 2003 [jeremy] − Updated GCC to version 3.3.1, including fixes based on Zack's mini−hint
for GCC 3.3, and patches from his docs.
• August 29th, 2003 [alex]: Removed obsolete Netkit−base, Fileutils, Sh−utils, and Textutils files.
• August 29th, 2003 [alex]: Added some missing markup, changed a few /static's to /stage1's.
• August 29th, 2003 [alex]: Chapter 06 − Added all the missing text lines before the make checks, and
reworded other lines.
• August 28, 2003 [matt] − Updated packages to linux−2.4.22, man−pages−1.60, expect−5.39.0,
findutils−4.1.20 and tcl−8.4.4
• August 28, 2003 [jeremy] − New bash−2.05b−2.patch file to include the 7 patches from ftp.gnu.org
• August 28th, 2003 [alex]: Chapter 06 − Re−adjusting toolchain: Added a forgotten backslash.
• August 28th, 2003 [alex]: Fixed a few typos and added some missing markup.
• August 28th, 2003 [alex]: Chapter 06 − Binutils and GCC: Integrated text from the pure−lfs hint.
• August 27, 2003 [jeremy] − Chapter 06 − Inetutils: Added −−sysconfdir=/etc −−localstatedir=/var and
moved the ping binary from /usr/bin to /bin
• August 27th, 2003 [alex]: Chapter 06 − Glibc: Integrated text from the pure−lfs hint.
• August 26, 2003 [jeremy] − Chapter 07 − Creating /etc/hosts: Changed www.mydomain.org to <value
of HOSTNAME>.mydomain.org
• August 26th, 2003 [alex]: Chapter 06 & 08 − Moved the installation of the kernel manpages from
chapter 6 to 8.
Chapter 1. Introduction 12
Linux From Scratch
• August 26, 2003 [jeremy] − Chapter 04 − Mounting the LFS partition: Added text regarding
mounting with too restrictive permissions.
• August 26, 2003 [jeremy] − Chapter 06 − Creating Directories: Added the creation of the /dev/shm
directory.
• August 26, 2003 [jeremy] − Chapter 08 − Creating fstab: Added the mount of tmpfs filesystem to
/dev/shm.
• August 26, 2003 [jeremy] − Chapter 08 − Kernel Installation: Added a reminder to compile tmpfs
support into the kernel.
• August 25th, 2003 [alex]: Chapter 06 − Rewrote the installation text of Shadow and Util−Linux while
correcting some typos.
• August 25th, 2003 [alex]: Chapter 05 & 06 − Made the "Locking in" and "Re−adjusting" look similar.
• August 24th, 2003 [alex]: Chapter 04 − Merged the many little files into one file. Gave packages and
patches a separate page.
• August 17th, 2003 [alex]: Chapter 05 − From Bash to Perl: put text in between commands. Added a
section on stripping unneeded symbols to decrease the size of the tools.
• August 16th, 2003 [alex]: Chapter 05 − From Make to Texinfo: put text in between commands.
• August 11th, 2003 [alex]: Chapter 05 − From Binutils Pass 1 to Findutils: several small textual
adjustments. For the second passes not giving the contents and dependencies.
• August 11th, 2003 [alex]: Chapter 04 − Listed separate core, g++, and test suite tarballs for GCC.
• August 11th, 2003 [alex]: Chapter 04 − Suppressed the mention of a wget script.
• August 9th, 2003 [alex]: Chapter 05 − Binutils Pass 2 and GCC Pass 2: integrated some text from the
pure−lfs hint.
• August 8th, 2003 [alex]: Chapter 05 − Tcl, Expect, and DejaGnu: added some text.
• August 6th, 2003 [gerard]: Applied Alex Groenewoud's patch that adds Appendix B, providing a list
of all installed programs and libraries plus references to the installation pages.
• July 30th, 2003 [gerard]: Chapter 06 − Vim: Changed the way the global vimrc and gvimrc
locations are defined.
• July 30th, 2003 [gerard]: Chapter 05 − Binutils Pass 2: removed the lib patch, it's no longer needed
with the binutils−2.14 upgrade.
• July 30th, 2003 [gerard]: Chapter 05 Binutils Pass 1: Added make configure−host.
• July 30th, 2003 [gerard]: Upgraded to binutils−2.14, linux−2.4.21, expect−5.38.4, gawk−3.1.3,
texinfo−4.6, util−linux−2.12, man−pages−1.58, lfs−utils−0.3, vim−6.2, gettext−0.12.1,
automake−1.7.6, file−4.03, e2fsprogs−1.34, procps−3.1.11, psmisc−21.3
• June 3rd, 2003 [gerard]: Chapter 06 − Gawk: removed the removal of /bin/awk. This symlink isn't
created anymore.
• May 21st, 2003 [gerard]: Chapter 06 − GCC−2.95.3: Added /opt/gcc−2.95.3/lib to the /etc/ld.so.conf
file so the libraries can be found during run−time.
• May 21st, 2003 [gerard]: Chapter 05 − Gzip: Simplified commands.
• May 21st, 2003 [gerard]: Chapter 05 − Bzip2: Simplified commands.
• May 21st, 2003 [gerard]: Chapter 06 − Shadow: Added the grpconv command to complement the
enabling of all shadowed passwords.
• May 21st, 2003 [winkie]: Chapter 06 − Creating Files: All those ln commands can be made into a
few long ln commands.
• May 21st, 2003 [winkie]: Chapter 05 − Installing Glibc: Create an ld.so.conf file before building
Glibc, to prevent an (harmless) error.
• May 21st, 2003 [winkie]: Chapter 06 − Installing Glibc: Don't bother doing the 'exec /stage1/bin/bash'
stuff, it doesn't do anything now that we use PLFS.
• May 21st, 2003 [winkie]: Chapter 05 & 06 − Installing Coreutils: Only test the non−root stuff in
Chapter 05, but test everything in Chapter 06.
• May 21st, 2003 [winkie]: Chapter 05 − Installing Expect: Don't bother passing anything more than
−−prefix=/stage1. None of it is needed.
Chapter 1. Introduction 13
Linux From Scratch
• May 16th, 2003 [gerard]: Chapter 06: Net−tools: Changed make install to make update.
• May 15th, 2003 [timothy]: Chapter 05: Installing Patch: Added CPPFLAGS=−D_GNU_SOURCE
before ./configure to fix patch build on PPC.
• May 13th, 2003 [gerard]: Chapter 06: When we exec /path/to/bash −−login, also run set
+h to keep the hashing option turned off. Fixes bug #531
• May 13th, 2003 [gerard]: Chapter 06 − Basic Network: Changed the single quotes to double quotes in
the echo command. Without it, $(hostname) won't expand which defeats the sole purpose of this
command − to make Perl's hostname check work.
• May 13th, 2003 [winkie]: Removed all occurrences &&. Updated bug syntax. Added "make
check/test" where necessary in Chapter 6.
• May 13th, 2003 [winkie]: Chapter 06: Applied "Changing ownership" patch to polish the text. Closes
bug #511.
• May 13th, 2003 [winkie]: Chapter 06: Applied "Configuring system components" patch to polish the
text. Closes bug #510.
• May 13th, 2003 [gerard]: Chapter 06: Removed Tcl, Expect and DejaGnu. Nothing uses this once past
GCC in chapter 6. The versions in /stage1/bin do the job just fine.
• May 13th, 2003 [winkie]: Chapter 06 − Installing Shadow: Touching the /usr/bin/passwd file before
installation. Not doing so results in Shadow thinking passwd will be in /bin/passwd.
• May 13th, 2003 [winkie]: Chapter 06 − Installing Procps: Remove the /lib/libproc.so symlink. No
package outside of Procps itself uses this library, and none should.
• May 13th, 2003 [winkie]: Chapter 06 − Installing Net−tools: Run "make config" before doing make.
Fixes bugs #462 and #497.
• May 13th, 2003 [gerard]: Chapter 06 − Ncurses: Added the vsscanf patch.
• May 12th, 2003 [gerard]: Chapter 05 − Gzip: Removed make check. It doesn't do anything.
• May 12th, 2003 [winkie]: Chapter 05 − Installing Texinfo: Don't install the texmf data. It's not used
by anything.
• May 12th, 2003 [winkie]: Chapter 05 & 06 − Installing Ncurses: In Chapter 6, symlink creation has
been updated to include libcurses.*, and libncurses++.a has its properties changed to 644. Chapter 5
doesn't need any libcurses.* so those are removed.
• May 12th, 2003 [gerard]: Chapter 06 − Basic Network: Added $(hostname) to /etc/hosts, without it
Perl's hostname test doesn't pass.
• May 12th, 2003 [gerard]: Chapter 06 − Installing GCC: Don't try to remove /usr/include/libiberty.h. It
isn't installed in the first place.
• May 12th, 2003 [winkie]: Upgraded to findutils−4.1.7, gzip−1.3.5, and tar−1.13.25.
• May 12th, 2003 [winkie]: Chapter 05 − Installing Perl: Added extra commands to build certain
modules into Perl. This is to accommodate the Coreutils "make check". Partially fixes bug #528.
• May 12th, 2003 [winkie]: Chapter 05 − Installing Gzip: Nothing in Chapter 6 checks for or uses the
uncompress command, therefore we shouldn't create it.
• May 12th, 2003 [winkie]: Chapter 05 − Installing Bzip2: Running "make" implies "make check",
therefore there is no reason whatsoever for us to run it manually.
• May 12th, 2003 [winkie]: Chapter 05 − Installing Lfs−Utils: Removed. The only package that checks
for mktemp before it is installed is GCC, and that's only for gccbug.
• May 11th, 2003 [gerard]: Chapter 06 − GCC−2.95.3: Added −−enable−threads=posix as well to
complete the C++ addition.
• May 11th, 2003 [gerard]: Chapter 06 − GCC−2.95.3: Added −−enable−languages=c,c++ to fix that
GCC's version bug with regards to −Wreturn−type. Fixes bug #525
• May 11th, 2003 [gerard]: Chapter 05 − Bash: Removed the −−without−bash−malloc configure option.
• May 11th, 2003 [gerard]: Updated to gcc−3.2.3−specs−4.patch.
• May 11th, 2003 [winkie]: Chapter 06 − Setting up Basic Networking: Added section. Create a basic
/etc/hosts files, and create /etc/services and /etc/protocols from IANA. Fixes bugs #359 & #515.
Chapter 1. Introduction 14
Linux From Scratch
• May 11th, 2003 [winkie]: Upgrading to lfs−utils−0.2.2. This adds two files needed for proper
networking configuration.
• May 11th, 2003 [winkie]: Removed Netkit−base 0.17. Added Inetutils 1.4.2. Fixes bug #490.
• May 11th, 2003 [winkie]: Added lfs−utils−0.2.1. Fixes bug #493.
• May 11th, 2003 [winkie]: Chapter 06 − Installing Ncurses: Fix up the symlinks so that they follow
suit of other library symlinks. No more weirdness here.
• May 11th, 2003 [winkie]: Chapter 06 − Installing Procps: Removed XSCPT="" cruft and its
corresponding paragraph. This stuff isn't needed anymore.
• May 11th, 2003 [winkie]: Chapter 06 − Installing Ncurses: Pass −−without−debug to the configure
script. It seems to have gotten lost at some point.
• May 11th, 2003 [timothy]: Chapter 5 & 6 − Installing Bzip2, Installing Zlib: Modified build
commands per bug #524.
• May 11th, 2003 [winkie]: Chapter 06 − Installing Glibc: Install the linuxthreads man pages, too. This
got lost somewhere.
• May 11th, 2003 [winkie]: Chapter 06 − Installing Grep: Added −−with−included−regex to prevent
Grep from using Glibc's somewhat bugged regex.
• May 11th, 2003 [winkie]: Chapter 06 − Installing Coreutils: Fix some functionality of the uname
command with a patch.
• May 11th, 2003 [winkie]: Chapter 06 − Installing Net−tools: Just do regular old "make install" instead
of "make update". The latter works fine now.
• May 11th, 2003 [winkie]: Chapter 06 − Installing GCC: After installation, remove
/usr/include/libiberty.h. It is not used outside of the GCC build tree.
• May 11th, 2003 [winkie]: Upgraded to Bash 2.05b and added its patch.
• May 11th, 2003 [winkie]: Chapter 06 − Installing Zlib: Apply a patch to fix the buffer overflow in
gzprintf().
• May 11th, 2003 [winkie]: Chapter 06 − Configuring system components: Moved the creation of the
btmp, wtmp, lastlog and utmp to just before Shadow, so that they are detected at their proper
locations.
• May 10th, 2003 [winkie]: Chapter 06 − Installing Automake: Run "make" before installing. This is
needed now with the newer releases of Automake.
• May 10th, 2003 [winkie]: Chapter 06 − Installing Vim: Removed the patch. It hasn't been required
since GCC 3.2.1.
• May 10th, 2003 [winkie]: Chapter 06 − Creating the mtab file: Removed. Mounting /proc has the side
effect of creating /etc/mtab for us.
• May 10th, 2003 [winkie]: Chapter 06 − Installing Make: Removed modification of /usr/bin/make file.
It is no longer mistakenly installed with strange ownership or permissions.
• May 10th, 2003 [winkie]: Chapter 06 − Installing Glibc: Made /etc/localtime a file instead of a
symlink. The symlink method breaks on systems where /usr is a separate partition.
• May 10th, 2003 [winkie]: Chapter 06 − Installing E2fsprogs: Removed install−info commands for
e2fsprogs. The "make install" target handles this for us.
• May 10th, 2003 [gerard]: Removed all CFLAGS and LDFLAGS variables where they are not
essential (so, not including static binutils, GCC and compiling Zlib with −fPIC).
• May 10th, 2003 [gerard]: Chapter 05 − Binutils (pass1, pass2), locking in Glibc and adjusting
toolchain: Changed tooldir to /stage1 (likewise we use tooldir=/usr in Chapter 6).
• May 10th, 2003 [gerard]: Chapter 05 − Kernel headers: Removed the usage of cp −H because there
are distributions out there that do not know about the −H option.
• May 10th, 2003 [gerard]: New gcc−3.2.3−specs−3.patch.
• May 10th, 2003 [gerard]: Chapter 06 − Adjusting toolchain: Made it more architecture−independent.
• May 10th, 2003 [gerard]: Chapter 05 − Locking in Glibc: Made it more architecture−independent.
• May 7th, 2003 [gerard]: Removed GCC No Debug patches. No longer assume gcc−core and gcc−g++
packages are downloaded, so added appropriate −−enable−languages options.
Chapter 1. Introduction 15
Linux From Scratch
• May 7th, 2003 [gerard]: Removed Chapter 6 − Glibc−Pass2. It's not needed anymore with the
pure−lfs integration.
• May 7th, 2003 [gerard]: Downgraded to flex−2.5.4a again. Newer versions just don't work properly.
• May 5th, 2003 [gerard]: Removed zlib installation from chapter 5 (its inclusion was a mistake).
• May 5th, 2003 [gerard]: Various bug fixes that were introduced during the pure−lfs integration.
• May 2nd, 2003 [gerard]: Upgraded to: automake−1.7.4, e2fsprogs−1.33, file−4.02, flex−2.5.31,
gawk−3.1.2, gcc−3.2.3, glibc−2.3.2, grep−2.5.1, groff−1.19, less−381, libtool−1.5, man−1.5l,
man−pages−1.56, modutils−2.4.25, procps−3.1.8, sed−4.0.7, sysvinit−2.85, texinfo−4.5,
util−linux−2.11z
• May 2nd, 2003 [gerard]: Removed fileutils−4.1, sh−utils−2.0, textutils−2.1 (all replaced with
coreutils−5.0).
• May 2nd, 2003 [gerard]: Added binutils−2.13.2−libc.patch, coreutils−5.0, dejagnu−1.4.3,
expect−5.38, gawk−3.1.2, gcc−2.95.3, tcl−8.4.2
• May 2nd, 2003 [gerard] − Integrated new installation method from the Pure LFS hint written by Greg
Schafer and Ryan Oliver.
1.5. Resources
1.5.1. FAQ
If during the building of your LFS system you encounter any errors, or have any questions, or think you found
a typo in the book, then please first consult the FAQ (Frequently Asked Questions) at
http://www.linuxfromscratch.org/faq/.
1.5.2. IRC
Several members of the LFS community offer assistance on our community IRC server. Before you utilize
this mode of support, we ask that you've at least checked the LFS FAQ and the mailing list archives for the
answer to your question. You can find the IRC server at irc.linuxfromscratch.org port 6667. The support
channel is named #LFS−support.
For information on which lists are available, how to subscribe to them, their archive locations, and so on, visit
http://www.linuxfromscratch.org/mail.html.
Chapter 1. Introduction 16
Linux From Scratch
But if you need to reach Gerard Beekmans personally, send an email to [email protected].
1.6. Acknowledgments
We would like to thank the following people and organizations for their contributions to the Linux From
Scratch Project.
Chapter 1. Introduction 17
Linux From Scratch
1.6.2. Translators
• Manuel Canales Esparcia <macana@lfs−es.org> −− Spanish LFS translation project.
• Johan Lenglet <[email protected]> −− French LFS translation project.
• Anderson Lizardo <[email protected]> −− Portuguese LFS translation project.
1.6.4. Donators
• Dean Benson <[email protected]> for several monetary contributions.
• DREAMWVR.COM for their past sponsorship of donating various resources to the LFS and related
sub projects.
• Hagen Herrschaft <[email protected]> for donating a 2.2 GHz P4 system, now running under the name
of lorien.
• O'Reilly for donating books on SQL and PHP.
• VA Software who, on behalf of Linux.com, donated a VA Linux 420 (former StartX SP2)
workstation.
• Mark Stone for donating shadowfax, the first linuxfromscratch.org server, a 750 MHz P3 with 512
MB RAM and two 9 GB SCSI drives. When the server moved it was renamed to belgarath.
Chapter 1. Introduction 18
Linux From Scratch
Chapter 1. Introduction 19
Chapter 2. Important information
2.1. About $LFS
Please read the following paragraphs carefully. Throughout this book the variable LFS will be used
frequently. $LFS must at all times be replaced with the directory where the partition that contains the LFS
system is mounted. How to create and where to mount the partition will be explained in full detail in Chapter
3. For the moment let's assume that the LFS partition is mounted on /mnt/lfs.
When you are told to run a command like ./configure −−prefix=$LFS/tools, you actually have to
execute ./configure −−prefix=/mnt/lfs/tools.
It's important that this is done no matter where it is read; be it in commands entered in a shell, or in a file
edited or created.
A possible solution is to set the environment variable LFS. This way $LFS can be entered literally instead of
replacing it with /mnt/lfs. This is accomplished by running:
export LFS=/mnt/lfs
Now, if you are told to run a command such as ./configure −−prefix=$LFS/tools, then you may
type it literally. Your shell will replace "$LFS" with "/mnt/lfs" when it processes the command line (that is,
when you hit Enter after having typed the command).
It works like this: the first package you compile in this book is the statically linked Binutils in Chapter 5, and
the time it takes to compile this package is what we call the "Static Binutils Unit" or "SBU". All other compile
times will be expressed relative to this time.
For example, the time it takes to build the static version of GCC is 4.4 SBUs. This means that if on your
system it took 10 minutes to compile and install the static Binutils, then you know it will take approximately
45 minutes to build the static GCC. Fortunately, most build times are much shorter than the one of Binutils.
Note that if the system compiler on your host is GCC−2 based, the SBUs listed may end up being somewhat
understated. This is because the SBU is based on the very first package, compiled with the old GCC, while the
rest of the system is compiled with the newer GCC−3.3.1 which is known to be approximately 30% slower.
Also note that SBUs don't work well for SMP−based machines. But if you're so lucky as to have multiple
processors, chances are that your system is so fast that you won't mind.
Some test suites are more important than others. For example, the test suites for the core toolchain packages
−− GCC, Binutils, and Glibc (the C library) −− are of the utmost importance due to their central role in a
properly functioning system. But be warned, the test suites for GCC and Glibc can take a very long period of
time to complete, especially on slower hardware.
As you progress through the book and encounter the build commands to run the various test suites, we'll guide
you on the relative importance of the test suite in question so that you can decide for yourself whether to run it
or not.
A common problem when running the test suites for Binutils and GCC is running out of pseudo
terminals (PTYs for short). The symptom is an unusually high number of failing tests. This can happen
for any number of reasons. Most likely is that the host system doesn't have the devpts file system set up
correctly. We'll discuss this in more detail later on in Chapter 5.
(Note that saying that you've deviated from the book doesn't mean that we won't help you. After all, LFS is
about choice. It'll just help us to see other possible causes of your problem.)
gcc −DALIASPATH=\"/mnt/lfs/usr/share/locale:.\"
−DLOCALEDIR=\"/mnt/lfs/usr/share/locale\" −DLIBDIR=\"/mnt/lfs/usr/lib\"
−DINCLUDEDIR=\"/mnt/lfs/usr/include\" −DHAVE_CONFIG_H −I. −I.
−g −O2 −c getopt1.c
gcc −g −O2 −static −o make ar.o arscan.o commands.o dir.o expand.o file.o
function.o getopt.o implicit.o job.o main.o misc.o read.o remake.o rule.o
signame.o variable.o vpath.o default.o remote−stub.o version.o opt1.o
−lutil job.o: In function `load_too_high':
/lfs/tmp/make−3.79.1/job.c:1565: undefined reference to `getloadavg'
collect2: ld returned 1 exit status
make[2]: *** [make] Error 1
make[2]: Leaving directory `/lfs/tmp/make−3.79.1'
make[1]: *** [all−recursive] Error 1
make[1]: Leaving directory `/lfs/tmp/make−3.79.1'
make: *** [all−recursive−am] Error 2
In this case, many people just include the bottom section where it says:
and onwards. This isn't enough for us to diagnose the problem because it only tells us that something went
wrong, not what went wrong. The whole section, as in the example above, is what should be included to be
helpful, because it includes the command that was executed and the command's error message(s).
An excellent article on asking for help on the Internet in general has been written by Eric S. Raymond. It is
available online at http://catb.org/~esr/faqs/smart−questions.html. Read and follow the hints in that document
and you are much more likely to get a response to start with and also to get the help you actually need.
For a minimal system you will need a partition of around 1.2 GB. This is enough to store all the source
tarballs and compile all the packages. But if you intend to use the LFS system as your primary Linux system,
you will probably want to install additional software, and will need more space than this, probably around 2 or
3 GB.
As we almost never have enough RAM in our box, it is a good idea to use a small disk partition as swap space
−− this space is used by the kernel to store seldom−used data to make room in memory for more urgent stuff.
The swap partition for your LFS system can be the same one as for your host system, so you won't have to
create another if your host system already uses a swap partition.
Start a disk partitioning program such as cfdisk or fdisk with an argument naming the hard disk upon
which the new partition must be created −− for example /dev/hda for the primary IDE disk. Create a Linux
native partition and a swap partition, if needed. Please refer to the man pages of cfdisk or fdisk if you
don't yet know how to use the programs.
Remember the designation of your new partition −− something like hda5. This book will refer to it as the
LFS partition. If you (now) also have a swap partition, remember its designation too. These names will later
be needed for the /etc/fstab file.
To create an ext2 file system on the LFS partition run the following:
mke2fs /dev/xxx
Replace xxx with the name of the LFS partition (something like hda5).
If you created a (new) swap partition you need to initialize it as a swap partition too (also known as
formatting, like you did above with mke2fs) by running:
mkswap /dev/yyy
Choose a mount point and assign it to the LFS environment variable by running:
export LFS=/mnt/lfs
Now create the mount point and mount the LFS file system by running:
mkdir −p $LFS
mount /dev/xxx $LFS
If you have decided to use multiple partitions for LFS (say one for / and another for /usr), mount them like
this:
mkdir −p $LFS
mount /dev/xxx $LFS
mkdir $LFS/usr
mount /dev/yyy $LFS/usr
Of course, replace xxx and yyy with the appropriate partition names.
You should also ensure that this new partition is not mounted with permissions that are too restrictive (such as
the nosuid, nodev or noatime options). You can run the mount command without any parameters to see with
what options the LFS partition is mounted. If you see nosuid, nodev or noatime, you will need to remount it.
Now that we've made ourselves a place to work in, we're ready to download the packages.
All the URLs, when possible, refer to the project's page at http://www.freshmeat.net/. The Freshmeat pages
will give you easy access to the official download sites as well as project websites, mailing lists, FAQs,
changelogs and more.
We can't guarantee that these download locations are always available. In case a download location has
changed since this book was published, please try to google for the package. Should you remain unsuccessful
with this, you can consult the book's errata page at http://linuxfromscratch.org/lfs/print/ or, better yet, try one
of the alternative means of downloading listed on http://linuxfromscratch.org/lfs/packages.html.
You'll need to store all the downloaded packages and patches somewhere that is conveniently available
throughout the entire build. You'll also need a working directory in which to unpack the sources and build
them. A scheme that works well is to use $LFS/sources as the place to store the tarballs and patches, and
as a working directory. This way everything you need will be located on the LFS partition and available
during all stages of the building process.
So you may want to execute, as root, the following command before starting your download session:
mkdir $LFS/sources
And make this directory writable (and sticky) for your normal user −− as you won't do the downloading as
root, we guess:
File (4.04) may not be available by the time you read this. The master download location is known to
remove old versions when new ones are released. Please refer to the corresponding section in Appendix
A for an alternate download location.
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc−3.3.1−suppress−libiberty.patch
The building of this minimal system is done in two steps: first we build a brand−new and host−independent
toolchain (compiler, assembler, linker and libraries), and then use this to build all the other essential tools.
The files compiled in this chapter will be installed under the $LFS/tools directory to keep them separate
from the files installed in the next chapter. Since the packages compiled here are merely temporary, we don't
want them to pollute the soon−to−be LFS system.
The key to learning what makes a Linux system work is to know what each package is used for and why the
user or the system needs it. For this purpose a short summary of the content of each package is given before
the actual installation instructions. For a short description of each program in a package, please refer to the
corresponding section in Appendix A.
The build instructions assume that you are using the bash shell. There is also a general expectation that you
have already unpacked the sources for a package and have performed a cd into the unpacked source directory
before issuing the build commands.
Several of the packages are patched before compilation, but only when the patch is needed to circumvent a
problem. Often the patch is needed in both this and the next chapter, but sometimes in only one of them.
Therefore, don't worry when instructions for a downloaded patch seem to be missing.
During the installation of most packages you will see all kinds of compiler warnings scroll by on your screen.
These are normal and can be safely ignored. They are just what they say they are: warnings −− mostly about
deprecated, but not invalid, use of the C or C++ syntax. It's just that C standards have changed rather often
and some packages still use the older standard, which is not really a problem.
Unless told not to, you should normally delete the source and build directories after installing each package
−− for cleanness sake and to save space.
Before continuing, make sure the LFS environment variable is set up properly by executing the following:
echo $LFS
Make sure the output shows the path to your LFS partition's mount point, which is /mnt/lfs if you
followed our example.
The overall goal of Chapter 5 is to provide a sane, temporary environment that we can chroot into, and from
which we can produce a clean, trouble−free build of the target LFS system in Chapter 6. Along the way, we
attempt to divorce ourselves from the host system as much as possible, and in so doing build a self−contained
and self−hosted toolchain. It should be noted that the build process has been designed in such a way so as to
minimize the risks for new readers and provide maximum educational value at the same time. In other words,
more advanced techniques could be used to build the system.
Before continuing, you really should be aware of the name of your working platform, often also referred
to as the target triplet. For many folks the target triplet will be, for example: i686−pc−linux−gnu. A
simple way to determine your target triplet is to run the config.guess script that comes with the
source for many packages. Unpack the Binutils sources and run the script: ./config.guess and note
the output.
You'll also need to be aware of the name of your platform's dynamic linker, often also referred to as the
dynamic loader, not to be confused with the standard linker ld that is part of Binutils. The dynamic
linker is provided by Glibc and has the job of finding and loading the shared libraries needed by a
program, preparing the program to run and then running it. For most folks, the name of the dynamic
linker will be ld−linux.so.2. On platforms that are less prevalent, the name might be ld.so.1 and newer
64 bit platforms might even have something completely different. You should be able to determine the
name of your platform's dynamic linker by looking in the /lib directory on your host system. A
surefire way is to inspect a random binary from your host system by running: 'readelf −l <name
of binary> | grep interpreter' and noting the output. The authoritative reference covering
all platforms is in the shlib−versions file in the root of the Glibc source tree.
Some key technical points of how the Chapter 5 build method works:
• Similar in principle to cross compiling whereby tools installed into the same prefix work in
cooperation and thus utilize a little GNU "magic".
• Careful manipulation of the standard linker's library search path to ensure programs are linked only
against libraries we choose.
• Careful manipulation of gcc's specs file to tell the compiler which target dynamic linker will be used.
Binutils is installed first because both GCC and Glibc perform various feature tests on the assembler and
linker during their respective runs of ./configure to determine which software features to enable or
disable. This is more important than one might first realize. An incorrectly configured GCC or Glibc can
result in a subtly broken toolchain where the impact of such breakage might not show up until near the end of
the build of a whole distribution. Thankfully, a test suite failure will usually alert us before too much time is
wasted.
Binutils installs its assembler and linker into two locations, /tools/bin and
/tools/$TARGET_TRIPLET/bin. In reality, the tools in one location are hard linked to the other. An
important facet of the linker is its library search order. Detailed information can be obtained from ld by
passing it the −−verbose flag. For example: 'ld −−verbose | grep SEARCH' will show you the
current search paths and their order. You can see what files are actually linked by ld by compiling a dummy
program and passing the −−verbose switch. For example: 'gcc dummy.c −Wl,−−verbose 2>&1 |
grep succeeded' will show you all the files successfully opened during the link.
The next package installed is GCC and during its run of ./configure you'll see, for example:
This is important for the reasons mentioned above. It also demonstrates that GCC's configure script does not
search the $PATH directories to find which tools to use. However, during the actual operation of gcc itself,
the same search paths are not necessarily used. You can find out which standard linker gcc will use by
running: 'gcc −print−prog−name=ld'. Detailed information can be obtained from gcc by passing it
the −v flag while compiling a dummy program. For example: 'gcc −v dummy.c' will show you detailed
information about the preprocessor, compilation and assembly stages, including gcc's include search paths
and their order.
The next package installed is Glibc. The most important considerations for building Glibc are the compiler,
binary tools and kernel headers. The compiler is generally no problem as Glibc will always use the gcc found
in a $PATH directory. The binary tools and kernel headers can be a little more troublesome. Therefore we
take no risks and use the available configure switches to enforce the correct selections. After the run of
./configure you can check the contents of the config.make file in the glibc−build directory for
all the important details. You'll note some interesting items like the use of CC="gcc −B/tools/bin/" to
control which binary tools are used, and also the use of the −nostdinc and −isystem flags to control the
compiler's include search path. These items help to highlight an important aspect of the Glibc package: it is
very self−sufficient in terms of its build machinery and generally does not rely on toolchain defaults.
After the Glibc installation, we make some adjustments to ensure that searching and linking take place only
within our /tools prefix. We install an adjusted ld, which has a hard−wired search path limited to
/tools/lib. Then we amend gcc's specs file to point to our new dynamic linker in /tools/lib. This
last step is vital to the whole process. As mentioned above, a hard−wired path to a dynamic linker is
embedded into every ELF shared executable. You can inspect this by running: 'readelf −l <name of
binary> | grep interpreter'. By amending gcc's specs file, we are ensuring that every program
compiled from here through the end of Chapter 5 will use our new dynamic linker in /tools/lib.
The need to use the new dynamic linker is also the reason why we apply the Specs patch for the second pass
of GCC. Failure to do so will result in the GCC programs themselves having the name of the dynamic linker
from the host system's /lib directory embedded into them, which would defeat our goal of getting away
from the host.
During the second pass of Binutils, we are able to utilize the −−with−lib−path configure switch to control
ld's library search path. From this point onwards, the core toolchain is self−contained and self−hosted. The
remainder of the Chapter 5 packages all build against the new Glibc in /tools and all is well.
Upon entering the chroot environment in Chapter 6, the first major package we install is Glibc, due to its
self−sufficient nature that we mentioned above. Once this Glibc is installed into /usr, we perform a quick
changeover of the toolchain defaults, then proceed for real in building the rest of the target Chapter 6 LFS
system.
There are two primary ways of linking the functions from a library to a program that uses them: statically or
dynamically. When a program is linked statically, the code of the used functions is included in the executable,
resulting in a rather bulky program. When a program is dynamically linked, what is included is a reference to
the dynamic linker, the name of the library, and the name of the function, resulting in a much smaller
executable. (A third way is to use the programming interface of the dynamic linker. See the dlopen man page
for more information.)
Dynamic linking is the default on Linux and has three major advantages over static linking. First, you need
only one copy of the executable library code on your hard disk, instead of having many copies of the same
code included into a whole bunch of programs −− thus saving disk space. Second, when several programs use
the same library function at the same time, only one copy of the function's code is required in core −− thus
saving memory space. Third, when a library function gets a bug fixed or is otherwise improved, you only need
to recompile this one library, instead of having to recompile all the programs that make use of the improved
function.
If dynamic linking has several advantages, why then do we statically link the first two packages in this
chapter? The reasons are threefold: historical, educational, and technical. Historical, because earlier versions
of LFS statically linked every program in this chapter. Educational, because knowing the difference is useful.
Technical, because we gain an element of independence from the host in doing so, meaning that those
programs can be used independently of the host system. However, it's worth noting that an overall successful
LFS build can still be achieved when the first two packages are built dynamically.
If later you wish to search through the binaries of your system to see what files they make use of or link
against, then to make this searching easier you may want to choose a unique name. Instead of the simple
"tools" you could use something like "tools−for−lfs".
mkdir $LFS/tools
The next step is to create a /tools symlink on your host system. It will point to the directory we just created
on the LFS partition:
ln −s $LFS/tools /
This symlink enables us to compile our toolchain so that it always refers to /tools, meaning that the
compiler, assembler and linker will work both in this chapter (when we are still using some tools from the
host) and in the next (when we are chrooted to the LFS partition).
Study the above command closely. It can be confusing at first glance. The ln command has several
syntax variations, so be sure to check the ln man page before reporting what you may think is an error.
Now grant this new user lfs full access to $LFS/tools by giving it ownership of the directory:
If you made a separate working directory as suggested, give user lfs ownership of this directory too:
Next, login as user lfs. This can be done via a virtual console, through a display manager, or with the
following substitute user command:
su − lfs
source ~/.bash_profile
The set +h command turns off bash's hash function. Normally hashing is a useful feature: bash uses a
hash table to remember the full pathnames of executable files to avoid searching the PATH time and time
again to find the same executable. However, we'd like the new tools to be used as soon as they are installed.
By switching off the hash function, our "interactive" commands (make, patch, sed, cp and so forth) will
always use the newest available version during the build process.
Setting the user file−creation mask to 022 ensures that newly created files and directories are only writable for
their owner, but readable and executable for anyone.
The LFS variable should of course be set to the mount point you chose.
The LC_ALL variable controls the localization of certain programs, making their messages follow the
conventions of a specified country. If your host system uses a version of Glibc older than 2.2.4, having
LC_ALL set to something other than "POSIX" or "C" during this chapter may cause trouble if you exit the
chroot environment and wish to return later. By setting LC_ALL to "POSIX" (or "C", the two are equivalent)
we ensure that everything will work as expected in the chroot environment.
We prepend /tools/bin to the standard PATH so that, as we move along through this chapter, the tools we
build will get used during the rest of the building process.
The CC, CXX, CPP, LD_LIBRARY_PATH and LD_PRELOAD environment variables all have the potential
to cause havoc with our Chapter 5 toolchain. We therefore unset them to prevent any chance of this
happening.
Now, after sourcing the just−created profile, we're all set to begin building the temporary tools that will
support us in later chapters.
Installed programs: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings
and strip
5.6.2.
5.6.4.
Even though Binutils is an important toolchain package, we are not going to run the test suite at this
early stage. First, the test suite framework is not yet in place and second, the programs from this first
pass will soon be overwritten by those installed in the second pass.
This package is known to behave badly when you have changed its default optimization flags (including the
−march and −mcpu options). Therefore, if you have defined any environment variables that override default
optimizations, such as CFLAGS and CXXFLAGS, we recommend unsetting or modifying them when
building Binutils.
The Binutils documentation recommends building Binutils outside of the source directory in a dedicated build
directory:
mkdir ../binutils−build
cd ../binutils−build
If you want the SBU values listed in the rest of the book to be of any use, you will have to measure the
time it takes to build this package. To achieve this easily, you could do something like: time {
./configure ... && ... && ... && make install; }.
../binutils−2.14/configure \
−−prefix=/tools −−disable−nls
• −−prefix=/tools: This tells the configure script to prepare to install the Binutils programs in the
/tools directory.
• −−disable−nls: This disables internationalization (a word often shortened to i18n). We don't
need this for our static programs and nls often causes problems when linking statically.
make configure−host
make LDFLAGS="−all−static"
make install
Now prepare the linker for the "locking in" of Glibc later on:
make −C ld clean
make −C ld LDFLAGS="−all−static" LIB_PATH=/tools/lib
• −C ld clean: This tells the make program to remove all the compiled files, but only in the ld
subdirectory.
• −C ld LDFLAGS="−all−static" LIB_PATH=/tools/lib: This option rebuilds
everything in the ld subdirectory. Specifying the LIB_PATH makefile variable on the command line
allows us to override the default value and have it point to our temporary tools location. The value of
this variable specifies the linker's default library search path. You'll see how this preparation is used
later on in the chapter.
Do not yet remove the Binutils build and source directories. You will need them again in their current
state a bit further on in this chapter.
Installed programs: c++, cc (link to gcc), cc1, cc1plus, collect2, cpp, g++, gcc, gccbug, and gcov
5.7.2.
5.7.4.
Even though GCC is an important toolchain package, we are not going to run the test suite at this early
stage. First, the test suite framework is not yet in place and second, the programs from this first pass will
soon be overwritten by those installed in the second pass.
This package is known to behave badly when you have changed its default optimization flags (including the
−march and −mcpu options). Therefore, if you have defined any environment variables that override default
optimizations, such as CFLAGS and CXXFLAGS, we recommend unsetting or modifying them when
building GCC.
The GCC documentation recommends building GCC outside of the source directory in a dedicated build
directory:
../gcc−3.3.1/configure −−prefix=/tools \
−−with−local−prefix=/tools \
−−disable−nls −−enable−shared \
−−enable−languages=c
make install
As a finishing touch we'll create the /tools/bin/cc symlink. Many programs and scripts run cc instead
of gcc, a thing meant to keep programs generic and therefore usable on all kinds of Unix systems. Not
everybody has the GNU C compiler installed. Simply running cc leaves the system administrator free to
decide what C compiler to install, as long as there's a symlink pointing to it:
5.8.2.
5.8.4.
make mrproper
This ensures that the kernel tree is absolutely clean. The kernel team recommends that this command be
issued prior to each kernel compilation. You shouldn't rely on the source tree being clean after untarring.
make include/linux/version.h
make symlinks
mkdir /tools/include/asm
cp include/asm/* /tools/include/asm
cp −R include/asm−generic /tools/include
cp −R include/linux /tools/include
There are a few kernel header files which make use of the autoconf.h header file. Since we do not yet
configure the kernel, we need to create this file ourselves in order to avoid compilation failures. Create an
empty autoconf.h file:
touch /tools/include/linux/autoconf.h
Installed programs: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4,
locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect,
xtrace, zdump and zic
5.9.2.
5.9.4.
We are going to run the test suite for Glibc in this chapter. However, it's worth pointing out that running
the Glibc test suite here is considered not as important as running it in Chapter 6.
This package is known to behave badly when you have changed its default optimization flags (including the
−march and −mcpu options). Therefore, if you have defined any environment variables that override default
optimizations, such as CFLAGS and CXXFLAGS, we recommend unsetting them when building Glibc.
Basically, compiling Glibc in any other way than the book suggests is putting the stability of your system at
risk.
Though it is a harmless message, the install stage of Glibc will complain about the absence of
/tools/etc/ld.so.conf. Fix this annoying little warning with:
mkdir /tools/etc
touch /tools/etc/ld.so.conf
Also, Glibc has a subtle problem when compiled with GCC 3.3.1. Apply the following patch to fix this:
The Glibc documentation recommends building Glibc outside of the source directory in a dedicated build
directory:
mkdir ../glibc−build
cd ../glibc−build
../glibc−2.3.2/configure −−prefix=/tools \
−−disable−profile −−enable−add−ons \
−−with−headers=/tools/include \
−−with−binutils=/tools/bin \
−−without−gd
• −−disable−profile: This disables the building of the libraries with profiling information. Omit
this option if you plan to do profiling.
• −−enable−add−ons: This enables any add−ons that were installed with Glibc, in our case
Linuxthreads.
• −−with−binutils=/tools/bin and −−with−headers=/tools/include: Strictly
speaking these switches are not required. But they ensure nothing can go wrong with regard to what
kernel headers and Binutils programs get used during the Glibc build.
• −−without−gd: This switch ensures that we don't build the memusagestat program, which
strangely enough insists on linking against the host's libraries (libgd, libpng, libz, and so forth).
configure: WARNING:
*** These auxiliary programs are missing or incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.
The missing or incompatible msgfmt program is generally harmless, but it's believed it can sometimes cause
problems when running the test suite.
make
The Glibc test suite is highly dependent on certain functions of your host system, in particular the kernel.
Additionally, here in this chapter some tests can be adversely affected by existing tools or environmental
issues on the host system. Of course, these won't be a problem when we run the Glibc test suite inside the
chroot environment of Chapter 6. In general, the Glibc test suite is always expected to pass. However, as
mentioned above, some failures are unavoidable in certain circumstances. Here is a list of the most common
issues we are aware of:
• The math tests sometimes fail when running on systems where the CPU is not a relatively new
genuine Intel or authentic AMD. Certain optimization settings are also known to be a factor here.
• The gettext test sometimes fails due to host system issues. The exact reasons are not yet clear.
• The atime test sometimes fails when the LFS partition is mounted with the noatime option, or due to
other file system quirks.
• The shm test might fail when the host system is running the devfs file system but doesn't have the
tmpfs file system mounted at /dev/shm due to lack of support for tmpfs in the kernel.
• When running on older and slower hardware, some tests might fail due to test timeouts being
exceeded.
In summary, don't worry too much if you see Glibc test suite failures here in this chapter. The Glibc in
Chapter 6 is the one we'll ultimately end up using so that is the one we would really like to see pass. But
please keep in mind, even in Chapter 6 some failures could still occur −− the math tests for example. When
experiencing a failure, make a note of it, then continue by reissuing the make check. The test suite should
pick up where it left off and continue on. You can circumvent this stop−start sequence by issuing a make −k
check. But if you do that, be sure to log the output so that you can later peruse the log file and examine the
total number of failures.
make install
Different countries and cultures have varying conventions for how to communicate. These conventions range
from very simple ones, such as the format for representing dates and times, to very complex ones, such as the
language spoken. The "internationalization" of GNU programs works by means of locales. We'll install the
Glibc locales now:
make localedata/install−locales
An alternative to running the previous command is to install only those locales which you need or want. This
can be achieved by using the localedef command. Information on this can be found in the INSTALL file
in the glibc−2.3.2 source. However, there are a number of locales that are essential for the tests of future
packages to pass, in particular, the libstdc++ tests from GCC. The following instructions, instead of the
install−locales target above, will install the minimum set of locales necessary for the tests to run successfully:
mkdir −p /tools/lib/locale
localedef −i de_DE −f ISO−8859−1 de_DE
localedef −i de_DE@euro −f ISO−8859−15 de_DE@euro
localedef −i en_HK −f ISO−8859−1 en_HK
localedef −i en_PH −f ISO−8859−1 en_PH
localedef −i en_US −f ISO−8859−1 en_US
localedef −i es_MX −f ISO−8859−1 es_MX
localedef −i fr_FR −f ISO−8859−1 fr_FR
First install the adjusted linker by running the following from within the binutils−build directory:
make −C ld install
The linker was adjusted a little while back, at the end of the first pass of Binutils. From this point onwards
everything will link only against the libraries in /tools/lib.
If you somehow missed the earlier warning to retain the Binutils source and build directories from the
first pass or otherwise accidentally deleted them or just don't have access to them, don't worry, all is not
lost. Just ignore the above command. The result is a small chance of subsequent programs linking
against libraries on the host. This is not ideal, however, it's not a major problem. The situation is
corrected when we install the second pass of Binutils later on.
Now that the adjusted linker is installed, you have to remove the Binutils build and source directories.
The next thing to do is to amend our GCC specs file so that it points to the new dynamic linker. A simple sed
will accomplish this:
SPECFILE=/tools/lib/gcc−lib/*/*/specs &&
sed −e 's@ /lib/ld−linux.so.2@ /tools/lib/ld−linux.so.2@g' \
$SPECFILE > tempspecfile &&
mv −f tempspecfile $SPECFILE &&
unset SPECFILE
We recommend that you cut−and−paste the above rather than try and type it all in. Or you can edit the specs
file by hand if you want to: just replace any occurrence of "/lib/ld−linux.so.2" with "/tools/lib/ld−linux.so.2".
If you are working on a platform where the name of the dynamic linker is something other than
ld−linux.so.2, you must substitute ld−linux.so.2 with the name of your platform's dynamic
linker in the above commands. Refer back to Section 5.2 if necessary.
Lastly, there is a possibility that some include files from the host system have found their way into GCC's
private include dir. This can happen because of GCC's "fixincludes" process which runs as part of the GCC
build. We'll explain more about this further on in this chapter. For now, run the following commands to
eliminate this possibility:
rm −f /tools/lib/gcc−lib/*/*/include/{pthread.h,bits/sigthread.h}
It is imperative at this point to stop and ensure that the basic functions (compiling and linking) of the
new toolchain are working as expected. For this we are going to perform a simple sanity check:
If everything is working correctly, there should be no errors, and the output of the last command will be:
If you did not receive the output as shown above, or received no output at all, then something is
seriously wrong. You will need to investigate and retrace your steps to find out where the problem is and
correct it. There is no point in continuing until this is done. Most likely something went wrong with the
specs file amendment above. Note especially that /tools/lib appears as the prefix of our dynamic
linker. Of course, if you are working on a platform where the name of the dynamic linker is something
other than ld−linux.so.2, then the output will be slightly different.
Once you are satisfied that all is well, clean up the test files:
rm dummy.c a.out
This completes the installation of the self−contained toolchain, and it can now be used to build the rest of the
temporary tools.
5.11.2.
5.11.4.
cd unix
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
However, the Tcl test suite in this chapter is known to experience failures under certain host conditions that
are not fully understood. Therefore, test suite failures here are not surprising, but are not considered critical.
Should you choose to run the test suite, the following command will do so:
• TZ=UTC: This sets the time zone to Coordinated Universal Time (UTC) also known as Greenwich
Mean Time (GMT), but only for the duration of the test suite run. This ensures the clock tests are
exercised correctly. More information on the TZ environment variable is available later on in Chapter
7.
Sometimes, package test suites will give false failures. You can consult the LFS Wiki at
http://wiki.linuxfromscratch.org/ to verify that these failures are normal. This applies to all tests throughout
the book.
make install
Do not remove the tcl8.4.4 source directory yet, as the next package will need its internal headers.
ln −s tclsh8.4 /tools/bin/tclsh
5.12.2.
5.12.4.
This fixes a bug in Expect that can result in bogus failures during the GCC test suite run.
• −−with−tcl=/tools/lib: This ensures that the configure script finds the Tcl installation in our
temporary tools location. We don't want it to find an existing one that may possibly reside on the host
system.
• −−with−x=no: This tells the configure script not to search for Tk (the Tcl GUI component) or the X
Window System libraries, both of which may possibly reside on the host system.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
However, the Expect test suite here in Chapter 5 is known to experience failures under certain host conditions
that are not fully understood. Therefore, test suite failures here are not surprising, but are not considered
critical. Should you choose to run the test suite, the following command will do so:
make test
And install:
• SCRIPTS="": This prevents installation of the supplementary expect scripts which are not needed.
You can now remove the source directories of both Tcl and Expect.
5.13.2.
5.13.4.
./configure −−prefix=/tools
make install
5.14.1.
The system has no more ptys. Ask your system administrator to create more.
Your host distribution is not set up for proper PTY operation. In this case there is no point in running the test
suites for GCC and Binutils until you are able to resolve the issue. You can consult the LFS Wiki at
http://wiki.linuxfromscratch.org/ for more information on how to get PTYs working.
Unpack all three GCC tarballs (−core, −g++, and −testsuite) in one and the same working directory. They will
all unfold into a single gcc−3.3.1/ subdirectory.
The first patch disables the GCC "fixincludes" script. We mentioned this briefly earlier, but a slightly more
in−depth explanation of the fixincludes process is warranted here. Under normal circumstances, the GCC
fixincludes script scans your system for header files that need to be fixed. It might find that some Glibc header
files on your host system need to be fixed, fix them and put them in the GCC private include directory. Then,
later on in Chapter 6, after we've installed the newer Glibc, this private include directory would be searched
before the system include directory, resulting in GCC finding the fixed headers from the host system, which
would most likely not match the Glibc version actually used for the LFS system.
The last patch changes GCC's default location of the dynamic linker (typically ld−linux.so.2). It also
removes /usr/include from GCC's include search path. Patching now rather than adjusting the specs file
after installation ensures that our new dynamic linker gets used during the actual build of GCC. That is, all the
final (and temporary) binaries created during the build will link against the new Glibc.
These patches are critical in ensuring a successful overall build. Do not forget to apply them.
mkdir ../gcc−build
cd ../gcc−build
Before starting to build GCC, remember to unset any environment variables that override the default
optimization flags.
../gcc−3.3.1/configure −−prefix=/tools \
−−with−local−prefix=/tools \
−−enable−clocale=gnu −−enable−shared \
−−enable−threads=posix −−enable−__cxa_atexit \
−−enable−languages=c,c++
make
There is no need to use the bootstrap target now, as the compiler we're using to compile this GCC was
built from the exact same version of the GCC sources we used earlier.
It's worth pointing out that running the GCC test suite here is considered not as important as running it in
Chapter 6.
make −k check
The −k flag is used to make the test suite run through to completion and not stop at the first failure. The GCC
test suite is very comprehensive and is almost guaranteed to generate a few failures. To get a summary of the
test suite results, run this:
../gcc−3.3.1/contrib/test_summary | more
You can compare your results to those posted to the gcc−testresults mailing list for similar configurations to
your own. For an example of how current GCC−3.3.1 should look on i686−pc−linux−gnu, see
http://gcc.gnu.org/ml/gcc−testresults/2003−08/msg01612.html.
The unexpected pass for g++ is due to the use of −−enable−__cxa_atexit. Apparently not all platforms
supported by GCC have support for "__cxa_atexit" in their C libraries, so this test is not always expected to
pass.
The 26 unexpected passes for libstdc++ are due to the use of −−enable−clocale=gnu, which is the
correct choice on Glibc−based systems of versions 2.2.5 and above. The underlying locale support in the
GNU C library is superior to that of the otherwise selected "generic" model (which may be applicable if for
instance you were using Newlibc, Sun−libc or whatever libc). The libstdc++ test suite is apparently expecting
the "generic" model, hence those tests are not always expected to pass.
Unexpected failures often cannot be avoided. The GCC developers are usually aware of them but haven't yet
gotten around to fixing them. In short, unless your results are vastly different from those at the above URL, it
is safe to continue on.
make install
At this point it is strongly recommended to repeat the sanity check we performed earlier in the chapter.
Refer back to Section 5.10 and repeat the check. If the results are wrong, then most likely you forgot to
apply the above mentioned GCC Specs patch.
5.15.1.
mkdir ../binutils−build
cd ../binutils−build
../binutils−2.14/configure −−prefix=/tools \
−−enable−shared −−with−lib−path=/tools/lib
• −−with−lib−path=/tools/lib: This tells the configure script to specify the default library
search path. We don't want the library search path to contain library directories from the host system.
Before starting to build Binutils, remember to unset any environment variables that override the default
optimization flags.
make
It's worth pointing out that running the Binutils test suite here is considered not as important as running it
in Chapter 6.
Test the results (there should be no unexpected failures here, expected failures are fine):
make check
Unfortunately, there is no easy way to view the test results summary like there was for the previous GCC
package. However, if a failure occurs here, it should be easy to spot. The output shown will contain something
like:
make install
Now prepare Binutils for the re−adjusting of the toolchain in the next chapter:
make −C ld clean
make −C ld LIB_PATH=/usr/lib:/lib
Do not yet remove the Binutils source and build directories. We'll need these directories again in
the next chapter in the state they are in now.
Installed programs: awk (link to gawk), gawk, gawk−3.1.3, grcat, igawk, pgawk, pgawk−3.1.3 and pwcat
5.16.2.
5.16.4.
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
Installed programs: basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df,
dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id,
install, join, kill, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste,
pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat,
stty, su, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, uptime, users,
vdir, wc, who, whoami and yes
5.17.2.
5.17.4.
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
• RUN_EXPENSIVE_TESTS=yes: This tells the test suite to run several additional tests that are
considered relatively expensive on some platforms. However, they are generally not a problem on
Linux.
make install
Installed programs: bunzip2 (link to bzip2), bzcat (link to bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep,
bzip2, bzip2recover, bzless and bzmore
Installed libraries: libbz2.a, libbz2.so (link to libbz2.so.1.0), libbz2.so.1.0 (link to libbz2.so.1.0.2) and
libbz2.so.1.0.2
5.18.2.
5.18.4.
Installed programs: gunzip (link to gzip), gzexe, gzip, uncompress (link to gunzip), zcat (link to gzip), zcmp,
zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore and znew
5.19.2.
5.19.4.
./configure −−prefix=/tools
make
make install
5.20.2.
5.20.4.
./configure −−prefix=/tools
make
make install
Installed programs: bigram, code, find, frcode, locate, updatedb and xargs
5.21.2.
5.21.4.
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
5.22.2.
5.22.4.
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
Installed programs: egrep (link to grep), fgrep (link to grep) and grep
5.23.2.
5.23.4.
./configure −−prefix=/tools \
−−disable−perl−regexp −−with−included−regex
• −−disable−perl−regexp: This makes sure that grep does not get linked against a PCRE
library that may be present on the host, but would not be available once we enter the chroot
environment.
• −−with−included−regex: This ensures that Grep uses its internal regular expression code.
Without it, it will use the code from Glibc, which is known to be slightly buggy.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
5.24.2.
5.24.4.
./configure −−prefix=/tools
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
Installed programs: autopoint, config.charset, config.rpath, gettext, gettextize, hostname, msgattrib, msgcat,
msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt,
msguniq, ngettext, project−id, team−address, trigger, urlget, user−email and xgettext
5.25.2.
5.25.4.
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
However, the Gettext test suite here in Chapter 5 is known to experience failures under certain host conditions
−− for example, if it finds a Java compiler on the host. The Gettext test suite takes a very long time to run and
is not considered critical. Therefore, we don't recommend running it here. Should you choose to run it, the
following command will do so:
make check
make install
Installed programs: captoinfo (link to tic), clear, infocmp, infotocap (link to tic), reset (link to tset), tack, tic,
toe, tput and tset
5.26.2.
5.26.4.
The first patch corrects the etip.h header file, and the second patch prevents some compiler warnings being
issued on the use of deprecated headers.
• −−without−ada: This tells Ncurses not to build its Ada bindings, even if an Ada compiler is
installed on the host. This must be done because once we enter the chroot environment, Ada will no
longer be available.
• −−enable−overwrite: This tells Ncurses to install its header files into /tools/include
instead of /tools/include/ncurses to ensure that other packages can find the Ncurses headers
successfully.
make
make install
5.27.2.
5.27.4.
The preprocessor flag −D_GNU_SOURCE is only needed on the PowerPC platform. On other architectures
you can leave it out.
make
make install
5.28.2.
5.28.4.
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
5.29.2.
5.29.4.
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
5.30.2.
5.30.4.
./configure −−prefix=/tools
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make tests
make install
And make a link for the programs that use sh for a shell:
ln −s bash /tools/bin/sh
Installed programs: agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel,
cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm,
ipcs, isosize, kill, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap,
more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (link to rdev), raw, rdev, readprofile,
rename, renice, rev, rootflags (link to rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (link to swapon),
swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (link to rdev), whereis and write
5.31.2.
5.31.4.
cp configure configure.backup
sed "s@/usr/include@/tools/include@g" configure.backup > configure
./configure
make −C lib
And, since you'll need only a couple of the utilities contained in this package, build just those:
Installed programs: a2p, c2ph, dprofpp, enc2xs, find2perl, h2ph, h2xs, libnetcfg, perl, perl5.8.0 (link to perl),
perlbug, perlcc, perldoc, perlivp, piconv, pl2pm, pod2html, pod2latex, pod2man, pod2text, pod2usage,
podchecker, podselect, psed (link to s2p), pstruct (link to c2ph), s2p, splain and xsubpp
5.32.2.
5.32.4.
./configure.gnu −−prefix=/tools
5.33. Stripping
The steps in this section are optional. If your LFS partition is rather small, you will be glad to learn that you
can throw away some unnecessary things. The executables and libraries you have built so far contain about
130 MB of unneeded debugging symbols. Remove those symbols like this:
The first of the above commands will skip some twenty files, reporting that it doesn't recognize their file
format. Most of them are scripts instead of binaries.
Take care not to use −−strip−unneeded on the libraries −− they would be destroyed and you would have
to build Glibc all over again.
To save another couple of megabytes, you can throw away all the documentation:
rm −rf /tools/{,share/}{doc,info,man}
You will now need to have at least 850 MB of free space on your LFS filesystem to be able to build and
install Glibc in the next phase. If you can build and install Glibc, you can build and install the rest too.
The installation of all this software is pretty straightforward, and you will probably think it would be much
shorter to give here the generic installation instructions and explain in full only the installation of those
packages that require an alternate method. Although we agree with that, we nevertheless choose to give the
full instructions for each and every package, simply to minimize the possibilities for mistakes.
If you plan to use compiler optimizations in this chapter, take a look at the optimization hint at
http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt. Compiler optimizations can make a
program run slightly faster, but they may also cause compilation difficulties and even problems when running
the program. If a package refuses to compile when using optimization, try to compile it without optimization
and see if the problem goes away. Even if the package does compile when using optimization, there is the risk
it may have been compiled incorrectly due to complex interactions between the code and build tools. In short,
the small potential gains achieved in using compiler optimization are generally outweighed by the risk. First
time builders of LFS are encouraged to build without custom optimizations. Your system will still be very fast
and very stable at the same time.
The order in which packages are installed in this chapter has to be strictly followed, to ensure that no program
gets a path referring to /tools hard−wired into it. For the same reason, do not compile packages in parallel.
Compiling in parallel may save you some time (especially on dual−CPU machines), but it could result in a
program containing a hard−wired path to /tools, which will cause the program to stop working when that
directory is removed.
When debugging a program or library that was compiled with debugging information included, the debugger
can give you not only memory addresses but also the names of the routines and variables.
But the inclusion of these debugging symbols enlarges a program or library significantly. To get an idea of the
amount of space these symbols occupy, have a look at the following:
Sizes may vary a little, depending on which compiler was used and which C library. But when comparing
programs with and without debugging symbols, the difference will generally be a factor between 2 and 5.
As most people will probably never use a debugger on their system software, a lot of disk space can be
To remove debugging symbols from a binary (which must be an a.out or ELF binary), run strip
−−strip−debug filename. Wildcards can be used to treat multiple files (use something like strip
−−strip−debug $LFS/tools/bin/*).
For your convenience, Chapter 9 includes one simple command to strip all debugging symbols from all
programs and libraries on your system. Additional information on optimization can be found in the hint at
http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt.
Just like earlier, ensure the LFS environment variable is set up properly by running echo $LFS and ensuring
it shows the path to your LFS partition's mount point, which is /mnt/lfs if you followed our example.
Become root and run the following command to enter the chroot environment:
The −i option given to the env command will clear all variables of the chroot environment. After that, only
the HOME, TERM, PS1 and PATH variables are set again. The TERM=$TERM construct will set the TERM
variable inside chroot to the same value as outside chroot; this variable is needed for programs like vim and
less to operate properly. If you need other variables present, such as CFLAGS or CXXFLAGS, this is a
good place to set them again.
From this point on there's no need to use the LFS variable anymore, because everything you do will be
restricted to the LFS file system −− since what the shell thinks is / is actually the value of $LFS, which was
passed to the chroot command.
Notice that /tools/bin comes last in the PATH. This means that a temporary tool will not be used any
more as soon as its final version is installed. Well, at least when the shell doesn't remember the locations of
executed binaries −− for this reason hashing is switched off a bit further on.
You have to make sure all the commands in the rest of this chapter and in the following chapters are run from
within the chroot environment. If you ever leave this environment for any reason (rebooting for example), you
must remember to again enter chroot and mount the proc and devpts filesystems (discussed later) before
continuing with the installations.
Note that the bash prompt will say "I have no name!" This is normal, as the /etc/passwd file has not been
created yet.
To avoid this issue, you could add the lfs user to your new LFS system later on when creating the
/etc/passwd file, taking care to assign it the same user and group IDs as on your host system.
Alternatively, you can (and the book assumes you do) assign the contents of the /tools directory to user
root by running the following command:
The command uses "0:0" instead of "root:root", because chown is unable to resolve the name "root" until the
password file has been created.
mkdir −p /{bin,boot,dev/{pts,shm},etc/opt,home,lib,mnt,proc}
mkdir −p /{root,sbin,tmp,usr/local,var,opt}
for dirname in /usr /usr/local
do
mkdir $dirname/{bin,etc,include,lib,sbin,share,src}
ln −s share/{man,doc,info} $dirname
mkdir $dirname/share/{dict,doc,info,locale,man}
mkdir $dirname/share/{nls,misc,terminfo,zoneinfo}
mkdir $dirname/share/man/man{1,2,3,4,5,6,7,8}
done
mkdir /var/{lock,log,mail,run,spool}
mkdir −p /var/{tmp,opt,cache,lib/misc,local}
mkdir /opt/{bin,doc,include,info}
mkdir −p /opt/{lib,man/man{1,2,3,4,5,6,7,8}}
Directories are, by default, created with permission mode 755, but this isn't desirable for all directories. We
will make two changes: one to the home directory of root, and another to the directories for temporary files.
The first mode change ensures that not just anybody can enter the /root directory −− the same as a normal
user would do with his or her home directory. The second mode change makes sure that any user can write to
the /tmp and /var/tmp directories, but cannot remove other users' files from them. The latter is prohibited
by the so−called "sticky bit" −− the highest bit in the 1777 bit mask.
The proc file system is the process information pseudo−filesystem that the kernel uses to provide status
information about the status of the system.
The proc file system is mounted on /proc by running the following command:
You might get warning messages from the mount command, such as these:
Ignore these, they're just due to the fact that the system isn't installed completely yet and some files are
missing. The mount itself will be successful and that's all we care about at this point.
The devpts file system was mentioned earlier and is now the most common way for pseudo terminals (PTYs)
to be implemented.
The most likely cause is that your host system's kernel was compiled without support for the devpts file
system. You can check which file systems your kernel supports by peeking into its internals with a command
such as cat /proc/filesystems. If a file system type named devfs is listed there, then we'll be able to
work around the problem by mounting the host's devfs file system on top of the new /dev structure which
we'll create later on in the "Creating devices (Makedev)" section. If devfs was not listed, do not worry because
there is yet a third way to get PTYs working inside the chroot environment. We'll cover this shortly in the
aforementioned Makedev section.
Remember, if for any reason you stop working on your LFS, and start again later, it's important to check that
these filesystems are still mounted inside the chroot environment, otherwise problems are likely to occur.
ln −s /tools/bin/{bash,cat,pwd,stty} /bin
ln −s /tools/bin/perl /usr/bin
ln −s /tools/lib/libgcc_s.so.1 /usr/lib
ln −s bash /bin/sh
The actual password for root (the "x" here is just a placeholder) will be set later.
The created groups aren't part of any standard −− they are the groups that the MAKEDEV script in the next
section uses. Besides the group "root", the LSB (http://www.linuxbase.org) recommends only a group "bin",
with a GID of 1, be present. All other group names and GIDs can be chosen freely by the user, as
well−written packages don't depend on GID numbers but use the group's name.
Lastly, we re−login to the chroot environment. User name and group name resolution will start working
immediately after the /etc/passwd and /etc/group files are created, because we installed a full Glibc
in Chapter 5. This will get rid of the "I have no name!" prompt.
Note the use of the +h directive. This tells bash not to use its internal path hashing. Without this directive,
bash would remember the paths to binaries it has executed. Since we want to use our newly compiled
binaries as soon as they are installed, we turn off this function for the duration of this chapter.
6.9.2.
6.9.4.
cd /dev
./MAKEDEV −v generic−nopty
If it turns out that some special device zzz that you need is missing, try running ./MAKEDEV −v zzz.
Alternatively, you may create devices via the mknod program. Please refer to its man and info pages if you
need more information.
Additionally, if you were unable to mount the devpts filesystem earlier in the "Mounting the proc and devpts
file systems" section, now is the time to try the alternatives. If your kernel supports the devfs file system, run
the following command to mount devfs:
This will mount the devfs file system over the top of the new static /dev structure. This poses no problems,
as the device nodes created are still present, they are just hidden by the new devfs filesystem.
If this still doesn't work, the only option left is to use the MAKEDEV script to create the ptyXX and ttyXX
range of files that would otherwise not be needed. Ensure you are still in the /dev directory then run
./MAKEDEV −v pty. The downside of this is, we are creating an extra 512 device special files which will
not be needed when we finally boot into the finished LFS system.
6.10.2.
6.10.4.
It is important to note that the files in the kernel source directory are not owned by root. Whenever you
unpack a package as user root (like we do here inside chroot), the files end up having the user and group IDs
of whatever they were on the packager's computer. This is usually not a problem for any other package you
install because you remove the source tree after the installation. But the Linux kernel source tree is often kept
around for a long time, so there's a chance that whatever user ID the packager used will be assigned to
somebody on your machine and then that person would have write access to the kernel source.
In light of this, you might want to run chown −R 0:0 on the linux−2.4.22 directory to ensure all files
are owned by user root.
make mrproper
This ensures that the kernel tree is absolutely clean. The kernel team recommends that this command be
issued prior to each kernel compilation. You shouldn't rely on the source tree being clean after untarring.
make include/linux/version.h
make symlinks
cp −R include/linux /usr/include
There are a few kernel header files which make use of the autoconf.h header file. Since we do not yet
configure the kernel, we need to create this file ourselves in order to avoid compilation failures. Create an
empty autoconf.h file:
touch /usr/include/linux/autoconf.h
6.10.6.
6.10.7. Why we copy the kernel headers and don't symlink them
In the past it was common practice to symlink the /usr/include/{linux,asm} directories to
/usr/src/linux/include/{linux,asm}. This was a bad practice, as the following extract from a
post by Linus Torvalds to the Linux Kernel Mailing List points out:
And yes, this is what I do. My /usr/src/linux still has the old 2.2.13
header files, even though I haven't run a 2.2.13 kernel in a _loong_
time. But those headers were what Glibc was compiled against, so those
headers are what matches the library object files.
And this is actually what has been the suggested environment for at
least the last five years. I don't know why the symlink business keeps
on living on, like a bad zombie. Pretty much every distribution still
has that broken symlink, and people still remember that the linux
sources should go into "/usr/src/linux" even though that hasn't been
true in a _loong_ time.
The essential part is where Linus states that the header files should be the ones which Glibc was compiled
against. These are the headers that should be used when you later compile other packages, as they are the ones
that match the object−code library files. By copying the headers, we ensure that they remain available if later
you upgrade your kernel.
Note, by the way, that it is perfectly all right to have the kernel sources in /usr/src/linux, as long as you
don't have the /usr/include/{linux,asm} symlinks.
6.11.2.
6.11.4.
make install
Installed programs: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4,
locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect,
xtrace, zdump and zic
6.12.2.
6.12.4.
The test suite for Glibc in this section is considered critical. Our advice is to not skip it under any
circumstance.
Before starting to build Glibc, remember to unpack the Glibc−linuxthreads again inside the glibc−2.3.2
directory, and to unset any environment variables that override the default optimization flags.
Though it is a harmless message, the install stage of Glibc will complain about the absence of
/etc/ld.so.conf. Fix this annoying little warning with:
touch /etc/ld.so.conf
The Glibc documentation recommends building Glibc outside of the source directory in a dedicated build
directory:
mkdir ../glibc−build
cd ../glibc−build
../glibc−2.3.2/configure −−prefix=/usr \
−−disable−profile −−enable−add−ons \
−−libexecdir=/usr/bin −−with−headers=/usr/include
make
make check
The test suite notes from Section 5.9 are still very much appropriate here. Be sure to refer back there should
you have any doubts.
make install
The locales that can make your system respond in a different language weren't installed by the above
command. Do it with this:
make localedata/install−locales
An alternative to running the previous command is to install only those locales which you need or want. This
can be achieved using the localedef command. Information on this can be found in the INSTALL file in
the glibc−2.3.2 tree. However, there are a number of locales that are essential for the tests of future
packages to pass correctly. The following instructions, in place of the install−locales command above, will
install the minimum set of locales necessary for the tests to run successfully:
mkdir −p /usr/lib/locale
make −C ../glibc−2.3.2/linuxthreads/man
6.12.6.
passwd: files
group: files
shadow: files
publickey: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: db files
# End /etc/nsswitch.conf
EOF
To find out what time zone you're in, run the following script:
tzselect
When you've answered a few questions about your location, the script will output the name of your time zone,
something like EST5EDT or Canada/Eastern. Then create the /etc/localtime file by running:
• −−remove−destination: This is needed to force removal of the already existing symbolic link.
The reason why we copy instead of symlink is to cover the situation where /usr is on a separate
partition. This could matter, for example, when booted into single user mode.
Of course, instead of Canada/Eastern, fill in the name of the time zone that the tzselect script gave you.
6.12.8.
/usr/local/lib
/opt/lib
# End /etc/ld.so.conf
EOF
The first thing to do is to adjust the linker. For this we retained the source and build directories from the
second pass over Binutils. Install the adjusted linker by running the following from within the
binutils−build directory:
If you somehow missed the earlier warning to retain the Binutils source and build directories from the
second pass in Chapter 5 or otherwise accidentally deleted them or just don't have access to them, don't
worry, all is not lost. Just ignore the above command. The result will be that the next package, Binutils,
will link against the Glibc libraries in /tools rather than /usr. This is not ideal, however, our testing
has shown that the resulting Binutils program binaries should be identical.
From now on every compiled program will link only against the libraries in /usr/lib and /lib. The extra
INSTALL=/tools/bin/install is needed because the Makefile created during the second pass still
contains the reference to /usr/bin/install, which we obviously haven't installed yet. Some host
distributions contain a ginstall symbolic link which takes precedence in the Makefile and thus can cause a
problem here. The above command takes care of this also.
You can now remove the Binutils source and build directories.
The next thing to do is to amend our GCC specs file so that it points to the new dynamic linker. Just like
earlier on, we use a sed to accomplish this:
SPECFILE=/tools/lib/gcc−lib/*/*/specs &&
sed −e 's@ /tools/lib/ld−linux.so.2@ /lib/ld−linux.so.2@g' \
$SPECFILE > newspecfile &&
mv −f newspecfile $SPECFILE &&
unset SPECFILE
Again, cutting and pasting the above is recommended. And just like before, it is a good idea to check the
specs file to ensure the intended changes were actually made.
If you are working on a platform where the name of the dynamic linker is something other than
ld−linux.so.2, you must substitute ld−linux.so.2 with the name of your platform's dynamic
linker in the above commands. Refer back to Section 5.2 if necessary.
It is imperative at this point to stop and ensure that the basic functions (compiling and linking) of the
adjusted toolchain are working as expected. For this we are going to perform a simple sanity check:
If everything is working correctly, there should be no errors, and the output of the last command will be:
If you did not receive the output as shown above, or received no output at all, then something is
seriously wrong. You will need to investigate and retrace your steps to find out where the problem is and
correct it. There is no point in continuing until this is done. Most likely something went wrong with the
specs file amendment above. Note especially that /lib now appears as the prefix of our dynamic linker.
Of course, if you are working on a platform where the name of the dynamic linker is something other
than ld−linux.so.2, then the output will be slightly different.
Once you are satisfied that all is well, clean up the test files:
rm dummy.c a.out
Installed programs: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings
and strip
6.14.2.
6.14.4.
The system has no more ptys. Ask your system administrator to create more.
Your chroot environment is not set up for proper PTY operation. In this case there is no point in running the
test suites for Binutils and GCC until you are able to resolve the issue. Please refer back to Section 6.6 and
Section 6.9 and perform the recommended steps to fix the problem.
The test suite for Binutils in this section is considered critical. Our advice is to not skip it under any
circumstances.
This package is known to behave badly when you have changed its default optimization flags (including the
−march and −mcpu options). Therefore, if you have defined any environment variables that override default
optimizations, such as CFLAGS and CXXFLAGS, we recommend unsetting or modifying them when
building Binutils.
The Binutils documentation recommends building Binutils outside of the source directory in a dedicated build
directory:
mkdir ../binutils−build
cd ../binutils−build
../binutils−2.14/configure \
−−prefix=/usr −−enable−shared
make tooldir=/usr
Normally, the tooldir (the directory where the executables end up) is set to $(exec_prefix)/$(target_alias),
which expands into, for example, /usr/i686−pc−linux−gnu. Since we only build for our own system,
we don't need this target specific directory in /usr. That setup would be used if the system was used to
cross−compile (for example compiling a package on an Intel machine that generates code that can be executed
on PowerPC machines).
make check
The test suite notes from Section 5.15 are still very much appropriate here. Be sure to refer back there should
you have any doubts.
cp ../binutils−2.14/include/libiberty.h /usr/include
Installed programs: c++, cc (link to gcc), cc1, cc1plus, collect2, cpp, g++, gcc, gccbug, and gcov
6.15.2.
6.15.4.
The test suite for GCC in this section is considered critical. Our advice is to not skip it under any
circumstance.
This package is known to behave badly when you have changed its default optimization flags (including the
−march and −mcpu options). Therefore, if you have defined any environment variables that override default
optimizations, such as CFLAGS and CXXFLAGS, we recommend unsetting or modifying them when
building GCC.
This time we will build both the C and the C++ compiler, so you'll have to unpack the GCC−core and the
GCC−g++ tarball −− they will unfold into the same directory. You should likewise extract the GCC−testsuite
package. The full GCC package contains even more compilers. Instructions for building these can be found at
http://www.linuxfromscratch.org/blfs/view/stable/general/gcc.html.
The second patch here suppresses the installation of libiberty from GCC, as we will use the one provided by
binutils instead. Be careful not to apply the GCC specs patch from Chapter 5 here.
The GCC documentation recommends building GCC outside of the source directory in a dedicated build
directory:
mkdir ../gcc−build
cd ../gcc−build
../gcc−3.3.1/configure −−prefix=/usr \
−−enable−shared −−enable−threads=posix \
−−enable−__cxa_atexit −−enable−clocale=gnu \
−−enable−languages=c,c++
make
Test the results, but don't stop at errors (you'll remember the few known ones):
make −k check
The test suite notes from Section 5.14 are still very much appropriate here. Be sure to refer back there should
you have any doubts.
make install
Some packages expect the C PreProcessor to be installed in the /lib directory. To honor those packages,
create this symlink:
ln −s ../usr/bin/cpp /lib
Many packages use the name cc to call the C compiler. To satisfy those packages, create a symlink:
ln −s gcc /usr/bin/cc
At this point it is strongly recommended to repeat the sanity check we performed earlier in this chapter.
Refer back to Section 6.13 and repeat the check. If the results are wrong, then most likely you
erroneously applied the GCC Specs patch from Chapter 5.
Installed programs: basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df,
dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id,
install, join, kill, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste,
pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat,
stty, su, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, uptime, users,
vdir, wc, who, whoami and yes
6.16.2.
6.16.4.
We do not want Coreutils to install its version of the hostname program, because it is inferior to the version
provided by Net−tools. Prevent its installation by applying a patch:
./configure −−prefix=/usr
make
The su program from Coreutils wasn't installed in Chapter 5 because it needed root privilege to do so. We're
going to need it in a few moments for the test suite. Therefore we work around the problem by installing it
now:
make install−root
This package has a test suite available which can perform a number of checks to ensure it built correctly.
However, this particular test suite makes some assumptions with regards to the presence of non−root users
and groups that don't apply this early into the LFS build. We therefore create a dummy system user and two
dummy groups to allow the tests to run properly. Should you choose not to run the test suite, skip down to
"Install the package". The following commands will prepare us for the test suite. Create two dummy groups
and a dummy user name:
make check−root
mv /usr/bin/{basename,cat,chgrp,chmod,chown,cp,dd,df} /bin
mv /usr/bin/{dir,dircolors,du,date,echo,false,head} /bin
mv /usr/bin/{install,ln,ls,mkdir,mkfifo,mknod,mv,pwd} /bin
mv /usr/bin/{rm,rmdir,shred,sync,sleep,stty,su,test} /bin
mv /usr/bin/{touch,true,uname,vdir} /bin
mv /usr/bin/chroot /usr/sbin
ln −s test /bin/[
ln −s ../../bin/install /usr/bin
6.17.2.
6.17.4.
Note: Zlib is known to build its shared library incorrectly if a CFLAGS is specified in the environment. If you
are using your own CFLAGS variables, ensure you add the −fPIC directive during this stage, and remove it
afterwards.
make
make install
make clean
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make test
make install
The shared Zlib library should be installed in the /lib directory. That way, in the event that you must boot
without the /usr directory, vital system programs will still have access to the library:
mv /usr/lib/libz.so.* /lib
The /usr/lib/libz.so symlink is linked to a file which no longer exists, because we moved it. Create a
symbolic link to the new location of the library:
Zlib does not install its manual page. Issue the following command to install this documentation:
cp zlib.3 /usr/share/man/man3
6.18.2.
6.18.4.
make
make install
Now copy two supporting files included in the Lfs−Utils tarball to their destination:
cp etc/{services,protocols} /etc
The /etc/services file is used to resolve service numbers to human−readable names, and the
/etc/protocols does the same for protocol numbers.
Installed programs: bigram, code, find, frcode, locate, updatedb and xargs
6.19.2.
6.19.4.
By default, the location of the updatedb database is in /usr/var. To make the location of
/var/lib/misc/locatedb file FHS compliant, pass the −−localstatedir=/var/lib/misc option to
configure.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
Installed programs: awk (link to gawk), gawk, gawk−3.1.3, grcat, igawk, pgawk, pgawk−3.1.3 and pwcat
6.20.2.
6.20.4.
• Gawk's default location for some of its executables is $prefix/libexec/awk. This location
doesn't comply with the FHS, which never even mentions a directory called libexec. The patch
makes it possible to pass a −−libexecdir switch to the configure script, so that we can use a more
appropriate location for the grcat and pwcat binaries: /usr/bin.
• Gawk's default data directory is $prefix/share/awk. But package−specific directories should be
named using the package name and version number (for example: gawk−7.7.2.) and not simply
the package name, as there may be different versions of a package installed on the system. The patch
changes the name of the data directory to the correct $prefix/share/gawk−3.1.3.
• The patch also ensures that this data directory, including its contents, is removed on a make uninstall.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
Installed programs: captoinfo (link to tic), clear, infocmp, infotocap (link to tic), reset (link to tset), tack, tic,
toe, tput and tset
6.21.2.
6.21.4.
The first patch corrects the etip.h header file, and the second patch prevents some compiler warnings on
the use of deprecated headers.
make
make install
Move the libraries to the /lib directory, where they're expected to reside:
mv /usr/lib/libncurses.so.5* /lib
Since the libraries have been moved to /lib, a few symlinks are currently pointing towards non−existing
files. Recreate those symlinks:
Installed programs: efm_filter.pl, efm_perl.pl, ex (link to vim), less.sh, mve.awk, pltags.pl, ref, rview (link to
vim), rvim (link to vim), shtags.pl, tcltags, vi (link to vim), view (link to vim), vim, vim132, vim2html.pl,
vimdiff (link to vim), vimm, vimspell.sh, vimtutor and xxd
6.22.3.
6.22.5.
./configure −−prefix=/usr
make
make install
Vim can run in old−fashioned vi mode by creating a symlink, which may be created with the following
command:
If you plan to install the X Window system on your LFS system, you might want to re−compile Vim after you
have installed X. Vim comes with a nice GUI version of the editor which requires X and a few other libraries
to be installed. For more information read the Vim documentation.
6.22.7.
set nocompatible
set bs=2
6.23.1. Contents of M4
M4 is a macro processor. It copies input to output, expanding macros as it goes. Macros are either built−in or
user−defined and can take any number of arguments. Besides just doing macro expansion, m4 has built−in
functions for including named files, running Unix commands, doing integer arithmetic, manipulating text in
various ways, recursion, etc. The m4 program can be used either as a front−end to a compiler or as a macro
processor in its own right.
Installed program: m4
6.23.2.
6.23.4.
6.23.5. Installation of M4
Prepare M4 for compilation:
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
6.24.2.
6.24.4.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so (and takes a long time):
make check
make install
6.25.2.
6.25.4.
• −−sysconfdir=/etc: This option tells the programs created by the package to look in /etc for
their configuration files.
make
make install
Installed programs: addftinfo, afmtodit, eqn, eqn2graph, geqn (link to eqn), grn, grodvi, groff, groffer, grog,
grolbp, grolj4, grops, grotty, gtbl (link to tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops,
pic, pic2graph, post−grohtml, pre−grohtml, refer, soelim, tbl, tfmtodit, troff and zsoelim (link to soelim)
6.26.2.
6.26.4.
make
make install
Some documentation programs, such as xman, will not work work properly without the following symlinks:
ln −s soelim /usr/bin/zsoelim
ln −s eqn /usr/bin/geqn
ln −s tbl /usr/bin/gtbl
6.27.2.
6.27.4.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
6.28.2.
6.28.4.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make bigcheck
make install
There are some packages that expect to find the Lex library in /usr/lib. Create a symlink to account for
this:
ln −s libfl.a /usr/lib/libl.a
A few programs don't know about flex yet and try to run its predecessor lex. To support those programs,
create a shell script named lex that calls flex in Lex emulation mode:
# End /usr/bin/lex
EOF
chmod 755 /usr/bin/lex
Installed programs: autopoint, config.charset, config.rpath, gettext, gettextize, hostname, msgattrib, msgcat,
msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt,
msguniq, ngettext, project−id, team−address, trigger, urlget, user−email and xgettext
6.29.2.
6.29.4.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so (and takes a very long time):
make check
make install
Installed programs: arp, dnsdomainname (link to hostname), domainname (link to hostname), hostname,
ifconfig, nameif, netstat, nisdomainname (link to hostname), plipconfig, rarp, route, slattach and
ypdomainname (link to hostname)
6.30.2.
6.30.4.
First fix a small syntax problem in the sources of the mii−tool program:
make config
If you intend to accept the default settings, you may skip the questions generated by make config by running
yes "" | make config instead.
make
make update
Installed programs: ftp, ping, rcp, rlogin, rsh, talk, telnet and tftp
6.31.2.
6.31.4.
• −−disable−syslogd: This option prevents inetutils from installing the System Log Daemon,
which is installed with the Sysklogd package.
• −−disable−logger: This option prevents inetutils from installing the logger program, which is
used by scripts to pass messages to the System Log Daemon. We do not install it because Util−linux
installs a better version later.
• −−disable−whois: This option disables the building of the inetutils whois client, which is
woefully out of date. Instructions for a better whois client are in the BLFS book.
• −−disable−servers: This disables the installation of the various network servers included as
part of the Inetutils package. These servers are deemed not appropriate in a basic LFS system. Some
are insecure by nature and are only considered safe on trusted networks. More information can be
found at http://www.linuxfromscratch.org/blfs/view/stable/basicnet/inetutils.html. Note that better
replacements are available for many of these servers.
Install it:
make install
mv /usr/bin/ping /bin
Installed programs: a2p, c2ph, dprofpp, enc2xs, find2perl, h2ph, h2xs, libnetcfg, perl, perl5.8.0 (link to perl),
perlbug, perlcc, perldoc, perlivp, piconv, pl2pm, pod2html, pod2latex, pod2man, pod2text, pod2usage,
podchecker, podselect, psed (link to s2p), pstruct (link to c2ph), s2p, splain and xsubpp
6.32.2.
6.32.4.
./configure.gnu −−prefix=/usr
If you want more control over the way Perl sets itself up to be built, you can run the interactive Configure
script instead and modify the way Perl is built. If you think you can live with the (sensible) defaults Perl
auto−detects, then just use the command listed above.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, you first have to create a basic /etc/hosts file, needed by a couple of tests to
resolve the name localhost:
make test
make install
6.33.2.
6.33.4.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
• TEXMF=/usr/share/texmf: The TEXMF makefile variable holds the location of the root of
your TeX tree if, for example, you plan to install a TeX package later on.
Installed programs: autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate and ifnames
6.34.2.
6.34.4.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
6.35.2.
6.35.4.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
ln −s automake−1.7 /usr/share/automake
6.36.2.
6.36.4.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make tests
make install
6.37.2.
6.37.4.
./configure −−prefix=/usr
make
make install
6.38.2.
6.38.4.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
Installed programs: bunzip2 (link to bzip2), bzcat (link to bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep,
bzip2, bzip2recover, bzless and bzmore
Installed libraries: libbz2.a, libbz2.so (link to libbz2.so.1.0), libbz2.so.1.0 (link to libbz2.so.1.0.2) and
libbz2.so.1.0.2
6.39.2.
6.39.4.
make −f Makefile−libbz2_so
make clean
The −f flag will cause Bzip2 to be built using a different Makefile file, in this case the
Makefile−libbz2_so file, which creates a dynamic libbz2.so library and links the Bzip2 utilities
against it.
make
Install it:
make install
And install the shared bzip2 binary into the /bin directory, then make some necessary symbolic links, and
clean up:
cp bzip2−shared /bin/bzip2
cp −a libbz2.so* /lib
ln −s ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm /usr/bin/{bunzip2,bzcat,bzip2}
mv /usr/bin/{bzip2recover,bzless,bzmore} /bin
ln −s bzip2 /bin/bunzip2
ln −s bzip2 /bin/bzcat
6.40.2.
6.40.4.
./configure −−prefix=/usr
make
make install
6.41.1. Contents of Ed
GNU ed is an 8−bit clean, POSIX−compliant line editor.
6.41.2.
6.41.4.
6.41.5. Installation of Ed
Ed isn't something which many people use. It's installed here because it can be used by the patch
program if you encounter an ed−based patch file. This happens rarely because diff−based patches are
Ed normally uses the mktemp function to create temporary files in /tmp, but this function contains a
vulnerability (see the section on Temporary Files in
http://en.tldp.org/HOWTO/Secure−Programs−HOWTO/avoid−race.html). The following patch makes Ed use
mkstemp instead, which is the recommended way to create temporary files.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
And move the programs to the /bin directory, so they can be used in the event that the /usr partition is
unavailable.
mv /usr/bin/{ed,red} /bin
Installed programs: chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, getunimap, kbd_mode, kbdrate,
loadkeys, loadunimap, mapscrn, openvt, psfaddtable (link to psfxtable), psfgettable (link to psfxtable),
psfstriptable (link to psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setlogcons, setmetamode,
setvesablank, showconsolefont, showkey, unicode_start and unicode_stop
6.42.2.
6.42.4.
./configure
make
make install
Installed programs: badblocks, blkid, chattr, compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, findfs,
fsck, fsck.ext2, fsck.ext3, logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, mklost+found, resize2fs,
tune2fs and uuidgen.
6.43.2.
6.43.4.
mkdir ../e2fsprogs−build
cd ../e2fsprogs−build
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
make install−libs
Installed programs: egrep (link to grep), fgrep (link to grep) and grep
6.44.2.
6.44.4.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
6.45.2.
6.45.4.
./configure −−prefix=/usr
make
make install
mkdir /boot/grub
cp /usr/share/grub/i386−pc/stage{1,2} /boot/grub
The i386−pc directory also contains a number of *stage1_5 files, different ones for different filesystems.
Have a look at the ones available and copy the appropriate ones to the /boot/grub directory. Most people
will copy the e2fs_stage1_5 and/or reiserfs_stage1_5 files.
Installed programs: gunzip (link to gzip), gzexe, gzip, uncompress (link to gunzip), zcat (link to gzip), zcmp,
zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore and znew
6.46.2.
6.46.4.
./configure −−prefix=/usr
The gzexe program has the location of the gzip binary hard−wired into it. Because we later change the
location of this latter binary, the following command assures that the new location gets placed into the binary:
cp gzexe.in{,.backup}
sed 's%"BINDIR"%/bin%' gzexe.in.backup > gzexe.in
make
make install
mv /usr/bin/gzip /bin
rm /usr/bin/{gunzip,zcat}
ln −s gzip /bin/gunzip
ln −s gzip /bin/zcat
ln −s gunzip /bin/uncompress
6.47.2.
6.47.4.
The first patch comments out the "MANPATH /usr/man" line in the man.conf file to prevent redundant
results when using programs such as whatis:
The second patch adds the −R option to the PAGER variable so that escape sequences are handled properly:
The third and last patch prevents a problem when man pages not formatted with more than 80 columns are
used in conjunction with recent releases of groff:
• −default: This tells the configure script to select a sensible set of default options. For example:
only English man pages, no message catalogs, man not suid, handle compressed man pages, compress
cat pages, create cat pages whenever the appropriate directory exists, follow FHS by putting cat pages
under /var/cache/man provided that that directory exists.
• −confdir=/etc: This tells the man program to look for the man.conf configuration file in the
/etc directory.
make
make install
If you wish to disable SGR escape sequences, you should edit the man.conf file and add the −c
argument to nroff.
6.48.2.
6.48.4.
./configure −−prefix=/usr
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
6.49.2.
6.49.4.
./configure
make
make install
6.50.2.
6.50.4.
Again, the preprocessor flag −D_GNU_SOURCE is only needed on the PowerPC platform. On other
architectures you can leave it out.
make
make install
6.51.2.
6.51.4.
make LDLIBS=−lncurses
• LDLIBS=−lncurses: This tells Procinfo to use the libncurses library instead of the
long−obsolete libtermcap.
make install
Installed programs: free, kill, pgrep, pkill, pmap, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w and
watch
6.52.2.
6.52.4.
Install it:
make install
rm /lib/libproc.so
6.53.2.
6.53.4.
• −−exec−prefix=/: This causes the binaries to be installed in /bin and not in /usr/bin. As the
Psmisc programs are often used in bootscripts, they should be available also when the /usr
filesystem isn't mounted.
make
make install
By default Psmisc's pidof program isn't installed. Generally, this isn't a problem because we later install the
Sysvinit package, which provides a better pidof program. But if you're not going to use Sysvinit, you should
complete the installation of Psmisc by creating the following symlink:
ln −s killall /bin/pidof
Installed programs: chage, chfn, chpasswd, chsh, dpasswd, expiry, faillog, gpasswd, groupadd, groupdel,
groupmod, groups, grpck, grpconv, grpunconv, lastlog, login, logoutd, mkpasswd, newgrp, newusers, passwd,
pwck, pwconv, pwunconv, sg (link to newgrp), useradd, userdel, usermod, vigr (link to vipw) and vipw
6.54.2.
6.54.4.
The /var/run/utmp file lists the users that are currently logged in, the /var/log/wtmp file who were
logged in and when. The /var/log/lastlog file shows for each user when he or she last logged in, and
the /var/log/btmp lists the bad login attempts.
Shadow hard−wires the path to the passwd binary within the binary itself, but does this the wrong way. If a
passwd binary is not present before installing Shadow, the package incorrectly assumes it is going to be
located at /bin/passwd, but then installs it in /usr/bin/passwd. This will lead to errors about not
finding /bin/passwd. To work around this bug, create a dummy passwd file, so that it gets hard−wired
properly:
touch /usr/bin/passwd
The current Shadow suite has a problem that causes the newgrp command to fail. The following patch (also
appearing in Shadow's CVS code) fixes this problem:
make
make install
Shadow uses two files to configure authentication settings for the system. Install these two config files:
cp etc/{limits,login.access} /etc
We want to change the password method to enable MD5 passwords which are theoretically more secure than
the default "crypt" method and also allow password lengths greater than 8 characters. We also need to change
the old /var/spool/mail location for user mailboxes to the current location at /var/mail. We do this
by changing the relevant configuration file while copying it to its destination:
sed −e 's%/var/spool/mail%/var/mail%' \
−e 's%#MD5_CRYPT_ENAB.no%MD5_CRYPT_ENAB yes%' \
etc/login.defs.linux > /etc/login.defs
Be extra careful when typing all of the above. It is probably safer to cut−and−paste it rather than try and
type it all in.
According to the man page of vipw, a vigr program should exist too. Since the installation procedure
doesn't create this program, create a symlink manually:
ln −s vipw /usr/sbin/vigr
As the /bin/vipw symlink is redundant (and even pointing to a non−existent file), remove it:
rm /bin/vipw
mv /bin/sg /usr/bin
mv /usr/lib/lib{shadow,misc}.so.0* /lib
As some packages expect to find the just−moved libraries in /usr/lib, create the following symlinks:
Coreutils has already installed a groups program in /usr/bin. If you wish, you can remove the one
installed by Shadow:
rm /bin/groups
6.54.6.
/usr/sbin/pwconv
/usr/sbin/grpconv
Under normal circumstances, you won't have created any passwords yet. However, if returning to this section
to enable shadowing, you should reset any current user passwords with the passwd command or any group
passwords with the gpasswd command.
6.55.2.
6.55.4.
make
make install
6.55.6.
auth,authpriv.* −/var/log/auth.log
*.*;auth,authpriv.none −/var/log/sys.log
daemon.* −/var/log/daemon.log
kern.* −/var/log/kern.log
mail.* −/var/log/mail.log
user.* −/var/log/user.log
*.emerg *
# End /etc/syslog.conf
EOF
Installed programs: halt, init, killall5, last, lastb (link to last), mesg, pidof (link to killall5), poweroff (link to
halt), reboot (link to halt), runlevel, shutdown, sulogin, telinit (link to init), utmpdump and wall
6.56.2.
6.56.4.
cp src/init.c{,.backup}
sed 's/Sending processes/Sending processes started by init/g' \
src/init.c.backup > src/init.c
Compile Sysvinit:
make −C src
6.56.6.
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc sysinit
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
# End /etc/inittab
EOF
6.57.2.
6.57.4.
make
This package has a test suite available which can perform a number of checks to ensure it built correctly.
Should you choose to run it, the following command will do so:
make check
make install
Installed programs: agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel,
cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm,
ipcs, isosize, kill, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap,
more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (link to rdev), raw, rdev, readprofile,
rename, renice, rev, rootflags (link to rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (link to swapon),
swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (link to rdev), whereis and write
6.58.2.
6.58.4.
cp hwclock/hwclock.c{,.backup}
sed 's%etc/adjtime%var/lib/hwclock/adjtime%' \
hwclock/hwclock.c.backup > hwclock/hwclock.c
mkdir −p /var/lib/hwclock
./configure
make HAVE_SLN=yes
• HAVE_SLN=yes: This prevents the sln program (a statically linked ln, already installed by Glibc)
from being built again.
6.59.1.
This is an older release of GCC which we are going to install for the purpose of compiling the Linux kernel in
Chapter 8. This version is recommended by the kernel developers when you need absolute stability. Later
versions of GCC have not received as much testing for Linux kernel compilation. Using a later version is
likely to work, however, we recommend adhering to the kernel developer's advice and using the version here
to compile your kernel.
We don't install the C++ compiler or libraries here. However, there may be reasons why you would want
to install them. More information can be found at
http://www.linuxfromscratch.org/blfs/view/stable/general/gcc2.html.
We'll install this older release of GCC into the non−standard prefix of /opt so as to avoid interfering with
the system GCC already installed in /usr .
The GCC documentation recommends building GCC outside of the source directory in a dedicated build
directory:
mkdir ../gcc−2−build
cd ../gcc−2−build
The reason being there is no longer any need to use programs from the /tools directory. However, we don't
want to remove the /tools directory just yet. There is still some use for it towards the end of the book.
Installed scripts: checkfs, cleanfs, functions, halt, ifdown, ifup, loadkeys, localnet, mountfs, mountproc,
network, rc, reboot, sendsignals, setclock, swap, sysklogd and template
6.61.2.
6.61.4.
If you decide to use BSD style, or some other style scripts, you can skip the next chapter when you arrive at it
and move on to Chapter 8.
ln −s path/to/keymap /usr/share/kbd/keymaps/defkeymap.map.gz
Of course, replace path/to/keymap with the path and name of your keyboard's map file. For example, if
you have a Dutch keyboard, you would use i386/qwerty/nl.map.gz.
Another way to set your keyboard's layout is to compile the keymap into the kernel. This ensures that your
keyboard will always work as expected, even when you boot into maintenance mode (by passing `init=/bin/sh'
to the kernel), as then the bootscript that normally sets up your keymap isn't run.
Run the following command to patch the current default keymap into the kernel source. You will have to
repeat this command whenever you unpack a new kernel:
passwd root
7.2. How does the booting process with these scripts work?
Linux uses a special booting facility named SysVinit. It's based on a concept of runlevels. It can be widely
different from one system to another, so it can't be assumed that because things worked in <insert distro
name> they should work like that in LFS too. LFS has its own way of doing things, but it respects generally
accepted standards.
SysVinit (which we'll call init from now on) works using a runlevels scheme. There are 7 (from 0 to 6)
runlevels (actually, there are more runlevels but they are for special cases and generally not used. The init man
page describes those details), and each one of those corresponds to the things the computer is supposed to do
when it starts up. The default runlevel is 3. Here are the descriptions of the different runlevels as they are
often implemented:
The command used to change runlevels is init <runlevel> where <runlevel> is the target runlevel. For
example, to reboot the computer, a user would issue the init 6 command. The reboot command is just an alias,
as is the halt command an alias to init 0.
There are a number of directories under /etc/rc.d that look like like rc?.d where ? is the number of the runlevel
and rcsysinit.d which contain a number of symbolic links. Some begin with a K, the others begin with an S,
and all of them have two numbers following the initial letter. The K means to stop (kill) a service, and the S
means to start a service. The numbers determine the order in which the scripts are run, from 00 to 99; the
lower the number the sooner it gets executed. When init switches to another runlevel, the appropriate services
get killed and others get started.
The real scripts are in /etc/rc.d/init.d. They do all the work, and the symlinks all point to them. Killing links
and starting links point to the same script in /etc/rc.d/init.d. That's because the scripts can be called with
different parameters like start, stop, restart, reload, status. When a K link is encountered, the appropriate script
is run with the stop argument. When a S link is encountered, the appropriate script is run with the start
argument.
There is one exception. Links that start with an S in the rc0.d and rc6.d directories will not cause anything to
be started. They will be called with the parameter stop to stop something. The logic behind it is that when you
are going to reboot or halt the system, you don't want to start anything, only stop the system.
These are descriptions of what the arguments make the scripts do:
Feel free to modify the way the boot process works (after all, it's your own LFS system). The files given here
are just an example of how it can be done in a nice way (well, what we consider nice −− you may hate it).
Change the value of the UTC variable below to a 0 (zero) if your hardware clock is not set to GMT time.
UTC=1
# End /etc/sysconfig/clock
EOF
Now, you may want to take a look at a very good hint explaining how we deal with time on LFS at
http://www.linuxfromscratch.org/hints/downloads/files/time.txt. It explains issues such as time zones, UTC,
and the TZ environment variable.
If you decided you don't need to, or don't want to use the loadkeys script, remove the
/etc/rc.d/rcsysinit.d/S70loadkeys symlink.
"lfs" needs to be replaced with the name the computer is to be called. You should not enter the FQDN (Fully
Qualified Domain Name) here. That information will be put in the /etc/hosts file later on.
You should make sure that the IP−address is in the private network IP−address range. Valid ranges are:
Class Networks
A 10.0.0.0
B 172.16.0.0 through 172.31.0.0
C 192.168.0.0 through 192.168.255.0
A valid IP address could be 192.168.1.1. A valid FQDN for this IP could be www.linuxfromscratch.org.
If you aren't going to use a network card, you still need to come up with a FQDN. This is necessary for certain
programs to operate correctly.
If a network card is not going to be configured, create the /etc/hosts file by running:
Of course, the 192.168.1.1 and <value of HOSTNAME>.mydomain.org have to be changed to your liking (or
requirements if assigned an IP−address by a network/system administrator and this machine is planned to be
connected to an existing network).
If you don't have any network cards, you are most likely not going to create any configuration files relating to
network cards. If that is the case, you must remove the network symlinks from all the runlevel directories
(/etc/rc.d/rc*.d)
The values for GATEWAY and GATEWAY_IF need to be changed to match your network setup.
GATEWAY contains the IP address of the default gateway, and GATEWAY_IF contains the network
interface through which the default gateway can be reached.
If you decide to rename or move this /etc/sysconfig/network−devices directory, make sure you update the
/etc/sysconfig/rc file as well and update the network_devices by providing it with the new path.
Now, new files are created in that directory containing the following. The following command creates a
sample ifconfig.eth0 file:
Of course, the values of those variables have to be changed in every file to match the proper setup. If the
ONBOOT variable is set to yes, the network script will bring it up during the booting of the system. If set to
anything else but yes, it will be ignored by the network script and thus not brought up.
# End /etc/fstab
EOF
Of course, replace xxx, yyy and fff with the values appropriate for your system −− for example hda2,
hda5 and reiserfs. For all the details on the six fields in this table, see man 5 fstab.
When using a reiserfs partition, the 1 1 at the end of the line should be replaced with 0 0, as such a partition
does not need to be dumped or checked
The /dev/shm mount point for tmpfs is included to allow enabling POSIX shared memory. Your kernel
must have the required support built into it for this to work −− more about this in the next section. Please note
that currently very little software actually uses POSIX shared memory. Therefore you can consider the
/dev/shm mount point optional. For more information, see
Documentation/filesystems/tmpfs.txt in the kernel source tree.
There are other lines which you may consider adding to your fstab file. One example is a line to use if you
intend to use USB devices:
This option will of course only work if you have the relevant support compiled into your kernel.
8.3.2.
8.3.4.
make mrproper
This ensures that the kernel tree is absolutely clean. The kernel team recommends that this command be
issued prior to each kernel compilation. You shouldn't rely on the source tree being clean after untarring.
make menuconfig
make oldconfig may be more appropriate in some situations. See the README file for more information.
If you wish, you may skip kernel configuration by simply copying the kernel config file, .config, from
your host system (assuming it is available) to the unpacked linux−2.4.22 directory. However, we don't
recommend this option. You're much better off exploring all the configuration menus and creating your own
kernel configuration from scratch.
For POSIX shared memory support, ensure that the kernel config option "Virtual memory file system support"
is enabled. It resides within the "File systems" menu and is normally enabled by default.
If you intend to use kernel modules, you will need an /etc/modules.conf file. Information pertaining to
modules and to kernel configuration in general may be found in the kernel documentation, which is found in
the linux−2.4.22/Documentation directory. The modules.conf man page and the kernel HOWTO at
http://www.tldp.org/HOWTO/Kernel−HOWTO.html may also be of interest to you.
As nothing is complete without documentation, build the manual pages that come with the kernel:
make mandocs
cp −a Documentation/man /usr/share/man/man9
Kernel compilation has finished, but some of the files created still reside in the source tree. To complete the
installation, two files need to be copied to the /boot directory.
The path to the kernel file may vary depending on the platform you're using. Issue the following command to
install the kernel:
cp arch/i386/boot/bzImage /boot/lfskernel
System.map is a symbol file for the kernel. It maps the function entrypoints of every function in the kernel
API, as well as the addresses of the kernel data structures for the running kernel. Issue the following command
to install the map file:
cp System.map /boot
Boot loading can be a complex area. First, a few cautionary words. You really should be familiar with your
current boot loader and any other operating systems present on your hard drive(s) that you might wish to keep
bootable. Please make sure that you have an emergency boot disk ready, so that you can rescue your computer
if, by any chance, your computer becomes unusable (unbootable).
Earlier, we compiled and installed the Grub boot loader software in preparation for this step. The procedure
involves writing some special Grub files to specific locations on the hard drive. Before we get to that, we
highly recommend that you create a Grub boot floppy diskette just in case. Insert a blank floppy diskette and
run the following commands:
Remove the diskette and store it somewhere safe. Now we'll run the grub shell:
grub
Grub uses its own naming structure for drives and partitions, in the form of (hdn,m), where n is the hard drive
number, and m the partition number, both starting from zero. This means, for instance, that partition hda1 is
(hd0,0) to Grub, and hdb2 is (hd1,1). In contrast to Linux, Grub doesn't consider CD−ROM drives to be hard
drives, so if you have a CD on hdb, for example, and a second hard drive on hdc, that second hard drive
would still be (hd1).
Using the above information, determine the appropriate designator for your root partition. For the following
example, we'll assume your root partition is hda4.
First, tell Grub where to search for its stage{1,2} files −− you can use Tab everywhere to make Grub
show the alternatives:
root (hd0,3)
The following command will overwrite your current boot loader. Don't run the command if this is not
what you want. For example, you may be using a third party boot manager to manage your MBR
(Master Boot Record). In this scenario, it would probably make more sense to install Grub into the "boot
sector" of the LFS partition, in which case the command would become: setup (hd0,3).
Then tell it to install itself into the MBR (Master Boot Record) of hda:
setup (hd0)
If all is well, Grub will have reported finding its files in /boot/grub. That's all there is to it:
quit
Now we need to create a "menu list" file, defining Grub's boot menu:
You may want to add an entry for your host distribution. It might look like this:
Also, if you happen to dual−boot Windows, the following entry should allow booting it:
If info grub doesn't tell you all you want to know, you can find more information regarding Grub on its
website, located at: http://www.gnu.org/software/grub.
Now would be a good time to strip all debug symbols from the binaries on your LFS system. If you are not a
programmer and don't plan on debugging your software, then you will be happy to know that you can reclaim
a few tens of megs by removing debug symbols. This process causes no inconvenience other than not being
able to debug the software fully anymore, which is not an issue if you don't know how to debug.
Disclaimer: 98% of the people who use the command mentioned below don't experience any problems. But do
make a backup of your LFS system before you run this command. There's a slight chance it may backfire on
you and render your system unusable (mostly by destroying your kernel modules and dynamic & shared
libraries). This is caused more often by typos than by a problem with the command used.
Having said that, the −−strip−debug option we use to strip is quite harmless under normal circumstances. It
doesn't strip anything vital from the files. It also is quite safe to use −−strip−all on regular programs (don't use
that on libraries − they will be destroyed), but it's not as safe, and the space you gain is not all that much. But
if you're tight on disk space every little bit helps, so decide for yourself. Please refer to the strip man page for
other strip options you can use. The general idea is to not run strip on libraries (other than −−strip−debug),
just to be on the safe side.
If you are planning to go ahead and perform the strip, special care is needed to ensure you're not running any
binaries that are about to be stripped −− including the active bash shell. Therefore you'll need to exit the
chroot environment and reenter it using a modified chroot command:
logout
chroot $LFS /tools/bin/env −i \
HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/tools/bin/bash −−login
Quite a number of files will be reported as having their file format not recognized. Most of these are scripts
instead of binaries. These warnings can be safely ignored.
It may be a good idea to create an /etc/lfs−release file. By having this file it is very easy for you (and
for us if you are going to ask for help with something at some point) to find out which LFS version you have
installed on your system. Create this file by running:
umount /proc
umount /dev/pts
logout
Additionally, now that all software has been installed, there is no longer a need for the /tools directory.
You may delete it. As this will also remove the temporary copies of Tcl, Expect and DejaGnu, which were
used for running the toolchain tests, you will need to recompile and re−install them on your LFS system if you
want to use these programs later.
Also you may now want to move the contents of /sources to /usr/src/packages or something
similar (or simply delete them if you've burned them on a CD) and delete the directory.
umount $LFS
If you earlier decided to create multiple partitions, you'll need to unmount the other partitions before you
unmount $LFS, like this:
umount $LFS/usr
umount $LFS/home
umount $LFS
And now you can reboot your system by running something like:
/sbin/shutdown −r now
Assuming the Grub boot loader was set up as outlined earlier, the default menu should be set to boot LFS 5.0
automatically.
After you have rebooted, your LFS system is ready for use and you can start adding your own software.
Now that you have finished installing your LFS system, you may be wondering "What now?". In order to
answer that question, we have composed a list of resources for you.
The Beyond Linux From Scratch book covers installation procedures for a wide range of software
beyond the scope of the LFS Book. The BLFS project can be found at
http://www.linuxfromscratch.org/blfs/.
• LFS Hints
The LFS Hints are a collection of small, educational documents submitted by volunteers in the LFS
community. The Hints are available at http://www.linuxfromscratch.org/hints/list.html.
• Mailing lists
There are several LFS mailing lists you may subscribe to if you are in need of help. See Chapter 1 −
Mailing lists for more information.
• The Linux Documentation Project
The goal of the Linux Documentation Project is to collaborate in all of the issues of Linux
documentation. The LDP features a large collection of HOWTOs, Guides and man pages; it may be
found at http://www.tldp.org/.
Most information about these packages (especially the descriptions of them) come from the man pages of
those packages. We do not include the entire man page, but just some key elements to make it possible to
understand what a program does. To get information on all details of a program, please refer to its man page
or info page.
Certain packages are documented in more depth than others, because we just happen to know more about
certain packages than about others. If you think anything should be added to the following descriptions, please
don't hesitate to email the mailing lists. We intend that the list should contain an in−depth description of every
package installed, but we can't do it without help.
Please note that currently only what a package does is described and not why it needs to be installed. This
may be added later.
Also listed are all of the installation dependencies for all the packages that are installed in this book. The
listings will include which programs from which packages are needed to successfully compile the package to
be installed.
These are not running dependencies, meaning they don't tell you what programs are needed to use that
package's programs, just the ones needed to compile it.
The dependency list can be, from time to time, outdated in regards to the currently used package version.
Checking dependencies takes quite a bit of work, so they may lag behind a bit on the package update. But
often with minor package updates, the installation dependencies hardly change, so they'll be current in most
cases. When we upgrade to a major new release, we'll make sure the dependencies are checked too.
A.2. Autoconf
For installation instructions see Section 6.34.
Installed programs: autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate and ifnames
A.2.3.
autoheader is a tool for creating template files of C #define statements for configure to use.
autoreconf comes in handy when there are a lot of autoconf−generated configure scripts around. The program
runs autoconf and autoheader repeatedly (where appropriate) to remake the autoconf configure scripts and
configuration header templates in a given directory tree.
autoscan can help to create a configure.in file for a software package. It examines the source files in a
directory tree, searching them for common portability problems and creates a configure.scan file that
serves as as a preliminary configure.in for the package.
autoupdate modifies a configure.in file that still calls autoconf macros by their old names to use the
current macro names.
ifnames can be helpful when writing a configure.in for a software package. It prints the identifiers that
the package uses in C preprocessor conditionals. If a package has already been set up to have some portability,
this program can help to determine what configure needs to check. It can fill in some gaps in a
configure.in file generated by autoscan.
A.2.5.
A.3. Automake
For installation instructions see Section 6.35.
A.3.3.
automake is a tool for automatically generating Makefile.in's from files called Makefile.am. To
create all the Makefile.in files for a package, run this program in the top level directory. By scanning the
configure.ins it automatically finds each appropriate Makefile.am and generate the corresponding
Makefile.in.
config.guess is a script that attempts to guess the canonical triplet for the given build, host, or target
architecture.
depcomp is a script for compiling a program so that not only the desired output is generated but also
dependency information.
missing is a script acting as a common stub for missing GNU programs during an installation.
A.3.5.
A.4. Bash
For installation instructions see Section 6.36.
Bash Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/bash−2.05b−2.patch
A.4.3.
bashbug is a shell script to help the user compose and mail bug reports concerning bash in a standard format.
sh is a symlink to the bash program. When invoked as sh, bash tries to mimic the startup behavior of historical
versions of sh as closely as possible, while conforming to the POSIX standard as well.
A.4.5.
A.5. Binutils
For installation instructions see Section 6.14.
Installed programs: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings
and strip
A.5.3.
ar creates, modifies, and extracts from archives. An archive is a single file holding a collection of other files
in a structure that makes it possible to retrieve the original individual files (called members of the archive).
c++filt is used by the linker to demangle C++ and Java symbols, to keep overloaded functions from clashing.
ld is a linker. It combines a number of object and archive files into a single file, relocating their data and tying
up symbol references.
objdump displays information about the given object file, with options controlling what particular
information to display. The information shown is mostly only useful to programmers who are working on the
compilation tools.
ranlib generates an index of the contents of an archive, and stores it in the archive. The index lists all the
size lists the section sizes −− and the grand total −− for the given object files.
strings outputs for each file given the sequences of printable characters that are of at least the specified length
(defaulting to 4) For object files it prints by default only the strings from the initializing and loading sections.
For other types of files it scans the whole file.
libiberty contains routines used by various GNU programs, including getopt, obstack, strerror, strtol and
strtoul.
libopcodes is a library for dealing with opcodes. It is used for building utilities like objdump. Opcodes are the
"readable text" versions of instructions for the processor.
A.5.5.
A.6. Bison
For installation instructions see Section 6.24.
A.6.3.
yacc is a wrapper for bison, meant for programs that still call yacc instead of bison. It calls bison with the −y
option.
liby.a is the Yacc library containing implementations of Yacc−compatible yyerror and main functions. This
library is normally not very useful, but POSIX requires it.
A.6.5.
A.7. Bzip2
For installation instructions see Section 6.39.
Installed programs: bunzip2 (link to bzip2), bzcat (link to bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep,
bzip2, bzip2recover, bzless and bzmore
Installed libraries: libbz2.a, libbz2.so (link to libbz2.so.1.0), libbz2.so.1.0 (link to libbz2.so.1.0.2) and
libbz2.so.1.0.2
A.7.3.
bzip2 compresses files using the Burrows−Wheeler block sorting text compression algorithm with Huffman
coding. The compression rate is generally considerably better than that achieved by more conventional
compressors using LZ77/LZ78, like gzip.
libbz2* is the library implementing lossless, block−sorting data compression, using the Burrows−Wheeler
algorithm.
A.7.5.
A.8. Coreutils
For installation instructions see Section 6.16.
Installed programs: basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df,
dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id,
install, join, kill, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste,
pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat,
stty, su, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, uptime, users,
vdir, wc, who, whoami and yes
A.8.3.
chgrp changes the group ownership of each given file to the given group. The group can be either given a a
name or a numeric ID.
chmod changes the permissions of each given file to the given mode. The mode can be either a symbolic
representation of the changes to make, or an octal number representing the new permissions.
chown changes the user and/or group ownership of each given file to the given user:group pair.
chroot runs a given command with the specified directory as the / directory. The given command can be an
interactive shell. On most systems only root can do this.
cksum prints the CRC checksum and the byte counts of each specified file.
comm compares two sorted files, outputting in three columns the lines that are unique, and the lines that are
common.
cp copies files.
csplit splits a given file into several new files, separating them according to given patterns or line numbers,
and outputting the byte count of each new file.
cut prints parts of lines, selecting the parts according to given fields or positions.
date displays the current time in the given format, or sets the system date.
dd copies a file using the given blocksize and count, while optionally performing conversions on it.
df reports the amount of disk space available (and used) on all mounted filesystems, or only on the filesystems
holding the given files.
dircolors outputs commands to set the LS_COLOR environment variable, to change the color scheme used
by ls.
du reports the amount of disk space used by the current directory, or by each of the given directories including
all their subdirectories, or by each of the given files.
false does nothing, unsuccessfully. It always exits with a status code indicating failure.
head prints the first ten lines (or the given number of lines) of each given file.
id reports the effective user ID, group ID, and group memberships of the current user, or of a given user.
install copies files while setting their permission modes and, if possible, their owner and group.
join joins from two files the lines that have identical join fields.
link creates a hard link with the given name to the given file.
ls lists the contents of each given directory. By default it orders the files and subdirectories alphabetically.
mknod creates device nodes with the given names. A device node is a character special file, or a block special
file, or a FIFO.
nohup runs a command immune to hangups, with output redirected to a log file.
paste merges the given files, joining sequentially corresponding lines side by side, separated by TABs.
pinky is a lightweight finger. It reports some information about the given users.
printf prints the given arguments according to the given format −− much like the C printf function.
ptx produces from the contents of the given files a permuted index, with each keyword in its context.
seq prints a sequence of numbers, within a given range and with a given increment.
shred overwrites the given files repeatedly with strange patterns, to make it real hard to recover the data.
split splits the given file into pieces, by size or by number of lines.
sum prints checksum and block counts for each given file.
sync flushes filesystem buffers. It forces changed blocks to disk and updates the super block.
tail prints the last ten lines (or the given number of lines) of each given file.
tee reads from standard input while writing both to standard output and to the given files.
touch changes file timestamps, setting the access and modification times of the given files to the current time.
Files that do not exist are created with zero length.
tr translates, squeezes, and deletes the given characters from standard input.
true does nothing, successfully. It always exits with a status code indicating success.
tsort performs a topological sort. It writes a totally ordered list according to the partial ordering in a given
file.
tty reports the file name of the terminal connected to standard input.
uptime reports how long the system has been running, how many users are logged on, and the system load
averages.
wc reports the number of lines, words, and bytes for each given file, and a total line when more than one file
is given.
whoami reports the user name associated with the current effective user ID.
A.8.5.
A.9. DejaGnu
For installation instructions see Section 5.13.
A.9.3.
A.9.5.
A.10. Diffutils
For installation instructions see Section 6.40.
A.10.3.
diff compares two files or directories and reports which lines in the files differ.
A.10.5.
A.11. E2fsprogs
For installation instructions see Section 6.43.
Installed programs: badblocks, blkid, chattr, compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, findfs,
fsck, fsck.ext2, fsck.ext3, logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, mklost+found, resize2fs,
tune2fs and uuidgen.
A.11.3.
blkid is a command line utility to locate and print block device attributes.
compile_et is an error table compiler. It converts a table of error−code names and messages into a C source
file suitable for use with the com_err library.
debugfs is a filesystem debugger. It can be used to examine and change the state of an ext2 filesystem.
dumpe2fs prints the super block and blocks group information for the filesystem present on a given device.
e2fsck is used to check, and optionally repair, second extended (ext2) filesystems, and also ext3 filesystems.
e2label will display or change the filesystem label on the ext2 filesystem present on a given device.
fsck is used to check, and optionally repair, filesystems. By default it checks the filesystems listed in
/etc/fstab
mk_cmds converts a table of command names and help messages into a C source file suitable for use with the
libss subsystem library.
uuidgen creates new universally unique identifiers (UUID). Each new UUID can reasonably be considered
unique among all UUIDs created, on the local system and on other systems, in the past and in the future.
libuuid contains routines for generating unique identifiers for objects that may be accessible beyond the local
system.
A.11.5.
A.12. Ed
For installation instructions see Section 6.41.
Ed Mkstemp Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/ed−0.2−mkstemp.patch
A.12.2. Contents of Ed
GNU ed is an 8−bit clean, POSIX−compliant line editor.
A.12.3.
red is a restricted ed −− it can only edit files in the current directory and cannot execute shell commands.
A.12.5.
A.13. Expect
For installation instructions see Section 5.12.
A.13.3.
A.13.5.
A.14. File
For installation instructions see Section 6.37.
A.14.3.
libmagic contains routines for magic number recognition, used by the file program.
A.14.5.
A.15. Findutils
For installation instructions see Section 6.19.
Installed programs: bigram, code, find, frcode, locate, updatedb and xargs
A.15.3.
code was formerly used to produce locate databases. It is the ancestor of frcode.
find searches given directory trees for files matching the specified criteria.
frcode is called by updatedb to compress the list of file names. It uses front−compression, reducing the
database size by a factor of 4 to 5.
locate searches through a database of file names, and reports the names that contain a given string or match a
given pattern.
updatedb updates the locate database. It scans the entire filesystem (including other filesystems that are
currently mounted, unless told not to) and puts every file name it finds in the database.
A.15.5.
A.16. Flex
For installation instructions see Section 6.28.
A.16.3.
flex++ invokes a version of flex that is used exclusively for C++ scanners.
A.16.5.
A.17. Gawk
For installation instructions see Section 6.20.
Installed programs: awk (link to gawk), gawk, gawk−3.1.3, grcat, igawk, pgawk, pgawk−3.1.3 and pwcat
A.17.3.
A.17.5.
A.18. GCC
For installation instructions see Section 6.15.
GCC−2 (2.95.3):
ftp://ftp.gnu.org/pub/gnu/gcc/
GCC−2 Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc−2.95.3−2.patch
Installed programs: c++, cc (link to gcc), cc1, cc1plus, collect2, cpp, g++, gcc, gccbug, and gcov
A.18.3.
gcc is the C compiler. It is used to translate the source code of a program into assembly code.
gcov is a coverage testing tool. It is used to analyze programs to find out where optimizations will have the
most effect.
A.18.5.
A.19. Gettext
For installation instructions see Section 6.29.
Installed programs: autopoint, config.charset, config.rpath, gettext, gettextize, hostname, msgattrib, msgcat,
msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt,
msguniq, ngettext, project−id, team−address, trigger, urlget, user−email and xgettext
A.19.3.
config.rpath outputs a system−dependent set of variables, describing how to set the runtime search path of
shared libraries in an executable.
gettext translates a natural language message into the user's language, by looking up the translation in a
message catalog.
gettextize copies all standard Gettext files into the given top−level directory of a package, to begin
internationalizing it.
msgattrib filters the messages of a translation catalog according to their attributes and manipulates the
attributes.
msgcmp compares two .po files to check that both contain the same set of msgid strings.
msgcomm finds the messages that are common to to the given .po files.
msggrep extracts all messages of a translation catalog that match a given pattern or belong to some given
source files.
msginit creates a new .po file, initializing the meta information with values from the user's environment.
ngettext displays native language translations of a textual message whose grammatical form depends on a
number.
xgettext extracts the translatable message lines from the given source files, to make the first translation
template.
libasprintf defines the autosprintf class which makes C formatted output routines usable in C++ programs,
for use with the <string> strings and the <iostream> streams.
libgettextlib is a private library containing common routines used by the various gettext programs. They're
not meant for general use.
libgettextpo is used to write specialized programs that process PO files. This library is used when the
standard applications shipped with gettext won't suffice (such as msgcomm, msgcmp, msgattrib and msgen).
libgettextsrc is a private library containing common routines used by the various gettext programs. They're
not meant for general use.
A.19.5.
A.20. Glibc
For installation instructions see Section 6.12.
Glibc−linuxthreads (2.3.2):
ftp://ftp.gnu.org/gnu/glibc/
Installed programs: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4,
locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect,
xtrace, zdump and zic
A.20.3.
getconf displays the system configuration values for filesystem specific variables.
glibcbug creates a bug report and mails it to the bug email address.
ldd reports which shared libraries are required by each given program or shared library.
locale is a Perl program that tells the compiler to enable or disable the use of POSIX locales for built−in
operations.
mtrace...
nscd is a name service cache daemon providing a cache for the most common name service requests.
nscd_nischeck checks whether or not secure mode is necessary for NIS+ lookup.
pt_chown is a helper program for grantpt to set the owner, group and access permissions of a slave pseudo
terminal.
sln is used to make symbolic links. The program is statically linked, so it is useful for making symbolic links
to dynamic libraries if the dynamic linking system for some reason is nonfunctional.
tzselect asks the user about the location of the system and reports the corresponding time zone description.
xtrace traces the execution of a program by printing the currently executed function.
libbsd−compat provides the portability needed in order to run certain BSD programs under Linux.
libmemusage is used by memusage to help collect information about the memory usage of a program.
libnss* are the Name Service Switch libraries, containing functions for resolving host names, user names,
group names, aliases, services, protocols,and the like.
libpcprofile contains profiling functions used to track the amount of CPU time spent in which source code
lines.
libresolv contains functions for creating, sending, and interpreting packets to the Internet domain name
servers.
librt contains functions providing most of the interfaces specified by the POSIX.1b Realtime Extension.
libthread_db contains functions useful for building debuggers for multi−threaded programs.
libutil contains code for "standard" functions used in many different Unix utilities.
A.20.5.
A.21. Grep
For installation instructions see Section 6.44.
Installed programs: egrep (link to grep), fgrep (link to grep) and grep
A.21.3.
A.21.5.
A.22. Groff
For installation instructions see Section 6.26.
Installed programs: addftinfo, afmtodit, eqn, eqn2graph, geqn (link to eqn), grn, grodvi, groff, groffer, grog,
grolbp, grolj4, grops, grotty, gtbl (link to tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops,
pic, pic2graph, post−grohtml, pre−grohtml, refer, soelim, tbl, tfmtodit, troff and zsoelim (link to soelim)
A.22.3.
afmtodit creates a font file for use with groff and grops.
eqn compiles descriptions of equations embedded within troff input files into commands that are understood
by troff.
groff is a front−end to the groff document formatting system. Normally it runs the troff program and a
post−processor appropriate for the selected device.
grog reads files and guesses which of the groff options −e, −man, −me, −mm, −ms, −p, −s, and −t are required
for printing files, and reports the groff command including those options.
grolbp is a groff driver for Canon CAPSL printers (LBP−4 and LBP−8 series laser printers).
grolj4 is a driver for groff that produces output in PCL5 format suitable for an HP Laserjet 4 printer.
grotty translates the output of GNU troff into a form suitable for typewriter−like devices.
hpftodit creates a font file for use with groff −Tlj4 from an HP−tagged font metric file.
indxbib makes an inverted index for the bibliographic databases a specified file for use with refer, lookbib,
and lkbib.
lkbib searches bibliographic databases for references that contain specified keys and reports any references
found.
lookbib prints a prompt on the standard error (unless the standard input is not a terminal), reads from the
standard input a line containing a set of keywords, searches the bibliographic databases in a specified file for
references containing those keywords, prints any references found on the standard output and repeats this
process until the end of input.
pic compiles descriptions of pictures embedded within troff or TeX input files into commands understood by
TeX or troff.
refer copies the contents of a file to the standard output, except that lines between .[ and .] are interpreted as
citations, and lines between .R1 and .R2 are interpreted as commands about how citations are to be processed.
soelim reads files and replaces lines of the form .so file by the contents of the mentioned file.
tbl compiles descriptions of tables embedded within troff input files into commands that are understood by
troff.
troff is highly compatible with Unix troff. Usually it should be invoked using the groff command, which will
also run preprocessors and post−processors in the appropriate order and with the appropriate options.
A.22.5.
A.23. Grub
For installation instructions see Section 6.45.
A.23.3.
grub−terminfo generates a terminfo command from a terminfo name. It can be used if you have an
uncommon terminal.
A.23.5.
A.24. Gzip
For installation instructions see Section 6.46.
Installed programs: gunzip (link to gzip), gzexe, gzip, uncompress (link to gunzip), zcat (link to gzip), zcmp,
zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore and znew
A.24.3.
zforce forces a .gz extension on all given files that are gzipped files, so that gzip will not compress them
again. This can be useful when file names were truncated during a file transfer.
A.24.5.
A.25. Inetutils
For installation instructions see Section 6.31.
A.25.1.
Installed programs: ftp, ping, rcp, rlogin, rsh, talk, telnet and tftp
A.25.4.
ping sends echo−request packets and reports how long the replies take.
A.25.6.
A.26. Kbd
For installation instructions see Section 6.42.
Installed programs: chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, getunimap, kbd_mode, kbdrate,
loadkeys, loadunimap, mapscrn, openvt, psfaddtable (link to psfxtable), psfgettable (link to psfxtable),
psfstriptable (link to psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setlogcons, setmetamode,
setvesablank, showconsolefont, showkey, unicode_start and unicode_stop
A.26.3.
mapscrn is an obsolete program that used to load a user−defined output character mapping table into the
console driver. This is now done by setfont.
psf* are a set of tools for handling Unicode character tables for console fonts.
setkeycodes loads kernel scancode−to−keycode mapping table entries, useful if you have some unusual keys
on your keyboard.
setleds sets the keyboard flags and LEDs. Many people find it useful to have NumLock on by default, setleds
+num achieves this.
setvesablank lets you fiddle with the built−in hardware screensaver (no toasters, just a blank screen).
showkey reports the scancodes and keycodes and ASCII codes of the keys pressed on the keyboard.
A.26.5.
A.27. Less
For installation instructions see Section 6.25.
A.27.3.
A.27.5.
A.28. LFS−Bootscripts
For installation instructions see Section 6.61.
Installed scripts: checkfs, cleanfs, functions, halt, ifdown, ifup, loadkeys, localnet, mountfs, mountproc,
network, rc, reboot, sendsignals, setclock, swap, sysklogd and template
A.28.3.
The cleanfs script removes files that shouldn't be preserved between reboots, such as those in /var/run/
and /var/lock/. It re−creates /var/run/utmp and removes the possibly present /etc/nologin,
/fastboot and /forcefsck files.
The functions script contains functions shared among different scripts, such as error and status checking.
The ifdown and ifup scripts assist the network script with network devices.
The loadkeys script loads the keymap table you specified as proper for your keyboard layout.
The localnet script sets up the system's hostname and local loopback device.
The mountfs script mounts all file systems that aren't marked noauto or aren't network based.
The network script sets up network interfaces, such as network cards, and sets up the default gateway where
applicable.
The rc script is the master runlevel control script. It is responsible for running all the other scripts
one−by−one in a specific sequence.
The sendsignals script makes sure every process is terminated before the system reboots or halts.
The setclock script resets the kernel clock to localtime in case the hardware clock isn't set to GMT time.
The swap script enables and disables swap files and partitions.
The sysklogd script starts and stops the system and kernel log daemons.
The template script is a template you can use to create your own bootscripts for your other daemons.
A.28.5.
A.29. Lfs−Utils
For installation instructions see Section 6.18.
A.29.1.
A.29.4.
tempfile creates temporary files in a less secure manner than mktemp. It is installed for
backwards−compatibility.
The http−get script takes advantage of a little known feature of bash called "net redirection". It is used to
download from websites without using any other programs.
iana−net uses the http−get script to simplify the process of procuring IANA's services and protocols
configuration files.
A.29.6.
A.30. Libtool
For installation instructions see Section 6.38.
A.30.3.
A.30.5.
A.31.3.
The kernel headers define the interface to the services that the kernel provides. The headers in your system's
include directory should always be the ones against which Glibc was compiled and should therefore not be
A.31.5.
A.32. M4
For installation instructions see Section 6.23.
A.32.2. Contents of M4
M4 is a macro processor. It copies input to output, expanding macros as it goes. Macros are either built−in or
user−defined and can take any number of arguments. Besides just doing macro expansion, m4 has built−in
functions for including named files, running Unix commands, doing integer arithmetic, manipulating text in
various ways, recursion, etc. The m4 program can be used either as a front−end to a compiler or as a macro
processor in its own right.
Installed program: m4
A.32.3.
A.32.5.
A.33. Make
For installation instructions see Section 6.48.
A.33.3.
A.33.5.
A.34. MAKEDEV
For installation instructions see Section 6.9.
A.34.3.
A.34.5.
A.35. Man
For installation instructions see Section 6.47.
A.35.3.
makewhatis builds the whatis database. It reads all the manual pages in the manpath and for each page writes
the name and a short description in the whatis database.
whatis searches the whatis database and displays the short descriptions of system commands that contain the
given keyword as a separate word.
A.35.5.
A.36. Man−pages
For installation instructions see Section 6.11.
A.36.3.
A.36.5.
A.37. Modutils
For installation instructions see Section 6.49.
A.37.3.
insmod_ksymoops_clean deletes saved ksyms and modules not accessed for two days.
modinfo examines an object file associated with a kernel module and displays any information that it can
glean.
modprobe uses a dependency file, created by depmod, to automatically load the relevant modules.
A.37.5.
A.38. Ncurses
For installation instructions see Section 6.21.
Installed programs: captoinfo (link to tic), clear, infocmp, infotocap (link to tic), reset (link to tset), tack, tic,
toe, tput and tset
A.38.3.
tack is the terminfo action checker. It is mainly used to test the correctness of an entry in the terminfo
database.
tic is the terminfo entry−description compiler. It translates a terminfo file from source format into the binary
format needed for the ncurses library routines. A terminfo file contains information on the capabilities of a
certain terminal.
toe lists all available terminal types, for each giving its primary name and its description.
tput makes the values of terminal−dependent capabilities available to the shell. It can also be used to reset or
initialize a terminal, or report its long name.
libncurses* contain functions to display text in many complicated ways on a terminal screen. A good
example of the use of these functions is the menu displayed during the kernel's make menuconfig.
A.38.5.
A.39. Net−tools
For installation instructions see Section 6.30.
Installed programs: arp, dnsdomainname (link to hostname), domainname (link to hostname), hostname,
ifconfig, nameif, netstat, nisdomainname (link to hostname), plipconfig, rarp, route, slattach and
ypdomainname (link to hostname)
A.39.3.
netstat is used to report network connections, routing tables, and interface statistics..
plipconfig is used to fine tune the PLIP device parameters, to improve its performance.
slattach attaches a network interface to a serial line. This allows you to use normal terminal lines for
point−to−point links to other computers.
A.39.5.
A.40. Patch
For installation instructions see Section 6.50.
A.40.3.
A.40.5.
A.41. Perl
For installation instructions see Section 6.32.
Installed programs: a2p, c2ph, dprofpp, enc2xs, find2perl, h2ph, h2xs, libnetcfg, perl, perl5.8.0 (link to perl),
perlbug, perlcc, perldoc, perlivp, piconv, pl2pm, pod2html, pod2latex, pod2man, pod2text, pod2usage,
podchecker, podselect, psed (link to s2p), pstruct (link to c2ph), s2p, splain and xsubpp
A.41.3.
en2cxs builds a Perl extension for the Encode module, from either Unicode Character Mappings or Tcl
Encoding Files.
perl combines some of the best features of C, sed, awk and sh into a single swiss−army language.
perlbug is used to generate bug reports about Perl or the modules that come with it, and mail them.
perldoc displays a piece of documentation in pod format that is embedded in the perl installation tree or in a
perl script.
perlivp is the Perl Installation Verification Procedure. It can be used to verify that Perl and its libraries have
been installed correctly.
pl2pm is a rough tool for converting Perl4 .pl files to Perl5 .pm modules.
A.41.5.
A.42. Procinfo
For installation instructions see Section 6.51.
A.42.3.
procinfo displays an overview of some of the info present in the virtual proc filesystem.
socklist lists the open sockets, reporting their type, portnumber, and other specifics.
A.42.5.
A.43. Procps
For installation instructions see Section 6.52.
Installed programs: free, kill, pgrep, pkill, pmap, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w and
watch
A.43.3.
snice changes the scheduling priority of processes matching the given criteria.
top displays the top CPU processes. It provides an ongoing look at processor activity in real time.
uptime reports how long the system has been running, how many users are logged on, and the system load
averages.
vmstat reports virtual memory statistics, giving information about processes, memory, paging, block IO,
traps, and CPU activity.
w shows which users are currently logged on, where and since when.
watch runs a given command repeatedly, displaying the first screenful of its output. This allows you to watch
the output change over time.
A.43.5.
A.44. Psmisc
For installation instructions see Section 6.53.
A.44.3.
killall kills processes by name. It sends a signal to all processes running any of the given commands.
pidof reports the PIDs of the given programs. (Not this pidof program is used, however, but the one from
Sysvinit.)
A.44.5.
A.45. Sed
For installation instructions see Section 6.27.
A.45.3.
A.45.5.
A.46. Shadow
For installation instructions see Section 6.54.
Installed programs: chage, chfn, chpasswd, chsh, dpasswd, expiry, faillog, gpasswd, groupadd, groupdel,
groupmod, groups, grpck, grpconv, grpunconv, lastlog, login, logoutd, mkpasswd, newgrp, newusers, passwd,
pwck, pwconv, pwunconv, sg (link to newgrp), useradd, userdel, usermod, vigr (link to vipw) and vipw
A.46.3.
chfn is used to change a user's full name and some other info.
chpasswd is used to update the passwords of a whole series of user accounts in one go.
faillog is used to examine the log of login failures, to set a maximum number of failures before an account is
blocked, or to reset the failure count.
groups reports the groups of which the given users are members.
grpck verifies the integrity of the group files, /etc/group and /etc/gshadow.
grpconv creates or updates the shadow group file from the normal group file.
grpunconv updates /etc/group from /etc/gshadow and then deletes the latter.
lastlog reports the most recent login of all users, or of a given user.
mkpasswd encrypts the given password using the also given perturbation.
newusers is used to create or update a whole series of user accounts in one go.
pwck verifies the integrity of the password files, /etc/passwd and /etc/shadow.
pwconv creates or updates the shadow password file from the normal password file.
pwunconv updates /etc/passwd from /etc/shadow and then deletes the latter.
sg executes a given command while the user's GID is set to that of the given group.
useradd creates a new user with the given name, or updates the default new−user information.
usermod is used to modify the given user's login name, UID, shell, initial group, home directory, and the like.
libmisc...
A.46.5.
A.47. Sysklogd
For installation instructions see Section 6.55.
A.47.3.
syslogd logs the messages that system programs offer for logging. Every logged message contains at least a
date stamp and a hostname, and normally the program's name too, but that depends on how trusting the
logging daemon is told to be.
A.47.5.
A.48. Sysvinit
For installation instructions see Section 6.56.
Installed programs: halt, init, killall5, last, lastb (link to last), mesg, pidof (link to killall5), poweroff (link to
halt), reboot (link to halt), runlevel, shutdown, sulogin, telinit (link to init), utmpdump and wall
A.48.3.
init is the mother of all processes. It reads its commands from /etc/inittab, which normally tell it which
scripts to run for which runlevel, and how many gettys to spawn.
killall5 sends a signal to all processes, except the processes in its own session −− so it won't kill the shell
running the script that called it.
last shows which users last logged in (and out), searching back through the file /var/log/wtmp. It can
also show system boots and shutdowns, and runlevel changes.
mesg controls whether other users can send messages to the current user's terminal.
poweroff tells the kernel to halt the system and switch off the computer. But see halt.
reboot tells the kernel to reboot the system. But see halt.
runlevel reports the previous and the current runlevel, as noted in the last runlevel record in
/var/run/utmp.
shutdown brings the system down in a secure way, signaling all processes and notifying all logged−in users.
sulogin allows the superuser to log in. It is normally invoked by init when the system goes into single user
mode.
utmpdump displays the content of the given login file in a friendlier format.
A.48.5.
A.49. Tar
For installation instructions see Section 6.57.
A.49.3.
tar is used to create and extract files from archives, also known as tarballs.
A.49.5.
A.50. Tcl
For installation instructions see Section 5.11.
A.50.3.
A.50.5.
A.51. Texinfo
For installation instructions see Section 6.33.
A.51.3.
infokey compiles a source file containing Info customizations into a binary format.
install−info is used to install Info files. It updates entries in the Info index file.
makeinfo translates the given Texinfo source documents into various other formats: Info files, plain text, or
HTML.
texi2dvi is used to format the given Texinfo document into a device−independent file that can be printed.
A.51.5.
A.52. Util−linux
For installation instructions see Section 6.58.
Installed programs: agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel,
cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm,
ipcs, isosize, kill, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap,
more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (link to rdev), raw, rdev, readprofile,
rename, renice, rev, rootflags (link to rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (link to swapon),
swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (link to rdev), whereis and write
A.52.3.
blockdev allows you to call block device ioctls from the command line.
colcrt is used to filter nroff output for terminals that lack some capabilities such as overstriking and
half−lines.
ctrlaltdel sets the function of the Ctrl+Alt+Del key combination, to a hard or a soft reset.
cytune was used to tune the parameters of the serial line drivers for Cyclades cards.
ddate gives the Discordian date, or converts the given Gregorian date to a Discordian one.
elvtune can be used to tune the performance and interactiveness of a block device.
fdisk could be used to manipulate the partition table of the given device.
fsck.cramfs performs a consistency check on the Cramfs filesystem on the given device.
fsck.minix performs a consistency check on the Minix filesystem on the given device.
hwclock is used to read or set the system's hardware clock (also called the RTC or BIOS clock).
mcookie generates magic cookies, 128−bit random hexadecimal numbers, for xauth.
more is a filter for paging through text one screenful at a time. But less is much better.
mount attaches the filesystem on the given device to the given directory in the system's file tree.
pivot_root makes the given filesystem the new root filesystem of the current process.
ramsize could be used to set the size of the RAM disk in a bootable image.
rdev could be used to query and set the root device and other things in a bootable image.
rename renames the given files, replacing a given string with another.
ul is a filter for translating underscores into escape sequences indicating underlining for the terminal in use.
whereis reports the location of binary, the source, and the manual page for the given command.
write sends a message to the given user. That is, if that user has not disabled such messages.
A.52.5.
A.53. Vim
For installation instructions see Section 6.22.
Installed programs: efm_filter.pl, efm_perl.pl, ex (link to vim), less.sh, mve.awk, pltags.pl, ref, rview (link to
vim), rvim (link to vim), shtags.pl, tcltags, vi (link to vim), view (link to vim), vim, vim132, vim2html.pl,
vimdiff (link to vim), vimm, vimspell.sh, vimtutor and xxd
A.53.3.
efm_perl.pl reformats the error messages of the Perl interpreter for use with the quickfix mode of vim.
pltags.pl creates a tags file for perl code, for use by vim.
rview is a restricted version of view: no shell commands can be started and view can't be suspended.
rvim is a restricted version of vim: no shell commands can be started and vim can't be suspended.
vimdiff edits two or three versions of a file with vim and show differences.
vimspell.sh is a script which spells a file and generates the syntax statements necessary to highlight in vim.
xxd makes a hexdump of the given file. It can also do the reverse, so it can be used for binary patching.
A.53.5.
A.54. Zlib
For installation instructions see Section 6.17.
A.54.1.
http://www.linuxfromscratch.org/patches/lfs/5.0/zlib−1.1.4−vsnprintf.patch
A.54.4.
A.54.6.
• a2p : Perl
• acinstall : Automake
• aclocal : Automake
• addftinfo : Groff
• addr2line : Binutils
• afmtodit : Groff
• agetty : Util−linux
• apropos : Man
• ar : Binutils
• arch : Util−linux
• arp : Net−tools
• as : Binutils
• attrs : Perl
• autoconf : Autoconf
• autoheader : Autoconf
• autom4te : Autoconf
• automake : Automake
• autopoint : Gettext
• autoreconf : Autoconf
• autoscan : Autoconf
• autoupdate : Autoconf
• awk : Gawk
• badblocks : E2fsprogs
• basename : Coreutils
• bash : Bash
• bashbug : Bash
• bigram : Findutils
• bison : Bison
• blkid : E2fsprogs
• blockdev : Util−linux
• bunzip2 : Bzip2
• bzcat : Bzip2
• bzcmp : Bzip2
• bzdiff : Bzip2
• bzegrep : Bzip2
• bzfgrep : Bzip2
• bzgrep : Bzip2
• bzip2 : Bzip2
• bzip2recover : Bzip2
• bzless : Bzip2
• bzmore : Bzip2
• c++ : GCC
• c++filt : Binutils
• c2ph : Perl
• cal : Util−linux