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">
8 <sect1 id="ch-system-createfiles">
9 <?dbhtml filename="createfiles.html"?>
11 <title>Creating Essential Files and Symlinks</title>
13 <indexterm zone="ch-system-createfiles">
14 <primary sortas="e-/etc/passwd">/etc/passwd</primary>
17 <indexterm zone="ch-system-createfiles">
18 <primary sortas="e-/etc/group">/etc/group</primary>
21 <indexterm zone="ch-system-createfiles">
22 <primary sortas="e-/var/run/utmp">/var/run/utmp</primary>
25 <indexterm zone="ch-system-createfiles">
26 <primary sortas="e-/var/log/btmp">/var/log/btmp</primary>
29 <indexterm zone="ch-system-createfiles">
30 <primary sortas="e-/var/log/lastlog">/var/log/lastlog</primary>
33 <indexterm zone="ch-system-createfiles">
34 <primary sortas="e-/var/log/wtmp">/var/log/wtmp</primary>
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>
42 <screen><userinput>ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} /bin
43 ln -sv /tools/bin/{env,install,perl} /usr/bin
44 ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
45 ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib
47 install -vdm755 /usr/lib/pkgconfig
49 ln -sv bash /bin/sh</userinput></screen>
51 <!--for lib in blkid lzma mount uuid
53 ln -sv /tools/lib/lib$lib.so* /usr/lib
55 <!--ln -svf /tools/include/blkid /usr/include
56 ln -svf /tools/include/libmount /usr/include
57 ln -svf /tools/include/uuid /usr/include-->
58 <!--for pc in blkid mount uuid
60 sed 's@tools@usr@g' /tools/lib/pkgconfig/${pc}.pc \
61 > /usr/lib/pkgconfig/${pc}.pc
64 <title>The purpose of each link:</title>
67 <term><parameter><filename>/bin/bash</filename></parameter></term>
69 <para>Many <command>bash</command> scripts specify
70 <filename>/bin/bash</filename>.</para>
75 <term><parameter><filename>/bin/cat</filename></parameter></term>
77 <para>This pathname is hard-coded into Glibc's configure script.</para>
82 <term><parameter><filename>/bin/dd</filename></parameter></term>
84 <para>The path to <filename>dd</filename> will be hard-coded into the
85 <filename>/usr/bin/libtool</filename> utility.</para>
90 <term><parameter><filename>/bin/echo</filename></parameter></term>
92 <para>This is to satisfy one of the tests in Glibc's test suite, which
93 expects <filename>/bin/echo</filename>.</para>
98 <term><parameter><filename>/usr/bin/env</filename></parameter></term>
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>
106 <term><parameter><filename>/usr/bin/install</filename></parameter></term>
108 <para>The path to <filename>install</filename> will be hard-coded into
109 the <filename>/usr/lib/bash/Makefile.inc</filename> file.</para>
114 <term><parameter><filename>/bin/ln</filename></parameter></term>
116 <para>The path to <filename>ln</filename> will be hard-coded into the
117 <filename>/usr/lib/perl5/&perl-version;/<target-triplet>/Config_heavy.pl</filename>
123 <term><parameter><filename>/bin/pwd</filename></parameter></term>
125 <para>Some <command>configure</command> scripts, particularly Glibc's,
126 have this pathname hard-coded.</para>
131 <term><parameter><filename>/bin/rm</filename></parameter></term>
133 <para>The path to <filename>rm</filename> will be hard-coded into the
134 <filename>/usr/lib/perl5/&perl-version;/<target-triplet>/Config_heavy.pl</filename>
140 <term><parameter><filename>/bin/stty</filename></parameter></term>
142 <para>This pathname is hard-coded into Expect, therefore it is needed
143 for Binutils and GCC test suites to pass.</para>
148 <term><parameter><filename>/usr/bin/perl</filename></parameter></term>
150 <para>Many Perl scripts hard-code this path to the
151 <command>perl</command> program.</para>
156 <term><parameter><filename>/usr/lib/libgcc_s.so{,.1}</filename></parameter></term>
158 <para>Glibc needs this for the pthreads library to work.</para>
163 <term><parameter><filename>/usr/lib/libstdc++{,.6}</filename></parameter></term>
165 <para>This is needed by several tests in Glibc's test suite, as well as
166 for C++ support in GMP.</para>
171 <term><parameter><filename>/usr/lib/libstdc++.la</filename></parameter></term>
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>
179 <!--<varlistentry revision="systemd">-->
181 <term><parameter><filename>/usr/lib/lib{blkid,lzma,mount,uuid}.{a,la,so*}</filename></parameter></term>
183 <para>These links prevent utilities from acquiring an
184 unnecessary reference to the
185 <filename class="directory">/tools</filename> directory.</para>
190 <term><parameter><filename>/bin/sh</filename></parameter></term>
192 <para>Many shell scripts hard-code <filename>/bin/sh</filename>.</para>
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>
205 <screen><userinput>ln -sv /proc/self/mounts /etc/mtab</userinput></screen>
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>
212 <para>Create the <filename>/etc/passwd</filename> file by running the following
215 <screen revision="sysv"><userinput>cat > /etc/passwd << "EOF"
216 <literal>root:x:0:0:root:/root:/bin/bash
217 bin:x:1:1:bin:/dev/null:/bin/false
218 daemon:x:6:6:Daemon User:/dev/null:/bin/false
219 messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
220 nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal>
221 EOF</userinput></screen>
223 <screen revision="systemd"><userinput>cat > /etc/passwd << "EOF"
224 <literal>root:x:0:0:root:/root:/bin/bash
225 bin:x:1:1:bin:/dev/null:/bin/false
226 daemon:x:6:6:Daemon User:/dev/null:/bin/false
227 messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
228 systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false
229 systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false
230 systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false
231 systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false
232 systemd-network:x:76:76:systemd Network Management:/:/bin/false
233 systemd-resolve:x:77:77:systemd Resolver:/:/bin/false
234 systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false
235 systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false
236 nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal>
237 EOF</userinput></screen>
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>
242 <para>Create the <filename>/etc/group</filename> file by running the following
245 <screen revision="sysv"><userinput>cat > /etc/group << "EOF"
269 users:x:999:</literal>
270 EOF</userinput></screen>
272 <screen revision="systemd"><userinput>cat > /etc/group << "EOF"
291 systemd-journal:x:23:
295 systemd-bus-proxy:x:72:
296 systemd-journal-gateway:x:73:
297 systemd-journal-remote:x:74:
298 systemd-journal-upload:x:75:
299 systemd-network:x:76:
300 systemd-resolve:x:77:
301 systemd-timesync:x:78:
302 systemd-coredump:x:79:
305 users:x:999:</literal>
306 EOF</userinput></screen>
308 <para>The created groups are not part of any standard—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>
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
327 <screen role="nodump"><userinput>exec /tools/bin/bash --login +h</userinput></screen>
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>
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>
343 <screen><userinput>touch /var/log/{btmp,lastlog,faillog,wtmp}
344 chgrp -v utmp /var/log/lastlog
345 chmod -v 664 /var/log/lastlog
346 chmod -v 600 /var/log/btmp</userinput></screen>
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>
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>