1 # $FreeBSD: src/share/examples/diskless/README.BOOTP,v 1.2.4.1 2002/02/12 17:43:11 luigi Exp $
2 # Notes on diskless boot.
7 the /etc/rc.d/{initdiskless,diskless} scripts support a slightly different
8 diskless boot process than the one documented in the rest of this file.
10 I am not deleting the information below because it contains some
11 useful background information on diskless operation, but for the
12 actual details you should look at diskless(8), /etc/rc.d/initdiskless,
14 and the /usr/share/examples/diskless/clone_root script which can
15 be useful to set up clients and server for diskless boot.
17 -----------------------------------------------------------------------
19 BOOTP configuration mechanism
24 BOOTP kernels automatically configure the machine's IP address, netmask,
25 optional NFS based swap, and NFS based root mount. The NFS server will
26 typically export a shared read-only /, /usr, and /var to any number of
27 workstations. The shared read-only root is typically either the server's
28 own root or, if you are more security concious, a contrived root.
30 The key issue with starting up a BOOTP kernel is that you typically want
31 to export read-only NFS partitions from the server, yet still be able to
32 customize each workstation ( or not ).
34 /etc/rc.diskless1 is responsible for doing core mounts and for retargeting
35 /conf/ME ( part of the read-only root NFS mount ) to /conf/$IP_OF_CLIENT.
36 /etc/rc.conf.local and /etc/rc.local, along with other machine-specific
37 configuration files, are typically softlinks to /conf/ME/<filename>.
39 In the BOOTP workstation /conf/$IP/rc.conf.local, you must typically
40 turn *OFF* most of the system option defaults in /etc/rc.conf as well
41 as do additional custom configuration of your environment
43 The /usr/src/share/examples/diskless directory contains a typical
44 X session / sshd based workstation configuration. The directories
45 involved are HT.DISKLESS/ and 192.157.86.12/.
47 Essentially, the $IP/ directory ( which rc.diskless looks for in
48 /conf/$IP/ ) contains all the junk. The HT.DISKLESS directory exists
49 to hold common elements of your custom configuration so you do not have
50 to repeat those elements for each workstation. The example /conf
51 structure included here shows how to create a working sshd setup ( so
52 you can sshd into the diskless workstation ), retarget xdm's pid and error
53 files to R+W directories if /usr is mounted read-only, and retarget
54 syslogd and other programs. This example is not designed to run out of
55 the box and some modifications are required.
57 >> NOTE << HT.DISKLESS/ttys contains the typical configuration required
58 to bring X up at boot time. Essentially, it runs xdm in the foreground
59 with the appropriate arguments rather then a getty on ttyv0. You must
60 run xdm on ttyv0 in order to prevent xdm racing with getty on a virtual
61 terminal. Such a race can cause your keyboard to be directed away from
62 the X session, essentially making the session unusable.
64 Typically you should start with a clean slate by tar-copying this example
65 directory to /conf and then hack on it in /conf rather then in
66 /usr/share/examples/diskless.
70 Here is a typical kernel configuration. If you have only one ethernet
71 interface you do not need to wire BOOTP to a specific interface name.
72 BOOTP requires NFS and NFS_ROOT, and our boot scripts require MFS. If
73 your /tmp is *not* a softlink to /var/tmp, the scripts also require NULLFS
77 options BOOTP # Use BOOTP to obtain IP address/hostname
78 options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info
79 options BOOTP_COMPAT # Workaround for broken bootp daemons.
80 #options "BOOTP_WIRED_TO=de0"
82 options MFS # Memory File System
83 options NFS # Network Filesystem
84 options NFS_ROOT # Nfs can be root
85 options NULLFS # nullfs to map /var/tmp to /tmp
89 The BOOTP server must be running on the same logical LAN as the
90 BOOTP client(s). You need to setup two things:
92 (1) You need to NFS-export /, /usr, and /var.
94 (2) You need to run a BOOTP server. DHCPD can do this.
99 Here is an example "/etc/exports" file.
101 / -ro -maproot=root: -network 192.157.86.0 -mask 255.255.255.192
102 /usr -ro -maproot=root: -network 192.157.86.0 -mask 255.255.255.192
103 /var -ro -maproot=root: -network 192.157.86.0 -mask 255.255.255.192
105 In order to be an NFS server, the server must run portmap, mountd,
106 nfsd, and rpc.statd. The standard NFS server options in /etc/rc.conf
107 will work ( you should put your overrides in /etc/rc.conf.local on the
108 server and not edit the distribution /etc/rc.conf, though ).
112 This configuration file "/etc/dhcpd.conf" example is for
113 the '/usr/ports/net/isc-dhcp' dhcpd port.
115 subnet 192.157.86.0 netmask 255.255.255.192 {
116 # range if you want to run the core dhcpd service of
117 # dynamic IP assignment, but it is not used with BOOTP
119 range 192.157.86.32 192.157.86.62;
121 # misc configuration.
123 option routers 192.157.86.2;
124 option domain-name-servers 192.157.86.2;
126 server-name "apollo.fubar.com";
127 option subnet-mask 255.255.255.192;
128 option domain-name-servers 192.157.86.2;
129 option domain-name "fubar.com";
130 option broadcast-address 192.157.86.63;
131 option routers 192.157.86.2;
135 hardware ethernet 00:a0:c9:d3:38:25;
136 fixed-address 192.157.86.11;
137 option root-path "192.157.86.2:/";
138 option option-128 "192.157.86.2:/images/swap";
142 # hardware ethernet 00:e0:29:1d:16:09;
143 hardware ethernet 00:10:5a:a8:94:0e;
144 fixed-address 192.157.86.12;
145 option root-path "192.157.86.2:/";
146 option option-128 "192.157.86.2:/images/swap";
149 SWAP. This example includes options to automatically BOOTP configure
150 NFS swap on each workstation. In order to use this capabilities you
151 need to NFS-export a swap directory READ+WRITE to the workstations.
153 You must then create a swap directory for each workstation you wish to
154 assign swap to. In this example I created a dummy user 'lander' and
155 did an NFS export of /images/swap enforcing a UID of 'lander' for
158 apollo:/usr/ports/net# ls -la /images/swap
160 drwxr-xr-x 2 root wheel 512 Dec 28 07:00 .
161 drwxr-xr-x 8 root wheel 512 Jan 20 10:54 ..
162 -rw-r--r-- 1 lander wheel 33554432 Dec 23 14:35 swap.192.157.86.11
163 -rw-r--r-- 1 lander wheel 335544320 Jan 24 16:55 swap.192.157.86.12
164 -rw-r--r-- 1 lander wheel 134217728 Jan 21 17:19 swap.192.157.86.6
166 A swap file is best created with dd:
168 # create a 32MB swap file for a BOOTP workstation
169 dd if=/dev/zero of=swap.IPADDRESS bs=1m count=32
171 It is generally a good idea to give your workstations some swap space,
172 but not a requirement if they have a lot of memory.