Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • chapter07/kernfs.xml

    rd963661 r9407694  
    1616
    1717    <para>Applications running in user space utilize various file
    18     systems exported by the kernel to communicate
     18    systems created by the kernel to communicate
    1919    with the kernel itself. These file systems are virtual: no disk
    20     space is used for them. The content of the file systems resides in
    21     memory.</para>
     20    space is used for them. The content of these file systems resides in
     21    memory. These file systems must be mounted in the $LFS directory tree
     22    so the applications can find them in the chroot environment.</para>
    2223
    23     <para>Begin by creating directories on which the file systems will be
     24    <para>Begin by creating the directories on which these virtual file systems will be
    2425    mounted:</para>
    2526
    26 <screen><userinput>mkdir -pv /{proc,sys,run}</userinput></screen>
     27<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen>
     28
     29  <sect2 id="ch-tools-bindmount">
     30    <title>Mounting and Populating /dev</title>
     31
     32      <para>During a normal boot of an LFS system, the kernel automatically
     33      mounts the <systemitem class="filesystem">devtmpfs</systemitem>
     34      file system on the
     35      <filename class="directory">/dev</filename> directory; the kernel
     36      creates device nodes on that virtual file system during the boot process,
     37      or when a device is first detected or accessed. The udev daemon may
     38      change the ownership or permissions of the device nodes created by the
     39      kernel, and create new device nodes or symlinks, to ease the work of
     40      distro maintainers and system administrators.  (See
     41      <xref linkend='ch-config-udev-device-node-creation'/> for details.)
     42      If the host kernel supports &devtmpfs;, we can simply mount a
     43      &devtmpfs; at <filename class='directory'>$LFS/dev</filename> and rely
     44      on the kernel to populate it.</para>
     45
     46      <para>But some host kernels lack &devtmpfs; support; these
     47      host distros use different methods to create the content of
     48      <filename class="directory">/dev</filename>.
     49      So the only host-agnostic way to populate the
     50      <filename class="directory">$LFS/dev</filename> directory is
     51      by bind mounting the host system's
     52      <filename class="directory">/dev</filename> directory. A bind mount is
     53      a special type of mount that makes a directory subtree or a file
     54      visible at some other location. Use the following
     55      command to do this.</para>
     56
     57<screen><userinput>mount -v --bind /dev $LFS/dev</userinput></screen>
     58
     59  </sect2>
    2760
    2861  <sect2 id="ch-tools-kernfsmount">
    2962    <title>Mounting Virtual Kernel File Systems</title>
    3063
    31     <para>The kernel has already mounted
    32     <systemitem class="filesystem">devtmpfs</systemitem>.
    33     Mount the remaining virtual kernel filesystems:</para>
     64      <para>Now mount the remaining virtual kernel file systems:</para>
    3465
    35 <screen><userinput>mkdir -pv /dev/{pts,shm}
    36 mount -vt devpts /dev/pts /dev/pts -o gid=5,mode=620
    37 mount -vt proc  proc  /proc
    38 mount -vt sysfs sysfs /sys
    39 mount -vt tmpfs tmpfs /run
    40 mount -vt tmpfs tmpfs /dev/shm -o nosuid,nodev</userinput></screen>
    41 
     66<screen><userinput>mount -v --bind /dev/pts $LFS/dev/pts
     67mount -vt proc proc $LFS/proc
     68mount -vt sysfs sysfs $LFS/sys
     69mount -vt tmpfs tmpfs $LFS/run</userinput></screen>
     70<!--
    4271    <variablelist>
    4372      <title>The meaning of the mount options for devpts:</title>
     
    6796
    6897    </variablelist>
     98-->
     99      <para>In some host systems, <filename>/dev/shm</filename> is a
     100      symbolic link to <filename class="directory">/run/shm</filename>.
     101      The /run tmpfs was mounted above so in this case only a
     102      directory needs to be created.</para>
    69103
    70   </sect2>
     104      <para>In other host systems <filename>/dev/shm</filename> is a mount point
     105      for a tmpfs. In that case the mount of /dev above will only create
     106      /dev/shm as a directory in the chroot environment. In this situation
     107      we must explicitly mount a tmpfs:</para>
    71108
    72   <sect2 id="ch-tools-devadjust">
    73     <title>Adjusting devtmpfs</title>
    74 
    75     <para>Now <systemitem class='filesystem'>proc</systemitem> filesystem
    76     is mounted, we can replace the device nodes for standard I/O streams
    77     with symlinks to pseudo files in
    78     <filename class="directory">/proc/self/fd</filename> (which are symlinks
    79     to the files connected to the standard I/O streams for the current
    80     process).  And, create another symlink recommended by the kernel
    81     documentation.  These are necessary for I/O redirection in the building
    82     system of some packages to function properly:</para>
    83 
    84 <screen><userinput>ln -sfv /proc/self/fd/0 /dev/stdin
    85 ln -sfv /proc/self/fd/1 /dev/stdout
    86 ln -sfv /proc/self/fd/2 /dev/stderr
    87 ln -sv  /proc/self/fd   /dev</userinput></screen>
     109<screen><userinput>if [ -h $LFS/dev/shm ]; then
     110  mkdir -pv $LFS/$(readlink $LFS/dev/shm)
     111else
     112  mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
     113fi</userinput></screen>
    88114
    89115  </sect2>
Note: See TracChangeset for help on using the changeset viewer.