<!doctype linuxdoc system>

<!-- 
************************** begin comment *****************************
     The following is the HOW-TO for Diskless Nodes. This document is
     in the SGML format. You must use sgml package to process this 
     document
************************* end of comment *****************************
 -->
<!-- 
************************** SGML USER GUIDE *****************************
	The SGML user guide on linux is located at /usr/doc/sgml-tools
	Read the example.sgml and guide.html documents.
	Usage:
		HTML	  	sgml2html foo  (Do not give extension .sgml here!!)
		Text	 	sgml2txt foo.sgml
		Latex	  	sgml2latex foo.sgml

		Note: Use 2 dashes - before language, error while compiling
		Postscript 	sgml2latex -language=english -o ps foo.sgml
		DVI  		sgml2latex -d foo.sgml
		Lyx		sgml2lyx foo.sgml
		Richtext 	sgml2rtf foo.sgml
		gnuinfo  	sgml2info foo.sgml
		man		sgml2txt -man foo.sgml
		SGML	 	sgmlcheck foo.sgml
************************* end of comment *****************************
-->

<article>

<!-- Title information -->

<title>Diskless Nodes HOW-TO document for Linux
<!-- chapt change
DISKLESS NODES HOW-TO for Linux

-->
<author> Robert Nemkin 
       <htmlurl url="mailto:buci@math.klte.hu"
		name="buci@math.klte.hu">
, Al Dev (Alavoor Vasudevan) - Maintainer of this HOWTO
       <htmlurl url="mailto:alavoor[AT]yahoo.com"
		name="alavoor[AT]yahoo.com">
, Markus Gutschke
       <htmlurl url="mailto:markus+etherboot@gutschke.com"
		name="markus+etherboot@gutschke.com">
, Ken Yap
       <htmlurl url="mailto:ken.yap@acm.org"
		name="ken.yap@acm.org">
, Gero Kuhlmann
       <htmlurl url="mailto:gero@gkminix.han.de"
		name="gero@gkminix.han.de">

<date>v22.7, 23 May 2002
<abstract>
This document describes how to set up a diskless Linux box. 
As technology is advancing rapidly, network-cards are becoming cheaper and much 
faster - 100 MBits ethernet is standard now and in about 1 to 2 years 
1000 MBits i.e. 1GigBits ethernet cards will become an industry standard.
With high-speed network cards, remote access will become as fast as the 
local disk access which will make diskless nodes a viable 
alternative to workstations in local LAN. Also diskless nodes eliminates the 
cost of software upgrades and system administration costs like backup, 
recovery which will be centralized on the server side. 
Diskless nodes also enable "sharing/optimization" of centralized server CPU,
memory, hard-disk, tape and cdrom resources. Diskless nodes 
provides mobility for the users i.e., users
can log on from any one of diskless nodes and are not tied to one workstation.
Diskless Linux box completely eliminates the need for local floppy disk, 
cdrom drive, tape drive and hard-disk. Diskless nodes JUST has a network card,
8MB RAM, a low-end cpu and a very simple mother-board which does not have 
any interface sockets/slots for hard-disks, modem, cdrom, floppy etc..
With Diskless linux nodes you can run programs on remote Linux 64 CPU SMP box 
or even on Linux super-computer!
Diskless nodes lowers the "Total Cost of Ownership" of the computer system.
This document is copy­righted by Robert Nemkin and other authors as listed above. Copyright policy is GPL.  Thanks to Bela Kis 
       <htmlurl url="mailto:bkis@cartan.math.klte.hu"
             name="bkis@cartan.math.klte.hu">
for translating this initial document v0.0.3 (which was a 
mini-howto) to English.
</abstract>

<!-- Table of contents -->
<toc>

<!-- Begin the document -->

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> What is this all about?
-->
<sect> What is this all about?
<p>
<bf>
(The latest version of this document is at <url url="http://www.milkywaygalaxy.freeservers.com">. You may
want to check there for changes).
</bf>

Diskless Linux Computers do not have any hard-disk, floppy drives and tape drives. They offer
significant savings in "Total Cost of Ownership" by eliminating the maintenance costs.
You can accomplish Diskless Linux Computer by one of the following two methods:
<enum>
<item> Boot directly a Live Linux CDROM. The Linux CDROM is live Linux system which
contains all the applications and programs and loads the software into RAM disks.
<p>
<item> Recent linux kernels offer the possibility to boot a linux box entirely from network, by
loading its kernel and root filesystem from a server. In that case, the client may use
several ways to get the first instructions it has to execute when booting: home made
eproms, special network cards implementing the RARP, BOOTP or DHCP protocols, cdroms, or
bootloaders loaded from a boot floppy or a local hard drive.
</enum>
The simplest and most easy method to build a diskless linux is by using Live Linux CDROM. 
You simply download Live Linux CDROM and insert it into the CDROM drive and power-on and you are
done! For details see the "Live Linux CDROM" chapter in this document.

The other option is using a EPROM, but this will
take extra work to be done on the client and the server box. 
If you want to go for EPROM method, I recommend you to
simply buy Diskless Linux computers from the manufacturers as given in the following chapters.
<!--
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Advantages of Diskless Computer
-->
<sect> Advantages of Diskless Computer
<p>
Diskless linux computer will become <bf>immensely</bf> popular and will 
be the product of this century and in the next century.
The diskless linux computers will be very successful because of the
availability of very high-speed network cards at 
very low prices. Today 100 Megabit 
per second (11.92 Megabytes per sec transfer rate) network cards are 
common and in about 1 to 2 years 1000 MBit (119.2 Megabytes per sec transfer rate)
network cards will become very cheap and will be the standard.

In near future, Monitor manufacturers will place 
the CPU, NIC, RAM <bf>right inside</bf> the monitor to form 
a diskless computer!!
This eliminates the diskless computer box and saves space. The monitor will
have outlet for mouse, keyboard, network RJ45 and power supply.

The following are benefits of using diskless computers -
<itemize>
<item> NO time-consuming UPGRADES at all!! With 'Live Linux' CDROM upgrading diskless
workstation is just <bf>"throw-away-old-CDROM-and-pop-in-new-CDROM-into-drive"</bf>. 
Just takes 5 seconds to upgrade!!
<p>
<item> Sharing of central server RAM memory by many diskless computer users.
For example, if many users are using a web browser then in the server RAM there will
be only one copy of web browser in the RAM. In case Windows 95 PCs, many 
users need to have individual copy of web browser 
in local RAM and hence there is wastage of RAM space.
Since the RAM in server is "shared" by hundreds of diskless clients, this will be a
huge savings in the cost of memory.
You can pool the RAM memory by shifting memory from clients to server.
<p>
<item> Diskless Linux computers can run BOTH MS Windows 95/NT and linux programs.
<p>
<item> Total cost of ownership is very low in case of Diskless computers. 
Total cost of ownership is cost of initial purchasing + cost of maintenance.
The cost of maintenance is usually <bf>3 to 5 times</bf> the cost of 
initial computer purchase and this cost is recurring year after year.
In case of Diskless computers, the cost of maintenance 
is <bf>completely eliminated</bf>!!
<p>
<item> All the backups are centralized at one single main server.
<p>
<item> More security of data as it is located at server.
<p>
<item> No need of UPS battery, air-conditioning, dust proof environment for 
diskless clients, only server needs UPS battery, A/C and dust proof environment.
Only remote server inside the "Data Center" needs to have UPS, Redundant power supply,
Portable Diesel Electric generator, A/C, Fire protection,
Highly restricted access with locked and secure door to "Data Center".
<p>
<item> Noise is completely eliminated since diskless computer does not have
Fan motor, and local hard-disk. Only server makes lots of noise but it is enclosed 
in a server room ("Data Center"). 
<p>
<item> Protection from Virus attack - Computer virus cannot attack diskless
computers as they do not have any hard disk. Virus cannot do any damage to
diskless computers. Only one single server box 
need to be protected against virus attack. This saves millions of dollars for 
the company by avoiding installation of vaccines and cleaning the hard disks!!
<p>
<item> Server can have large powerful/high performance hard disks, can optimize
the usage of disk space via sharing by many diskless computer users. 
Fault tolerance of hard disk failure is possible by using RAID on main server.
<p>
<item> Server can have 64 bit CPU SMP box having many CPUs or even 
linux super-computers. CPU power can be shared by many diskless computer users
<p>
<item> Diskless computers are extremely fast because program loading time is
completely eliminated. For example, if the server loads the StarOffice suite
into memory due to request from one diskless user then if another diskless user wants to
use the StarOffice suite then loading time is avoided since StarOffice is 
already loaded into memory.
<p>
<item> Diskless linux computers can run programs on multiple servers using the
"xhost" and DISPLAY environment. 
<p>
<item> Very few system administrators required to maintain central server unlike
Windows 95 PC clients which need many administrators.
<p>
<item> Zero administration at diskless client side. Diskless computers 
are absolutely maintenance free and troublefree.
<p>
<item> Long life of diskless clients - more than <bf>300 years</bf> without any 
hardware or software upgrades.
<p>
<item> Eliminates install/upgrade of hardware, software on diskless client side.
<p>
<item> Eliminates cost of cdrom, floppy, tape drive, modem, UPS battery, Printer
parallel ports, serial ports etc..
<p>
<item> Prevents pilferage of hardware components as diskless node has very little
RAM and low-cost CPU. The server has lots of memory and many powerful CPUs.
<p>
<item> Can operate in places like factory floor where a hard disk might be too fragile. 
<p>
<item> Diskless nodes work even on wide area network.
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Diskless with "Live Linux CDROM" <label id="livecdrom">
-->
<sect> Diskless with "Live Linux CDROM" <label id="livecdrom">
<p>
The "Live Linux CDROM" is a CDROM which has the entire Linux Operating System filesystem
on the CDROM. It is made by copying the live Linux system on to CDROM. The "Live Linux CDROM"
directly boots the Linux operating system from the CDROM drive.
But you need to setup the BIOS to first boot from CDROM. Generally the boot order is :
Floppy Drive, Hard disk, CDROM. You can enter BIOS setup, by powering on the computer and 
presssing the DEL key.

Get the "Live Linux CDROM" from 
<itemize>
<item> <url name="Suse live-eval" url="ftp://ftp-linux.cc.gatech.edu/pub/linux/distributions/suse/suse/i386"> and look for live-eval.
The main site <url url="http://www.suse.com"> click on download.
<item> <url url="http://www.demolinux.org">
<item> <url url="http://www.knopper.net/knoppix">
<item> <url url="http://www.ocslink.com/~blunier">
<item> <url url="http://lab.dyne.org/DyneBolic">
<item> <url name="Google Live Linux" url="http://directory.google.com/Top/Computers/Software/Operating_Systems/Linux/Distributions/Live_CD/?tc=1">
</itemize>

Diskless workstation with "Live Linux CDROM" is becoming a reality because
of the following reasons:
<enum>
<item> RAM prices are all time low and 512MB RAM costs only US$70.
<item> CDROM drives are becoming extremely fast and current read speed is topping at 72X.
<item> CDROM IDE drives are very cheap, CDROM with 52X read speed is costing only US$33.
<item> DVD-ROM is also getting very cheap and can carry 5 Gigabyte of Linux software and
is three times faster than CDROM drive.
</enum>

A big advantage of Live Linux CDROM over other methods of diskless operations like
EEPROM is that it is very easy to setup and you can very easily upgrade the Linux CDROM
with new versions of the Linux kernel every three months. Simply throw away the old Live
Linux CDROM and pop-in the new version Live Linux CDROM. Upgrade is just 20 seconds and 
the cost of Linux CDROM is 30 cents (less than a US dollar!).
In near future, Live Linux CDROM + DVD-ROM will rule the computer desktops.

<bf>
FIVE SECONDS UPGRADE:
<it>
Live Linux CDROM promotes RAPID Operating Sytem UPGRADE. You can upgrade an OS in less
than 5 seconds!! Live Linux CDROM introduces the concept of mass upgrade and RAPID ACTION.
Simply throw away the old Live Linux CDROM and pop in new CDROM and you are done upgrading!
</it>
</bf>

With Live Linux CDROM, you do not need a hard-disk, floppy drives and others. All you need to 
build a diskless workstation is :
<enum>
<item> Live Linux CDROM
<item> CPU
<item> Mother board
<item> NIC (Network Interface Card)
<item> CDROM drive (IDE or SCSI)
<item> RAM (32 MB minimum for full graphics and 16 MB minimum for console mode)
</enum>

For best prices on RAM and CDROM IDE drives check 
auctions in online stores like 
Egghead <url url="http://www.egghead.com"> or local stores in your city like
<url name="UBM, Houston" url ="http://www.ubm.com">.

After you boot "Live Linux CDROM", you can mount the hard disk partitions from remote
Linux servers. And you can use 
<url name="VNC" url="http://www.uk.research.att.com/vnc">
to access MS Windows 2000 and Linux servers.
Or you can use <url name="WinConnect" url="http://www.thincomputinginc.com"> to access
MS Windows applications like MS Office, Outlook etc. But WinConnect needs MS Windows XP/2000/NT
server.

To evaluate the CDROM/DVD drives use the following software from
<url url="http://www.cdspeed2000.com">. This site also gives the speed comparison of
drives from different vendors. The top speed CDROM drive is from Kenwood at
<url url="http://www.kenwoodtech.com"> at 72x speed.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

Problem: Swap over NFS may not work (as per man swapon)???

<sect1> Low Memory on Diskless Node
<p>
If your diskless node has very low memory, say less than 16 MB then boot the
Live Linux in command line console mode and setup the NFS and mount the hard disk
partition of the main Linux server. After mounting remote hard disk with NFS,
setup a swap file on the NFS mount point.

To setup a swap file, it is necessary to create that file before  initializing  it
with mkswap.
Note  that  a  swap file must not contain any holes (so, using cp to create the
file is not acceptable).
<code>
bash$ su - root
bash# man mkswap

Assuming that remotelinux hard disk is mounted on /mnt/remotelinux
bash# cd /mnt/remotelinux
bash# dd if=/dev/zero of=swapfile bs=1024 count=65536
bash# man swapon
bash# swapon 
</code>
-->
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Build a Live Linux CDROM
<p>
You can build your own Live Linux CDROM and customize the kernel, hardware support, loadable
module support etc.

This section was originally written by Hans de Goede 
       <htmlurl url="mailto:
			j.w.r.degoede@et.tudelft.nl
	   " name="
			j.w.r.degoede@et.tudelft.nl
	   ">
for the Diskless-root-NFS-HOWTO. I modified it slightly in order to reflect some differences
between this document and the Diskless-root-NFS-HOWTO.

Much of the above also goes for booting from cdrom. Why would one want to boot a machine
from cdrom? Booting from cdrom is interesting everywhere one wants to run a very specific
application, like a kiosk, a library database program or an internet cafe, and one
doesn't have a network or a server to use a root over nfs setup.

Creating a test setup

Now that we know what we want to do and how, it's time to create a test setup: 

<itemize>
<item>    For starters just take one of the machines which you want to use and put in a big
    disk and a cd burner.

<item>    Install your linux of choice on this machine, and leave a 650 MB partition free for
    the test setup. This install will be used to make the iso image and to burn the cd's
    from, so install the necessary tools. It will also be used to restore any booboo's
    which leave the test setup unbootable.

<item>    On the 650 mb partition install your linux of choice with the setup you want to have
    on the cd, this will be the test setup.

<item>    Boot the test setup.

<item>    Compile a kernel with isofs and cdrom support compiled in.

<item>    Configure the test setup as described above with the root filesystem mounted read
    only.

<item>    Verify that the test setup automagically boots and everything works.

<item>    Boot the main install and mount the 650 MB partition on /test of the main install.

<item>    Put the following in a file called /test/etc/rc.d/rc.iso, this file will be sourced
    at the beginning of rc.sysinit to create /var: 
<code>
                    #/var
                    echo Creating /var ...
                    mke2fs -q -i 1024 /dev/ram1 16384
                    mount /dev/ram1 /var -o defaults,rw
                    cp -a /lib/var /
</code>

<item>    Edit /test/etc/rc.sysinit, comment the lines where the root is remounted rw, and add
    the following 2 lines directly after setting the PATH: 
<code>
                    #to boot from cdrom
                    . /etc/rc.d/rc.iso
</code>

<item>    Copy the following to a script and execute it to make a template for /var and create
    /tmp and /etc/mtab links. 
<code>
                    #!/bin/sh
                    echo tmp
                    rm -fR /test/tmp
                    ln -s var/tmp /test/tmp

                    ###
                    echo mtab
                    touch /test/proc/mounts
                    rm /test/etc/mtab
                    ln -s /proc/mounts /test/etc/mtab

                    ###
                    echo var
                    mv /test/var/lib /test/lib/var-lib
                    mv /test/var /test/lib
                    mkdir /test/var
                    ln -s /lib/var-lib /test/lib/var/lib
                    rm -fR /test/lib/var/catman
                    rm -fR /test/lib/var/log/httpd
                    rm -f /test/lib/var/log/samba/*
                    for i in `find /test/lib/var/log -type f`; do
                      cat /dev/null > $i;
                    done
                    rm `find /test/lib/var/lock -type f`
                    rm `find /test/lib/var/run -type f`
</code>

<item>    Remove the creation of /etc/issue* from /test/etc/rc.local: it will only fail.

<item>    Now boot the test partition again, it will be read only just like a cdrom. If
    something doesn't work reboot to the working partition fix it, try again etc. Or you
    could remount / rw, fix it, then reboot straight into to test partition again. To
    remount / rw type: 
<code>
                    # mount -o remount,rw /
</code>
</itemize>

Creating the CD

If you need more information than you can find below, please refer to the
CD-Writing-HOWTO.

Creating a boot image

First of all, boot into the working partition. To create a bootable cd we'll need an
image of a bootable floppy. Just dd-ing a zImage doesn't work since the loader at the
beginning of the zimage doesn't seem to like the fake floppydrive a bootable cd creates.
So we'll use syslinux instead. 

<itemize>
<item>    Get boot.img from a redhat cd.

<item>    Mount boot.img somewhere through loopback by typing: 
<code>
                    # mount boot.img somewhere -o loop -t vfat
</code>

<item>    Remove everything from boot.img except for ldlinux.sys and syslinux.cfg.

<item>    Cp the kernel-image from the test partition to boot.img.

<item>    Edit syslinux.cfg so that it contains the following, of course replace zImage by the
    appropriate image name: 

<code>
                    default linux 

                    label linux
                    kernel zImage
                    append root=/dev/<insert your cdrom device here>
</code>

<item>    Umount boot.img: 
<code>
                    # umount somewhere
</code>

<item>    If your /etc/mtab is a link to /proc/mounts, umount won't automagically free
    /dev/loop0 so free it by typing: 
<code>
                    # losetup -d /dev/loop0
</code>
</itemize>

Creating the iso image

Now that we have the boot image and an install that can boot from a readonly mount it's
time to create an iso image of the cd: 

<itemize>
<item>    Copy boot.img to /test

<item>    Cd to the directory where you want to store the image and make sure it's on a
    partition with enough free space.

<item>    Now generate the image by typing: 
<code>
                      # mkisofs -R -b boot.img -c boot.catalog -o boot.iso /test
</code>
</itemize>

Verifying the iso image

<itemize>
<item>    Mounting the image through the loopbackdevice by typing: 
<code>
                      # mount boot.iso somewhere -o loop -t iso9660
</code>

<item>    Umount boot.iso: 
<code>
                      # umount somewhere
</code>

<item>    If your /etc/mtab is a link to /proc/mounts umount won't automagically free
    /dev/loop0 so free it by typing: 
<code>
                    # losetup -d /dev/loop0
</code>
</itemize>

Writing the actual CD

Assuming that you've got cdrecord installed and configured for your cd-writer type: 
<code>
             # cdrecord -v speed=<desired writing speed> dev=<path to your writers generic scsi device> boot.iso
</code>

Boot the cd and test it

Well the title of this paragraph says it all;)
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Buying is cheaper than building!
-->
<sect> Buying is Cheaper Than Building!
<p>
Sometimes, buying a diskless linux computer will be cheaper than building!!
In modern days we focus our energy on economy and managing the time efficiently.
Gone are the days when you would build everything on your own! Man introduced the 
concept of mass production (factory having production lines churning out millions 
of pieces). In the industrialized nation like U.S.A, every product you see is made 
in mass-production and diskless computers are no exception. There are many 
companies in USA which manufacture diskless computers in very large quantities.

Checkout the following commercial sites, which are selling diskless 
linux network-cards and diskless computers. These companies do <bf>mass
production</bf> of Linux Diskless computers selling millions of units and thereby 
reducing the cost per unit. Each and every fortune 1000 companies in USA will be
replacing the MS Windows PCs with diskless computers in near future as diskless
linux computers can run both Linux and MS Windows 95 programs (via 
VMWare BIOS software). <url name="VMWare" url="http://www.vmware.com"> is NOT a 
emulator but has BIOS which allows you to install Windows 98/NT as 
guest OS to linux. You can use the 'xhost' command and DISPLAY environment from
diskless node to run Windows95/Linux programs. See 'man xhost' on linux.
You can also use Virtual Network Computing (VNC) to run Windows95/NT programs on
linux diskless nodes. Get VNC from <url url="http://www.uk.research.att.com/vnc">
Or you can use <url name="WinConnect" url="http://www.thincomputinginc.com"> to access
MS Windows applications like MS Office, Outlook etc. But WinConnect needs MS Windows XP/2000/NT
server.

<itemize>
<item> Linux Systems Labs Inc., USA <url url="http://www.lsl.com"> Click 
on "Shop On-line" and then click on "HardWare" where all the 
Diskless computers will be listed. Phone 1-888-LINUX-88.
<p>
<item> Diskless Workstations Corporation, USA <url url="http://www.disklessworkstations.com">
<p>
<item> Unique Systems of Holland Inc., Ohio, USA <url url="http://www.uniqsys.com">
</itemize>

Even if you buy diskless linux computer, you may be very much 
interested in reading this entire document.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Internet Cafe and Financial Banking with "Diskless Linux" <label id="internetcafe">
-->
<sect> Internet Cafe and Financial Banking with "Diskless Linux" <label id="internetcafe">
<p>
You can set up Internet Cafe with diskless Linux.
Internet cafes are immensely popular in developing countries like India, Thailand, China.
In India Internet cafes are also serving as financial banking centers where people
go to pay bills, trade stocks, transfer money and do online banking.
In India people do not go to bank they go to Internet cafe for online banking!!
<!--
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Setup IP Masquerading, IP Netfilter and Squid
<p>
To connect the diskless nodes to the Internet, you should setup the IP Masquerading
on the main Linux server which is connected to the Internet. The main Linux server
will act like a proxy server for the diskless nodes.

<bf>Configure Firewall and IP Masquerading : </bf>
For Linux kernel version 2.4 and above, the firewall and IP Masquerading is 
implemented by NetFilter package. Hence in kernel config you should enable
Netfilter and run the Firewall/IPMasq script. Download the scripts from
<url name="Firewall-IPMasq scripts" url="http://www.BoingWorld.com/workshops/linux/iptables-tutorial">
, main page of Netfilter is at
<url url="http://netfilter.samba.org">.
Related materials at <url name="firewalling-matures" url="http://www.linuxsecurity.com/feature_stories/kernel-netfilter.html">
and <url name="Netfilter-FAQ" url="http://netfilter.filewatcher.org/netfilter-faq.html">.

For kernel version below 2.4 you should install the firewall rpms from
<url name="rpmfind.net" url="http://rpmfind.net/linux/rpm2html/search.php?query=firewall">
or <url name="firewall.src.rpm" url="http://rpmfind.net/linux/RPM/contrib/noarch//SRPMS//firewall-2.2-3.src.html">.

See also 
<url url="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html">.

<bf>Setup Squid : </bf>
You should install Squid on the main Linux server which can act as a
proxy for the diskless nodes.

Squid is a high-performance proxy caching server for Web clients,
supporting FTP, gopher, and HTTP data objects. Unlike traditional
caching software, Squid handles all requests in a single,
non-blocking, I/O-driven process. Squid keeps meta data and especially
hot objects cached in RAM, caches DNS lookups, supports non-blocking
DNS lookups, and implements negative caching of failed requests.

Squid consists of a main server program squid, a Domain Name System
lookup program (dnsserver), a program for retrieving FTP data
(ftpget), and some management and client tools.

Install the Squid from the Linux cdrom -
<code>
bash# rpm -i /mnt/cdrom/RPMS/squid*.rpm
</code>
You can see the port number where Squid runs by viewing the file 
/etc/services and search for word "squid".
Says something like 'squid  3128/tcp # squid web proxy'

On the diskless nodes bring up the web browser and pick Configure
and check the "use proxy". Put the hostname of main Linux server and
port number as 3128. Now the diskless node can surf the internet web pages!
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Diskless Computer for Microsoft Windows 95/NT !!
-->
<sect> Diskless Computer for Microsoft Windows 95/NT !!
<p>
Since Microsoft Windows 95/NT <bf>DOES NOT</bf> support diskless 
nodes, there is an intelligent work-around to overcome this short coming.
Microsoft corporation will be <bf>surprised</bf> !!
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> VMWare package
<p>
Use the 
<url name="VMWare" url="http://www.vmware.com">
BIOS software with Linux which can host the Windows 95/98/NT.
Linux will be the "host" OS and Windows 95/NT will be the "guest" OS.
<url name="VMWare" url="http://www.vmware.com">
is NOT a 
emulator but has BIOS which allows you to install Windows 95/98/NT as 
the guest OS to linux. Install the VMWare on Linux server and then install
Windows 95/NT on VMWare.

You can use the 'xhost' command and DISPLAY environment from <bf>any</bf>
diskless node. See 'man xhost' on linux. At diskless node give -
<code>
	export DISPLAY=server_hostname:0.0
where server_hostname is the name of the server machine. And start X-terminal with
	xterm
</code>
Using 
<url name="VMWare" url="http://www.vmware.com">, 
Diskless linux computers can run both Linux and 
MS Windows 95 programs. 
VMWare is at <url url="http://www.vmware.com">. 
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Plex86 package
<p>
There are other tools similar to vmware:
<itemize>
<item> Plex86 (open-source) at <url url="http://www.plex86.org">
<item> Wine (open-source) at <url url="http://www.winehq.com">
<item> Win4Lin at <url url="http://www.netraverse.com">
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




-->
<sect1> VNC package from AT and T
<p>
You can also use the VNC (Virtual Network Computing) Technology from 
AT &amp T. VNC is GPLed and is a free software. Using VNC you can run Windows 95/NT
programs on diskless linux computer but actually running on remote Windows95/NT server.

You can use the VNC to display remote machines on your local display.
<itemize>
<item> The VNC is at  <url url="http://www.uk.research.att.com/vnc"> 
<p>
<item> Get VNC rpms from <url name="rpmfind" url="http://rpmfind.net/linux/rpm2html/search.php?query=vnc">.
<p>
<item> The best Window manager for VNC is QVWM which is like MS Windows 98/NT/2000 interface, get
it from <url url="http://www.qvwm.org">.
To turn off xlock in qvwm edit file qvwm/system.qvwmrc file and comment out XLock.
<p>
<item> After starting vncserver, you can start the <bf>vncviewer</bf> program on clients
like MS Windows, Mac or Linux.
<p>
<item> See also the
<url name="List of X11 Windows Managers" url="http://www.dlhoffman.com/publiclibrary/RPM/X11_Window_Managers.html">.
<p>
<item> See also <url name="WinConnect" url="http://www.thincomputinginc.com"> to access
MS Windows applications like MS Office, Outlook etc. But WinConnect needs MS Windows XP/2000/NT
server.
</itemize>

<bf>Compiling qvwm on Solaris : </bf>
On Solaris you should install the following packages which you can get 
from <url url="http://sun.freeware.com"> - xpm, imlib, jpeg, libungif, giflib, libpng, tiff.
And you can download the binary package for solaris from
<url url="http://www.qvwm.org">.

Or you can download the qvwm source for solaris from
<url url="http://www.qvwm.org"> and compile it using gcc.

Troubleshooting compile:
You should put unsigned long before arg in usleep()
usleep((unsigned long) 10000)
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Quick Steps to implement Diskless Nodes
-->
<sect> Quick Steps to implement Diskless Nodes
<p>
An overview to build diskless nodes is as follows:
<itemize>
<item> Download/Install redhat RPM packages from <url name="LTSP org" url="http://www.ltsp.org">
<item> Test with floppy disk (1.44MB) having the PROM program.
<item> Next you have to make the Network card which has the bootable prom 
	<itemize>
	<item> Either purchase NIC ready with prom or
	<item> Flash boot Roms can be used instead of EEPROMS (if flash-roms are supported by NICs)
	<item> Purchase the eproms 
	<item> (or) Purchase Eprom burner to burn your own eproms. Transfer 
	the tested program from floppy to prom via eprom burner
	</itemize>
<item> Visit <url url="http://www.disklessworkstations.com"> to buy eprom burners and
see also
<ref id="prommfgr" name="List of EPROM Burner"> manufacturers, 
<ref id="epromburner" name="Build EEPROM burner">
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Linux Terminal Server Project - LTSP 
<p>
LTSP is an open source code project to build diskless linux computers.

At LTSP site you will find RPM packages for Redhat Linux and packages for Debian Linux
which will save you lots of time. The subsequent chapters given in this document 
are for academic purposes only, which you can read them if you have more time.

Visit the LTSP and related sites at :-
<itemize>
<item> <url url="http://www.ltsp.org">
<item> <url url="http://www.disklessworkstations.com">
<item> <url url="http://www.slug.org.au/etherboot">
and at <url name="mirror-site" url="http://etherboot.sourceforge.net">
and at <url name="google-site" url="http://www.google.com/search?q=Etherboot">
<item> <url url="http://metalab.unc.edu/Linux/HOWTO/XFree86-Video-Timings-HOWTO.html">
</itemize>
Related topics worth seeing -
<itemize>
<item> NCD X-terminal <url url="http://www.linuxdoc.org/HOWTO/mini/NCD-X-Terminal.html">
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> EEPROMs or Flash ROMs? <label id="flashroms">
-->
<sect> EEPROMs or Flash ROMs? <label id="flashroms">
<p>
You can use the Flash ROMs if they are supported by your NICs (Network Interface Cards).
Many new NICs support flash ROMs. For older NICs you need EEPROMs
and you may need to burn the EEPROMs.
Flash Boot Roms can be used instead of EEPROMS (in case where 
flash boot ROMs are supported by the NICs).
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> EPROM Burners and Memory chips
-->
<sect> Building EEPROM Burner <label id="epromburner">
<p>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> What is this ?
<p>
(<bf>Note</bf>: This chapter is written by Abhijit Dasgupta.  Abhijit's email:
       <htmlurl url="mailto:
		   takdoom@yahoo.com
	   " name="
		   takdoom@yahoo.com
	   ">

The name of this project is EEP and it can be obtained from:
<itemize>
<item> Primary site (download tarball only):
       <url url="http://metalab.unc.edu/pub/Linux/apps/circuits/">
And look for file named EEP-0.2.tgz and eeprom.html.
<item> Browse and/or download:
       <url url="http://members.nbci.com/abhijit_dasgupta/eep/index.html">
</itemize>
Please do not use the old URL for EEP anymore.)

EEP is an open hardware design (you are free to copy, use, and modify
the hardware design) EEPROM burner for 24-pin and 28-pin 5-volt EEPROMs.
There are various designs available, but my main goal was to
have something which
<itemize>
<item> is easy to build and uses only the most commonly available parts,
<item> is cheap, and
<item> is controlled by Linux.
</itemize>
The latest version is EEP-0.2.

The ICs in EEP are all common 74HCT series logic chips, and
it uses the PC parallel port interface.  I wrote the driver code
for Linux only, but it is GPL code, and it should be easy to modify
it for other PC operating systems.

I use EEP to burn netboot PROMs for ethernet cards, which
are used to make diskless linux boxes.  See the netboot/etherboot
packages for details of how to do that.  You can also use it
for microcontroller systems with external ROM (e.g. 8031).
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Supported EEPROMs
<p>
Most 5-volt-programmable 24-pin and 28-pin EEPROMs should work with
EEP-0.2.  Here is a partial list of common EEPROMS that are known to work:
<itemize>
<item> 24-pin 2816/28C16, 2048 bytes (16 kilobits)
<item> 28-pin 2817/28C17, 2048 bytes (16 kilobits)
<item> 28-pin 2864/28C64, 8192 bytes (64 kilobits)
<item> 28-pin 28256/28C256, 32768 bytes (256 kilobits)
</itemize>
Various vendors manufacture these EEPROMs.  Some are:  Microchip,
Atmel, Xicor, Catalyst, and STM.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Schematics and pinouts
<p>
The schematic is in PostScript (schematic.ps), but a GIF image
(schematic.gif) is also included.  The ascii version is older.
In the schematic diagram, pin numbers are shown outside each
IC diagram.  Pin numbers for the big box on the right side are
for the 28-pin ZIF socket.

The file pinouts.txt has pinout information for the ICs used.

For the 74HCT ICs used in the circuit, Vcc and Ground connections
are not shown in the schematic.  Of course, these pins must be
properly connected.  Please refer to the pinouts.txt file for
full pinouts (in particular Vcc/Ground connections).
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Construction
<p>
<bf>WARNING</bf>:  It is easy to destroy the parallel port of your PC by
connecting things to it.  It is also possible to damage or destroy
the whole PC, its attachments, peripherals, and people near it
by improper connections and electrical accidents.  <bf>USE EXTREME
CAUTION</bf>.

<bf>Disclaimer</bf>:  Use at your own risk.  There is absolutely
no warranty of any kind here, see COPYING/LICENSE below.

The programmer can be built on a breadboard, but use a protoboard
for a more permanent version.  Use 0.1uF power-bus bypass capacitors
generously.  The 5V power source can be obtained from the PC itself,
but be careful here.  The 28-pin ZIF socket is perhaps the most
expensive component.  If you are building on a breadboard, you
may be able to get by without it (not recommended).

The 180 ohms resistor connecting pin 10 (Y6) of the upper 74HCT259
to pin 1 of the ZIF socket is a current limiting resistor to protect
the 74HCT259 IC in cases where a 28-pin EEPROM with RDY/BSY pin
is used.  When using 32 kilobytes (256 kilobits) EEPROMs like the
28256, it is recommended that this resistor be shorted for more
reliable operation.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Jumper setup
<p>
J1 and J2 are single-row 3-pin headers for jumpers.  When using
28-pin EEPROMs, jumper the right two pins on both J1 and J2.
For 24-pin EEPROMs, jumper the left two pins on both J1 and J2.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Low-justification of 24-pin EEPROM devices
<p>
When plugging in a 24-pin EEPROM device (like 2816) into the
28-pin ZIF socket, make sure the 24-pin device is low-justified
in the ZIF socket.  This means that pins 1, 2, 27, and 28 of the
ZIF socket will remain unused, and the ground pin of the devices
match up (i.e. pin 12 of the 24-pin device should sit in to
pin 14 of the ZIF socket).
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Parts List
<p>
<itemize>
<item> <bf>ICs:</bf>           74HCT123, 74HCT132, 74HCT138, 74HCT157, 74HCT574 (1 ea),
               and 2 74HCT259s.
<item> <bf>Resistors:</bf>     100K, 10K, 1K, 180 ohms, and 390 ohms (1 ea).
<item> <bf>Capacitors:</bf>    100pF, 1uF, (1 ea) and 3 0.1uF power-bus bypass capacitors.
<item> <bf>Misc:</bf>          1 LED, 1 SPST switch, 25-conductor ribbon cable with DB25
               male connector, 28 pin ZIF socket (small breadboard can be
               used instead), header pins for jumpering.
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> If you have already built EEP-0.1
<p>
If you have already built the EEP-0.1 burner, you can make the following
modificatons to make the EEP-0.2 burner:
<enum>
<item> remove the connection from 74HCT157 pin 1 (SEL) to the upper
  74HCT259 pin 11 (Y6)
<item> remove the 1K resistor that is connected from pin 1 of ZIF-socket to Vcc
<item> add a new connection from pin 1 (SEL) of the 74HCT157 to pin 9 of
  of the DB-25 parallel port
<item> add a new connection from pin 10 of the upper 74HCT259 to the unused
  pin of J1
<item> add a 180 ohms resistor from pin 11 of the upper 74HCT259 to
  pin 1 of the ZIF-socket
</enum>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> How to build the software
<p>
Download the software <url url="http://metalab.unc.edu/pub/Linux/apps/circuits/EEP-0.2.tar.gz"> and unpack it.  Then cd to the src directory and type
`make'.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Usage
<p>
The progran eep is used for burning and reading an eeprom.  It reads
data from stdin and writes it to the eeprom. The data needs to be in
binary (raw) format.  None of the usual hex and/or ascii formats (Intel,
Motorola srecord, etc) are supported, so if your assembler ouputs in only
a hex/ascii format, you will need to convert it to binary (see, e.g.,
the Hex2bin and srecord, available from the metalab.unc.edu/pub/Linux
archive).  When reading, the output is also raw binary to stdout (unless
the -t option is given).

<code>
Usage:

      eep  -0|-1|-2  -r|-w  -b|-t  offset  size

where:

    -0|-1|-2  -0 chooses port lp0, -1 port lp1, and -2 port lp2,
    -r|-w     -r reads the eeprom to stdout, and -w burns it from stdin,
    -b|-t     -b is normal (binary) mode, and -t is debugging (ascii hex),
    offset    is the start address within the eeprom, 0..32767, and,
    size      is the number of bytes to read/write, 0..32768.

The offset and size can be specified as a string of digits in decimal
notation, but will be taken as hexadecimal when there is a ``0x'' prefix,
and octal when preceded by ``0''.

Examples
--------

# Read the contents of a 2864 in binary (raw) form and save it in a file
eep -1 -r -b 0 8192 > contents.bin
# Same as:
eep -1 -r -b 0 0x2000 > contents.bin


# List 16 bytes starting at offset 128
eep -1 -r -t 128 16
# Same as:
eep -1 -r -t 0x80 0x10


# Write 16384 bytes from the file nepci.lzrom into the first-half of
# a  28C256 eeprom, through lp0:
cat nepci.lzrom | eep -0 -w -b 0 16384

</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Schematic Diagram in ASCII
<p>
<code>

                       +-------+                      J1
              +5-------|RST    |               +5---o o o----+   +-----------+
              +5--o----|/CLR1  |         10K          |      |   |           |
                  |    |       |-----o--/VVV\-- +5    +------|---|26 A13(+5V)|
      +------+    |    |1/2 123|     |              +--------|-->|27 /WE(NC) |
 16 o-|/CS2  |    |    |       |--||-+              | +------|-->|23 A11(/WE)|
      |   CS1|----o----|B1     | 100pF              | | J2   |   |           |
      |      |         |    /Q1|---------->---------o o o    |   |  ZIF28    |
      |    Y1|---------|/A1    |                        |    |   |  socket   |
      | 138  |         +-------+         _ 1/2 74HCT132 |    |   |   for     |
      |      |                     +5 --| \   __        |    |   |  EEPROM   |
      |    Y2|--------------------------|  O--| \       |    |   |           |
  8 o-|A2    |                +-------+ |_/   |  O-----------|-->|22 /OE     |
  7 o-|A1  Y4|--------------->|EN   Y7|-----o-|_/       |    |   |           |
  6 o-|A0  Y3|----+    +5-----|RST    |     |   180 ohm |    |   |           |
      |    Y0|-+  |           |     Y6|-----|---/VVV\---|----|---|1 A14(NC)  |
      |  /CS3| |  |           | 259 Y5|-----|-----------|----+   |           |
      +------+ |  |           |     Y4|-----|-----------|------->|2 A12(NC)  |
            |  |  |           |     Y3|-----|-----------+        |           |
  5 o--->---|--|--|--------o--|D    Y2|-----|------------------->|21 A10     |
  4 o--->---|--|--|------o-|--|A2   Y1|-----|------------------->|24 A9      |
  3 o--->---|--|--|----o-|-|--|A1   Y0|-----|------------------->|25 A8      |
  2 o--->---|--|--|--o-|-|-|--|A0     |     |                    |           |
            |  |  |  | | | |  +-------+     |      +5------------|28 +5V(NC) |
            |  |  |  | | | |                |                    |           |
            |  |  |  | | | |  +-------+     |                    |           |
            |  |  |  | | | |  |     Y7|-----|------------o------>|3  A7      |
            |  |  +---------->|EN     |-----|-----------o|------>|4  A6      |
            |  |     | | | |  |       |-----|----------o||------>|5  A5      |
            |  |     | | | |  | 259   |-----|---------o|||------>|6  A4      |
            |  |     | | | |  |       |-----|--------o||||------>|7  A3      |
            |  |     | | | |  |       |-----|-------o|||||------>|8  A2      |
            |  |     | | | +--|D      |-----|------o||||||------>|9  A1      |
            |  |     | | +----|A2   Y0|-----|-----o|||||||------>|10 A0      |
            |  |     | +------|A1     |     |     ||||||||       |           |
            |  |     +--------|A0  RST|     |     ||||||||       | ZIF28     |
            |  |              +-------+     |   +------------+   | socket    |
            |  |                    |       |   |   data in  |   |  for      |
            |  |                   +5       +-->|/OE         |   | EEPROM    |
            |  |                                |     574    |   |           |
            |  +------------------------------->|CLK         |   |           |
            +----+                              |   data out |   |           |
                 |                              +------------+   |           |
                 |              +------------+     ||||||||      |           |
  9 o-------------------------->| SEL        |     ||||||||      |           |
                 |              |          B3|<----|||||||o------|19 D7      |
 11 o---<-----------------------|Y3        B2|<----||||||o-------|18 D6      |
 12 o---<-----------------------|Y2        B1|<----|||||o--------|17 D5      |
 13 o---<-----------------------|Y1  157   B0|<----||||o---------|16 D4      |
 15 o---<-----------------------|Y0        A3|<----|||o----------|15 D3      |
                 |              |          A2|<----||o--- data---|13 D2      |
                 |              |          A1|<----|o---- bus ---|12 D1      |
                 |       GND----|/OE       A0|<----o-------------|11 D0      |
  +5--o--+       |              +------------+                   |           |
      |  |  __   o---------------------------------------------->|20 /CE   14|
    100K +-|  \  |  __                                           +---------+-+
  sw1 |    |   O-o-|  \ 1/2 74HCT132                                       |
  o-->o----|__/    |   O---390ohm--+                                       |
  |   |          +-|__/            |                                  GND -+
  |  --- 1uF     |                LED
  |  ---     +5--+                 |
  |   |                            |
  +---o----------------------------o- GND

Notes:

1. Pin numbers on the left margin are for DB25 parallel port.
3. A 24-pin chip (e.g. 2816) must be low-justified in the 28-pin ZIF socket.
2. Pin numbers in the right box are for the ZIF-28 socket, not the IC.
7. The signal labels inside the ZIF-28 socket box are for 28-pin EEPROMs
   (they are given in parentheses for 24-pin EEPROMs).
4. J1 and J2 are single-row 3-pin headers for jumpers (or use a DPDT switch).
5. For 28-pin EEPROMs, jumper the right two pins of both J1 and J2.
6. For 24-pin EEPROMs, jumper the left two pins of both J1 and J2.
8. The SPST switch sw1 needs to be open to enable operation of the programmer.
9. Please refer to the file pinouts.txt for full pinouts of the ICs used.
</code>
Abhijit Dasgupta
       <htmlurl url="mailto:
		   takdoom@yahoo.com
	   " name="
		   takdoom@yahoo.com
	   ">
<!--
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> EPROM Burners and Memory chips
-->
<sect> EPROM Burners and Memory chips
<p>
Below is the information about EPROM and various types of memory chips.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




-->
<sect1> Non-Volatile Memory chips
<p>
Here is the brief descriptions of memory chips and their types.
<itemize>
<item> <bf>PROM</bf>:
Pronounced prom, an acronym for programmable read-only memory. A PROM is a memory chip on which data can be written only once. Once a program has been written onto a PROM, it remains there forever. Unlike RAM, PROMs retain their contents when the computer is turned off.  The difference between a PROM and a ROM (read-only memory) is that a PROM is manufactured as blank memory, whereas a ROM is programmed during the manufacturing process. To write data onto a PROM chip, you need a special device called a PROM programmer or PROM burner. The process of programming a PROM is sometimes called burning the PROM.  An EPROM (erasable programmable read-only memory) is a special type of PROM that can be erased by exposing it to ultraviolet light. Once it is erased, it can be reprogrammed. An EEPROM is similar to a PROM, but requires only electricity to be erased.  

<item> <bf>EPROM</bf>: 
Acronym for erasable programmable read-only memory, and pronounced e-prom, EPROM 
is a special type of memory that retains its contents until it is exposed to 
ultraviolet light. The ultraviolet light clears its contents, making it possible to 
reprogram the memory. To write to and erase an EPROM, you need a special device called
a PROM programmer or PROM burner.  An EPROM differs from a PROM in that a PROM can be 
written to only once and cannot be erased. EPROMs are used widely in personal computers 
because they enable the manufacturer to change the contents of the PROM before the 
computer is actually shipped. This means that bugs can be removed and new versions 
installed shortly before delivery. 

A note on EPROM technology: The bits of an EPROM are programmed 
by injecting electrons with an elevated 
voltage into the floating gate of a field-effect transistor 
where a 0 bit is desired. The electrons trapped
there cause that transistor to conduct, reading as 0. To erase 
the EPROM, the trapped electrons are given enough
energy to escape the floating gate by bombarding the chip with ultraviolet radiation 
through the quartz window.
To prevent slow erasure over a period of years from sunlight and 
fluorescent lights, this quartz window is covered with an opaque label in normal use.

<item> <bf>EEPROM</bf>:
Acronym for electrically erasable programmable read-only memory. Pronounced double-e-prom or e-e-prom, an EEPROM is a special type of PROM that can be erased by exposing it to an electrical charge. Like other types of PROM, EEPROM retains its contents even when the power is turned off. Also like other types of ROM, EEPROM is not as fast as RAM.  EEPROM is similar to flash memory (sometimes called flash EEPROM). The principal difference is that EEPROM requires data to be written or erased one byte at a time whereas flash memory allows data to be written or erased in blocks. This makes flash memory faster. 

<item> <bf>FRAM</bf>:
Short for Ferroelectric Random Access Memory, a type of non-volatile memory developed by Ramtron International Corporation. FRAM combines the access speed of DRAM and SRAM with the non-volatility of ROM. Because of its high speed, it is replacing EEPROM in many devices. The term FRAM itself is a trademark of Ramtron.  

<item> <bf>NVRAM</bf>:
Abbreviation of Non-Volatile Random Access Memory, a type of memory that retains its contents when power is turned off. One type of NVRAM is SRAM that is made non-volatile by connecting it to a constant power source such as a battery. Another type of NVRAM uses EEPROM chips to save its contents when power is turned off. In this case, NVRAM is composed of a combination of SRAM and EEPROM chips. 

<item> <bf>Bubble Memory</bf>:
A type of non-volatile memory composed of a thin layer of material that can be easily magnetized in only one direction. When a magnetic field is applied to circular area of this substance that is not magnetized in the same direction, the area is reduced to a smaller circle, or bubble.  It was once widely believed that bubble memory would become one of the leading memory technologies, but these promises have not been fulfilled. Other non-volatile memory types, such as EEPROM, are both faster and less expensive than bubble memory. 

<item> <bf>Flash Memory</bf>:
A special type of EEPROM that can be erased and reprogrammed in blocks instead of one byte at a time. Many modern PCs have their BIOS stored on a flash memory chip so that it can easily be updated if necessary. Such a BIOS is sometimes called a flash BIOS. Flash memory is also popular in modems because it enables the modem manufacturer to support new protocols as they become standardized. 

</itemize>
<!--
	*******************************************
	************ End of Section ***************
	*******************************************




-->
<sect1> List of EEPROM Burner manufacturers <label id="prommfgr">
<p>
For a list of <bf>EPROM burner manufacturers</bf> visit the Yahoo site and 
go to economy->company->Hardware->Peripherals->Device programmers.
<itemize>
<item> Yahoo URL for EPROMs is at <url url="http://dir.yahoo.com/Business_and_Economy/Companies/Computers/Hardware/Peripherals/Device_Programmers/">
</itemize>

<itemize>
<item> <url url="http://www.artbv.nl/ " name="Advanced Research Technology B.V"> - development, production and sales of electronic programmer equipment; development of hardware and software. 

<item> <url url="http://www.elnec.com" name="Elnec, Presov"> - manufacturers of programmers, emulators and simulators. 

<item> <url url="http://www.advin.com " name="Advin Systems Inc."> - PC-based device programmers that support the latest in package types and device technologies. 

<item> <url url="http://www.arlabs.com " name="Andromeda Research Labs"> - manufactures a portable eprom and device programming system. 

<item> <url url="http://www.bcmicro.com/" name="B and C Microsystems, Inc"> - offers test and duplication/programming equipment for PCMCIA (PC) Cards, ISA/PCI Cards, SIMMs, Memory Devices (including FLASH), PLDs. 

<item> <url url="http://www.bpmicro.com/ " name="BP Microsystems"> - Device Programmers. 

<item> <url url="http://www.bytek.com " name="Bytek"> - designs, develops, manufactures and markets micro-processor-based, modular electronic systems used to program and test semiconductor devices. Product line includes the ChipBurner. 

<item> <url url="http://www.logicaldevices.com/ " name="Concentrated Programming Ltd"> - offers a full range of device programming solutions. 

<item> <url url="http://www.dataman.com/ " name="Dataman Programmmers Ltd."> - manufacture of hand-help EPROM programmer/emulator. Also sell PC-based programmers, and Gang-Pro programmers. 

<item> <url url="http://www.generaldevice.com/ " name="General Device Instruments"> - IC Device programmers. Universal and Gang programmers for Pld, Flash, microcontrollers, Proms, EEproms, Memory, Epld, Mach and many other ic devices. 

<item> <url url="http://hilosystems.com.tw " name="HI-LO System Research Co., Ltd."> - manufacturer of universal and gang device programmers. 

<item> <url url="http://www.icetech.com/ " name="ICE Technology"> - EPROM and universal device programmers which support memories, microcontrollers, and programmable logic devices. 

<item> <url url="http://www.inabyte.com/iceprom.html " name="Iceprom"> - in-circuit erasable programmable read-only memory. 

<item> <url url="http://www.incept.ie " name="Incept Ltd."> 

<item> <url url="http://www.imtest.com " name="International Microsystems Inc"> - High speed reliable gang programmer. (PROM, FLASH, Microcontroller, PCMCIA memory card). 

<item> <url url="http://www.jedmicro.com.au " name="JED Microprocessors Pty. Ltd."> - plugs into a PC printer port D25 connector, and programs any 28-pin or 32-pin EPROM and FLASH device. 

<item> <url url="http://www.logicaldevices.com " name="Logical Devices, Inc"> - device programming for PLDs, FPGAs, PROMs, microcontrollers. Producers of CUPL compiler for programmable logic and the ALLPRO and Chipmaster device programmer. 

<item> <url url="http://www.mcl.dk " name="MCL Systems"> - new method not only for programming but also for developing your new hardware with Integrated Controller Unit. And you don't need to be an expert.

<item> <url url="http://www.mqp.com " name="MQP Electronics"> - manufacturer of universal device programmers, gang programmers, production software, and package converters. High thoughput and reliability. 

<item> <url url="http://www.needhams.com" name="Needham's Electronics"> - manufacturer of device programmers. 

<item> <url url="http://www.npps.com/ " name="NP Programming Services"> - provides programming for memory and logic parts. 

<item> <url url="http://www.progauto.com " name="Program Automation, Inc."> - independent service company specializing in high volume PROM programming, including flash I/Cs. 

<item> <url url="http://www.stagusa.com " name="Stag Programmers Inc"> - manufacturer of prom and logic programmers, production handling equipment and UV erasers. 

<item> <url url="http://www.sunriseelectronics.com " name="Sunrise Electronics"> - universal device programmers, gang and in-circuit programmers with life time support. 

<item> <url url="http://www.sg.com.tw " name="System General Co."> - Device Programmer, EPROM Writer and IC Tester 

<item> <url url="http://www.tribalmicro.com " name="Tribal Microsystems"> - universal and gang device programmers, 8051 and EPROM emulators, test and burn-in sockets and production sockets. 

<item> <url url="http://www.xeltek.com/ " name="Universal Device Programmers"> 

</itemize>

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Introduction to Network Booting and Etherboot
-->
<sect>Introduction to Network Booting and Etherboot
<p>
This chapter is written by Ken Yap 
       <htmlurl url="mailto:ken.yap@acm.org"
		name="ken.yap@acm.org">
and explains how to bootstrap your computer from a program stored in non-volatile memory without accessing your hard disk. It is an ideal technique for maintaining and configuring a farm of linux boxes.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> What is Network booting?
-->
<sect1> What is Network booting?
<p>

Network booting is an old idea. The central idea is that the computer has some bootstrap code 
in non-volatile memory, e.g. a ROM chip,
that will allow it to contact a server and obtain system files over a network link. 

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> How does it work
-->
<sect1> How does it work
<p>
In order to boot over the network, the computer must get 
<enum>
<item> an identity 
<item> an operating system image and 
<item> usually, a working filesystem. 
</enum>

Consider a diskless computer (DC) that has a network boot ROM. It may be one of several identical DCs. How can we distinguish this computer from others? There is one piece of information that is unique to that computer (actually its network adapter) and that is its Ethernet address. Every Ethernet adapter in the world has an unique 48 bit Ethernet address because every Ethernet hardware manufacturer has been assigned blocks of addresses. By convention these addresses are written as hex digits with colons separating each group of two digits, for example - <bf>00:60:08:C7:A3:D8</bf> .

The protocols used for obtaining an IP address, given an Ethernet address, are called <bf>Boot Protocol (BOOTP)</bf> and <bf>Dynamic Host Configuration Protocol (DHCP)</bf>. DHCP is an evolution of BOOTP. In our discussion, unless otherwise stated, anything that applies to BOOTP also applies to DHCP. (Actually it's a small lie that BOOTP and DHCP only translate Ethernet addresses. In their foresight, the designers made provision for BOOTP and DHCP to work with any kind of hardware address. But Ethernet is what most people will be using.)

An example of a BOOTP exchange goes like this:

<bf>DC:</bf> Hello, my hardware address is <bf>00:60:08:C7:A3:D8</bf>, please give me my IP address.  

<bf>BOOTP server:</bf> (Looks up address in database.) Your name is aldebaran, your IP address is 192.168.1.100, your server is 192.168.1.1, the file you are supposed to boot from is /tftpboot/vmlinux.nb (and a few other pieces of information).

You may wonder how the DC found the address of the BOOTP server in the first place. The answer is that it didn't. The BOOTP request was broadcast on the local network and any BOOTP server that can answer the request will.

After obtaining an IP address, the DC must download an operating system image and execute it. Another Internet protocol is used here, called <bf>Trivial File Transfer Protocol (TFTP)</bf>. TFTP is like a cut-down version of FTP---there is no authentication, and it runs over User Datagram Protocol (UDP) instead of Transmission Control Protocol (TCP). UDP was chosen instead of TCP for simplicity. The implementation of UDP on the DC can be small so the code is easy to fit on a ROM. Because UDP is a block oriented, as opposed to a stream oriented, protocol, the transfer goes block by block, like this:


<tscreen><verb>
DC: Give me block 1 of /tftpboot/vmlinux.nb.
TFTP server: Here it is.
DC: Give me block 2.
</verb></tscreen>


and so on, until the whole file is transferred. Handshaking is a simply acknowledge each block scheme, and packet loss is handled by retransmit on timeout. When all blocks have been received, the network boot ROM hands control to the operating system image at the entry point.

Finally, in order to run an operating system, a root filesystem must be provided. The protocol used by Linux and other Unixes is normally <bf>Network File System (NFS)</bf>, although other choices are possible. In this case the code does not have to reside in the ROM but can be part of the operating system we just downloaded. However the operating system must be capable of running with a root filesystem that is a NFS, instead of a real disk. Linux has the required configuration variables to build a version that can do so.



<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Netbooting in Practice
-->
<sect1> Netbooting in Practice
<p>
Net Loader is a small program that runs as a BIOS extension, usually on 
an EPROM on the NIC. It handles the BOOTP query and TFTP loading
and then transfers control to the loaded image. 
It uses TCP/IP protocols but the loaded image doesn't have to be Linux. The loaded image can be anything, even DOS. 
They can also be loaded from a floppy for testing and for temporary setups. 

Besides commercial boot ROMs, there are <bf>TWO</bf> sources for free packages for network booting.
Free implementations of TCP/IP net loaders are - 
<enum>
<item> <bf>ETHERBOOT</bf> <url url="http://www.slug.org.au/etherboot/">  and
and at <url name="mirror-site" url="http://etherboot.sourceforge.net">
and at <url name="google-site" url="http://www.google.com/search?q=Etherboot">
<item> <bf>NETBOOT</bf> <url url="http://www.han.de/~gero/netboot.html">
</enum>

Etherboot uses built-in drivers while Netboot uses Packet drivers. 
First you have to ascertain that your network card is supported by Etherboot or Netboot. Eventually you have to find a person who is willing to put the code on an EPROM (Erasable Programmable Read Only Memory) for you but in the beginning 
you can do <bf>network booting from a floppy</bf>. 

To create a boot floppy, a special boot block is provided in the distribution. This small 512 byte program loads the disk blocks following it on the floppy into memory and starts execution. Thus to make a boot floppy, one has only to concatenate the boot block with the Etherboot binary containing the driver for one's network card like this:

<code>
	# cat floppyload.bin 3c509.lzrom > /dev/fd0
</code>

  Get the nfsboot package (the package is available from your favourite
  linux mirror site in the /pub/Linux/system/Linux-boot directory). It
  contains a booteprom image for the network cards (like wd8013) which can be directly
  burned in. See also the 
LTSP site at <url url="http://www.ltsp.org">

Before you put in the network boot floppy, you have to set up three services on Linux - 
<enum>
<item> BOOTP (or DHCP)
<item> TFTP and
<item> NFS. 
</enum>

You don't have to set up all three at once, you can do them step by step, making sure each step works before going on to the next.

<sect2> Bootp
<p>
Install Bootp. See bootp*.rpm on Redhat linux cdrom. 
See also LTSP site for RPM packages at <url url="http://www.ltsp.org">.
See also unix manual pages 'man 5 bootptab', 'man 8 bootpd', 'man 8 bootpef', 'man 8 bootptest'.
You then have to ensure that this server is waiting for bootp requests. 
The daemon can be run either directly by issuing command
<code>
       bootpd -s
</code>

Or by using inetd
edit the file /etc/inetd.conf and put a line like this:

<code>
	bootps dgram   udp     wait    root    /usr/sbin/in.bootpd    bootpd
</code>
Insert or uncomment the following two lines in /etc/services:
<code>
bootps          67/tcp          # BOOTP server
tftp            69/udp          # TFTP server
</code>

If you had to modify /etc/inetd.conf, then you need to restart inetd by sending the process a HUP signal.
<code>
       kill -HUP <process id of inetd>.
</code>

Next, you need to give bootp a database to map Ethernet addresses to IP addresses. This database 
is in /etc/bootptab. 
  You must modify it by inserting the IP addresses of
  your gateway, dns server, and the ethernet address(es) of your
  diskless machine(s).  
It contains lines of the following form:

<code>
	aldebaran.foo.com:ha=006008C7A3D8:ip=192.168.1.100:bf=/tftpboot/vmlinuz.nb 
</code>

Other information can be specified but we will start simple.

Another example of /etc/bootptab is :

<code>
  global.prof:\
          :sm=255.255.255.0:\
          :ds=192.168.1.5:\
          :gw=192.168.1.19:\
          :ht=ethernet:\
          :bf=linux:
  machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.140:
  machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.141:
  machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.142:
</code>

  global.prof is a general template for host entries, where

<itemize>
<item> sm field contains the subnet mask
<item> ds field contains the address of the Domain Name Server
<item> gw field contains the default gateway address
<item> ht field contains the lan media hardware type
<item> bf field contains the name of the boot file
</itemize>

  After this, every machine must have a line:

<itemize>
<item>  the first field contains the host name,
<item>  hd field contains the directory of the bootfile,
<item>  the global template can be included with the tc field,
<item>  ha field contains the hardvare address of the ethernet card,
<item>  ip field contains the assigned ip address.
</itemize>

Now boot the DC with the floppy and it should detect your Ethernet card and broadcast a BOOTP request. If 
all goes well, the server should respond to the DC with the information required. Since /tftpboot/vmlinux.nb 
doesn't exist yet, it will fail when it tries to load the file.  Now you need to compile a special kernel, 
one that has the option for mounting the root filesystem from NFS turned on. You also need to enable the 
option to get the IP address of the kernel from the original BOOTP reply. You also need to compile the 
Linux driver for your network adapter into the kernel instead of loading it as a module. It is possible
to download an initial ramdisk so that module loading works but this is something you can do later.

You cannot install the zImage resulting from the kernel compilation directly. It has to be turned into a tagged image. A tagged image is a normal kernel image with a special header that tells the network bootloader where the bytes go in memory and at what address to start the program. You use a program called mknbi-linux to create this tagged image. This utility can be found in the Etherboot distribution. After you have generated the image, put it in the /tftpboot directory under the name specified in /etc/bootptab. Make sure to make this file world readable because the tftp server does not have special privileges.

<sect2> Tftp
<p>
For TFTP, see tftp*.rpm on Redhat Linux cdrom. 
  TFTP (Trivial File Transfer Protocol) is a file transfer protocol,
  such as ftp, but it's much simpler to help coding it in EPROMs. TFTP
  can be used in two ways:

<itemize>
<item> <bf>Simple tftp:</bf> means that the client can acces to your whole file
     system. It's simpler but it's a big security hole (anyone can get
     your password file via tftp).
<item> <bf>Secure tftp:</bf> the tftp server uses a chroot.2 system call to change
     it's own root directory. Anything outside the new root directory
     will be completely inaccessible. Because of the chroot dir becomes
     the new root dir, the hd filed in the bootptab must reflect the new
     situation. For example: 
	 when using insecure tftp, the hd field
     contains the full path to the boot directory:
     /export/root/machine1.  When using secure tftp whith /export as
     root dir, then /export becomes / and the hd field must be
     /root/machine1.
</itemize>

Tftpd is normally started up from 
inetd with a line like this in /etc/inetd.conf.

<code>
tftp dgram udp wait root /usr/sbin/tcpd in.tftpd -s /tftpboot
#tftp   dgram   udp     wait    root    /usr/sbin/in.tftpd     tftpd /export
</code>

Again, restart inetd with a HUP signal and you can retry the boot and this time it 
should download the kernel image and start it. You will find that the boot will 
continue until the point where it tries to mount a root filesystem. At this 
point you must configure and export NFS partitions to proceed.

<sect2> NFS root filesystem
<p>
For various reasons, it's not a good idea to use the root filesystem of the server as
the root filesystem of the DCs. One is simply that there are various configuration 
files there and the DC will get the wrong information that way. Another 
is security. It's dangerous to allow write access (and write access is needed 
for the root filesystem, for various reasons) to your server's root. However 
the good news is that a root filesystem for the DC is not very large, only 
about 30 MB and a lot of this can be shared between multiple DCs.

Ideally, to construct a root filesystem, you have to know what files your 
operating system distribution is expecting to see there. Critical to booting are 
device files, files in /sbin and /etc. You can bypass a lot of the hard work 
by making a copy of an existing root filesystem and modifying some files for 
the DC. In the Etherboot distribution, there is a tutorial and links to a 
couple of shell scripts that will create such a DC root filesystem from an 
existing server root filesystem. There are also troubleshooting tips in the 
Etherboot documentation as this is often the trickiest part of the setup.

The customised Linux kernel for the DC expects to see the root 
filesystem at /tftpboot/(IP address of the DC), for 
example: /tftpboot/192.168.1.100 in the case above. This can be 
changed when configuring the kernel, if desired.

Now create or edit /etc/exports (see 'man 5 exports' and 'man 8 exportfs') on the server and 
put in a line of the following form:

<code>
/tftpboot/192.168.1.100 aldebaran.foo.com(rw,no_root_squash)
</code>

The rw access is needed for various system services. The no_root_squash attribute prevents the NFS system from mapping root's ID to another one. If this is not specified, then various daemons and loggers will be unhappy.

Start or restart the NFS services (rpc.portmap and rpc.mountd) and retry the 
diskless boot.  If you are successful, the kernel should be able to mount a root 
filesystem and boot all the way to a login prompt. Most likely, you will find
several things misconfigured. Most Linux distributions are oriented towards disked 
operation and require a little modification to suit diskless booting. The most common 
failing is reliance on files under /usr during the boot process, which is 
normally imported from a server late in the boot process. Two possible solutions are -

<enum>
<item> Provide the few required files under a small /usr directory on 
the root filesystem, which will then be overlaid when /usr is imported, and 
<p>
<item> Modify the paths to look for the files in the root filesystem. The 
files to edit are under /tftpboot/192.168.1.100 (remember, this is 
the root directory of the DC).
</enum>

You may wish to mount other directories from the server, such as /usr (which can be exported read-only).

<sect2> Burn EPROM
<p>
When you are satisfied that you can boot over the network without any problems, you
may wish to put the code on an EPROM. 

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Uses of Network booting
-->
<sect1> Uses of Network booting
<p>
X-terminals are one natural use of network booting. The lack of a disk in the terminal makes it quieter and contributes to a pleasant working environment. The machine should ideally have 16MB of memory or more and the best video card you can find for it. This is an ideal use for a high-end 486 or low-end Pentium that has been obsoleted by hardware advances.  Other people have used network booting for clusters of machines where the usage is light on the DC and does not warrant a disk, e.g. a cluster of classroom machines.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> For more information
-->
<sect1> For more information
<p>
Your first stop should be the Etherboot home page:
    <url url="http://www.slug.org.au/etherboot/">
and at <url name="mirror-site" url="http://etherboot.sourceforge.net">
and at <url name="google-site" url="http://www.google.com/search?q=Etherboot">

There you will find links to other resources, including a mailing list you can subscribe to, where problems and solutions are discussed.

Related documents
<p>
<itemize>
<item> NFS-root Mini Howto at /usr/doc/HOWTO/mini or on Linux cdrom.
<item> Linux Networking-HOWTO by Terry Dawson,  at /usr/doc/HOWTO or on linux cdrom
       <htmlurl url="mailto:94004531@postoffice.csu.edu.au"
             name="94004531@postoffice.csu.edu.au">
<item> NET-3-Howto at /usr/doc/HOWTO or on Linux cdrom.
<item> /usr/src/linux/README about configuring and compiling new kernels
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<sect> Redhat Linux configuration
-->
<sect> Redhat Linux configuration
<p>
The DC requests to mount /tftpboot/&lt <it>IP address of DC</it> &gt 
(in Linux Kernel 2.1 and above it is - /tftpboot/&lt <it>name of DC in bootptab</it> &gt )
as its root directory '/' by NFS from server. You must export this from the 
server (rw, no_root_squash) because the DC wants to write on it (log
files, etc). 

The root directory / must contain /sbin, /bin, /lib, /etc, /var, /tmp, /root, /dev and /proc. 

/sbin, /bin, /lib can be a copy of an existing Redhat Linux system. They can be 
shared between all DCs. But hard links only. By the way, don't link to server originals. 

/etc, /var and /dev should be non-sharable copies. Customise /etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0, /etc/fstab, /etc/conf.modules, and others. Turn off all
network services you don't need. Remove all stuff you don't need from /var, e.g. RPM db, lpd files. 

/root and /proc should just exist. /tmp should exist and be mode 1777. 

You probably want to create /usr and /home mount points. /usr can be mounted ro (read-only). 

About 10 MB per DC plus about 15 MB of shared files should be sufficient. By the way, if 
your DCs are quite similar, the kernel image can also be shared. 

Here is an illustrative script to create the first root filesystem.
<code>
#!/bin/sh
if [ $# != 1 ]
then
	echo Usage: $0 client-IP-addr
	exit 1
fi

cd /

umask 022

mkdir -p /tftpboot/$1

# just make these ones
for d in home mnt proc tmp usr
do
	mkdir /tftpboot/$1/$d
	done

	chmod 1777 /tftpboot/$1/tmp

	touch /tftpboot/$1/fastboot
	chattr +i /tftpboot/$1/fastboot

	# copy these ones
	cp -a bin lib sbin dev etc root var /tftpboot/$1

cat <<EOF
Now, in /tftpboot/$1/etc, edit

		sysconfig/network
		sysconfig/network-scripts/ifcfg-eth0
		fstab
		conf.modules

and configure

		rc.d/rc3.d
EOF
</code>

Here is an illustrative script to duplicate the root filesystem
<code>
#!/bin/sh
if [ $# != 2 ]
then
	echo Usage: $0 olddir newdir
	exit 1
fi

cd /tftpboot

if [ ! -d $1 ]
then
	echo $1 is not a directory
	exit 1
fi

umask 022

mkdir -p $2

# just make these ones
for d in home mnt proc tmp usr
do
	mkdir $2/$d
done

chmod 1777 $2/tmp

touch $2/fastboot
chattr +i $2/fastboot

# link these ones
for d in bin lib sbin
do
	(cd $1; find $d -print | cpio -pl ../$2)
done

# copy these ones
for d in dev etc root var
do
	cp -a $1/$d $2
done

cat <<EOF
Now, in /tftpboot/$2/etc, edit

	sysconfig/network
	sysconfig/network-scripts/ifcfg-eth0
	fstab (maybe)
	conf.modules (maybe)

and configure

	rc.d/rc3.d
EOF
</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************
-->
<sect1> X-terminal
<p>
On the server, make sure the DC is matched by a clause in /etc/X11/xdm/Xaccess and comment out the :0 in
/etc/X11/xdm/Xservers. Then make sure that xdm is run from the init scripts. 

On the client, run X -query server 

You will get the xdm login box and then all your X clients will run on the server. 

For other applications use - you could use diskless technique for  netboot 
routers, print servers (but should not be spooling print server), standalone apps, etc. 
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************



<chapt> LanWorks BootWare PROMs <label id="LanWorks">
-->
<sect> LanWorks BootWare PROMs <label id="LanWorks">
<p>
This information may save you time. 
In order to make LanWorks BootWare(tm) PROMs to correctly start up a
Linux kernel image, the "bootsector" part of the image must be modified
so as to enable the boot prom to jump right into the image start address.
The net-bootable image format created by netboot/etherboot's
`mknbi-linux' tool differs and will not run if used with BootWare PROMs.

A modified bootsector together with a Makefile to create a BootWare-bootable
image after kernel compilation can be found at -
<itemize>
<item> Bwimage package <url url="ftp://ftp.ipp.mpg.de/pub/ipp/wls/linux/bwimage-0.1.tgz">
<item> See also <url url="http://www.patoche.org/LTT/net/00000096.html">
<item> LanWorks BootWare Boot ROMs <url url="http://www.3com.com/lanworks">
</itemize>

Refer to the README file for installation details. Currently, only
"zImage"-type kernels are supported. Unfortunately, kernel parameters
are ignored.

This section courtesy of Jochen Kmietsch email to - 
       <htmlurl url="mailto:jochen.kmietsch@tu-clausthal.de"
       		name="jochen.kmietsch@tu-clausthal.de">
for any questions.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt>Etherboot
-->
<sect>Etherboot
<p>
Etherboot is a package for creating ROM images that can download code
over the network to be executed on an x86 computer. Typically the
computer is diskless and the code is Linux, but these are not the only
possibilities.

This document is at <url url="http://www.slug.org.au/etherboot/" name="the Etherboot Home Page">
and at <url name="mirror-site" url="http://etherboot.sourceforge.net">
and at <url name="google-site" url="http://www.google.com/search?q=Etherboot">
This document explains how to install, configure and use the Etherboot package.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Netboot
-->
<sect> Netboot
<p>
Netboot was written by Zurück zu Gero. The main site is at <url url="http://www.han.de/~gero/netboot.html">.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************



-->
<sect1> Introduction
<p>
The following list shows just a few examples of what Netboot can be used for: 

<itemize>
<item>Printer spooler 
<item>Terminal server 
<item>X11 terminal 
<item>Data logging system 
<item>Network-Computer (NC) 
<item>Some more ....
</itemize>

For the bootrom to find the kernel image it uses the BOOTP protocol as defined in <ref id="RFCs"> and <ref id="RFCs"> to get the necessary
boot information, and then loads the actual image using the TFTP protocol as defined in <ref id="RFCs">. 

The exact specifications for this netboot process can be found <url url="http://www.han.de/~gero/netboot/english/spec.html">.

<sect1> Mailing list 
<p>
There exists a mailing list devoted to network booting. To subscribe simply send a mail with the line 

subscribe netboot 

in it's body to 
       <htmlurl url="mailto:majordomo@baghira.han.de"
       		name="majordomo@baghira.han.de">

The subject in the mail header doesn't matter. 
After subscribing to it, you
can send messages into the list by writing a mail to netboot@baghira.han.de. 
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************



-->
<sect1> Netboot useful links 
<p>
Netboot mailing list archive is at 
<url url="http://www.han.de/~gero/netboot/archive/maillist.html">

<itemize>
<item> 3com drivers at <url url="http://support.3com.com/infodeli/tools/nic">
<item> Accton drivers at <url url="http://www.accton.com/accton/drivers/adapter.html" name="here">
<item> <url url="http://www.artisoft.com" name="Artisoft">
<item> <url url="http://www.cnet.com.tw" name="CNET">
<item> <url url="http://www.compaq.com/support/networking" name="Compaq">
<item> <url url="http://www.dlink.com" name="D-Link">
<item> <url url="http://www.mcdy.com/marketin/prodman/prodcat.htm" name="Microdyne">
<item> Many NE2000 PCI cards are based on Realtek chipsets. Get drivers <url url="http://www.realtek.com.tw/cn/driver/driver.htm" name="here">
<item> <url url="http://www.smc.com/support.html" name="Standard Microsystems Corp">
<item> <url url="http://www.sure-com.net" name="Surecom">
<item> <url url="http://www.compaq.com/support/networking/OutOfProduction.html" name="Thomas Conrad corp">
<item> <url url="http://www.winbond.com.tw" name="Winbond">
<item> <url url="http://www.xircom.com" name="Xircom">
</itemize>


<itemize>
<item> <url url="http://www.sandybay.com/pc-web/network_interface_card_NIC.htm" name="Webopaedia page"> on network cards
<item> Jargon's <url url="http://www.evitech.fi/~jarnomn/files/drivers/net_d.html" name="driver page"> with many drivers for older network cards.
<item> <url url="http://www.slug.org.au/etherboot/" name="Etherboot"> 
and at <url name="mirror-site" url="http://etherboot.sourceforge.net">
and at <url name="google-site" url="http://www.google.com/search?q=Etherboot">
This is a project similar to Netbot but based on the BSD bootrom code.
<item> How to make an <url url="http://www.menet.umn.edu/~kaszeta/unix/xterminal/index.html" name="X Window Terminal"> out of your old or outdated PC.
<item> List of <url url="http://www.slug.org.au/NIC/index.html" name="jumper settings"> for various network cards. This page also contains many other good links.
<item> <url url="http://sites.inka.de/lina/freefire-l/tools.html" name="Freefire"> is the home page of the Freefire project, which lists many resources for network security issues.
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************



-->
<sect> Related URLs
<p>
<itemize>
<item> See 'Diskless-root-NFS-HOWTO' at <url url="http://metalab.unc.edu/LDP/HOWTO/Diskless-root-NFS-HOWTO.html">
<item> Linux goodies main site is at <url url="http://www.milkywaygalaxy.freeservers.com"> 
Mirror sites are at -
<url url="http://aldev0.webjump.com">,
<url name="angelfire" url="http://www.angelfire.com/country/aldev0">,
<url name="geocities" url="http://www.geocities.com/alavoor/index.html">,
<url name="virtualave" url="http://aldev0.virtualave.net">,
<url name="50megs" url="http://aldev0.50megs.com">,
<url name="theglobe" url="http://members.theglobe.com/aldev1/index.html">,
<url name="NBCi" url="http://members.nbci.com/alavoor">,
<url name="Terrashare" url="http://aldev.terrashare.com">,
<url name="Fortunecity" url="http://members.fortunecity.com/aldev">,
<url name="Freewebsites" url="http://aldev.freewebsites.com">,
<url name="Tripod" url="http://members.tripod.lycos.com/aldev">,
<url name="Spree" url="http://members.spree.com/technology/aldev">,
<url name="Escalix" url="http://www.escalix.com/freepage/aldev">,
<url name="Httpcity" url="http://www.httpcity.com/aldev/index.html">,
<url name="Freeservers" url="http://aldev.freeservers.com">.
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt change> Copyright Notice
-->
<sect> Copyright Notice
<p>
Copyright policy is GNU/GPL as per LDP (Linux Documentation project).
LDP is a GNU/GPL project.
Additional restrictions are - you must retain the author's name, email address
and this copyright notice on all the copies. If you make any changes 
or additions to this document then you should 
intimate all the authors of this document.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************



<chapt> Other Formats of this Document
-->
<sect> Other Formats of this Document
<p>
This document is published in 14 different formats namely - DVI, Postscript, 
Latex, Adobe Acrobat PDF,
LyX, GNU-info, HTML, RTF(Rich Text Format), Plain-text, Unix man pages, single 
HTML file, SGML (Linuxdoc format), SGML (Docbook format), MS WinHelp format.

This howto document is located at -
<itemize>
<item> <url url="http://www.linuxdoc.org"> and click on HOWTOs and search 
for howto document name using CTRL+f or ALT+f within the web-browser.
</itemize>

You can also find this document at the following mirrors sites -
<itemize>
<item> <url url="http://www.caldera.com/LDP/HOWTO">
<item> <url url="http://www.linux.ucla.edu/LDP">
<item> <url url="http://www.cc.gatech.edu/linux/LDP">
<item> <url url="http://www.redhat.com/mirrors/LDP">

<item> Other mirror sites near you (network-address-wise) can be found at
<url url="http://www.linuxdoc.org/mirrors.html">
select a site and go to directory /LDP/HOWTO/xxxxx-HOWTO.html
</itemize>


<itemize>
<item>
You can get this HOWTO document as a single file tar ball in HTML, DVI, 
Postscript or SGML formats from -
<url url="ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO/other-formats/">
and <url url="http://www.linuxdoc.org/docs.html#howto">
<p>
<item>Plain text format is in: <url url="ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO">
and <url url="http://www.linuxdoc.org/docs.html#howto">
<p>
<item>Single HTML file format is in: 
<url url="http://www.linuxdoc.org/docs.html#howto">
<p> Single HTML file can be created with command (see man sgml2html) - 
sgml2html -split 0   xxxxhowto.sgml
<p>
<item>Translations to other languages like French, German, Spanish, 
Chinese, Japanese are in
<url url="ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO">
and <url url="http://www.linuxdoc.org/docs.html#howto">
Any help from you to translate to other languages is welcome.
</itemize>
The document is written using a tool called "SGML-Tools" which can be got from - 
<url url="http://www.sgmltools.org">
Compiling the source you will get the following commands like
<itemize>
<item>sgml2html xxxxhowto.sgml     (to generate html file)
<item>sgml2html -split 0   xxxxhowto.sgml (to generate a single page html file)
<item>sgml2rtf  xxxxhowto.sgml     (to generate RTF file)
<item>sgml2latex xxxxhowto.sgml    (to generate latex file)
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Acrobat PDF format <label id="acrobatpdf">
<p>
PDF file can be generated from postscript file using 
either acrobat <bf>distill</bf> or <bf>Ghostscript</bf>.
And postscript file is generated
from DVI which in turn is generated from LaTex file.
You can download distill software from <url url="http://www.adobe.com">. Given below 
is a sample session:
<code>
bash$ man sgml2latex
bash$ sgml2latex filename.sgml
bash$ man dvips
bash$ dvips -o filename.ps filename.dvi
bash$ distill filename.ps
bash$ man ghostscript
bash$ man ps2pdf
bash$ ps2pdf input.ps output.pdf
bash$ acroread output.pdf &
</code>
Or you can use Ghostscript command <bf>ps2pdf</bf>.
ps2pdf is a work-alike for nearly all the functionality of 
Adobe's Acrobat Distiller product: it
converts PostScript files to Portable Document Format (PDF) files. 
<bf>ps2pdf</bf> is implemented as a very small command script 
(batch file) that invokes Ghostscript, selecting a special "output device"
called <bf>pdfwrite</bf>. In order to use ps2pdf, the pdfwrite 
device must be included in the makefile when Ghostscript was compiled;
see the documentation on building Ghostscript for details.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Convert Linuxdoc to Docbook format <label id="linuxdoc2docbook">
<p>
This document is written in linuxdoc SGML format. The Docbook SGML format
supercedes the linuxdoc format and has lot more features than linuxdoc.
The linuxdoc is very simple and is easy to use. To convert linuxdoc SGML 
file to Docbook SGML use the program <bf>ld2db.sh</bf> and some perl scripts.
The ld2db output is not 100% clean and you need to use the <bf>clean_ld2db.pl</bf>
perl script. You may need to manually correct few lines in the document.
<itemize>
<item> Download ld2db program from <url url="http://www.dcs.gla.ac.uk/~rrt/docbook.html">
or from <url name="Milkyway Galaxy site" url="http://www.milkywaygalaxy.freeservers.com">
<item> Download the cleanup_ld2db.pl perl script from
from <url name="Milkyway Galaxy site" url="http://www.milkywaygalaxy.freeservers.com">
</itemize>
The ld2db.sh is not 100% clean, you will get lots of errors when you run
<code>
	bash$ ld2db.sh file-linuxdoc.sgml db.sgml
	bash$ cleanup.pl db.sgml > db_clean.sgml
	bash$ gvim db_clean.sgml 
	bash$ docbook2html db.sgml
</code>
And you may have to manually edit some of the minor errors after 
running the perl script. For e.g. you may need to put closing tag <
/Para> for each <
Listitem>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Convert to MS WinHelp format <label id="mswinhelp">
<p>
You can convert the SGML howto document to Microsoft Windows Help file, 
first convert the sgml to html using:
<code>
	bash$ sgml2html xxxxhowto.sgml     (to generate html file)
	bash$ sgml2html -split 0   xxxxhowto.sgml (to generate a single page html file)
</code>
Then use the tool <url name="HtmlToHlp" url="http://javadocs.planetmirror.com/htmltohlpe.html">.
You can also use sgml2rtf and then use the RTF files for generating winhelp files.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************

-->
<sect1> Reading various formats <label id="readformats">
<p>
In order to view the document in dvi format, use the xdvi program. The xdvi
program is located in tetex-xdvi*.rpm package in Redhat Linux which can be
located through ControlPanel | Applications | Publishing | TeX menu buttons.
	To read dvi document give the command -
<tscreen><verb>
	xdvi -geometry 80x90 howto.dvi
	man xdvi
</verb></tscreen>
	And resize the window with mouse.
	To navigate use Arrow keys, Page Up, Page Down keys, also
	you can use 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' letter
	keys to move up, down, center, next page, previous page etc.
	To turn off expert menu press 'x'.

You can read postscript file using the program 'gv' (ghostview) or 
'ghostscript'.
The ghostscript program is in ghostscript*.rpm package and gv 
program is in gv*.rpm package in Redhat Linux
which can be located through ControlPanel | Applications | Graphics menu 
buttons. The gv program is much more user friendly than ghostscript.
Also ghostscript and gv are available on other platforms like OS/2,
Windows 95 and NT, you view this document even on those platforms.
 
<itemize>
<item>Get ghostscript for Windows 95, OS/2, and for 
all OSes from <url url="http://www.cs.wisc.edu/~ghost">
</itemize>

To read postscript document give the command -
<tscreen><verb>
		gv howto.ps
		ghostscript howto.ps
</verb></tscreen>

You can read HTML format document using Netscape Navigator, Microsoft Internet
explorer, Redhat Baron Web browser or any of the 10 other web browsers.

You can read the latex, LyX output using LyX a X-Windows front end to latex.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt change> Appendix
-->
<sect> Topics for Academics and Universities <label id="RFCs">
<p>
This section is for academic interest only - for universities or research institutes.
If you have plenty of time then you can read
it. These links are to RFCs and to the history of diskless nodes. 
Students will find these links interesting to read the history 
of development of diskless workstations.

<bf>Word of Caution: </bf> The information and data given by these URLs may be old.

<itemize>
<item> Install Instructions 
at <url url="http://www.milkywaygalaxy.freeservers.com">
and click on rfc-install.html.
<p>
<item> Troubleshoot Problems 
<url url="http://www.milkywaygalaxy.freeservers.com">
and click on RFC-951.html.
<p>
<item> RFC 951
<url url="http://www.milkywaygalaxy.freeservers.com">
click on RFC-1350.html
<p>
<item> RFC 1533
<url url="http://www.milkywaygalaxy.freeservers.com">
click on RFC-1533.html
<p>
<item> RFC 1350
<url url="http://www.milkywaygalaxy.freeservers.com">
click on Troubleshoot.html
<p>
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************



-->
</article>
