Reorganize and enhance the diskless section (especially for PXE and 5.X).

Mainly inspired by

PR:		docs/62834
Submitted by:	Jean-Francois Dockes <dockes@wanadoo.fr>
Approved by:	blackend (mentor)
This commit is contained in:
Alex Dupre 2004-03-12 19:51:51 +00:00
parent fefa49d629
commit 50bdcb4b88
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=20322

View file

@ -2395,6 +2395,13 @@ Exports list on foobar:
<contrib>Updated by </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Alex</firstname>
<surname>Dupre</surname>
<contrib>Reorganized and enhanced by </contrib>
</author>
</authorgroup>
</sect1info>
<title>Diskless Operation</title>
@ -2402,9 +2409,9 @@ Exports list on foobar:
<indexterm><primary>diskless operation</primary></indexterm>
<para>A FreeBSD machine can boot over the network and operate without a
local disk, using filesystems mounted from an NFS server. No system
local disk, using filesystems mounted from an <acronym>NFS</acronym> server. No system
modification is necessary, beyond standard configuration files.
Such a system is easy to set up because all the necessary elements
Such a system is relatively easy to set up because all the necessary elements
are readily available:</para>
<itemizedlist>
<listitem>
@ -2444,14 +2451,14 @@ Exports list on foobar:
</listitem>
<listitem>
<para>Swapping, if needed, can be done either to an NFS file or to
<para>Swapping, if needed, can be done either to an <acronym>NFS</acronym> file or to
a local disk.</para>
</listitem>
</itemizedlist>
<para>There are many ways to set up diskless workstations. Many
elements are involved, and most can be customized to suit local
taste. The following will describe the setup of a complete system,
taste. The following will describe variations on the setup of a complete system,
emphasizing simplicity and compatibility with the
standard FreeBSD startup scripts. The system described has the
following characteristics:</para>
@ -2466,12 +2473,13 @@ Exports list on foobar:
configuration files overridden by ones specific to diskless
operation or, possibly, to the workstation they belong to.</para>
<para>The parts of the <filename>root</filename> which have to be
writable are overlaid with &man.mfs.8; filesystems. Any changes
writable are overlaid with &man.mfs.8; (&os;&nbsp;4.X) or &man.md.4; (&os;&nbsp;5.X) filesystems. Any changes
will be lost when the system reboots.</para>
</listitem>
<listitem>
<para>The kernel is loaded by <application>etherboot
</application>, using DHCP (or BOOTP) and TFTP.</para>
<para>The kernel is transferred and loaded either with
<application>etherboot</application> or <acronym>PXE</acronym>
as some situations may mandate the use of either method.</para>
</listitem>
</itemizedlist>
@ -2480,63 +2488,138 @@ Exports list on foobar:
other hosts.</para>
</caution>
<para>All the information in this section has been tested
using &os; releases 4.9-RELEASE and 5.2.1-RELEASE. The text is
primarily structured for 4.X usage. Notes have been inserted where
appropriate to indicate 5.X changes.</para>
<sect2>
<title>Background Information</title>
<para>Setting up diskless workstations is both relatively
straightforward and prone to errors. These are sometimes
difficult to diagnose for a number of reasons. For example:</para>
<itemizedlist>
<listitem>
<para>Compile time options may determine different behaviours at
runtime.</para>
</listitem>
<listitem>
<para>Error messages are often cryptic or totally absent.</para>
</listitem>
</itemizedlist>
<para>In this context, having some knowledge of the background
mechanisms involved is very useful to solve the problems that
may arise.</para>
<para>Several operations need to be performed for a successful
bootstrap:</para>
<itemizedlist>
<listitem>
<para>The machine needs to obtain initial parameters such as its IP
address, executable filename, server name, root path. This is
done using the <acronym>DHCP</acronym> or BOOTP protocols.
<acronym>DHCP</acronym> is a compatible extension of BOOTP, and
uses the same port numbers and basic packet format.</para>
<para>It is possible to configure a system to use only BOOTP.
The &man.bootpd.8; server program is included in the base &os;
system.</para>
<para>However, <acronym>DHCP</acronym> has a number of advantages
over BOOTP (nicer configuration files, possibility of using
<acronym>PXE</acronym>, plus many others not directly related to
diskless operation), and we will describe mainly a
<acronym>DHCP</acronym> configuration, with equivalent exemples
using &man.bootpd.8; when possible. The sample configuration will
use the <application>ISC DHCP</application> software package
(release 3.0.1.r12 was installed on the test server).</para>
</listitem>
<listitem>
<para>The machine needs to transfer one or several programs to local
memory. Either <acronym>TFTP</acronym> or <acronym>NFS</acronym>
are used. The choice between <acronym>TFTP</acronym> and
<acronym>NFS</acronym> is a compile time option in several places.
A common source of error is to specify filenames for the wrong
protocol: <acronym>TFTP</acronym> typically transfers all files from
a single directory on the server, and would expect filenames
relative to this directory. <acronym>NFS</acronym> needs absolute
file paths.</para>
</listitem>
<listitem>
<para>The possible intermediate bootstrap programs and the kernel
need to be initialized and executed. There are several important
variations in this area:</para>
<itemizedlist>
<listitem>
<para><acronym>PXE</acronym> will load &man.pxeboot.8;, which is
a modified version of the &os; third stage loader. The
&man.loader.8; will obtain most parameters necessary to system
startup, and leave them in the kernel environment before
transferring control. It is possible to use a
<filename>GENERIC</filename> kernel in this case.</para>
</listitem>
<listitem>
<para><application>etherboot</application>, will directly
load the kernel, with less preparation. You will need to
build a kernel with specific options.</para>
</listitem>
</itemizedlist>
<para><acronym>PXE</acronym> and <application>etherboot</application>
work equally well with 4.X systems. Because 5.X kernels
normally let the &man.loader.8; do more work for them,
<acronym>PXE</acronym> is preferred for 5.X systems.</para>
<para>If your <acronym>BIOS</acronym> and network cards support
<acronym>PXE</acronym>, you should probably use it. However,
it is still possible to start a 5.X system with
<application>etherboot</application>.</para>
</listitem>
<listitem>
<para>Finally, the machine needs to access its filesystems.
<acronym>NFS</acronym> is used in all cases.</para>
</listitem>
</itemizedlist>
<para>See also &man.diskless.8; manual page.</para>
</sect2>
<sect2>
<title>Setup Instructions</title>
<sect3>
<title>Configuring DHCP/BOOTP</title>
<indexterm>
<primary>diskless operation</primary>
<secondary>booting</secondary>
</indexterm>
<para>There are two protocols that are commonly used to boot a
workstation that retrieves its configuration over the network: BOOTP
and DHCP. They are used at several points in the workstation
bootstrap:</para>
<itemizedlist>
<listitem><para><application>etherboot</application> uses
DHCP (by default) or BOOTP (needs a configuration option) to
find the kernel. (PXE uses DHCP).</para>
</listitem>
<listitem><para>The kernel uses BOOTP to locate the NFS
root.</para>
</listitem>
</itemizedlist>
<para>It is possible to configure a system to use only BOOTP.
The &man.bootpd.8; server program is included in the
base FreeBSD system.</para>
<para>However, DHCP has a number of advantages over BOOTP (nicer
configuration files, possibility of using PXE, plus many others
not directly related to diskless operation), and we shall describe
both a pure BOOTP, and a BOOTP+DHCP configuration, with an
emphasis on the latter, which will use the ISC DHCP software
package.</para>
<sect4>
<title>Configuration Using ISC DHCP</title>
<title>Configuration Using <application>ISC DHCP</application></title>
<indexterm>
<primary>DHCP</primary>
<secondary>diskless operation</secondary>
</indexterm>
<para>The <application>isc-dhcp</application> server can answer
both BOOTP and DHCP requests.</para>
<para>The <application>ISC DHCP</application> server can answer
both BOOTP and <acronym>DHCP</acronym> requests.</para>
<para>As of release 4.4, <application>isc-dhcp
<para>As of release 4.9, <application>ISC DHCP
3.0</application> is not part of the base
system. You will first need to install the
<filename role="package">net/isc-dhcp3-server</filename> port or the
corresponding package. Please refer to <xref linkend="ports">
for general information about ports and packages.</para>
<para>Once <application>isc-dhcp</application> is installed, it
<para>Once <application>ISC DHCP</application> is installed, it
needs a configuration file to run, (normally named
<filename>/usr/local/etc/dhcpd.conf</filename>). Here follows
a commented example:</para>
a commented example, where host <hostid>margaux</hostid>
uses <application>etherboot</application> and host
<hostid>corbieres</hostid> uses <acronym>PXE</acronym>:</para>
<programlisting>
default-lease-time 600;
@ -2555,16 +2638,23 @@ Exports list on foobar:
host margaux {
hardware ethernet 01:23:45:67:89:ab;
fixed-address margaux.example.com;
next-server 192.168.4.4;<co id="co-dhcp-next-server">
filename "/tftpboot/kernel.diskless";<co id="co-dhcp-filename">
option root-path "192.168.4.4:/data/misc/diskless";<co id="co-dhcp-root-path">
next-server 192.168.4.4; <co id="co-dhcp-next-server">
filename "/data/misc/kernel.diskless"; <co id="co-dhcp-filename">
option root-path "192.168.4.4:/data/misc/diskless"; <co id="co-dhcp-root-path">
}
host corbieres {
hardware ethernet 00:02:b3:27:62:df;
fixed-address corbieres.example.com;
next-server 192.168.4.4;
filename "pxeboot";
option root-path "192.168.4.4:/data/misc/diskless";
}
}
</programlisting>
<calloutlist>
<callout arearefs="co-dhcp-host-name"><para>This option tells
<command>dhcpd</command> to send the value in the
<application>dhcpd</application> to send the value in the
<literal>host</literal> declarations as the hostname for the
diskless host. An alternate way would be to add an
<literal>option host-name
@ -2574,44 +2664,59 @@ Exports list on foobar:
<callout arearefs="co-dhcp-next-server"><para>The
<literal>next-server</literal> directive designates
the TFTP server (the default is to use the same host as the
DHCP server).</para>
the <acronym>TFTP</acronym> or <acronym>NFS</acronym> server to
use for loading loader or kernel file (the default is to use
the same host as the
<acronym>DHCP</acronym> server).</para>
</callout>
<callout arearefs="co-dhcp-filename"><para>The
<literal>filename</literal> directive defines the file that
<application>etherboot</application> will load as a
kernel.
<note><para>PXE appears to prefer a relative file
name, and it loads <command>pxeboot</command>, not the
kernel (<literal>option filename
"pxeboot"</literal>).</para>
</note>
</para>
<application>etherboot</application> or <acronym>PXE</acronym>
will load for the next execution step. It must be specified
according to the transfer method used.
<application>etherboot</application> can be compiled to use
<acronym>NFS</acronym> or <acronym>TFTP</acronym>. The &os;
port configures <acronym>NFS</acronym> by default.
<acronym>PXE</acronym> uses <acronym>TFTP</acronym>, which is
why a relative filename is used here (this may depend on the
<acronym>TFTP</acronym> server configuration, but would be
fairly typical). Also, <acronym>PXE</acronym> loads
<filename>pxeboot</filename>, not the kernel. There are other
interesting possibilities, like loading
<filename>pxeboot</filename> from a &os; CD-ROM
<filename role="directory">/boot</filename> directory (as
&man.pxeboot.8; can load a <filename>GENERIC</filename> kernel,
this makes it possible to use <acronym>PXE</acronym> to boot
from a remote CD-ROM).</para>
</callout>
<callout arearefs="co-dhcp-root-path"><para>The
<literal>root-path</literal> option defines the path to
the root filesystem, in usual NFS notation.</para>
the root filesystem, in usual <acronym>NFS</acronym> notation.
When using <acronym>PXE</acronym>, it is possible to leave off
the host's IP as long as you do not enable the kernel option
BOOTP. The <acronym>NFS</acronym> server will then be
the same as the <acronym>TFTP</acronym> one.</para>
</callout>
</calloutlist>
</sect4>
<sect4>
</sect3>
<sect3>
<title>Configuration Using BOOTP</title>
<indexterm>
<primary>BOOTP</primary>
<secondary>diskless operation</secondary>
</indexterm>
<para>Here follows an equivalent <command>bootpd</command>
configuration. This would be found in
<para>Here follows an equivalent <application>bootpd</application>
configuration (reduced to one client). This would be found in
<filename>/etc/bootptab</filename>.</para>
<para>Please note that <application>etherboot</application>
must be compiled with the non-default option
<literal>NO_DHCP_SUPPORT</literal> in order to use BOOTP,
and that PXE <emphasis>needs</emphasis> DHCP. The only
and that <acronym>PXE</acronym> <emphasis>needs</emphasis> <acronym>DHCP</acronym>. The only
obvious advantage of <application>bootpd</application> is
that it exists in the base system.</para>
@ -2627,7 +2732,6 @@ Exports list on foobar:
margaux:ha=0123456789ab:tc=.def100
</programlisting>
</sect4>
</sect3>
<sect3>
@ -2656,8 +2760,14 @@ Exports list on foobar:
of everything. Else refer to <xref linkend="ports"> for
information about ports and packages.</para>
<para>You can change the <application>etherboot</application>
configuration (i.e. to use <acronym>TFTP</acronym> instead of
<acronym>NFS</acronym>) by editing the <filename>Config</filename>
file in the <application>etherboot</application> source
directory.</para>
<para>For our setup, we shall use a boot floppy. For other methods
(PROM, or dos program), please refer to the
(PROM, or &ms-dos; program), please refer to the
<application>etherboot</application> documentation.</para>
<para>To make a boot floppy, insert a floppy in the drive on the
@ -2677,9 +2787,32 @@ Exports list on foobar:
</sect3>
<sect3>
<title>Booting with <acronym>PXE</acronym></title>
<para>By default, the &man.pxeboot.8; loader loads the kernel via
<acronym>NFS</acronym>. It can be compiled to use
<acronym>TFTP</acronym> instead by specifying the
<literal>LOADER_TFTP_SUPPORT</literal> option in
<filename>/etc/make.conf</filename>. See the comments in
<filename>/etc/defaults/make.conf</filename> (or
<filename>/usr/share/examples/etc/make.conf</filename> for 5.X
systems) for instructions.</para>
<para>There are two other undocumented <filename>make.conf</filename>
options which may be useful for setting up a serial console diskless
machine: <literal>BOOT_PXELDR_PROBE_KEYBOARD</literal>, and
<literal>BOOT_PXELDR_ALWAYS_SERIAL</literal> (the latter only exists
on &os;&nbsp;5.X).</para>
<para>To use <acronym>PXE</acronym> when the machine starts, you will
usually need to select the <literal>Boot from network</literal>
option in your <acronym>BIOS</acronym> setup, or type a function key
during the PC initialization.</para>
</sect3>
<sect3>
<title>Configuring the TFTP and NFS Servers</title>
<title>Configuring the <acronym>TFTP</acronym> and <acronym>NFS</acronym> Servers</title>
<indexterm>
<primary>TFTP</primary>
@ -2690,11 +2823,13 @@ Exports list on foobar:
<secondary>diskless operation</secondary>
</indexterm>
<para>You need to enable <command>tftpd</command> on the TFTP
server:</para>
<para>If you are using <acronym>PXE</acronym> or
<application>etherboot</application> configured to use
<acronym>TFTP</acronym>, you need to enable
<application>tftpd</application> on the file server:</para>
<procedure>
<step>
<para>Create a directory from which <command>tftpd</command>
<para>Create a directory from which <application>tftpd</application>
will serve the files, e.g. <filename>/tftpboot</filename>.</para>
</step>
@ -2702,16 +2837,16 @@ Exports list on foobar:
<para>Add this line to your
<filename>/etc/inetd.conf</filename>:</para>
<programlisting>tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot</programlisting>
<programlisting>tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot</programlisting>
<note><para>It appears that at least some PXE versions want
the TCP version of TFTP. In this case, add a second line,
<note><para>It appears that at least some <acronym>PXE</acronym> versions want
the <acronym>TCP</acronym> version of <acronym>TFTP</acronym>. In this case, add a second line,
replacing <literal>dgram udp</literal> with <literal>stream
tcp</literal>.</para>
</note>
</step>
<step>
<para>Tell <command>inetd</command> to reread its configuration
<para>Tell <application>inetd</application> to reread its configuration
file:</para>
<screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen>
</step>
@ -2722,8 +2857,8 @@ Exports list on foobar:
location is set in both <filename>inetd.conf</filename> and
<filename>dhcpd.conf</filename>.</para>
<para>You also need to enable NFS and export the
appropriate filesystem on the NFS server.</para>
<para>In all cases, you also need to enable <acronym>NFS</acronym> and export the
appropriate filesystem on the <acronym>NFS</acronym> server.</para>
<procedure>
<step>
@ -2735,14 +2870,14 @@ Exports list on foobar:
<para>Export the filesystem where the diskless root directory
is located by adding the following to
<filename>/etc/exports</filename> (adjust the volume mount
point and replace <replaceable>margaux</replaceable>
with the name of the diskless workstation):</para>
point and replace <replaceable>margaux corbieres</replaceable>
with the names of the diskless workstations):</para>
<programlisting><replaceable>/data/misc</replaceable> -alldirs -ro <replaceable>margaux</replaceable></programlisting>
<programlisting><replaceable>/data/misc</replaceable> -alldirs -ro <replaceable>margaux corbieres</replaceable></programlisting>
</step>
<step>
<para>Tell <command>mountd</command> to reread its configuration
file. If you actually needed to enable NFS in
<para>Tell <application>mountd</application> to reread its configuration
file. If you actually needed to enable <acronym>NFS</acronym> in
<filename>/etc/rc.conf</filename>
at the first step, you probably want to reboot instead.</para>
<screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen>
@ -2759,23 +2894,50 @@ Exports list on foobar:
<secondary>kernel configuration</secondary>
</indexterm>
<para>Create a kernel configuration file for the diskless client
with the following options (in addition to the usual
ones):</para>
<para>If using <application>etherboot</application>, you need to
create a kernel configuration file for the diskless client
with the following options (in addition to the usual ones):</para>
<programlisting>
options BOOTP # Use BOOTP to obtain IP address/hostname
options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info
options BOOTP_COMPAT # Workaround for broken bootp daemons.
</programlisting>
<para>You may also want to use <literal>BOOTP_NFSV3</literal> and
<literal>BOOTP_WIRED_TO</literal> (refer to <filename>LINT</filename>).</para>
<para>You may also want to use <literal>BOOTP_NFSV3</literal>,
<literal>BOOT_COMPAT</literal> and <literal>BOOTP_WIRED_TO</literal>
(refer to <filename>LINT</filename> in 4.X or
<filename>NOTES</filename> on 5.X).</para>
<para>Build the kernel (See <xref linkend="kernelconfig">),
and copy it to the tftp directory, under the name listed
<para>These option names are historical and slightly misleading as
they actually enable indifferent use of <acronym>DHCP</acronym> and
BOOTP inside the kernel (it is also possible to force strict BOOTP
or <acronym>DHCP</acronym> use).</para>
<para>Build the kernel (see <xref linkend="kernelconfig">),
and copy it to the place specified
in <filename>dhcpd.conf</filename>.</para>
<note>
<para>When using <acronym>PXE</acronym>, building a kernel with the
above options is not strictly necessary (though suggested).
Enabling them will cause more <acronym>DHCP</acronym> requests to be
issued during kernel startup, with a small risk of inconsistency
between the new values and those retrieved by &man.pxeboot.8; in some
special cases. The advantage of using them is that the host name
will be set as a side effect. Otherwise you will need to set the
host name by another method, for example in a client-specific
<filename>rc.conf</filename> file.</para>
</note>
<note>
<para>In order to be loadable with
<application>etherboot</application>, a 5.X kernel needs to have
the device hints compiled in. You would typically set the
following option in the configuration file (see the
<filename>NOTES</filename> configuration comments file):</para>
<programlisting>hints "GENERIC.hints"</programlisting>
</note>
</sect3>
@ -2790,11 +2952,17 @@ Exports list on foobar:
<para>You need to create a root filesystem for the diskless
workstations, in the location listed as
<literal>root-path</literal> in
<filename>dhcpd.conf</filename>.</para>
<filename>dhcpd.conf</filename>. The following sections describe
two ways to do it.</para>
<para>The easiest way to do this is to use the
<sect4>
<title>Using the <filename>clone_root</filename> Script</title>
<para>This is the quickest way to create a root filesystem, but
currently it is only supported on &os;&nbsp;4.X. This shell script
is located at
<filename>/usr/share/examples/diskless/clone_root</filename>
shell script. This script needs customization, at least to adjust
and needs customization, at least to adjust
the place where the filesystem will be created (the
<literal>DEST</literal> variable).</para>
@ -2812,21 +2980,51 @@ Exports list on foobar:
other examples in the <filename>diskless</filename> directory,
they actually document a configuration method which is distinct
from the one used by <filename>clone_root</filename> and
<filename>/etc/rc.diskless[12]</filename>, which is a little
confusing. Use them for reference only, except if you prefer
the system startup scripts in
<filename role="directory">/etc</filename>, which is a little
confusing. Use them for reference only, except if you prefer
the method that they describe, in which case you will need
customized <filename>rc</filename> scripts.</para>
</sect4>
<sect4>
<title>Using the Standard <command>make world</command>
Procedure</title>
<para>This method can be applied to either &os;&nbsp;4.X or 5.X and
will install a complete virgin system (not only the root filesystem)
into <envar>DESTDIR</envar>.
All you have to do is simply execute the following script:</para>
<programlisting>#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make world && make kernel
cd /usr/src/etc; make distribution</programlisting>
<para>Once done, you may need to customize your
<filename>/etc/rc.conf</filename> and
<filename>/etc/fstab</filename> placed into
<envar>DESTDIR</envar> according to your needs.</para>
</sect4>
</sect3>
<sect3>
<title>Configuring Swap</title>
<para>If needed, a swap file located on the server can be
accessed via NFS. The exact <filename>bootptab</filename>
or <filename>dhcpd.conf</filename> options are not clearly
documented at this time. The following configuration
suggestions have been reported to work in some installations
using isc-dhcp 3.0rc11.</para>
accessed via <acronym>NFS</acronym>. One of the methods commonly
used to do this has been discontinued in release 5.X.</para>
<sect4>
<title><acronym>NFS</acronym> Swap with &os;&nbsp;4.X</title>
<para>The swap file location and size can be specified with
BOOTP/<acronym>DHCP</acronym> &os;-specific options 128 and 129.
Examples of configuration files for
<application>ISC DHCP 3.0</application> or
<application>bootpd</application> follow:</para>
<procedure>
<step><para>Add the following lines to
<filename>dhcpd.conf</filename>:</para>
@ -2841,24 +3039,25 @@ Exports list on foobar:
option swap-size <replaceable>64000</replaceable>;
}
</programlisting>
<para>The idea is that, at least for a FreeBSD client,
DHCP/BOOTP option code 128 is the path to the NFS swap file,
and option code 129 is the swap size in kilobytes. Older
versions of <command>dhcpd</command> allowed a syntax of
<para><literal>swap-path</literal> is the path to a directory
where swap files will be located. Each file will be named
<filename>swap.<replaceable>client-ip</replaceable></filename>.</para>
<para>Older versions of <application>dhcpd</application> used a syntax of
<literal>option option-128 "...</literal>, which is no
longer supported.</para>
<para><filename>/etc/bootptab</filename> would use the
following syntax instead:</para>
<para><literal>T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00
</literal></para>
<programlisting>T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00</programlisting>
<note><para>In <filename>/etc/bootptab</filename>, the swap
size must be expressed in hexadecimal format.</para></note>
</step>
<step>
<para>On the NFS swap file server, create the swap
<para>On the <acronym>NFS</acronym> swap file server, create the swap
file(s)</para>
<screen>
&prompt.root; <userinput>mkdir <replaceable>/netswapvolume/netswap</replaceable></userinput>
@ -2871,16 +3070,33 @@ Exports list on foobar:
</step>
<step>
<para>On the NFS swap file server, add the following line to
<para>On the <acronym>NFS</acronym> swap file server, add the following line to
<filename>/etc/exports</filename>:</para>
<programlisting>
<replaceable>/netswapvolume</replaceable> -maproot=0:10 -alldirs <replaceable>margaux</replaceable>
<replaceable>/netswapvolume</replaceable> -maproot=0:10 -alldirs <replaceable>margaux corbieres</replaceable>
</programlisting>
<para>Then tell <application>mountd</application> to reread the
exports file, as above.</para>
</step>
</procedure>
</sect4>
<sect4>
<title><acronym>NFS</acronym> Swap with &os&nbsp;5.X</title>
<para>The kernel does not support enabling <acronym>NFS</acronym>
swap at boot time. Swap must be enabled by the startup scripts,
by mounting a writeable file system and creating and enabling a
swap file. To create a swap file of appropriate size, you can do
like this:</para>
<screen>&prompt.root; <userinput>dd if=/dev/zero of=<replaceable>/path/to/swapfile</replaceable> bs=1k count=1 oseek=<replaceable>100000</replaceable></userinput></screen>
<para>To enable it you have to add the following line to your
<filename>rc.conf</filename>:</para>
<programlisting>swapfile=<replaceable>/path/to/swapfile</replaceable></programlisting>
</sect4>
</sect3>
<sect3>
@ -2915,7 +3131,7 @@ Exports list on foobar:
to create the correct device entries (FreeBSD 5.0 and later
use &man.devfs.5; to allocate device nodes transparently for
the user, running <command>MAKEDEV</command> on these
versions is useless).</para>
versions is pointless).</para>
</sect4>