1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
8 <sect1 id="ch-partitioning-hostreqs" xreflabel="Host System Requirements">
9 <?dbhtml filename="hostreqs.html"?>
11 <title>Host System Requirements</title>
14 <title>Hardware</title>
16 <para>The LFS editors recommend that the system CPU have at least
17 four cores and that the system have at least 8 GB of memory.
18 Older systems that do not meet these requirements will still work,
19 but the time to build packages will be significantly longer
26 <title>Software</title>
28 <para>Your host system should have the following software with the
29 minimum versions indicated. This should not be an issue for most
30 modern Linux distributions. Also note that many distributions will
31 place software headers into separate packages, often in the form of
32 <literal><replaceable><package-name></replaceable>-devel</literal>
34 <literal><replaceable><package-name></replaceable>-dev</literal>.
35 Be sure to install those if your distribution provides them.</para>
37 <para>Earlier versions of the listed software packages may work, but have
38 not been tested.</para>
40 <itemizedlist spacing="compact">
43 <para><emphasis role="strong">Bash-3.2</emphasis> (/bin/sh
44 should be a symbolic or hard link to bash)</para>
48 <para><emphasis role="strong">Binutils-2.13.1</emphasis> (Versions
49 greater than &binutils-version; are not recommended as they have
50 not been tested)</para>
54 <para><emphasis role="strong">Bison-2.7</emphasis> (/usr/bin/yacc
55 should be a link to bison or a small script that executes bison)</para>
58 <!-- In Coreutils-8.1 the nproc program is added. -->
60 <para><emphasis role="strong">Coreutils-8.1</emphasis></para>
64 <para><emphasis role="strong">Diffutils-2.8.1</emphasis></para>
68 <para><emphasis role="strong">Findutils-4.2.31</emphasis></para>
72 <para><emphasis role="strong">Gawk-4.0.1</emphasis> (/usr/bin/awk
73 should be a link to gawk)</para>
77 <!-- Pass 1 GCC FTBFS with GCC-5.1 because of
78 https://gcc.gnu.org/PR65801. -->
79 <para><emphasis role="strong">GCC-5.2</emphasis> including the C++
80 compiler, <command>g++</command> (Versions greater than &gcc-version; are
81 not recommended as they have not been tested). C and C++ standard
82 libraries (with headers) must also be present so the C++ compiler can
83 build hosted programs</para>
87 <para><emphasis role="strong">Grep-2.5.1a</emphasis></para>
91 <para><emphasis role="strong">Gzip-1.3.12</emphasis></para>
95 <para><emphasis role="strong">Linux Kernel-&min-kernel;</emphasis></para>
97 <para>The reason for the kernel version requirement is that we specify
98 that version when building <application>glibc</application> in
99 <xref linkend="chapter-cross-tools"/> and
100 <xref linkend="chapter-building-system"/>, so the workarounds for
101 older kernels are not enabled and the compiled
102 <application>glibc</application> is slightly faster and smaller.
103 As at Feb 2024, &min-kernel; is the oldest kernel release still
104 supported by the kernel developers. Some kernel releases older than
105 &min-kernel; may be still supported by third-party teams, but they
106 are not considered official upstream kernel releases; read
107 <ulink url='https://kernel.org/category/releases.html'/> for the
110 <para>If the host kernel is earlier than &min-kernel; you will need to replace
111 the kernel with a more up-to-date version. There are two ways
112 you can go about this. First, see if your Linux vendor provides a &min-kernel;
113 or later kernel package. If so, you may wish to install it. If your
114 vendor doesn't offer an acceptable kernel package, or you would prefer not to
115 install it, you can compile a kernel yourself. Instructions for
116 compiling the kernel and configuring the boot loader (assuming the host
117 uses GRUB) are located in <xref linkend="chapter-bootable"/>.</para>
119 <para>We require the host kernel to support UNIX 98 pseudo terminal
120 (PTY). It should be enabled on all desktop or server distros shipping
121 Linux &min-kernel; or a newer kernel. If you are building a custom
122 host kernel, ensure <option>CONFIG_UNIX98_PTYS</option> is set to
123 <literal>y</literal> in the kernel configuration.</para>
128 <para><emphasis role="strong">M4-1.4.10</emphasis></para>
132 <para><emphasis role="strong">Make-4.0</emphasis></para>
136 <para><emphasis role="strong">Patch-2.5.4</emphasis></para>
140 <para><emphasis role="strong">Perl-5.8.8</emphasis></para>
144 <para><emphasis role="strong">Python-3.4</emphasis></para>
148 <para><emphasis role="strong">Sed-4.1.5</emphasis></para>
152 <para><emphasis role="strong">Tar-1.22</emphasis></para>
156 <para><emphasis role="strong">Texinfo-5.0</emphasis></para>
160 <para><emphasis role="strong">Xz-5.0.0</emphasis></para>
166 <para>Note that the symlinks mentioned above are required to build an LFS
167 system using the instructions contained within this book. Symlinks that
168 point to other software (such as dash, mawk, etc.) may work, but are not
169 tested or supported by the LFS development team, and may require either
170 deviation from the instructions or additional patches to some
174 <!-- Use an empty sect2 element to prevent a pdf warning. -->
175 <bridgehead renderas="sect2"
177 xreflabel="Host System Requirements">
179 <!--<title> </title>-->
181 <para >To see whether your host system has all the appropriate versions, and
182 the ability to compile programs, run the following commands:</para>
184 <screen role="nodump"><?dbfo keep-together="auto"?><userinput>cat > version-check.sh << "EOF"
186 # A script to list version numbers of critical development tools
188 # If you have tools installed in other directories, adjust PATH here AND
189 # in ~lfs/.bashrc (section 4.4) as well.
194 bail() { echo "FATAL: $1"; exit 1; }
195 grep --version > /dev/null 2> /dev/null || bail "grep does not work"
196 sed '' /dev/null || bail "sed does not work"
197 sort /dev/null || bail "sort does not work"
201 if ! type -p $2 &>/dev/null
203 echo "ERROR: Cannot find $2 ($1)"; return 1;
205 v=$($2 --version 2>&1 | grep -E -o '[0-9]+\.[0-9\.]+[a-z]*' | head -n1)
206 if printf '%s\n' $3 $v | sort --version-sort --check &>/dev/null
208 printf "OK: %-9s %-6s >= $3\n" "$1" "$v"; return 0;
210 printf "ERROR: %-9s is TOO OLD ($3 or later required)\n" "$1";
217 kver=$(uname -r | grep -E -o '^[0-9\.]+')
218 if printf '%s\n' $1 $kver | sort --version-sort --check &>/dev/null
220 printf "OK: Linux Kernel $kver >= $1\n"; return 0;
222 printf "ERROR: Linux Kernel ($kver) is TOO OLD ($1 or later required)\n" "$kver";
227 # Coreutils first because --version-sort needs Coreutils >= 7.0
228 ver_check Coreutils sort 8.1 || bail "Coreutils too old, stop"
229 ver_check Bash bash 3.2
230 ver_check Binutils ld 2.13.1
231 ver_check Bison bison 2.7
232 ver_check Diffutils diff 2.8.1
233 ver_check Findutils find 4.2.31
234 ver_check Gawk gawk 4.0.1
235 ver_check GCC gcc 5.2
236 ver_check "GCC (C++)" g++ 5.2
237 ver_check Grep grep 2.5.1a
238 ver_check Gzip gzip 1.3.12
239 ver_check M4 m4 1.4.10
240 ver_check Make make 4.0
241 ver_check Patch patch 2.5.4
242 ver_check Perl perl 5.8.8
243 ver_check Python python3 3.4
244 ver_check Sed sed 4.1.5
245 ver_check Tar tar 1.22
246 ver_check Texinfo texi2any 5.0
247 ver_check Xz xz 5.0.0
248 ver_kernel &min-kernel;
250 if mount | grep -q 'devpts on /dev/pts' && [ -e /dev/ptmx ]
251 then echo "OK: Linux Kernel supports UNIX 98 PTY";
252 else echo "ERROR: Linux Kernel does NOT support UNIX 98 PTY"; fi
255 if $1 --version 2>&1 | grep -qi $2
256 then printf "OK: %-4s is $2\n" "$1";
257 else printf "ERROR: %-4s is NOT $2\n" "$1"; fi
261 alias_check yacc Bison
264 echo "Compiler check:"
265 if printf "int main(){}" | g++ -x c++ -
266 then echo "OK: g++ works";
267 else echo "ERROR: g++ does NOT work"; fi
270 if [ "$(nproc)" = "" ]; then
271 echo "ERROR: nproc is not available or it produces empty output"
273 echo "OK: nproc reports $(nproc) logical cores are available"
277 bash version-check.sh</userinput></screen>