source: chapter06/createfiles.xml@ 75828c3

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 75828c3 was 75828c3, checked in by Bruce Dubbs <bdubbs@…>, 5 years ago

Add some locales and symlinks to avoid test errors.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@11518 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 12.6 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
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-system-createfiles">
9 <?dbhtml filename="createfiles.html"?>
10
11 <title>Creating Essential Files and Symlinks</title>
12
13 <indexterm zone="ch-system-createfiles">
14 <primary sortas="e-/etc/passwd">/etc/passwd</primary>
15 </indexterm>
16
17 <indexterm zone="ch-system-createfiles">
18 <primary sortas="e-/etc/group">/etc/group</primary>
19 </indexterm>
20
21 <indexterm zone="ch-system-createfiles">
22 <primary sortas="e-/var/run/utmp">/var/run/utmp</primary>
23 </indexterm>
24
25 <indexterm zone="ch-system-createfiles">
26 <primary sortas="e-/var/log/btmp">/var/log/btmp</primary>
27 </indexterm>
28
29 <indexterm zone="ch-system-createfiles">
30 <primary sortas="e-/var/log/lastlog">/var/log/lastlog</primary>
31 </indexterm>
32
33 <indexterm zone="ch-system-createfiles">
34 <primary sortas="e-/var/log/wtmp">/var/log/wtmp</primary>
35 </indexterm>
36
37 <para>Some programs use hard-wired paths to programs which do not exist yet.
38 In order to satisfy these programs, create a number of symbolic links which
39 will be replaced by real files throughout the course of this chapter after the
40 software has been installed:</para>
41
42<screen><userinput>ln -sv /tools/bin/{bash,cat,chmod,dd,echo,ln,mkdir,pwd,rm,stty,touch} /bin
43ln -sv /tools/bin/{env,install,perli,printf} /usr/bin
44ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
45ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib
46
47install -vdm755 /usr/lib/pkgconfig
48
49ln -sv bash /bin/sh</userinput></screen>
50
51<!--for lib in blkid lzma mount uuid
52do
53 ln -sv /tools/lib/lib$lib.so* /usr/lib
54done-->
55<!--ln -svf /tools/include/blkid /usr/include
56ln -svf /tools/include/libmount /usr/include
57ln -svf /tools/include/uuid /usr/include-->
58<!--for pc in blkid mount uuid
59do
60 sed 's@tools@usr@g' /tools/lib/pkgconfig/${pc}.pc \
61 > /usr/lib/pkgconfig/${pc}.pc
62done-->
63 <variablelist>
64 <title>The purpose of each link:</title>
65
66 <varlistentry>
67 <term><parameter><filename>/bin/bash</filename></parameter></term>
68 <listitem>
69 <para>Many <command>bash</command> scripts specify
70 <filename>/bin/bash</filename>.</para>
71 </listitem>
72 </varlistentry>
73
74 <varlistentry>
75 <term><parameter><filename>/bin/cat</filename></parameter></term>
76 <listitem>
77 <para>This pathname is hard-coded into Glibc's configure script.</para>
78 </listitem>
79 </varlistentry>
80
81 <varlistentry>
82 <term><parameter><filename>/bin/dd</filename></parameter></term>
83 <listitem>
84 <para>The path to <filename>dd</filename> will be hard-coded into the
85 <filename>/usr/bin/libtool</filename> utility.</para>
86 </listitem>
87 </varlistentry>
88
89 <varlistentry>
90 <term><parameter><filename>/bin/echo</filename></parameter></term>
91 <listitem>
92 <para>This is to satisfy one of the tests in Glibc's test suite, which
93 expects <filename>/bin/echo</filename>.</para>
94 </listitem>
95 </varlistentry>
96
97 <varlistentry>
98 <term><parameter><filename>/usr/bin/env</filename></parameter></term>
99 <listitem>
100 <para>This pathname is hard-coded into some packages build procedures.
101 <!-- systemd This may not be needed if we move sysd to the end--></para>
102 </listitem>
103 </varlistentry>
104
105 <varlistentry>
106 <term><parameter><filename>/usr/bin/install</filename></parameter></term>
107 <listitem>
108 <para>The path to <filename>install</filename> will be hard-coded into
109 the <filename>/usr/lib/bash/Makefile.inc</filename> file.</para>
110 </listitem>
111 </varlistentry>
112
113 <varlistentry>
114 <term><parameter><filename>/bin/ln</filename></parameter></term>
115 <listitem>
116 <para>The path to <filename>ln</filename> will be hard-coded into the
117 <filename>/usr/lib/perl5/&perl-version;/&lt;target-triplet&gt;/Config_heavy.pl</filename>
118 file.</para>
119 </listitem>
120 </varlistentry>
121
122 <varlistentry>
123 <term><parameter><filename>/bin/pwd</filename></parameter></term>
124 <listitem>
125 <para>Some <command>configure</command> scripts, particularly Glibc's,
126 have this pathname hard-coded.</para>
127 </listitem>
128 </varlistentry>
129
130 <varlistentry>
131 <term><parameter><filename>/bin/rm</filename></parameter></term>
132 <listitem>
133 <para>The path to <filename>rm</filename> will be hard-coded into the
134 <filename>/usr/lib/perl5/&perl-version;/&lt;target-triplet&gt;/Config_heavy.pl</filename>
135 file.</para>
136 </listitem>
137 </varlistentry>
138
139 <varlistentry>
140 <term><parameter><filename>/bin/stty</filename></parameter></term>
141 <listitem>
142 <para>This pathname is hard-coded into Expect, therefore it is needed
143 for Binutils and GCC test suites to pass.</para>
144 </listitem>
145 </varlistentry>
146
147 <varlistentry>
148 <term><parameter><filename>/usr/bin/perl</filename></parameter></term>
149 <listitem>
150 <para>Many Perl scripts hard-code this path to the
151 <command>perl</command> program.</para>
152 </listitem>
153 </varlistentry>
154
155 <varlistentry>
156 <term><parameter><filename>/usr/lib/libgcc_s.so{,.1}</filename></parameter></term>
157 <listitem>
158 <para>Glibc needs this for the pthreads library to work.</para>
159 </listitem>
160 </varlistentry>
161
162 <varlistentry>
163 <term><parameter><filename>/usr/lib/libstdc++{,.6}</filename></parameter></term>
164 <listitem>
165 <para>This is needed by several tests in Glibc's test suite, as well as
166 for C++ support in GMP.</para>
167 </listitem>
168 </varlistentry>
169<!--
170 <varlistentry>
171 <term><parameter><filename>/usr/lib/libstdc++.la</filename></parameter></term>
172 <listitem>
173 <para>This prevents a <filename class="directory">/tools</filename>
174 reference that would otherwise be in
175 <filename>/usr/lib/libstdc++.la</filename> after GCC is installed.</para>
176 </listitem>
177 </varlistentry>
178-->
179 <!--<varlistentry revision="systemd">-->
180<!-- <varlistentry>
181 <term><parameter><filename>/usr/lib/lib{blkid,lzma,mount,uuid}.{a,la,so*}</filename></parameter></term>
182 <listitem>
183 <para>These links prevent utilities from acquiring an
184 unnecessary reference to the
185 <filename class="directory">/tools</filename> directory.</para>
186 </listitem>
187 </varlistentry>-->
188
189 <varlistentry>
190 <term><parameter><filename>/bin/sh</filename></parameter></term>
191 <listitem>
192 <para>Many shell scripts hard-code <filename>/bin/sh</filename>.</para>
193 </listitem>
194 </varlistentry>
195
196 </variablelist>
197
198 <para>Historically, Linux maintains a list of the mounted file systems in the
199 file <filename>/etc/mtab</filename>. Modern kernels maintain this list
200 internally and exposes it to the user via the <filename
201 class="directory">/proc</filename> filesystem. To satisfy utilities that
202 expect the presence of <filename>/etc/mtab</filename>, create the following
203 symbolic link:</para>
204
205<screen><userinput>ln -sv /proc/self/mounts /etc/mtab</userinput></screen>
206
207 <para>In order for user <systemitem class="username">root</systemitem> to be
208 able to login and for the name <quote>root</quote> to be recognized, there
209 must be relevant entries in the <filename>/etc/passwd</filename> and
210 <filename>/etc/group</filename> files.</para>
211
212 <para>Create the <filename>/etc/passwd</filename> file by running the following
213 command:</para>
214
215<screen revision="sysv"><userinput>cat &gt; /etc/passwd &lt;&lt; "EOF"
216<literal>root:x:0:0:root:/root:/bin/bash
217bin:x:1:1:bin:/dev/null:/bin/false
218daemon:x:6:6:Daemon User:/dev/null:/bin/false
219messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
220nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal>
221EOF</userinput></screen>
222
223<screen revision="systemd"><userinput>cat &gt; /etc/passwd &lt;&lt; "EOF"
224<literal>root:x:0:0:root:/root:/bin/bash
225bin:x:1:1:bin:/dev/null:/bin/false
226daemon:x:6:6:Daemon User:/dev/null:/bin/false
227messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
228systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false
229systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false
230systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false
231systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false
232systemd-network:x:76:76:systemd Network Management:/:/bin/false
233systemd-resolve:x:77:77:systemd Resolver:/:/bin/false
234systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false
235systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false
236nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal>
237EOF</userinput></screen>
238
239 <para>The actual password for <systemitem class="username">root</systemitem>
240 (the <quote>x</quote> used here is just a placeholder) will be set later.</para>
241
242 <para>Create the <filename>/etc/group</filename> file by running the following
243 command:</para>
244
245<screen revision="sysv"><userinput>cat &gt; /etc/group &lt;&lt; "EOF"
246<literal>root:x:0:
247bin:x:1:daemon
248sys:x:2:
249kmem:x:3:
250tape:x:4:
251tty:x:5:
252daemon:x:6:
253floppy:x:7:
254disk:x:8:
255lp:x:9:
256dialout:x:10:
257audio:x:11:
258video:x:12:
259utmp:x:13:
260usb:x:14:
261cdrom:x:15:
262adm:x:16:
263messagebus:x:18:
264input:x:24:
265mail:x:34:
266kvm:x:61:
267wheel:x:97:
268nogroup:x:99:
269users:x:999:</literal>
270EOF</userinput></screen>
271
272<screen revision="systemd"><userinput>cat &gt; /etc/group &lt;&lt; "EOF"
273<literal>root:x:0:
274bin:x:1:daemon
275sys:x:2:
276kmem:x:3:
277tape:x:4:
278tty:x:5:
279daemon:x:6:
280floppy:x:7:
281disk:x:8:
282lp:x:9:
283dialout:x:10:
284audio:x:11:
285video:x:12:
286utmp:x:13:
287usb:x:14:
288cdrom:x:15:
289adm:x:16:
290messagebus:x:18:
291systemd-journal:x:23:
292input:x:24:
293mail:x:34:
294kvm:x:61:
295systemd-bus-proxy:x:72:
296systemd-journal-gateway:x:73:
297systemd-journal-remote:x:74:
298systemd-journal-upload:x:75:
299systemd-network:x:76:
300systemd-resolve:x:77:
301systemd-timesync:x:78:
302systemd-coredump:x:79:
303wheel:x:97:
304nogroup:x:99:
305users:x:999:</literal>
306EOF</userinput></screen>
307
308 <para>The created groups are not part of any standard&mdash;they are groups
309 decided on in part by the requirements of the Udev configuration in this
310 chapter, and in part by common convention employed by a number of existing
311 Linux distributions. In addition, some test suites rely on specific users
312 or groups. The Linux Standard Base (LSB, available at <ulink
313 url="http://www.linuxbase.org"/>) recommends only that, besides the group
314 <systemitem class="groupname">root</systemitem> with a Group ID (GID) of 0,
315 a group <systemitem class="groupname">bin</systemitem> with a GID of 1 be
316 present. All other group names and GIDs can be chosen freely by the system
317 administrator since well-written programs do not depend on GID numbers, but
318 rather use the group's name.</para>
319
320 <para>To remove the <quote>I have no name!</quote> prompt, start a new
321 shell. Since a full Glibc was installed in <xref
322 linkend="chapter-temporary-tools"/> and the
323 <filename>/etc/passwd</filename> and <filename>/etc/group</filename>
324 files have been created, user name and group name resolution will now
325 work:</para>
326
327<screen role="nodump"><userinput>exec /tools/bin/bash --login +h</userinput></screen>
328
329 <para>Note the use of the <parameter>+h</parameter> directive. This tells
330 <command>bash</command> not to use its internal path hashing. Without this
331 directive, <command>bash</command> would remember the paths to binaries it has
332 executed. To ensure the use of the newly compiled binaries as soon as they are
333 installed, the <parameter>+h</parameter> directive will be used for the duration
334 of this chapter.</para>
335
336 <para>The <command>login</command>, <command>agetty</command>, and
337 <command>init</command> programs (and others) use a number of log
338 files to record information such as who was logged into the system and
339 when. However, these programs will not write to the log files if they
340 do not already exist. Initialize the log files and give them
341 proper permissions:</para>
342
343<screen><userinput>touch /var/log/{btmp,lastlog,faillog,wtmp}
344chgrp -v utmp /var/log/lastlog
345chmod -v 664 /var/log/lastlog
346chmod -v 600 /var/log/btmp</userinput></screen>
347
348 <para>The <filename>/var/log/wtmp</filename> file records all logins and
349 logouts. The <filename>/var/log/lastlog</filename> file records when each
350 user last logged in. The <filename>/var/log/faillog</filename> file records
351 failed login attempts. The <filename>/var/log/btmp</filename> file records
352 the bad login attempts.</para>
353
354 <note><para>The <filename>/run/utmp</filename> file records the users that
355 are currently logged in. This file is created dynamically in the boot
356 scripts.</para></note>
357
358</sect1>
Note: See TracBrowser for help on using the repository browser.