266 lines
		
	
	
	
		
			8.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			266 lines
		
	
	
	
		
			8.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN" [
 | |
| <!ENTITY base CDATA "../..">
 | |
| <!ENTITY date "$Date: 1996-10-06 20:17:12 $">
 | |
| <!ENTITY title "Diskless X Server: a how to guide">
 | |
| <!ENTITY copyright " ">
 | |
| <!ENTITY % includes SYSTEM "../../includes.sgml"> %includes;
 | |
| ]>
 | |
| <!-- $Id: disklessx.sgml,v 1.2 1996-10-06 20:17:12 jfieber Exp $ -->
 | |
| 
 | |
| <html>
 | |
| &header;
 | |
| 
 | |
| <H3>By Jerry Kendall</H3>
 | |
| <H3>(<a href="mailto:jerry@kcis.com">jerry@kcis.com</a>)</H3>
 | |
| 
 | |
| <p>With the help of some 'friends' on the FreeBSD-hackers list, I have
 | |
| been able to create a diskless X terminal... The creation of the X terminal
 | |
| required first creating a diskless system with minimal utilities mounted
 | |
| via NFS. These same steps were used to create 2 separate diskless systems.
 | |
| The first is 'altair.kcis.com'. A diskless X terminal that I run on my
 | |
| old 386DX-40. It has a 340Meg hard disk but, I did not want to change it.
 | |
| So, it boots from 'antares.kcis.com' across a ethernet. The second system
 | |
| is a 486DX2-66. I setup a diskless FreeBSD (complete) that uses no local
 | |
| disk. The server in that case is a Sun 670MP running
 | |
| SunOS 4.1.3. The same setup configuration was needed for both.</p>
 | |
| 
 | |
| <hr>
 | |
| NOTE: 	I am sure that there is stuff that needs to be added to this. Please send me any comments....
 | |
| <hr>
 | |
| 
 | |
| <h2>Creating the boot floppy (On the diskless system)</h2>
 | |
| 
 | |
| <p>Since the network boot loaders will not work with some of
 | |
| the TSR's and such that MS-DOS uses, it is best to create
 | |
| a dedicated boot floppy OR, if you can, create an MS-DOS menu
 | |
| that will (via the config.sys/autoexec.bat files) ask what
 | |
| configuration to load when the system starts. The later is the
 | |
| method that I use and it works great. My MS-DOS (6.x) menu is below.</p>
 | |
| <pre>
 | |
| 	---- config.sys ----
 | |
| 	[menu]
 | |
| 	menuitem=normal, normal
 | |
| 	menuitem=unix, unix
 | |
| 	[normal]
 | |
| 	....
 | |
| 	normal config.sys stuff
 | |
| 	...
 | |
| 	[unix]
 | |
| 	----
 | |
| 
 | |
| 	---- autoexec.bat ----
 | |
| 	@ECHO OFF
 | |
| 	goto %config%
 | |
| 
 | |
| 	:normal
 | |
| 	...
 | |
| 	normal autoexec.bat stuff
 | |
| 	...
 | |
| 	goto end
 | |
| 
 | |
| 	:unix
 | |
| 	cd \netboot
 | |
| 	nb8390.com
 | |
| 
 | |
| 	:end
 | |
| 	----</pre>
 | |
| 
 | |
| <h2>Getting the network boot programs (On the server)</h2>
 | |
| 
 | |
| <p>Compile the 'net-boot' programs that are located in
 | |
| /usr/src/sys/i386/boot/netboot. You should read the comments
 | |
| at the top of the makefile. Adjust as required. !!!! make a
 | |
| backup of the original in case it gets fobar'd !!! When the build
 | |
| is done, there should be 2 MS-DOS executables, 'nb8390.com' and
 | |
| 'nb3c509.com'. One of these two programs will be what you need
 | |
| to run on the diskless server. It will load the kernel from the
 | |
| boot server. At this point, put both programs on the MS-DOS
 | |
| boot floppy created earlier.
 | |
| 
 | |
| <h2>Determine which program to run (On the diskless system)</h2>
 | |
| 
 | |
| <p>If you know the chipset that your ethernet adapter uses, this is
 | |
| easy. If you have the NS8390 chipset, or a NS8390 based chipset,
 | |
| use NB8390.COM. If you have a 3Com 509 based chipset, use the
 | |
| NB3C509.COM boot program. If you are not sure which you have,
 | |
| try using one, if it says 'No adapter found', try the other.
 | |
| Beyond that, you are pretty much on your own.
 | |
| 
 | |
| <h2>Booting across the network</h2>
 | |
| 
 | |
| <p>Boot the diskless system with out any config.sys/autoexec.bat
 | |
| files. try running the boot program for your ethernet adapter.</p>
 | |
| <pre>		
 | |
| 	My ethernet adapter is running in WD8013 16bit mode so
 | |
| 	I run NB8390.COM
 | |
| 
 | |
| 	C:> cd \netboot
 | |
| 	C:> nb8390
 | |
| 
 | |
| 		Boot from Network (Y/N) ?  Y
 | |
| 
 | |
| 		BOOTP/TFTP/NFS bootstrap loader     ESC for menu
 | |
| 
 | |
| 		Searching for adapter..
 | |
| 		WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66
 | |
| 
 | |
| 		Searching for server..</pre>
 | |
| 
 | |
| <p>At this point, my diskless system is trying to find a machine to act
 | |
| as a boot server. Make note of the addr line above, you will need this
 | |
| number later. Reset the diskless system and modify your config.sys and
 | |
| autoexec.bat files to do these steps automatically for you. Perhaps in
 | |
| a menu. If you had to run 'nb3c509.com' instead of 'nb8390.com' the
 | |
| output is the same as above. If you got 'No adapter found' at the
 | |
| 'Searching for adapter..' message, verify that you did indeed set the
 | |
| compile time defines in the makefile correctly.</p>
 | |
| 
 | |
| <h2>Allowing systems to boot across the network (On the
 | |
|       server)</h2>
 | |
| 
 | |
| <p>Make sure the /etc/inetd.conf file has entries for tftp and bootps.
 | |
| Mine are listed below:</p>
 | |
| <pre>
 | |
| 	---- /etc/inetd.conf ----
 | |
| 	tftp	dgram	udp	wait	nobody	/usr/libexec/tftpd	tftpd
 | |
| 	#
 | |
| 	# Additions by who ever you are
 | |
| 	bootps  dgram  udp  wait  root  /usr/libexec/bootpd bootpd /etc/bootptab
 | |
| 	----
 | |
| </pre>
 | |
| <p>If you have to change the /etc/inetd.conf file, send a HUP signal to
 | |
| inetd. To do this, get the process ID of inetd with 'ps -ax | grep
 | |
| inetd | grep -v grep'. Once you have it, send it a HUP signal. Do this
 | |
| by 'kill -HUP <pid>'. This will force inetd to re-read its config file.</p>
 | |
| 
 | |
| <p>Did you remember to note the 'addr' line from the output of the boot
 | |
| loader on the diskless system???? Guess what, here is where you need it.</p>
 | |
| 
 | |
| <p>Add an entry to /etc/bootptab (maybe creating the file). It should be
 | |
| laid out identical to this:</p>
 | |
| 
 | |
| <pre>
 | |
| 	altair:\
 | |
| 		:ht=ether:\
 | |
| 		:ha=004001432666:\
 | |
| 		:sm=255.255.255.0:\
 | |
| 		:hn:\
 | |
| 		:ds=199.246.76.1:\
 | |
| 		:ip=199.246.76.2:\
 | |
| 		:gw=199.246.76.1:\
 | |
| 		:vm=rfc1048:
 | |
| 
 | |
| 	The lines are as follows:
 | |
| 		'altair' the diskless systems name without the domain name.
 | |
| 		'ht=ether' the hardware type of 'ethernet'.
 | |
| 		'ha=004001432666' the hardware address (the number noted above).
 | |
| 		'sm=255.255.255.0' the subnet mask.
 | |
| 		'hn' tells server to send client's hostname to the client.
 | |
| 		'ds=199.246.76.1' tells the client who the domain server is.
 | |
| 		'ip=199.246.76.2' tells the client what it's IP address is.
 | |
| 		'gw=199.246.76.1' tells the client what the default gateway is.
 | |
| 		'vm=...' just leave it there...
 | |
| </pre>
 | |
| <p>NOTE: 
 | |
| ****** Be sure to setup the IP addresses correctly, the addresses
 | |
| above are my own......</p>
 | |
| 
 | |
| <p>Create the directory '/tftpboot' on the server it will contain the
 | |
| configuration files for the diskless systems that the server will
 | |
| serve. These files will be named 'cfg.<ip>' where <ip> is the IP
 | |
| address of the diskless system. The config file for 'altair' is
 | |
| /tftpboot/cfg.199.246.76.2. The contents is:</p>
 | |
| 
 | |
| <pre>
 | |
| 	---- /tftpboot/cfg.199.246.76.2 ----
 | |
| 	rootfs 199.246.76.1:/DiskLess/rootfs/altair
 | |
| 	hostname altair.kcis.com
 | |
| 	----
 | |
| </pre>
 | |
| <p>The line 'hostname altair.kcis.com' simply tells the diskless
 | |
| system what its fully qualified domain name is.</p>
 | |
| 
 | |
| <p>The line 'rootfs 199.246.76.1:/DiskLess/rootfs/altair' tells the
 | |
| diskless system where its NFS mountable root filesystem is located.</p>
 | |
| 
 | |
| <p>NOTE:!!!!! The NFS mounted root filesystem will be mounted READ ONLY.</p>
 | |
| 
 | |
| <p>The hierarchy for the diskless system can be re-mounted allowing
 | |
| read-write operations if required.</p>
 | |
| 
 | |
| <p>I use my spare 386DX-40 as a dedicated X terminal...</p>
 | |
| 
 | |
| <p>The hierarchy for 'altair' is:</p>
 | |
| 
 | |
| <pre>
 | |
| 	/
 | |
| 	/bin
 | |
| 	/etc
 | |
| 	/tmp
 | |
| 	/sbin
 | |
| 	/dev
 | |
| 	/dev/fd
 | |
| 	/usr
 | |
| 	/var
 | |
| 	/var/run
 | |
| </pre>
 | |
| 
 | |
| <p>The actual list of files is:</p>
 | |
| 
 | |
| <pre>
 | |
| 	-r-xr-xr-x  1 root  wheel  779984 Dec 11 23:44 ./kernel
 | |
| 	-r-xr-xr-x  1 root    bin  299008 Dec 12 00:22 ./bin/sh
 | |
| 	-rw-r--r--  1 root  wheel     499 Dec 15 15:54 ./etc/rc
 | |
| 	-rw-r--r--  1 root  wheel    1411 Dec 11 23:19 ./etc/ttys
 | |
| 	-rw-r--r--  1 root  wheel     157 Dec 15 15:42 ./etc/hosts
 | |
| 	-rw-r--r--  1 root    bin    1569 Dec 15 15:26 ./etc/XF86Config.altair
 | |
| 	-r-x------  1 bin     bin  151552 Jun 10  1995 ./sbin/init
 | |
| 	-r-xr-xr-x  1 bin     bin  176128 Jun 10  1995 ./sbin/ifconfig
 | |
| 	-r-xr-xr-x  1 bin     bin  110592 Jun 10  1995 ./sbin/mount_nfs
 | |
| 	-r-xr-xr-x  1 bin     bin  135168 Jun 10  1995 ./sbin/reboot
 | |
| 	-r-xr-xr-x  1 root    bin   73728 Dec 13 22:38 ./sbin/mount
 | |
| 	-r-xr-xr-x  1 root  wheel    1992 Jun 10  1995 ./dev/MAKEDEV.local
 | |
| 	-r-xr-xr-x  1 root  wheel   24419 Jun 10  1995 ./dev/MAKEDEV
 | |
| </pre>
 | |
| <p>Don't forget to 'MAKEDEV all' in the 'dev' directory.</p>
 | |
| 
 | |
| <p>My /etc/rc for 'altair' is:</p>
 | |
| 
 | |
| <pre>
 | |
| 	#!/bin/sh
 | |
| 	#
 | |
| 	PATH=/bin:/sbin
 | |
| 	export PATH
 | |
| 	#
 | |
| 	# configure the localhost
 | |
| 	/sbin/ifconfig lo0 127.0.0.1
 | |
| 	#
 | |
| 	# configure the ethernet card
 | |
| 	/sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00
 | |
| 	#
 | |
| 	# mount the root filesystem via NFS
 | |
| 	/sbin/mount antares:/DiskLess/rootfs/altair /
 | |
| 	#
 | |
| 	# mount the /usr filesystem via NFS
 | |
| 	/sbin/mount antares:/DiskLess/usr /usr
 | |
| 	#
 | |
| 	/usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1
 | |
| 	#
 | |
| 	# Reboot after X exits
 | |
| 	/sbin/reboot
 | |
| 	#
 | |
| 	# We blew up....
 | |
| 	exit 1
 | |
| </pre>
 | |
| 
 | |
| <hr>
 | |
| <p>Any comments and ALL questions welcome....</p>
 | |
| 
 | |
| <address>
 | |
| Jerry Kendall<br>
 | |
| <a href="mailto:jerry@kcis.com">jerry@kcis.com</a>
 | |
| </address>
 | |
| 
 | |
| &footer;
 | |
| </body>
 | |
| </html>
 |