<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../../general.ent">
  %general-entities;
]>

<sect1 id="ch-chroot-devices">
  <?dbhtml filename="devices.html"?>

  <title>Populating /dev</title>

  <indexterm zone="ch-chroot-devices">
    <primary sortas="e-/dev/*">/dev/*</primary>
  </indexterm>

  <sect2>
    <title>Creating Initial Device Nodes</title>

    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
    href="../../boot/common/devices.xml"
    xpointer="xpointer(//*[@os='b'])"/>

<screen><userinput>mknod -m 600 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3</userinput></screen>

  </sect2>

  <sect2>
    <title>Mounting tmpfs and Populating /dev</title>

    <para>The recommended method of populating the <filename
    class="directory">/dev</filename> directory with devices is to
    mount a virtual filesystem (such as <systemitem
    class="filesystem">tmpfs</systemitem>) on the <filename
    class="directory">/dev</filename> directory, and allow the devices
    to be created dynamically on that virtual filesystem as they are
    detected or accessed. This is generally done during the boot process.
    Since this new system has not been booted, it is necessary to do what
    the LFS-Bootscripts package would otherwise do by mounting <filename
    class="directory">/dev</filename>:</para>

<screen><userinput>mount -n -vt tmpfs none /dev</userinput></screen>

    <para>The Udev package is what actually creates the devices in the
    <filename class="directory">/dev</filename> directory. Since it will
    not be installed until later on in the process, manually create the
    minimal set of device nodes needed to complete the building of this
    system:</para>

<screen><userinput>mknod -m 622 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3
mknod -m 666 /dev/zero c 1 5
mknod -m 666 /dev/ptmx c 5 2
mknod -m 666 /dev/tty c 5 0
mknod -m 444 /dev/random c 1 8
mknod -m 444 /dev/urandom c 1 9
chown -v root:tty /dev/{console,ptmx,tty}</userinput></screen>

    <para>There are some symlinks and directories required by LFS that
    are created during system startup by the LFS-Bootscripts package. Since
    this is a chroot environment and not a booted environment, those symlinks
    and directories need to be created here:</para>

<screen><userinput>ln -sv /proc/self/fd /dev/fd
ln -sv /proc/self/fd/0 /dev/stdin
ln -sv /proc/self/fd/1 /dev/stdout
ln -sv /proc/self/fd/2 /dev/stderr
ln -sv /proc/kcore /dev/core
mkdir -v /dev/pts
mkdir -v /dev/shm</userinput></screen>

    <para>Finally, mount the proper virtual (kernel) file systems on the
    newly-created directories:</para>

<screen><userinput>mount -vt devpts -o gid=4,mode=620 none /dev/pts
mount -vt tmpfs none /dev/shm</userinput></screen>

    <para>The <command>mount</command> commands executed above may result
    in the following warning message:</para>

<screen><computeroutput>can't open /etc/fstab: No such file or directory.</computeroutput></screen>

    <para>This file&mdash;<filename>/etc/fstab</filename>&mdash;has not
    been created yet but is also not required for the file systems to be
    properly mounted. As such, the warning can be safely ignored.</para>

  </sect2>

</sect1>
