summaryrefslogtreecommitdiff
path: root/lfs-12.2-sysv/chapter07/kernfs.html
blob: 802329590ce3a3c3b5c72bffffaf4cdb2c8e8fc6 (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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    <title>
      7.3. Подготовка виртуальных файловых систем ядра
    </title>
    <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" />
    <meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" />
    <link rel="stylesheet" href="../stylesheets/lfs-print.css" type=
    "text/css" media="print" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  </head>
  <body class="lfs" id="lfs-12.2">
    <div class="navheader">
      <h4>
        Линукс с нуля - Версия 12.2
      </h4>
      <h3>
        Глава 7. Вход в окружение Chroot и создание дополнительных временных
        инструментов
      </h3>
      <ul>
        <li class="prev">
          <a accesskey="p" href="changingowner.html" title=
          "Смена владельца">Пред.</a>
          <p>
            Смена владельца
          </p>
        </li>
        <li class="next">
          <a accesskey="n" href="chroot.html" title=
          "Вход в окружение Chroot">След.</a>
          <p>
            Вход в окружение Chroot
          </p>
        </li>
        <li class="up">
          <a accesskey="u" href="chapter07.html" title=
          "Глава 7. Вход в окружение Chroot и создание дополнительных временных инструментов">
          Наверх</a>
        </li>
        <li class="home">
          <a accesskey="h" href="../index.html" title=
          "Линукс с нуля - Версия 12.2">Начало</a>
        </li>
      </ul>
    </div>
    <h1 class="sect1">
      <a id="ch-tools-kernfs" name="ch-tools-kernfs"></a>7.3. Подготовка
      виртуальных файловых систем ядра
    </h1>
    <div class="sect1" lang="ru" xml:lang="ru">
      <p>
        Приложения, работающие в пользовательском пространстве, используют
        различные файловые системы, созданные ядром, для взаимодействия с
        самим ядром. Эти файловые системы являются виртуальными: для них не
        используется дисковое пространство. Содержимое файловых систем
        находится в памяти. Эти файловые системы должны быть смонтированы в
        дереве каталогов $LFS, чтобы приложения могли найти их в среде
        <span class="command"><strong>chroot</strong></span>.
      </p>
      <p>
        Начните с создания каталогов, в которые будут смонтированы эти
        виртуальные файловые системы:
      </p>
      <pre class="userinput"><kbd class=
      "command">mkdir -pv $LFS/{dev,proc,sys,run}</kbd></pre>
      <div class="sect2" lang="ru" xml:lang="ru">
        <h2 class="sect2">
          <a id="ch-tools-bindmount" name="ch-tools-bindmount"></a>7.3.1.
          Монтирование и заполнение /dev
        </h2>
        <p>
          Во время обычной загрузки ядро автоматически монтирует файловую
          систему <code class="systemitem">devtmpfs</code> в каталог
          <code class="filename">/dev</code>; ядро создает узлы устройств в
          этой виртуальной файловой системе в процессе загрузки или при
          первом обнаружении устройства, или доступе к нему. Демон udev может
          изменять владельца или разрешения узлов устройств, созданных ядром,
          или создавать новые узлы устройств или символические ссылки, чтобы
          облегчить работу разработчиков дистрибутива или системных
          администраторов. (Подробности смотрите в <a class="xref" href=
          "../chapter09/udev.html#ch-config-udev-device-node-creation" title=
          "9.3.2.2. Создание узла устройства">Раздел&nbsp;9.3.2.2, «Создание
          узла устройства»</a>.) Если ядро хоста поддерживает <code class=
          "systemitem">devtmpfs</code>, мы можем просто смонтировать
          <code class="systemitem">devtmpfs</code> в <code class=
          "filename">$LFS/dev</code> и положиться на ядро для его заполнения.
        </p>
        <p>
          Но в некоторых ядрах хоста отсутствует поддержка <code class=
          "systemitem">devtmpfs</code>, эти хост-дистрибутивы используют
          разные методы для создания содержимого <code class=
          "filename">/dev</code>. Таким образом, единственный независимый от
          хоста способ заполнить каталог <code class=
          "filename">$LFS/dev</code> - это привязка к каталогу <code class=
          "filename">/dev</code> хост-системы. Связное монтирование - это
          особый тип монтирования, который делает дерево каталога или файл
          видимым в каком-либо другом месте. Для этого используйте следующую
          команду:
        </p>
        <pre class="userinput"><kbd class=
        "command">mount -v --bind /dev $LFS/dev</kbd></pre>
      </div>
      <div class="sect2" lang="ru" xml:lang="ru">
        <h2 class="sect2">
          <a id="ch-tools-kernfsmount" name="ch-tools-kernfsmount"></a>7.3.2.
          Монтирование виртуальных файловых систем ядра
        </h2>
        <p>
          Теперь смонтируйте оставшиеся виртуальные файловые системы:
        </p>
        <pre class="userinput"><kbd class=
        "command">mount -vt devpts devpts -o gid=5,mode=0620 $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run</kbd></pre>
        <div class="variablelist">
          <p class="title">
            <strong>Значение параметров монтирования для devpts:</strong>
          </p>
          <dl class="variablelist">
            <dt>
              <span class="term"><em class=
              "parameter"><code>gid=5</code></em></span>
            </dt>
            <dd>
              <p>
                Этот параметр гарантирует, что все узлы устройств, созданные
                devpts, принадлежат группе с идентификатором 5. Это
                идентификатор, который мы будем использовать позже для группы
                <code class="systemitem">tty</code>. Мы используем
                идентификатор группы вместо имени, поскольку хост-система
                может использовать другой идентификатор для своей группы
                <code class="systemitem">tty</code>.
              </p>
            </dd>
            <dt>
              <span class="term"><em class=
              "parameter"><code>mode=0620</code></em></span>
            </dt>
            <dd>
              <p>
                Этот параметр гарантирует, что все узлы устройств, созданные
                devpts, будут иметь права 0620 (доступен для чтения и записи
                пользователем, доступен для записи группе). Вместе с
                вышеуказанной опцией это гарантирует, что devpts создаст узлы
                устройств, соответствующие требованиям grantpt(), а это
                означает, что вспомогательный файл Glibc <span class=
                "command"><strong>pt_chown</strong></span> (который не
                установлен по умолчанию) не требуется.
              </p>
            </dd>
          </dl>
        </div>
        <p>
          В некоторых хост-системах <code class="filename">/dev/shm</code>
          является символической ссылкой на каталог <code class=
          "filename">/run/shm</code>. /run tmpfs был смонтирован выше,
          поэтому сейчас необходимо только создать каталог с правильными
          разрешениями.
        </p>
        <p>
          В других хост-системах <code class="filename">/dev/shm</code>
          является точкой монтирования для tmpfs. В этом случае монтирование
          /dev приведет только к созданию /dev/shm как каталога в среде
          chroot. В этой ситуации мы должны явно смонтировать tmpfs:
        </p>
        <pre class="userinput"><kbd class=
        "command">if [ -h $LFS/dev/shm ]; then
  install -v -d -m 1777 $LFS$(realpath /dev/shm)
else
  mount -vt tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi</kbd></pre>
      </div>
    </div>
    <div class="navfooter">
      <ul>
        <li class="prev">
          <a accesskey="p" href="changingowner.html" title=
          "Смена владельца">Пред.</a>
          <p>
            Смена владельца
          </p>
        </li>
        <li class="next">
          <a accesskey="n" href="chroot.html" title=
          "Вход в окружение Chroot">След.</a>
          <p>
            Вход в окружение Chroot
          </p>
        </li>
        <li class="up">
          <a accesskey="u" href="chapter07.html" title=
          "Глава 7. Вход в окружение Chroot и создание дополнительных временных инструментов">
          Наверх</a>
        </li>
        <li class="home">
          <a accesskey="h" href="../index.html" title=
          "Линукс с нуля - Версия 12.2">Начало</a>
        </li>
      </ul>
    </div>
  </body>
</html>