source: chapter06/createfiles.xml@ 31bf7e7

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 8.4 8.4-rc1 9.0 9.0-rc1 9.1 9.1-rc1 cross-chap5 ml-11.0 multilib old-trunk trunk xry111/git-transition xry111/glibc-2.34 xry111/tester-nohack xry111/usr-move
Last change on this file since 31bf7e7 was 31bf7e7, checked in by Douglas R. Reno <renodr@…>, 3 years ago

Update to elfutils-0.175
Update to tcl-8.6.9
Update to openssl-1.1.1a
Update to linux-4.19.3
Update to systemd-239-25d1ba1
Add 'wheel' group to /etc/groups for systemd
Add a sed to fix a test in autoconf

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@11487 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,dd,echo,ln,pwd,rm,stty} /bin
43ln -sv /tools/bin/{env,install,perl} /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:
303nogroup:x:99:
304users:x:999:</literal>
305EOF</userinput></screen>
306
307 <para>The created groups are not part of any standard&mdash;they are groups
308 decided on in part by the requirements of the Udev configuration in this
309 chapter, and in part by common convention employed by a number of existing
310 Linux distributions. In addition, some test suites rely on specific users
311 or groups. The Linux Standard Base (LSB, available at <ulink
312 url="http://www.linuxbase.org"/>) recommends only that, besides the group
313 <systemitem class="groupname">root</systemitem> with a Group ID (GID) of 0,
314 a group <systemitem class="groupname">bin</systemitem> with a GID of 1 be
315 present. All other group names and GIDs can be chosen freely by the system
316 administrator since well-written programs do not depend on GID numbers, but
317 rather use the group's name.</para>
318
319 <para>To remove the <quote>I have no name!</quote> prompt, start a new
320 shell. Since a full Glibc was installed in <xref
321 linkend="chapter-temporary-tools"/> and the
322 <filename>/etc/passwd</filename> and <filename>/etc/group</filename>
323 files have been created, user name and group name resolution will now
324 work:</para>
325
326<screen role="nodump"><userinput>exec /tools/bin/bash --login +h</userinput></screen>
327
328 <para>Note the use of the <parameter>+h</parameter> directive. This tells
329 <command>bash</command> not to use its internal path hashing. Without this
330 directive, <command>bash</command> would remember the paths to binaries it has
331 executed. To ensure the use of the newly compiled binaries as soon as they are
332 installed, the <parameter>+h</parameter> directive will be used for the duration
333 of this chapter.</para>
334
335 <para>The <command>login</command>, <command>agetty</command>, and
336 <command>init</command> programs (and others) use a number of log
337 files to record information such as who was logged into the system and
338 when. However, these programs will not write to the log files if they
339 do not already exist. Initialize the log files and give them
340 proper permissions:</para>
341
342<screen><userinput>touch /var/log/{btmp,lastlog,faillog,wtmp}
343chgrp -v utmp /var/log/lastlog
344chmod -v 664 /var/log/lastlog
345chmod -v 600 /var/log/btmp</userinput></screen>
346
347 <para>The <filename>/var/log/wtmp</filename> file records all logins and
348 logouts. The <filename>/var/log/lastlog</filename> file records when each
349 user last logged in. The <filename>/var/log/faillog</filename> file records
350 failed login attempts. The <filename>/var/log/btmp</filename> file records
351 the bad login attempts.</para>
352
353 <note><para>The <filename>/run/utmp</filename> file records the users that
354 are currently logged in. This file is created dynamically in the boot
355 scripts.</para></note>
356
357</sect1>
Note: See TracBrowser for help on using the repository browser.