source: chapter07/createfiles.xml@ 5818041

multilib trunk xry111/arm64 xry111/clfs-ng
Last change on this file since 5818041 was 5818041, checked in by Bruce Dubbs <bdubbs@…>, 3 weeks ago

Package updates.
Update to vim-9.1.0478.
Update to iana-etc-20240607.
Update to systemd-256.
Update to python3-3.12.4.
Update to perl-5.40.0.
Update to openssl-3.3.1 (Security fix).
Update to linux-6.9.4.
Update to findutils-4.10.0.

  • Property mode set to 100644
File size: 8.9 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-tools-createfiles">
9 <?dbhtml filename="createfiles.html"?>
10
11 <title>Creating Essential Files and Symlinks</title>
12
13 <indexterm zone="ch-tools-createfiles">
14 <primary sortas="e-/etc/passwd">/etc/passwd</primary>
15 </indexterm>
16
17 <indexterm zone="ch-tools-createfiles">
18 <primary sortas="e-/etc/group">/etc/group</primary>
19 </indexterm>
20
21 <indexterm zone="ch-tools-createfiles">
22 <primary sortas="e-/run/utmp">/run/utmp</primary>
23 </indexterm>
24
25 <indexterm zone="ch-tools-createfiles">
26 <primary sortas="e-/var/log/btmp">/var/log/btmp</primary>
27 </indexterm>
28
29 <indexterm zone="ch-tools-createfiles">
30 <primary sortas="e-/var/log/lastlog">/var/log/lastlog</primary>
31 </indexterm>
32
33 <indexterm zone="ch-tools-createfiles">
34 <primary sortas="e-/var/log/wtmp">/var/log/wtmp</primary>
35 </indexterm>
36
37 <para>Historically, Linux maintained a list of the mounted file systems in the
38 file <filename>/etc/mtab</filename>. Modern kernels maintain this list
39 internally and expose it to the user via the <filename
40 class="directory">/proc</filename> filesystem. To satisfy utilities that
41 expect to find <filename>/etc/mtab</filename>, create the following
42 symbolic link:</para>
43
44<screen><userinput>ln -sv /proc/self/mounts /etc/mtab</userinput></screen>
45
46 <para>Create a basic <filename>/etc/hosts</filename> file to be
47 referenced in some test suites, and in one of Perl's configuration files
48 as well:</para>
49
50<screen><userinput>cat &gt; /etc/hosts &lt;&lt; EOF
51<literal>127.0.0.1 localhost $(hostname)
52::1 localhost</literal>
53EOF</userinput></screen>
54
55 <para>In order for user <systemitem class="username">root</systemitem> to be
56 able to login and for the name <quote>root</quote> to be recognized, there
57 must be relevant entries in the <filename>/etc/passwd</filename> and
58 <filename>/etc/group</filename> files.</para>
59
60 <para>Create the <filename>/etc/passwd</filename> file by running the following
61 command:</para>
62
63<screen revision="sysv"><userinput>cat &gt; /etc/passwd &lt;&lt; "EOF"
64<literal>root:x:0:0:root:/root:/bin/bash
65bin:x:1:1:bin:/dev/null:/usr/bin/false
66daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
67messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
68uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
69nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false</literal>
70EOF</userinput></screen>
71
72<screen revision="systemd"><userinput>cat &gt; /etc/passwd &lt;&lt; "EOF"
73<literal>root:x:0:0:root:/root:/bin/bash
74bin:x:1:1:bin:/dev/null:/usr/bin/false
75daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
76messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
77systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/usr/bin/false
78systemd-journal-remote:x:74:74:systemd Journal Remote:/:/usr/bin/false
79systemd-journal-upload:x:75:75:systemd Journal Upload:/:/usr/bin/false
80systemd-network:x:76:76:systemd Network Management:/:/usr/bin/false
81systemd-resolve:x:77:77:systemd Resolver:/:/usr/bin/false
82systemd-timesync:x:78:78:systemd Time Synchronization:/:/usr/bin/false
83systemd-coredump:x:79:79:systemd Core Dumper:/:/usr/bin/false
84uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
85systemd-oom:x:81:81:systemd Out Of Memory Daemon:/:/usr/bin/false
86nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false</literal>
87EOF</userinput></screen>
88
89 <para>The actual password for <systemitem class="username">root</systemitem>
90 will be set later.</para>
91
92 <para>Create the <filename>/etc/group</filename> file by running the following
93 command:</para>
94
95<screen revision="sysv"><userinput>cat &gt; /etc/group &lt;&lt; "EOF"
96<literal>root:x:0:
97bin:x:1:daemon
98sys:x:2:
99kmem:x:3:
100tape:x:4:
101tty:x:5:
102daemon:x:6:
103floppy:x:7:
104disk:x:8:
105lp:x:9:
106dialout:x:10:
107audio:x:11:
108video:x:12:
109utmp:x:13:
110cdrom:x:15:
111adm:x:16:
112messagebus:x:18:
113input:x:24:
114mail:x:34:
115kvm:x:61:
116uuidd:x:80:
117wheel:x:97:
118users:x:999:
119nogroup:x:65534:</literal>
120EOF</userinput></screen>
121
122<screen revision="systemd"><userinput>cat &gt; /etc/group &lt;&lt; "EOF"
123<literal>root:x:0:
124bin:x:1:daemon
125sys:x:2:
126kmem:x:3:
127tape:x:4:
128tty:x:5:
129daemon:x:6:
130floppy:x:7:
131disk:x:8:
132lp:x:9:
133dialout:x:10:
134audio:x:11:
135video:x:12:
136utmp:x:13:
137cdrom:x:15:
138adm:x:16:
139messagebus:x:18:
140systemd-journal:x:23:
141input:x:24:
142mail:x:34:
143kvm:x:61:
144systemd-journal-gateway:x:73:
145systemd-journal-remote:x:74:
146systemd-journal-upload:x:75:
147systemd-network:x:76:
148systemd-resolve:x:77:
149systemd-timesync:x:78:
150systemd-coredump:x:79:
151uuidd:x:80:
152systemd-oom:x:81:
153wheel:x:97:
154users:x:999:
155nogroup:x:65534:</literal>
156EOF</userinput></screen>
157
158 <para>The created groups are not part of any standard&mdash;they are groups
159 decided on in part by the requirements of the Udev configuration in Chapter
160 9, and in part by common conventions employed by a number of existing Linux
161 distributions. In addition, some test suites rely on specific users or
162 groups. The Linux Standard Base (LSB, available at <ulink
163 url="https://refspecs.linuxfoundation.org/lsb.shtml"/>) only recommends that,
164 besides the group <systemitem class="groupname">root</systemitem> with a
165 Group ID (GID) of 0, a group <systemitem class="groupname">bin</systemitem>
166 with a GID of 1 be present. The GID of 5 is widely used for the
167 <systemitem class="groupname">tty</systemitem> group, and the number 5 is
168 also used in <phrase revision="systemd">systemd</phrase>
169 <phrase revision="sysv"><filename>/etc/fstab</filename></phrase> for the
170 <systemitem class="filesystem">devpts</systemitem> filesystem.
171 All other group names and GIDs can be chosen freely by the system
172 administrator since well-written programs do not depend on GID numbers,
173 but rather use the group's name.</para>
174
175 <para>The ID 65534 is used by the kernel for NFS and separate user
176 namespaces for unmapped users and groups (those exist on the NFS server
177 or the parent user namespace, but <quote>do not exist</quote> on the local
178 machine or in the separate namespace). We assign
179 <systemitem class="username">nobody</systemitem> and
180 <systemitem class="groupname">nogroup</systemitem> to avoid an
181 unnamed ID. But other distros may treat this ID differently, so any
182 portable program should not depend on this assignment.</para>
183
184 <para>Some packages need a locale.</para>
185
186<screen><userinput>localedef -i C -f UTF-8 C.UTF-8</userinput></screen>
187
188 <para>Some tests in <xref linkend="chapter-building-system"/> need a regular
189 user. We add this user here and delete this account at the end of that
190 chapter.</para>
191
192<screen><userinput>echo "tester:x:101:101::/home/tester:/bin/bash" &gt;&gt; /etc/passwd
193echo "tester:x:101:" &gt;&gt; /etc/group
194install -o tester -d /home/tester</userinput></screen>
195
196 <para>To remove the <quote>I have no name!</quote> prompt, start a new
197 shell. Since the
198 <filename>/etc/passwd</filename> and <filename>/etc/group</filename>
199 files have been created, user name and group name resolution will now
200 work:</para>
201
202<screen role="nodump"><userinput>exec /usr/bin/bash --login</userinput></screen>
203
204 <para>The <command>login</command>, <command>agetty</command>, and
205 <command>init</command> programs (and others) use a number of log
206 files to record information such as who was logged into the system and
207 when. However, these programs will not write to the log files if they
208 do not already exist. Initialize the log files and give them
209 proper permissions:</para>
210
211<screen><userinput>touch /var/log/{btmp,lastlog,faillog,wtmp}
212chgrp -v utmp /var/log/lastlog
213chmod -v 664 /var/log/lastlog
214chmod -v 600 /var/log/btmp</userinput></screen>
215
216 <para>The <filename>/var/log/wtmp</filename> file records all logins and
217 logouts. The <filename>/var/log/lastlog</filename> file records when each
218 user last logged in. The <filename>/var/log/faillog</filename> file records
219 failed login attempts. The <filename>/var/log/btmp</filename> file records
220 the bad login attempts.</para>
221
222 <!-- systemd no longer creates this -->
223 <note revision='sysv'><para>The <filename>/run/utmp</filename> file
224 records the users that are currently logged in. This file is created
225 dynamically in the boot scripts.</para></note>
226
227 <!-- AFAIK they are not vital for system function, users requiring such
228 info should rely on systemd-logind or elogind or some custom PAM
229 module. Maybe we can stop to create them at all. -->
230 <note>
231 <para>
232 The <phrase revision='sysv'><filename>utmp</filename>,
233 </phrase><filename>wtmp</filename>, <filename>btmp</filename>, and
234 <filename>lastlog</filename> files use 32-bit integers for timestamps
235 and they'll be fundamentally broken after year 2038. Many packages
236 have stopped using them and other packages are going to stop using
237 them. It is probably best to consider them deprecated.
238 </para>
239 </note>
240
241</sect1>
Note: See TracBrowser for help on using the repository browser.