source: chapter02/hostreqs.xml@ 5d2d864

multilib
Last change on this file since 5d2d864 was 5d2d864, checked in by Thomas Trepl <thomas@…>, 5 months ago

Automatic merge of trunk into multilib

  • Property mode set to 100644
File size: 10.1 KB
Line 
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">
5 %general-entities;
6]>
7
8<sect1 id="ch-partitioning-hostreqs" xreflabel="Host System Requirements">
9 <?dbhtml filename="hostreqs.html"?>
10
11 <title>Host System Requirements</title>
12
13 <sect2>
14 <title>Hardware</title>
15
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
20 than documented.
21 </para>
22
23 </sect2>
24
25 <sect2>
26 <title>Software</title>
27
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 <quote>&lt;package-name&gt;-devel</quote> or
33 <quote>&lt;package-name&gt;-dev</quote>. Be sure to install those if
34 your distribution provides them.</para>
35
36 <para>Earlier versions of the listed software packages may work, but have
37 not been tested.</para>
38
39 <itemizedlist spacing="compact">
40
41 <listitem>
42 <para><emphasis role="strong">Bash-3.2</emphasis> (/bin/sh
43 should be a symbolic or hard link to bash)</para>
44 </listitem>
45
46 <listitem>
47 <para><emphasis role="strong">Binutils-2.13.1</emphasis> (Versions
48 greater than &binutils-version; are not recommended as they have
49 not been tested)</para>
50 </listitem>
51
52 <listitem>
53 <para><emphasis role="strong">Bison-2.7</emphasis> (/usr/bin/yacc
54 should be a link to bison or a small script that executes bison)</para>
55 </listitem>
56
57 <!-- In Coreutils-8.1 the nproc program is added. -->
58 <listitem>
59 <para><emphasis role="strong">Coreutils-8.1</emphasis></para>
60 </listitem>
61
62 <listitem>
63 <para><emphasis role="strong">Diffutils-2.8.1</emphasis></para>
64 </listitem>
65
66 <listitem>
67 <para><emphasis role="strong">Findutils-4.2.31</emphasis></para>
68 </listitem>
69
70 <listitem>
71 <para><emphasis role="strong">Gawk-4.0.1</emphasis> (/usr/bin/awk
72 should be a link to gawk)</para>
73 </listitem>
74
75 <listitem>
76 <!-- Pass 1 GCC FTBFS with GCC-5.1 because of
77 https://gcc.gnu.org/PR65801. -->
78 <para><emphasis role="strong">GCC-5.2</emphasis> including the C++
79 compiler, <command>g++</command> (Versions greater than &gcc-version; are
80 not recommended as they have not been tested). C and C++ standard
81 libraries (with headers) must also be present so the C++ compiler can
82 build hosted programs</para>
83 </listitem>
84
85 <listitem>
86 <para><emphasis role="strong">Grep-2.5.1a</emphasis></para>
87 </listitem>
88
89 <listitem>
90 <para><emphasis role="strong">Gzip-1.3.12</emphasis></para>
91 </listitem>
92
93 <listitem>
94 <para><emphasis role="strong">Linux Kernel-&min-kernel;</emphasis></para>
95
96 <para>The reason for the kernel version requirement is that we specify
97 that version when building <application>glibc</application> in
98 <xref linkend="chapter-cross-tools"/> and
99 <xref linkend="chapter-building-system"/>, so the workarounds for
100 older kernels are not enabled and the compiled
101 <application>glibc</application> is slightly faster and smaller.
102 As at June 2023, &min-kernel; is the oldest kernel release still
103 supported by the kernel developers.</para>
104
105 <para>If the host kernel is earlier than &min-kernel; you will need to replace
106 the kernel with a more up-to-date version. There are two ways
107 you can go about this. First, see if your Linux vendor provides a &min-kernel;
108 or later kernel package. If so, you may wish to install it. If your
109 vendor doesn't offer an acceptable kernel package, or you would prefer not to
110 install it, you can compile a kernel yourself. Instructions for
111 compiling the kernel and configuring the boot loader (assuming the host
112 uses GRUB) are located in <xref linkend="chapter-bootable"/>.</para>
113
114 <para>We require the host kernel to support UNIX 98 pseudo terminal
115 (PTY). It should be enabled on all desktop or server distros shipping
116 Linux &min-kernel; or a newer kernel. If you are building a custom
117 host kernel, ensure <option>CONFIG_UNIX98_PTYS</option> is set to
118 <literal>y</literal> in the kernel configuration.</para>
119
120 </listitem>
121
122 <listitem>
123 <para><emphasis role="strong">M4-1.4.10</emphasis></para>
124 </listitem>
125
126 <listitem>
127 <para><emphasis role="strong">Make-4.0</emphasis></para>
128 </listitem>
129
130 <listitem>
131 <para><emphasis role="strong">Patch-2.5.4</emphasis></para>
132 </listitem>
133
134 <listitem>
135 <para><emphasis role="strong">Perl-5.8.8</emphasis></para>
136 </listitem>
137
138 <listitem>
139 <para><emphasis role="strong">Python-3.4</emphasis></para>
140 </listitem>
141
142 <listitem>
143 <para><emphasis role="strong">Sed-4.1.5</emphasis></para>
144 </listitem>
145
146 <listitem>
147 <para><emphasis role="strong">Tar-1.22</emphasis></para>
148 </listitem>
149
150 <listitem>
151 <para><emphasis role="strong">Texinfo-5.0</emphasis></para>
152 </listitem>
153
154 <listitem>
155 <para><emphasis role="strong">Xz-5.0.0</emphasis></para>
156 </listitem>
157
158 </itemizedlist>
159
160 <important>
161 <para>Note that the symlinks mentioned above are required to build an LFS
162 system using the instructions contained within this book. Symlinks that
163 point to other software (such as dash, mawk, etc.) may work, but are not
164 tested or supported by the LFS development team, and may require either
165 deviation from the instructions or additional patches to some
166 packages.</para>
167 </important>
168
169 <!-- Use an empty sect2 element to prevent a pdf warning. -->
170 <bridgehead renderas="sect2"
171 id="version-check"
172 xreflabel="Host System Requirements">
173 </bridgehead>
174 <!--<title> </title>-->
175
176 <para >To see whether your host system has all the appropriate versions, and
177 the ability to compile programs, run the following commands:</para>
178
179<screen role="nodump"><?dbfo keep-together="auto"?><userinput>cat &gt; version-check.sh &lt;&lt; "EOF"
180<literal>#!/bin/bash
181# A script to list version numbers of critical development tools
182
183# If you have tools installed in other directories, adjust PATH here AND
184# in ~lfs/.bashrc (section 4.4) as well.
185
186LC_ALL=C
187PATH=/usr/bin:/bin
188
189bail() { echo "FATAL: $1"; exit 1; }
190grep --version > /dev/null 2> /dev/null || bail "grep does not work"
191sed '' /dev/null || bail "sed does not work"
192sort /dev/null || bail "sort does not work"
193
194ver_check()
195{
196 if ! type -p $2 &amp;>/dev/null
197 then
198 echo "ERROR: Cannot find $2 ($1)"; return 1;
199 fi
200 v=$($2 --version 2>&amp;1 | grep -E -o '[0-9]+\.[0-9\.]+[a-z]*' | head -n1)
201 if printf '%s\n' $3 $v | sort --version-sort --check &amp;>/dev/null
202 then
203 printf "OK: %-9s %-6s >= $3\n" "$1" "$v"; return 0;
204 else
205 printf "ERROR: %-9s is TOO OLD ($3 or later required)\n" "$1";
206 return 1;
207 fi
208}
209
210ver_kernel()
211{
212 kver=$(uname -r | grep -E -o '^[0-9\.]+')
213 if printf '%s\n' $1 $kver | sort --version-sort --check &amp;>/dev/null
214 then
215 printf "OK: Linux Kernel $kver >= $1\n"; return 0;
216 else
217 printf "ERROR: Linux Kernel ($kver) is TOO OLD ($1 or later required)\n" "$kver";
218 return 1;
219 fi
220}
221
222# Coreutils first because --version-sort needs Coreutils >= 7.0
223ver_check Coreutils sort 8.1 || bail "Coreutils too old, stop"
224ver_check Bash bash 3.2
225ver_check Binutils ld 2.13.1
226ver_check Bison bison 2.7
227ver_check Diffutils diff 2.8.1
228ver_check Findutils find 4.2.31
229ver_check Gawk gawk 4.0.1
230ver_check GCC gcc 5.2
231ver_check "GCC (C++)" g++ 5.2
232ver_check Grep grep 2.5.1a
233ver_check Gzip gzip 1.3.12
234ver_check M4 m4 1.4.10
235ver_check Make make 4.0
236ver_check Patch patch 2.5.4
237ver_check Perl perl 5.8.8
238ver_check Python python3 3.4
239ver_check Sed sed 4.1.5
240ver_check Tar tar 1.22
241ver_check Texinfo texi2any 5.0
242ver_check Xz xz 5.0.0
243ver_kernel &min-kernel;
244
245if mount | grep -q 'devpts on /dev/pts' &amp;&amp; [ -e /dev/ptmx ]
246then echo "OK: Linux Kernel supports UNIX 98 PTY";
247else echo "ERROR: Linux Kernel does NOT support UNIX 98 PTY"; fi
248
249alias_check() {
250 if $1 --version 2>&amp;1 | grep -qi $2
251 then printf "OK: %-4s is $2\n" "$1";
252 else printf "ERROR: %-4s is NOT $2\n" "$1"; fi
253}
254echo "Aliases:"
255alias_check awk GNU
256alias_check yacc Bison
257alias_check sh Bash
258
259echo "Compiler check:"
260if printf "int main(){}" | g++ -x c++ -
261then echo "OK: g++ works";
262else echo "ERROR: g++ does NOT work"; fi
263rm -f a.out
264
265if [ "$(nproc)" = "" ]; then
266 echo "ERROR: nproc is not available or it produces empty output"
267else
268 echo "OK: nproc reports $(nproc) logical cores are available"
269fi</literal>
270EOF
271
272bash version-check.sh</userinput></screen>
273
274 <para arch="ml_32,ml_x32,ml_all">
275 Building multilib support requires the kernel of the host system
276 to have 32-bit emulation support included.
277 </para>
278<screen arch="ml_32,ml_x32,ml_all">Binary Emulations ---&gt;
279 [*] IA32 Emulation
280 &lt;M&gt; IA32 a.out support
281 [*] x32 ABI for 64-bit mode
282</screen>
283
284 <para arch="ml_32,ml_x32,ml_all">The option 'IA32 a.out support' is
285 optional. In case your kernel does not have 'x32 ABI for 64-bit mode'
286 enabled but only 'IA32 Emulation', you can continue to build your
287 system but you have to leave out any sections showing instructions
288 for building x32 objects. If neither 'IA32 Emulation' nor
289 'x32 ABI for 64-bit mode' is enabled, you will run in errors
290 latest when building <application>glibc</application> in Chapter 6,
291 so an upgrade of your host system kernel is required.
292 </para>
293
294 </sect2>
295
296</sect1>
Note: See TracBrowser for help on using the repository browser.