NFS-Root Mini-Howto
This Mini-HOWTO tries explains how to setup a ``disc-less Linux
workstation, which mounts it's root filesystems via NFS.
The newest version of this Mini-Howto can always be found in
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root or
on any sunsite mirror NEAR YOU.''
(c) 1996 Andreas Kostyrka (e9207884@student.tuwien.ac.at or andreas@ag.or.at)
Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.
All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.
In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.
If you have questions, please contact Andreas Kostyrka
<andreas@ag.or.at>, the author of this mini-HOWTO, or
Tim Bynum, the Linux HOWTO coordinator, at
<
linux-howto@sunsite.unc.edu> via email.
*
* Ofer Maor <ofer@hadar.co.il> (providing a better mini howto about setting up discless workstations.) *
*
Generally speaking there are the following problems for the workstation:
rest of the Ethernet configuration. *
filesystem. *
The current implementation of NFSROOT in the Linux kernel (as of 1.3.7x) allows for the following ``solutions'':
ethernet configuration may be passed to the kernel via kernel parameters by LILO or LOADLIN. *
parameters. If this is not done, the kernel assumes the RARP-server also as NFS-server, and uses compiled in default for the path part. (current default value in the kernel: /tftpboot/<IP-address of the machine>.) *
*
Before starting to setup a discless enviroment, you should decide if you will be booting via LILO or LOADLIN. The advantage of doing so is flexibility, the disadvantage is speed. Booting a Linux kernel without LILO is faster. This may or may not be a consideration.
RARP support in the kernel of the server will probably be a good idea. You must have it if you will boot without kernel parameters. On the other hand it doesn't help you, if the client isn't on the same subnet than the server.
The kernel for the workstation needs the following as a minimum set compiled in:
ext2-support compiled in, a module suffices.) *
*
must be compiled in. *
BOOTBP support for NFS-Root. (By this I mean the questions that are asked after the NFS question in make config.) *
If the workstation will be booted without kernel parameters, you need also to set the root device to 0:255. Do this by creating a dummy device file with mknod /dev/nfsroot b 0 255. After having created such a device file, you can set root device of the kernel image with rdev <kernel-image> /dev/nfsroot.
Warning: while these instruction might work for you, they are by no means sensefull in a production enviroment. For a better way to setup a root filesystem for the clients, see the NFS-Root-Client mini howto by Ofer Maor <ofer@hadar.co.il>.
After having decided where to place the root tree, create it with (e.g.) mkdir -p <directory> and tar cClf / - | tar xpCf <directory> -.
If you boot your kernel without LILO, then the rootdir has to be /tftpboot/<IP-address>. If you don't like it, you can change it in the top Makefile in the kernel sources, look for a line like: NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\"" If you change this, you have to recompile the kernel.
Now trim the unneeded files, and check the /etc/rc.d scripts. Some important points:
with a, at least partially, setup eth0. Setting up the IP-address of the workstation to the the IP-Address of the server is not considered a clever thing to do. (As it happened to the author on one of his early attempts.)
*
be setup for nfs filesystems.
*
workstation root filesystem. (I've already patched up a rc.inet1 on the server, and wondered why the workstation still didn't work.) *
Export the root dir to the work station. See exports(5). You most likely will have to restart the nfsd/mountd after this change. Under !RedHat this can easily be done by typing /etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start .
Setup the RARP somewhere on the net. If you boot without a nfsroot parameter, the RARP server has to be the NFS server. Usually this will be the NFS server. To do this, you will need to run a kernel with RARP support.
To do this, execute (and install it somewhere in /etc/rc.d of the server!):
/sbin/rarp -s <ip-addr> <hardware-addr>
where
; ip-addr:
is the IP address of the workstation, and ; hardware-addr:
is the Ethernet address of the network card of the workstation.
example: /sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12
You can also use a symbolic name instead of the IP-address, as long the server is able to find out the IP-address. (/etc/hosts or DNS lookups)
For BOOTP setup you need to edit /etc/bootptab. Please consult the bootpd(8)? and bootptab(5)? man pages.
I don't know the hardware address! How can I find it out?
the network card is recognized. It usually contains 6 hex bytes, that should be the address of the card. *
enabled. Then ping the workstation from the server. Look in the ARP-cache by executing: /sbin/arp -a *
As I have not used such a beast myself yet, I can give you only the following tips (courtesy of Christian Leutloff <leutloff@sundancer.tng.oche.de>):
*
for bootroms for Linux, and further information. netboot is available from the local Linux mirror, or as a Debian package (netboot-0.4). *
*
this depends upon your boot rom's way of loading the kernel. *
mentioned above, as not everybody has access to prom burner :( (especially in europe, as I'm located there.) welcome, I'll include them then here.'' *
If you have exported the root filesystem with the correct name for the default naming and your NFS server is also the RARP server (which implies that the boxes are on the same subnet.), than you can just boot the kernel by cating it to a disc. (You have to set the root device in the kernel to 0:255.) This assumes, that the root directory on the server is /tftpboot/IP-Address (this value can be changed when compiling the kernel.)
Give the kernel all needed parameters when booting, and add nfsroot=<server-ip-addr>:</path/to/mount> where server-ip-addr is the IP-address of your NFS-server, and /path/to/mount is the path to the root directory.
Tips:
type in once all the correct parameters and add ``lock''. Next time when booting let LILO timeout. *
also use the append= feature in lilo.conf. *
In addition to nfsroot give a nfsaddrs=<wst-IP>:<srv-IP>:<gw-IP>:<netm-IP>:<hostname> commandline argument for the kernel. The kernel will setup eth0 with the given parameters:
; wst-IP:
machine's IP-Address ; srv-IP:
NFS-server IP-Address ; gw-IP:
gateway ; netm-IP:
netmask ; hostname:
machine name
A popular problem with /sbin/init is, that some (at least) current distributions come with /sbin/init dynamically linked. So you have to provide a correct /lib setup to the client. One easy thing one could try is replacing /sbin/init (for the client) with a statically linked ``Hello World program. This way you know if it is something more basic, or ``just a problem with dynamic linking.
If you get some garbled messages about ttys when booting, then you should run a MAKEDEV from the client in the /dev directory. There are rumors that this doesn't work with certain server oses which use 64-bit dev numbers, should you run into this, please mail me with which os you have the troubles. A potential solution would be to create a small /dev ram disc early in the boot process, and reinstall the device nodes each time.
ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz
With initrd (which is included in Linux 2.0), it could be made to work for diskless stations quite nicely. initrd is actually always an advanced option for more customized setups.
*
needed as Linux 2.0 contains also the option to use BOOTP instead of RARP. (To be more precise, you can compile both in the kernel, and the faster response wins.)
*
documenting NFS-Root systems.
*
NFS. It was send to me (during a private high workload phase), but I somehow managed to loose the mail. :(
You can get it probably from
http://www.linuxhq.com/ in the unofficial patches section.
*
The fingerprint is: F1 F7 43 D5 07 C4 6C 87 BF 6B 33 A2 2C EE 5A F9.
*
No other page links to HowToNFSRoot yet.