source: chapter06/createfiles.xml@ e0472a1

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 e0472a1 was e0472a1, checked in by Bruce Dubbs <bdubbs@…>, 3 years ago

Fix groups file

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@11485 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:
267nogroup:x:99:
268users:x:999:</literal>
269EOF</userinput></screen>
270
271<screen revision="systemd"><userinput>cat &gt; /etc/group &lt;&lt; "EOF"
272<literal>root:x:0:
273bin:x:1:daemon
274sys:x:2:
275kmem:x:3:
276tape:x:4:
277tty:x:5:
278daemon:x:6:
279floppy:x:7:
280disk:x:8:
281lp:x:9:
282dialout:x:10:
283audio:x:11:
284video:x:12:
285utmp:x:13:
286usb:x:14:
287cdrom:x:15:
288adm:x:16:
289messagebus:x:18:
290systemd-journal:x:23:
291input:x:24:
292mail:x:34:
293kvm:x:61:
294systemd-bus-proxy:x:72:
295systemd-journal-gateway:x:73:
296systemd-journal-remote:x:74:
297systemd-journal-upload:x:75:
298systemd-network:x:76:
299systemd-resolve:x:77:
300systemd-timesync:x:78:
301systemd-coredump:x:79:
302nogroup:x:99:
303users:x:999:</literal>
304EOF</userinput></screen>
305
306 <para>The created groups are not part of any standard&mdash;they are groups
307 decided on in part by the requirements of the Udev configuration in this
308 chapter, and in part by common convention employed by a number of existing
309 Linux distributions. In addition, some test suites rely on specific users
310 or groups. The Linux Standard Base (LSB, available at <ulink
311 url="http://www.linuxbase.org"/>) recommends only that, besides the group
312 <systemitem class="groupname">root</systemitem> with a Group ID (GID) of 0,
313 a group <systemitem class="groupname">bin</systemitem> with a GID of 1 be
314 present. All other group names and GIDs can be chosen freely by the system
315 administrator since well-written programs do not depend on GID numbers, but
316 rather use the group's name.</para>
317
318 <para>To remove the <quote>I have no name!</quote> prompt, start a new
319 shell. Since a full Glibc was installed in <xref
320 linkend="chapter-temporary-tools"/> and the
321 <filename>/etc/passwd</filename> and <filename>/etc/group</filename>
322 files have been created, user name and group name resolution will now
323 work:</para>
324
325<screen role="nodump"><userinput>exec /tools/bin/bash --login +h</userinput></screen>
326
327 <para>Note the use of the <parameter>+h</parameter> directive. This tells
328 <command>bash</command> not to use its internal path hashing. Without this
329 directive, <command>bash</command> would remember the paths to binaries it has
330 executed. To ensure the use of the newly compiled binaries as soon as they are
331 installed, the <parameter>+h</parameter> directive will be used for the duration
332 of this chapter.</para>
333
334 <para>The <command>login</command>, <command>agetty</command>, and
335 <command>init</command> programs (and others) use a number of log
336 files to record information such as who was logged into the system and
337 when. However, these programs will not write to the log files if they
338 do not already exist. Initialize the log files and give them
339 proper permissions:</para>
340
341<screen><userinput>touch /var/log/{btmp,lastlog,faillog,wtmp}
342chgrp -v utmp /var/log/lastlog
343chmod -v 664 /var/log/lastlog
344chmod -v 600 /var/log/btmp</userinput></screen>
345
346 <para>The <filename>/var/log/wtmp</filename> file records all logins and
347 logouts. The <filename>/var/log/lastlog</filename> file records when each
348 user last logged in. The <filename>/var/log/faillog</filename> file records
349 failed login attempts. The <filename>/var/log/btmp</filename> file records
350 the bad login attempts.</para>
351
352 <note><para>The <filename>/run/utmp</filename> file records the users that
353 are currently logged in. This file is created dynamically in the boot
354 scripts.</para></note>
355
356</sect1>
Note: See TracBrowser for help on using the repository browser.