aboutsummaryrefslogtreecommitdiffstats
path: root/chapter07/kernfs.xml
blob: afe5e83b117d99dbd6f19f5140eb027426c71006 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>

<sect1 id="ch-tools-kernfs">
  <?dbhtml filename="kernfs.html"?>

  <title>Preparing Virtual Kernel File Systems</title>

  <indexterm zone="ch-tools-kernfs">
    <primary sortas="e-/dev/">/dev/*</primary>
  </indexterm>

    <para>Applications running in userspace utilize various file 
    systems created by the kernel to communicate 
    with the kernel itself. These file systems are virtual: no disk
    space is used for them. The content of these file systems resides in
    memory.</para>

    <para>Begin by creating the directories on which these virtual file systems will be
    mounted:</para>

<screen><userinput>mkdir -pv /{proc,sys,run}</userinput></screen>

  <sect2 id="ch-tools-kernfsmount">
    <title>Mounting Virtual Kernel File Systems</title>

    <para>The kernel has already mounted
    <systemitem class="filesystem">devtmpfs</systemitem>.
    Mount the remaining virtual kernel file systems:</para>

<screen><userinput>mkdir -pv /dev/{pts,shm}
mount -vt devpts /dev/pts /dev/pts -o gid=5,mode=620
mount -vt proc  proc  /proc
mount -vt sysfs sysfs /sys
mount -vt tmpfs tmpfs /run
mount -vt tmpfs tmpfs /dev/shm -o nosuid,nodev</userinput></screen>

    <variablelist>
      <title>The meaning of the mount options for devpts:</title>

      <varlistentry>
        <term><parameter>gid=5</parameter></term>
        <listitem>
          <para>This ensures that all devpts-created device nodes are owned by
          group ID 5.  This is the ID we will use later on for the <systemitem
          class="groupname">tty</systemitem> group.  We use the group ID instead
          of a name, since the host system might use a different ID for its
          <systemitem class="groupname">tty</systemitem> group.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term><parameter>mode=0620</parameter></term>
        <listitem>
          <para>This ensures that all devpts-created device nodes have mode 0620
          (user readable and writable, group writable).  Together with the
          option above, this ensures that devpts will create device nodes that
          meet the requirements of grantpt(), meaning the Glibc
          <command>pt_chown</command> helper binary (which is not installed by
          default) is not necessary.</para>
        </listitem>
      </varlistentry>

    </variablelist>

  </sect2>

  <sect2 id="ch-tools-devadjust">
    <title>Adjusting devtmpfs</title>

    <para>Now <systemitem class='filesystem'>proc</systemitem> filesystem
    is mounted, we can replace the device nodes for standard I/O streams
    with symlinks to pseudo files in
    <filename class="directory">/proc/self/fd</filename> (which are symlinks
    to the files connected to the standard I/O streams for the current
    process).  And, create another symlink recommended by the kernel
    documentation.  These are necessary for I/O redirection in the building
    system of some packages to function properly:</para>

<screen><userinput>ln -sfv /proc/self/fd/0 /dev/stdin
ln -sfv /proc/self/fd/1 /dev/stdout
ln -sfv /proc/self/fd/2 /dev/stderr
ln -sv  /proc/self/fd   /dev</userinput></screen>

  </sect2>

</sect1>