Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
usermanual [2006/07/20 04:14] stockholm |
usermanual [2006/07/21 05:17] (current) stockholm |
||
---|---|---|---|
Line 48: | Line 48: | ||
==== What hardware is supported? ==== | ==== What hardware is supported? ==== | ||
- | See Appendix A for a list of supported NICs. All Etherboot drivers are autoprobing, which means they attempt to detect the hardware addresses at which the card is installed. It's fairly easy to write a driver if you know C and are familiar with Ethernet hardware interfacing. Please read the developer manual if you wish to do so. | + | See [[#list_of_supported_nics|Appendix]] for a list of supported NICs. All Etherboot drivers are autoprobing, which means they attempt to detect the hardware addresses at which the card is installed. It's fairly easy to write a driver if you know C and are familiar with Ethernet hardware interfacing. Please read the [[dev:devmanual|developer manual]] if you wish to do so. |
==== Getting help ==== | ==== Getting help ==== | ||
- | Please join the Etherboot mailing lists. These are listed on the Etherboot home page. There is a users mailing list and a developers mailing list. The users list is for issues with building and running the software, while the developers list is for issues with features and coding. | + | Please join the Etherboot [[http://sourceforge.net/mail/?group_id=4233|mailing lists]] (Update AMH2006: Nowadays, only ''etherboot-discuss'' is an active discussion list). These are listed on the [[http://www.etherboot.org/|Etherboot home page]]. There is a users mailing list and a developers mailing list. The users list is for issues with building and running the software, while the developers list is for issues with features and coding. |
Please post questions or bug reports to the Etherboot mailing lists, please do not mail me, because: 1. you get the benefit of a lot of experts seeing your question (no, I don't know everything, if only because there are many configurations I have never used); 2. a lot of people see the question and answer and this helps them too; 3. I have other demands on my time, like a job, and answering individual email is an unsustainable practice. You will probably not get any reply from me if you email me directly. I want to make the best use of my time and that is by making sure that as many people as possible see the questions and answers. Note that I will post my replies to the mailing lists so to see the answers you should subscribe, or be willing to check the archives later. | Please post questions or bug reports to the Etherboot mailing lists, please do not mail me, because: 1. you get the benefit of a lot of experts seeing your question (no, I don't know everything, if only because there are many configurations I have never used); 2. a lot of people see the question and answer and this helps them too; 3. I have other demands on my time, like a job, and answering individual email is an unsustainable practice. You will probably not get any reply from me if you email me directly. I want to make the best use of my time and that is by making sure that as many people as possible see the questions and answers. Note that I will post my replies to the mailing lists so to see the answers you should subscribe, or be willing to check the archives later. | ||
Line 57: | Line 57: | ||
On the other hand, if you have a code or document contribution, then email to me is definitely appropriate. Please ask first before you send large files. Diffs are preferred to entire archives. If you are really keen to volunteer, and have the skills, ask to join the developer team. | On the other hand, if you have a code or document contribution, then email to me is definitely appropriate. Please ask first before you send large files. Diffs are preferred to entire archives. If you are really keen to volunteer, and have the skills, ask to join the developer team. | ||
- | Other lists you can join are the Linux Terminal Server Project mailing lists at LTSP. The LTSP list is focused more on the LTSP packages. However there is a fair amount of overlap between the lists and many key people are on all lists. | + | Other lists you can join are the [[http://www.ltsp.org/|Linux Terminal Server Project]] mailing lists at LTSP. The LTSP list is focused more on the LTSP packages. However there is a fair amount of overlap between the lists and many key people are on all lists. |
===== Unpacking, compiling and testing the package ===== | ===== Unpacking, compiling and testing the package ===== | ||
+ | |||
==== A short cut to getting Etherboot images ==== | ==== A short cut to getting Etherboot images ==== | ||
- | Marty Connor has set up a web form for creating an Etherboot image [[http://www.rom-o-matic.net/|Rom-o-Matic]] on the fly and returning it as the output of the form. If all you want is an Etherboot image, this could save you having to build the distribution. | + | Marty Connor has set up a [[http://www.rom-o-matic.net/|web form for creating an Etherboot image (Rom-o-Matic)]] on the fly and returning it as the output of the form. If all you want is an Etherboot image, this could save you having to build the distribution. |
==== Unpacking the distribution ==== | ==== Unpacking the distribution ==== | ||
Line 82: | Line 83: | ||
</file> | </file> | ||
which will extract the documentation in a subdirectory of the Etherboot top directory. | which will extract the documentation in a subdirectory of the Etherboot top directory. | ||
+ | |||
==== Making an Etherboot image ==== | ==== Making an Etherboot image ==== | ||
To build an Etherboot image you need a recent release of gcc and the binutils tools. This package has been compiled with the tools from a SuSE 8.2 distribution but it should work with any recent Linux or FreeBSD distribution. gas 2.9.1 is too old to handle the 16-bit code in loader.S. Use gas 2.9.5 at least. Also the "gcc 2.96" used in RedHat 7.0 (and later versions maybe) generates faulty machine code compiling Etherboot. Use kgcc from those distributions instead. | To build an Etherboot image you need a recent release of gcc and the binutils tools. This package has been compiled with the tools from a SuSE 8.2 distribution but it should work with any recent Linux or FreeBSD distribution. gas 2.9.1 is too old to handle the 16-bit code in loader.S. Use gas 2.9.5 at least. Also the "gcc 2.96" used in RedHat 7.0 (and later versions maybe) generates faulty machine code compiling Etherboot. Use kgcc from those distributions instead. | ||
Line 104: | Line 106: | ||
The ones ending in ''.zlilo'' look sufficiently like Linux kernel images to be accepted by [[http://lilo.go.dyndns.org/|LILO]], [[http://www.gnu.org/software/grub/grub.html|GRUB]] and [[http://www.zytor.com/syslinux/|SYSLINUX]] for installation. Unfortunately loadlin uses a slightly different method of booting for Linux kernels from LILO and SYSLINUX and will not work with these images. | The ones ending in ''.zlilo'' look sufficiently like Linux kernel images to be accepted by [[http://lilo.go.dyndns.org/|LILO]], [[http://www.gnu.org/software/grub/grub.html|GRUB]] and [[http://www.zytor.com/syslinux/|SYSLINUX]] for installation. Unfortunately loadlin uses a slightly different method of booting for Linux kernels from LILO and SYSLINUX and will not work with these images. | ||
- | The fact that ''.zlilo'' images look like a Linux kernel to LILO and SYSLINUX allows some interesting booting possibilities. For example, you could use LILO to select between DOS/Windows and Etherboot images from a disk that contains no Linux partitions, only FAT based partitions. *FIXME* This HOWTO shows you how this can be arranged. | + | The fact that ''.zlilo'' images look like a Linux kernel to LILO and SYSLINUX allows some interesting booting possibilities. For example, you could use LILO to select between DOS/Windows and Etherboot images from a disk that contains no Linux partitions, only FAT based partitions. [[lilowithetherboot|This HOWTO]] shows you how this can be arranged. |
- | The ones ending in ''.zpxe'' can be booted by a PXE booter. This is useful to chain to Etherboot from PXE. *FIXME* Here are some notes on how to combine PXE and Etherboot. | + | The ones ending in ''.zpxe'' can be booted by a PXE booter. This is useful to chain to Etherboot from PXE. [[pxe2ndstage|Here are]] some notes on how to combine PXE and Etherboot. |
The ones ending in ''.com'' are DOS format executables, suitable for starting from DOS. It requires a real DOS environment, not a virtual DOS environment such as that provided by the DOS prompt window under Windows. Also it requires that there be no XMS drivers or other memory handlers loaded. It is not guaranteed to work if the environment is not clean, and sometimes not even if it is. The best chance of this format working is when DOS is booted with no device drivers whatsoever. If you can, use raw floppy or an intermediate bootloader for booting instead. | The ones ending in ''.com'' are DOS format executables, suitable for starting from DOS. It requires a real DOS environment, not a virtual DOS environment such as that provided by the DOS prompt window under Windows. Also it requires that there be no XMS drivers or other memory handlers loaded. It is not guaranteed to work if the environment is not clean, and sometimes not even if it is. The best chance of this format working is when DOS is booted with no device drivers whatsoever. If you can, use raw floppy or an intermediate bootloader for booting instead. | ||
- | The ones ending in ''.zrom'' are images suitable for writing onto ROMs. If you are making a ''.zrom'' image, you must set the PCI vendor and device IDs correctly for PCI NICs. Look at the file NIC. Locate the line that has the correct PCI IDs for your NIC. This will give you the name of the ROM image you should use. The PCI IDs are usually displayed by the BIOS on booting up. They can also be read out from a running Linux system using the Linux PCI Utilities. If you do not use the ROM with the correct IDs, the floppy version will work, but the ROM will not since the BIOS will check for a match. | + | The ones ending in ''.zrom'' are images suitable for writing onto ROMs. If you are making a ''.zrom'' image, you must set the PCI vendor and device IDs correctly for PCI NICs. Look at the file NIC. Locate the line that has the correct PCI IDs for your NIC. This will give you the name of the ROM image you should use. The PCI IDs are usually displayed by the BIOS on booting up. They can also be read out from a running Linux system using the [[http://atrey.karlin.mff.cuni.cz/~mj/pciutils.shtml|Linux PCI Utilities]]. If you do not use the ROM with the correct IDs, the floppy version will work, but the ROM will not since the BIOS will check for a match. |
There are also ''.fd0'', ''.dsk'', ''.lilo'', ''.pxe'' and ''.rom'' counterparts to the ''.z*'' versions of the images. The difference is the ''.z*'' versions are compressed. Unless you doubt the (de)compression process, there is usually no reason to use the uncompressed versions.. | There are also ''.fd0'', ''.dsk'', ''.lilo'', ''.pxe'' and ''.rom'' counterparts to the ''.z*'' versions of the images. The difference is the ''.z*'' versions are compressed. Unless you doubt the (de)compression process, there is usually no reason to use the uncompressed versions.. | ||
Line 116: | Line 118: | ||
===== Setting up a diskless boot ===== | ===== Setting up a diskless boot ===== | ||
In this section I assume you want to boot a Linux kernel. Booting a FreeBSD kernel is documented elsewhere and does not require a generating a boot image. Booting a DOS kernel is similar, the main differences being in the way you set up the boot image. | In this section I assume you want to boot a Linux kernel. Booting a FreeBSD kernel is documented elsewhere and does not require a generating a boot image. Booting a DOS kernel is similar, the main differences being in the way you set up the boot image. | ||
+ | |||
==== Making a boot image ==== | ==== Making a boot image ==== | ||
- | Etherboot expects to download a boot image in either ELF or tagged format containing the code to be executed. Briefly explained, a boot image has a wrapper around the pieces of code or data that need to be put in various places in the computer's memory. It contains a directory telling how large the pieces are and where they go in memory. It also says where to start execution. | + | Etherboot expects to download a boot image in either ELF or [[dev:devmanual#image_format_with_initial_magic_number|tagged format]] containing the code to be executed. Briefly explained, a boot image has a wrapper around the pieces of code or data that need to be put in various places in the computer's memory. It contains a directory telling how large the pieces are and where they go in memory. It also says where to start execution. |
- | A boot image is created using a utility program. The utility program is specific to the kernel you want to load. The version for Linux is called ''mkelf-linux'' or ''mknbi-linux'' and that for DOS is ''mknbi-dos''. These utilities are distributed separately and can be obtained from Etherboot web site. | + | A boot image is created using a utility program. The [[mknbi|utility program]] is specific to the kernel you want to load. The version for Linux is called ''mkelf-linux'' or ''mknbi-linux'' and that for DOS is ''mknbi-dos''. These utilities are distributed separately and can be obtained from [[http://www.etherboot.org|Etherboot web site]]. |
==== Compiling a custom kernel ==== | ==== Compiling a custom kernel ==== | ||
Line 186: | Line 189: | ||
If you have a DHCP server already running for the subnet, you probably should specify that your additional ISC DHCPD server is not authoritative for the the subnet, or it will veto (NAK) existing client IP address allocations, upsetting the status quo. See the ISC DHCPD options documentation. | If you have a DHCP server already running for the subnet, you probably should specify that your additional ISC DHCPD server is not authoritative for the the subnet, or it will veto (NAK) existing client IP address allocations, upsetting the status quo. See the ISC DHCPD options documentation. | ||
- | Here is a practical document describing how it is done. | + | Here is a practical document (AMH2006: Dead link, sorry) describing how it is done. |
==== Setting up a tftp daemon ==== | ==== Setting up a tftp daemon ==== | ||
Line 201: | Line 204: | ||
Recent advances in the Linux kernel (2.4 and above) have made the use of an initrd that does user space autoconfiguration and mounting of a NFS root filesystem, followed by a pivot_root, a more flexible alternative to kernel autoconfiguration and mounting of a NFS root filesystem. Postings on the kernel mailing lists indicate that at some point in the future, kernel level autoconfiguration (BOOTP/DHCP from the kernel) may be removed from the Linux kernel and initrds will be the recommended way to start up a diskless system. | Recent advances in the Linux kernel (2.4 and above) have made the use of an initrd that does user space autoconfiguration and mounting of a NFS root filesystem, followed by a pivot_root, a more flexible alternative to kernel autoconfiguration and mounting of a NFS root filesystem. Postings on the kernel mailing lists indicate that at some point in the future, kernel level autoconfiguration (BOOTP/DHCP from the kernel) may be removed from the Linux kernel and initrds will be the recommended way to start up a diskless system. | ||
- | Until I have time to write detailed instructions on how to construct the initrd, I refer you to the LTSP distribution which uses this technique. Mknbi supports initrds, see the ramdisk argument of mkelf-linux. The Linux kernel documentation describes the extra arguments should be passed to the kernel to make it use an initrd, and how to arrange the initrd so that the startup script within it is called when it's mounted. If the initrd mounts a NFS root filesystem then it should still have all the needed structure as explained in the next section. | + | Until I have time to write detailed instructions on how to construct the initrd, I refer you to the [[http://www.ltsp.org/|LTSP distribution]] which uses this technique. Mknbi supports initrds, see the ramdisk argument of [[mknbi|''mkelf-linux'']]. The Linux kernel documentation describes the extra arguments should be passed to the kernel to make it use an initrd, and how to arrange the initrd so that the startup script within it is called when it's mounted. If the initrd mounts a NFS root filesystem then it should still have all the needed structure as explained in the next section. |
+ | |||
+ | Initrds can also be used for mounting other network filesystems instead of NFS root. Some applications could even run totally out of initrd, e.g. [[http://www.zelow.no/floppyfw/|Floppy Firewall]], provided you have the memory, of course. | ||
- | Initrds can also be used for mounting other network filesystems instead of NFS root. Some applications could even run totally out of initrd, e.g. Floppy Firewall, provided you have the memory, of course. | ||
==== Other filesystem setups ==== | ==== Other filesystem setups ==== | ||
- | This tutorial does not cover all possible ways of setting up a diskless client's initial filesystem. You could even mount a conventional hard disk. Why would you want to boot "diskless" if you have a hard disk? Reasons might be: you do not wish to administer the local disk; you want the assurance that a system is running a kernel from a central server; or you like the speed of network booting. Network booting is one technique in a toolbox. Techniques can be combined to do what you want. If you are interested in running the diskless client as an X-terminal, a very common use, you may wish to investigate the Linux Terminal Server Project. | + | This tutorial does not cover all possible ways of setting up a diskless client's initial filesystem. You could even mount a conventional hard disk. Why would you want to boot "diskless" if you have a hard disk? Reasons might be: you do not wish to administer the local disk; you want the assurance that a system is running a kernel from a central server; or you like the speed of network booting. Network booting is one technique in a toolbox. Techniques can be combined to do what you want. If you are interested in running the diskless client as an X-terminal, a very common use, you may wish to investigate the [[http://www.ltsp.org/|Linux Terminal Server Project]]. |
==== Swap over NFS ==== | ==== Swap over NFS ==== | ||
- | Swap over NFS can be arranged but you have to patch the kernel source. See here. | + | Swap over NFS can be arranged but you have to patch the kernel source. See [[http://nfs-swap.dot-heine.de/|here]]. |
Be aware that opinions are divided on NFS swap. Some people think it's a bad thing because it just kills the network if you have lots of diskless computers and that you shouldn't be running into a swap regime on a diskless computer anyway. Some other people like having a bit of insurance. | Be aware that opinions are divided on NFS swap. Some people think it's a bad thing because it just kills the network if you have lots of diskless computers and that you shouldn't be running into a swap regime on a diskless computer anyway. Some other people like having a bit of insurance. | ||
- | Also have a look at the NBD Network Block Device for swapping over that. | + | Also have a look at the [[http://atrey.karlin.mff.cuni.cz/~pavel/nbd/nbd.html|NBD Network Block Device]] for swapping over that. |
- | There is also the follow-on project ENBD, the Enhanced Network Block Driver. I have no experience with this for swapping. Comments welcome. | + | There is also the follow-on project [[http://www.it.uc3m.es/~ptb/nbd/|ENBD]], the Enhanced Network Block Driver. I have no experience with this for swapping. Comments welcome. |
===== Booting DOS ===== | ===== Booting DOS ===== | ||
- | What about DOS? The deal with DOS is that one is loading a virtual floppy called A: into extended memory and then booting from this floppy. So you have to capture an image of a bootable DOS floppy first. Some more details can be found in the mknbi-dos utility. | + | What about DOS? The deal with DOS is that one is loading a virtual floppy called A: into extended memory and then booting from this floppy. So you have to capture an image of a bootable DOS floppy first. Some more details can be found in the [[mknbi|''mknbi-dos'']] utility. |
- | I have booted DOS (both M$ versions up to 5.0 and DR versions up to 7.03) diskless this way. A mknbi-fdos is available for building boot images for booting FreeDOS, the procedure differs slightly from booting M$ or DR DOS. | + | I have booted DOS (both M$ versions up to 5.0 and DR versions up to 7.03) diskless this way. A [[mknbi|''mknbi-fdos'']] is available for building boot images for booting FreeDOS, the procedure differs slightly from booting M$ or DR DOS. |
- | If you were thinking of booting a Windows machine via the network, it seems (I'm not masochistic enough to do this) the problem is not the network booting but the mounting of a file system over NetBIOS (Windows does not do remote mounts of root filesystems over NetBIOS on TCP). So that rules out a Samba server. It appears to be possible over a Netware server, for which Linux or FreeBSD has workalikes. Also it is said that only certain versions of Windows will allow diskless booting. You will also have problems with pathnames and the usual Windows hassles. Do you really want to do this? You do know that you can run lots of desktop applications like Netscape, StarOffice, etc. on Linux, FreeBSD, etc. now? Why pay good money when you can use equally good free replacements? Anyway if you are still determined, in the Etherboot home page, there are links to external Web pages, one explaining how this was done with a commercial TCP/IP boot ROM, another explaining how to do it using Etherboot and Netbios over IPX. A recent user experience is here. Good luck and send us your experiences or better still a URL to a page explaining how you did it. | + | If you were thinking of booting a Windows machine via the network, it seems (I'm not masochistic enough to do this) the problem is not the network booting but the mounting of a file system over NetBIOS (Windows does not do remote mounts of root filesystems over NetBIOS on TCP). So that rules out a Samba server. It appears to be possible over a Netware server, for which Linux or FreeBSD has workalikes. Also it is said that only certain versions of Windows will allow diskless booting. You will also have problems with pathnames and the usual Windows hassles. Do you really want to do this? You do know that you can run lots of desktop applications like Netscape, StarOffice, etc. on Linux, FreeBSD, etc. now? Why pay good money when you can use equally good free replacements? Anyway if you are still determined, in the [[http://www.etherboot.org/|Etherboot home page]], there are links to external Web pages, one explaining how this was done with a commercial TCP/IP boot ROM, another explaining how to do it using Etherboot and Netbios over IPX. A recent user experience is (AMH2006: Dead link, sorry) here. Good luck and send us your experiences or better still a URL to a page explaining how you did it. |
===== Making an Etherboot EPROM or EEPROM ===== | ===== Making an Etherboot EPROM or EEPROM ===== | ||
- | Assuming you have satisfactorily set up your server environment, you may now wish to put the Etherboot onto an EPROM or EEPROM. Naturally this assumes access to hardware to program (and possibly erase) EPROMs. Access to a friendly electronics engineer and/or lab is one way to program and erase EPROMs. Otherwise you can look at the commercial links page for places you can buy programmed EPROMs from. | + | Assuming you have satisfactorily set up your server environment, you may now wish to put the Etherboot onto an EPROM or EEPROM. Naturally this assumes access to hardware to program (and possibly erase) EPROMs. Access to a friendly electronics engineer and/or lab is one way to program and erase EPROMs. Otherwise you can look at the [[commerciallinks|commercial links page]] for places you can buy programmed EPROMs from. |
Some high-end network cards, for example the 3Com 905B, have a socket for an EEPROM which can be programmed in situ with the right utilities. See any release notes accompanying Etherboot for more information. | Some high-end network cards, for example the 3Com 905B, have a socket for an EEPROM which can be programmed in situ with the right utilities. See any release notes accompanying Etherboot for more information. | ||
Line 231: | Line 236: | ||
==== Enabling the EPROM ==== | ==== Enabling the EPROM ==== | ||
First you must discover how to enable the EPROM socket on your card. Typically the EPROM is not enabled from the factory and a jumper or a software configuration program is used to enable it. | First you must discover how to enable the EPROM socket on your card. Typically the EPROM is not enabled from the factory and a jumper or a software configuration program is used to enable it. | ||
+ | |||
==== Size and speed of the EPROM ==== | ==== Size and speed of the EPROM ==== | ||
Secondly, you must discover what size and speed of EPROM is needed. This can be difficult as network card manufacturers often neglect to provide this information. | Secondly, you must discover what size and speed of EPROM is needed. This can be difficult as network card manufacturers often neglect to provide this information. | ||
Line 246: | Line 252: | ||
The speed of the EPROM needed depends on how it is connected to the computer bus. If the EPROM is directly connected to the computer bus, as in the case of many cheap NE2000 clones, then you will probably have to get an EPROM that is at least as fast as the ROMs used for the main BIOS. This is typically 120-150 ns. Some network cards mediate access to the EPROM via circuitry and this may insert wait states so that slower EPROMs can be used. Incidentally the slowness of the EPROM doesn't affect Etherboot execution speed much because Etherboot copies itself to RAM before executing. | The speed of the EPROM needed depends on how it is connected to the computer bus. If the EPROM is directly connected to the computer bus, as in the case of many cheap NE2000 clones, then you will probably have to get an EPROM that is at least as fast as the ROMs used for the main BIOS. This is typically 120-150 ns. Some network cards mediate access to the EPROM via circuitry and this may insert wait states so that slower EPROMs can be used. Incidentally the slowness of the EPROM doesn't affect Etherboot execution speed much because Etherboot copies itself to RAM before executing. | ||
- | If you have your own EPROM programming hardware, there is a nice collection of EPROM file format conversion utilities here. The files produced by the Etherboot build process are plain binary. A simple binary to Intel hex format converter can be found at the Etherboot web site here. | + | If you have your own EPROM programming hardware, there is a nice collection of EPROM file format conversion utilities [[http://srecord.sourceforge.net/index.html|here]]. The files produced by the Etherboot build process are plain binary. A simple binary to Intel hex format converter can be found [[dev:bin2intelhexc|in this wiki here]]. |
Etherboot is believed to make PnP compliant ROMs for PCI NICs. A long-standing bug in the headers has been tracked down. However some faulty old BIOSes are out there so I have written a Perl script swapdevids.pl to switch the header around if necessary. You'll have to experiment with it both ways to find out which works. Or you could dump a ROM image that works (e.g. RPL, PXE ROM) using the Perl script disrom.pl. The fields to look at are Device (base, sub, interface) Type. It should be 02 00 00, but some BIOSes want 00 00 02 due to ambiguity in the original specification. | Etherboot is believed to make PnP compliant ROMs for PCI NICs. A long-standing bug in the headers has been tracked down. However some faulty old BIOSes are out there so I have written a Perl script swapdevids.pl to switch the header around if necessary. You'll have to experiment with it both ways to find out which works. Or you could dump a ROM image that works (e.g. RPL, PXE ROM) using the Perl script disrom.pl. The fields to look at are Device (base, sub, interface) Type. It should be 02 00 00, but some BIOSes want 00 00 02 due to ambiguity in the original specification. | ||
- | |||
- | |||
===== Troubleshooting tips ===== | ===== Troubleshooting tips ===== | ||
Line 264: | Line 268: | ||
* Etherboot detects card but does nothing after saying Searching for server. Check your network hardware. Did you select the right hardware interface (AUI, BNC, RJ45)? Is the cabling ok? If you have a Unix computer on the network and have root privileges, you could run tcpdump or ethereal looking for broadcast packets on the bootps port. If the requests are getting sent out but no replies are getting back, check your DHCPD setup. Also check if the server has a route to the client. | * Etherboot detects card but does nothing after saying Searching for server. Check your network hardware. Did you select the right hardware interface (AUI, BNC, RJ45)? Is the cabling ok? If you have a Unix computer on the network and have root privileges, you could run tcpdump or ethereal looking for broadcast packets on the bootps port. If the requests are getting sent out but no replies are getting back, check your DHCPD setup. Also check if the server has a route to the client. | ||
* Etherboot obtains IP address but fails to load file. Check the tftp server. Is the boot image file installed? Is the file world readable? Is the path to the file allowed by the configuration of tftpd? Is the client denied by tcpwrapper rules? Did you put the right home directory and filename in /etc/dhcpd.conf? If you are booting lots of clients, is inetd shutting down tftpd for being spawned too often? If so, you need to get a better inetd or a a dedicated tftpd that runs as an independent daemon. | * Etherboot obtains IP address but fails to load file. Check the tftp server. Is the boot image file installed? Is the file world readable? Is the path to the file allowed by the configuration of tftpd? Is the client denied by tcpwrapper rules? Did you put the right home directory and filename in /etc/dhcpd.conf? If you are booting lots of clients, is inetd shutting down tftpd for being spawned too often? If so, you need to get a better inetd or a a dedicated tftpd that runs as an independent daemon. | ||
- | * Etherboot loads file but hangs halfway through the transfer. We have one report that this happens if the Fast A20 Gate option is selected in the BIOS setup. The A20 issue is explained here. In effect this causes the loaded kernel to overwrite Etherboot and kill it. Try deselecting the option. You don't need it for Linux anyway. | + | * Etherboot loads file but hangs halfway through the transfer. We have one report that this happens if the Fast A20 Gate option is selected in the BIOS setup. The A20 issue is explained [[http://www.win.tue.nl/~aeb/linux/kbd/A20.html|here]]. In effect this causes the loaded kernel to overwrite Etherboot and kill it. Try deselecting the option. You don't need it for Linux anyway. |
* Etherboot loads file via tftp but Linux fails to mount the root filesystem, either on an initrd or on NFSroot. This is a large category. Here are some suggestions: | * Etherboot loads file via tftp but Linux fails to mount the root filesystem, either on an initrd or on NFSroot. This is a large category. Here are some suggestions: | ||
* You do not have a private copy of the /, /etc, /var, ... directories | * You do not have a private copy of the /, /etc, /var, ... directories | ||
Line 307: | Line 311: | ||
* Why don't you provide prebuilt ROM images? | * Why don't you provide prebuilt ROM images? | ||
* [[http://www.rom-o-matic.net/|rom-o-matic.net]] is the answer. This is a site that makes ROM images for you on demand from specifications given to a web form and returns the image as the result of the form. | * [[http://www.rom-o-matic.net/|rom-o-matic.net]] is the answer. This is a site that makes ROM images for you on demand from specifications given to a web form and returns the image as the result of the form. | ||
+ | |||
==== Testing Etherboot ==== | ==== Testing Etherboot ==== | ||
* I put the ROM image on floppy like you wrote (''cat bin/boot1a.bin bin/foo.rom > /dev/fd0, or make bin/foo.fd0'') but the loader prints out an error. | * I put the ROM image on floppy like you wrote (''cat bin/boot1a.bin bin/foo.rom > /dev/fd0, or make bin/foo.fd0'') but the loader prints out an error. | ||
Line 319: | Line 324: | ||
* Access violation is a blanket reply for many different problems but essentially the TFTP server cannot give Etherboot the file requested. Did you put the file where TFTPD expects to find it, e.g. on a directory that is on its path? Did you make the file world readable? Case of the filename is important too. Check the log files on the TFTP server to see what the actual filename it tried to open was, sometimes directory prefixes are prepended to the name due to the program options specified. | * Access violation is a blanket reply for many different problems but essentially the TFTP server cannot give Etherboot the file requested. Did you put the file where TFTPD expects to find it, e.g. on a directory that is on its path? Did you make the file world readable? Case of the filename is important too. Check the log files on the TFTP server to see what the actual filename it tried to open was, sometimes directory prefixes are prepended to the name due to the program options specified. | ||
* I made this kernel and put it in /tftpdir like you wrote but Etherboot says Unable to load file. | * I made this kernel and put it in /tftpdir like you wrote but Etherboot says Unable to load file. | ||
- | * Is the file a boot image? You cannot use a ordinary kernel image, you must process it with mkelf-linux first. | + | * Is the file a boot image? You cannot use a ordinary kernel image, you must process it with [[mknbi|mkelf-linux]] first. |
* I have this proprietary boot ROM (e.g. LanWorks, PXE, etc) and I used mkelf-linux or mknbi-linux to make a boot image, (or I got this boot image from the LTSP project), but the boot ROM doesn't load it, or it fails to run. | * I have this proprietary boot ROM (e.g. LanWorks, PXE, etc) and I used mkelf-linux or mknbi-linux to make a boot image, (or I got this boot image from the LTSP project), but the boot ROM doesn't load it, or it fails to run. | ||
- | * The boot image format is specific to Etherboot. It will not work with proprietary boot ROMs. You have to find out from the supplier what boot procedures you should use. For example, if you are using a LanWorks boot ROM, the information you need is here. For PXE the utility you need is PXELINUX. | + | * The boot image format is specific to Etherboot. It will not work with proprietary boot ROMs. You have to find out from the supplier what boot procedures you should use. For example, if you are using a LanWorks boot ROM, the information you need is [[http://www.3com.com/managedpc|here]]. For PXE the utility you need is PXELINUX. |
==== Hardware capabilities ==== | ==== Hardware capabilities ==== | ||
* What network cards are supported? | * What network cards are supported? | ||
Line 327: | Line 333: | ||
* I have a machine with the X processor and Y megabytes of memory. What can I expect to run on it? | * I have a machine with the X processor and Y megabytes of memory. What can I expect to run on it? | ||
* Please note that these estimates are approximate: | * Please note that these estimates are approximate: | ||
- | * On a 386 with at least 4MB of memory you can boot Linux. With 4MB perhaps only a few telnet sessions are possible. With 8MB you might be able to run a text based web browser like Lynx or W3M. You can also run firewalls such as floppyfw. | + | * On a 386 with at least 4MB of memory you can boot Linux. With 4MB perhaps only a few telnet sessions are possible. With 8MB you might be able to run a text based web browser like Lynx or W3M. You can also run firewalls such as [[http://www.zelow.no/floppyfw/|floppyfw]]. |
* On a 486 with 16MB of memory you can run X to make an X-terminal. | * On a 486 with 16MB of memory you can run X to make an X-terminal. | ||
* On a Pentium with 32MB of memory you can run an X-terminal and some applications locally, say perhaps printing, daemons to control devices, etc. | * On a Pentium with 32MB of memory you can run an X-terminal and some applications locally, say perhaps printing, daemons to control devices, etc. | ||
* On anything faster and with more memory you could perhaps do distributed computation, e.g. a cluster. | * On anything faster and with more memory you could perhaps do distributed computation, e.g. a cluster. | ||
+ | |||
==== Booting Linux ==== | ==== Booting Linux ==== | ||
* The kernel loads but it cannot find a NFS server for the filesystem. | * The kernel loads but it cannot find a NFS server for the filesystem. | ||
* Do you have a NFS server running and is it allowed to serve this client? NFS is actually several services. On Linux at least you need: nfsd (either kernel or userland version), rpc.mountd and portmapper. Check if the tcpwrappers config file is allowing portmapper to receive the request. Look at the log files for clues. Did we already mention that log files are your friends? | * Do you have a NFS server running and is it allowed to serve this client? NFS is actually several services. On Linux at least you need: nfsd (either kernel or userland version), rpc.mountd and portmapper. Check if the tcpwrappers config file is allowing portmapper to receive the request. Look at the log files for clues. Did we already mention that log files are your friends? | ||
* The filesystem mounts but it says something about not being able to open an initial console. Or alternatively, various services complain about not being able to write to the filesystem. | * The filesystem mounts but it says something about not being able to open an initial console. Or alternatively, various services complain about not being able to write to the filesystem. | ||
- | * A common mistake in Linux NFS servers is to put extra spaces in /etc/exports. Please see the NFS FAQ for frequently answered questions about Linux NFS services. | + | * A common mistake in Linux NFS servers is to put extra spaces in /etc/exports. Please see the [[http://nfs.sourceforge.net/|NFS FAQ]] for frequently answered questions about Linux NFS services. |
- | * Please review the Troubleshooting section for what is required on this root filesystem. The situation is complicated by the fact that there are many possible ways of setting this up, including using a root filesystem that is on ramdisk. If you wish to avoid many of the troubles, try using a packaged solution such as LTSP. | + | * Please review the Troubleshooting section for what is required on this root filesystem. The situation is complicated by the fact that there are many possible ways of setting this up, including using a root filesystem that is on ramdisk. If you wish to avoid many of the troubles, try using a packaged solution such as [[http://www.ltsp.org/|LTSP]]. |
==== Running X ==== | ==== Running X ==== | ||
* I tried to run X on the client but it aborted. | * I tried to run X on the client but it aborted. | ||
Line 354: | Line 362: | ||
* If you want to run apps locally, well how long is a piece of string? Netscape will need say another 16MB. It all depends. Whatever you do, it's worth trimming down on the services you run on the client. Don't run more virtual consoles than you need and don't run unneeded daemons. | * If you want to run apps locally, well how long is a piece of string? Netscape will need say another 16MB. It all depends. Whatever you do, it's worth trimming down on the services you run on the client. Don't run more virtual consoles than you need and don't run unneeded daemons. | ||
* As for the server, in the X-terminal case this has all the applications running on it, so it should be adequate for the multiuser aspect. A high-end Pentium, with 64 MB of memory to start with, and between 8 and 16MB for each extra client is a good starting point. It will also depend on your mix of client access, statistically perhaps not everybody will be running at the same time. Remember that you don't have to have one big server for all your clients, you can and you should distribute the load across servers. | * As for the server, in the X-terminal case this has all the applications running on it, so it should be adequate for the multiuser aspect. A high-end Pentium, with 64 MB of memory to start with, and between 8 and 16MB for each extra client is a good starting point. It will also depend on your mix of client access, statistically perhaps not everybody will be running at the same time. Remember that you don't have to have one big server for all your clients, you can and you should distribute the load across servers. | ||
+ | |||
==== Other client applications ==== | ==== Other client applications ==== | ||
* How can I print to a printer attached to a diskless client? | * How can I print to a printer attached to a diskless client? | ||
- | * There is a server program called p910nd at the Etherboot web site that funnels data from a TCP/IP connection to the printer port. You can instruct lpd or CUPS on the server to send jobs across the network to p910nd. | + | * There is a server program called [[http://www.etherboot.org/p910nd/|p910nd]] at the Etherboot web site that funnels data from a TCP/IP connection to the printer port. You can instruct lpd or [[http://www.cups.org/|CUPS]] on the server to send jobs across the network to p910nd. |
* How can I output sound on the client? | * How can I output sound on the client? | ||
- | * There is a package called virtualfs that proxies the sound devices across the network. It can also proxy the floppy drive. | + | * There is a package called [[http://www.solucorp.qc.ca/|virtualfs]] that proxies the sound devices across the network. It can also proxy the floppy drive. |
- | * Another solution is EsounD | + | * Another solution is [[http://www.tux.org/~ricdude/EsounD.html|EsounD]] |
- | * You may wish to check the LTSP site and mailing lists for other proposed solutions. | + | * You may wish to check the [[http://www.ltsp.org/|LTSP site]] and mailing lists for other proposed solutions. |
* How can I access the floppy on the client? | * How can I access the floppy on the client? | ||
- | * Besides virtualfs mentioned above, recent distributions of mtools have a floppyd. This only works with the mtools utilities though. | + | * Besides virtualfs mentioned above, recent distributions of [[http://wauug.erols.com/pub/knaff/mtools/|mtools]] have a floppyd. This only works with the mtools utilities though. |
==== Booting FreeBSD ==== | ==== Booting FreeBSD ==== | ||
* Where are the instructions for booting FreeBSD? | * Where are the instructions for booting FreeBSD? | ||
* For now, there is just a short document in the doc directory. Better versions of this document depend on contributions from the FreeBSD community, I am unable to test FreeBSD because I don't run it. | * For now, there is just a short document in the doc directory. Better versions of this document depend on contributions from the FreeBSD community, I am unable to test FreeBSD because I don't run it. | ||
+ | |||
==== Booting other operating systems (DOS, Windows) ==== | ==== Booting other operating systems (DOS, Windows) ==== | ||
* I want to boot FreeDOS. | * I want to boot FreeDOS. | ||
- | * The new mknbi utility supports creating boot images from FreeDOS kernels now. See the man page for details. FreeDOS is under development and if the layout of the kernel image changes, please send any corrections to me. | + | * The new ''mknbi'' utility supports creating boot images from FreeDOS kernels now. See the [[mknbi|man page]] for details. FreeDOS is under development and if the layout of the kernel image changes, please send any corrections to me. |
* I cannot boot DR-DOS 7.03. | * I cannot boot DR-DOS 7.03. | ||
* There is some difference between the DR-DOS 7.03 and 7.02 bootblock that causes it not to boot. But a 7.02 bootblock works just as well with the DR-DOS 7.03 kernel, so you can substitute that. | * There is some difference between the DR-DOS 7.03 and 7.02 bootblock that causes it not to boot. But a 7.02 bootblock works just as well with the DR-DOS 7.03 kernel, so you can substitute that. | ||
Line 374: | Line 385: | ||
* Use the /testmem:off option to prevent HIMEM from scribbling over the ramdisk which is the floppy A:. | * Use the /testmem:off option to prevent HIMEM from scribbling over the ramdisk which is the floppy A:. | ||
* How do I make A: my real floppy again after booting is complete? | * How do I make A: my real floppy again after booting is complete? | ||
- | * Use the rmrd.com program supplied with mknbi. | + | * Use the ''rmrd.com'' program supplied with [[mknbi|''mknbi'']]. |
* I want to use the real floppy at the same time I am using the ramdisk image of the boot floppy. | * I want to use the real floppy at the same time I am using the ramdisk image of the boot floppy. | ||
- | * The ''--harddisk'' option of ''mknbi-dos'' is intended for this. It causes your boot drive to be C:, so you can use A: for the real floppy. See the man page for more details | + | * The ''--harddisk'' option of ''mknbi-dos'' is intended for this. It causes your boot drive to be C:, so you can use A: for the real floppy. See the [[mknbi|man page]] for more details |
* I want to boot Windows. | * I want to boot Windows. | ||
* I pass on this one, as I do not have (by choice) any Windows systems running on my computers. Perhaps others can contribute to this section. However I gather that it is only possible on Windows95A, as other versions don't have the necessary support for diskless booting. | * I pass on this one, as I do not have (by choice) any Windows systems running on my computers. Perhaps others can contribute to this section. However I gather that it is only possible on Windows95A, as other versions don't have the necessary support for diskless booting. | ||
+ | |||
==== Hardware issues ==== | ==== Hardware issues ==== | ||
* Where can I get an EPROM made? | * Where can I get an EPROM made? | ||
* Depending on where you live, you might find a supplier listed on the Commercial Links page. Another possibility is to seek the help of someone working in a university or industrial lab who has an EPROM programmer. If you are handy with hardware, you could buy a kit or build your own. There are links to kit suppliers in the Commercial Links part of the home page. | * Depending on where you live, you might find a supplier listed on the Commercial Links page. Another possibility is to seek the help of someone working in a university or industrial lab who has an EPROM programmer. If you are handy with hardware, you could buy a kit or build your own. There are links to kit suppliers in the Commercial Links part of the home page. | ||
* Some high end adapters, for example the 3Com and Intel ones, accept an EEPROM in the socket. This can be programmed in-situ using utility programs, some of which or information about are under the contrib directory in the Etherboot distribution. | * Some high end adapters, for example the 3Com and Intel ones, accept an EEPROM in the socket. This can be programmed in-situ using utility programs, some of which or information about are under the contrib directory in the Etherboot distribution. | ||
- | * Finally some recent motherboard have flash BIOSes which contain space where an extension BIOS such as Etherboot can be inserted. The Phoenix Award BIOSes can be modified using a program called cbrom.exe possibly here. Or do a Web search for it. No success has been reported for AMI BIOSes. Dirk von Suchodoletz maintains a list of successes and failures here. | + | * Finally some recent motherboard have flash BIOSes which contain space where an extension BIOS such as Etherboot can be inserted. The Phoenix Award BIOSes can be modified using a program called [[http://www.ping.be/bios|''cbrom.exe'']] possibly here. Or do a Web search for it. No success has been reported for AMI BIOSes. Dirk von Suchodoletz maintains a list of successes and failures [[http://goe.net/anleitungen/award_board.html|here]]. |
+ | |||
+ | (AMH2006:) Information about [[biosmodule|flashing EtherBoot into your BIOS]] is also available on a separate wiki page. | ||
Here is some text contributed by Dirk von Suchodoletz. He hopes to put it on a web site someday: | Here is some text contributed by Dirk von Suchodoletz. He hopes to put it on a web site someday: | ||
<file> | <file> | ||
Line 478: | Line 493: | ||
</file> | </file> | ||
* How do I enable the ROM socket on my network adapter? There are no jumpers on the card. | * How do I enable the ROM socket on my network adapter? There are no jumpers on the card. | ||
- | * These jumperless cards need a card-specific utility program to enable the ROM. Normally the manufacturer supplies it on a diskette or CDROM. You lost the diskette? If you know the manufacturer, you might be able to get the program from their website. You have a mystery card? Well the first thing to do is to identify the card. If it is an ISA card and made in Taiwan or China it's almost certainly a NE2000 clone. For some information, try here. If it's a PCI card, then either the BIOS or the Linux PCI Utilities should be able to tell you the manufacturer and device IDs, which you can then look up to convert to names. | + | * These jumperless cards need a card-specific utility program to enable the ROM. Normally the manufacturer supplies it on a diskette or CDROM. You lost the diskette? If you know the manufacturer, you might be able to get the program from their website. You have a mystery card? Well the first thing to do is to identify the card. If it is an ISA card and made in Taiwan or China it's almost certainly a NE2000 clone. For some information, try [[http://www.geocities.com/ken_yap_aus/|here]]. If it's a PCI card, then either the BIOS or the [[http://atrey.karlin.mff.cuni.cz/~mj/pciutils.shtml|Linux PCI Utilities]] should be able to tell you the manufacturer and device IDs, which you can then look up to convert to names. |
* I would like to boot my laptop diskless from a floppy containing Etherboot. | * I would like to boot my laptop diskless from a floppy containing Etherboot. | ||
* The problem is that laptops these days use PCMCIA network adapter cards. These in turn connect to the PCMCIA controller when docked. To be able to communicate with the PCMCIA card, Etherboot would first have to talk to the PCMCIA controller. Until somebody writes the code to do this... Booting from disk is different because the kernel will load the PCMCIA controller code from disk first. You could always put a Linux kernel on the boot floppy. | * The problem is that laptops these days use PCMCIA network adapter cards. These in turn connect to the PCMCIA controller when docked. To be able to communicate with the PCMCIA card, Etherboot would first have to talk to the PCMCIA controller. Until somebody writes the code to do this... Booting from disk is different because the kernel will load the PCMCIA controller code from disk first. You could always put a Linux kernel on the boot floppy. | ||
+ | |||
==== Drivers ==== | ==== Drivers ==== | ||
* There is no Etherboot driver for my network adapter. Can you write me one? | * There is no Etherboot driver for my network adapter. Can you write me one? | ||
- | * If I were independently wealthy and had nothing else to do in life, sure! But unfortunately I have a day job and Etherboot is a hobby. A couple of the drivers were written for pay and the others were written by volunteers. Perhaps you might like to volunteer? If you have a good grasp of C, and understand basic hardware concepts, it is quite doable, and not nearly as difficult as writing a Linux device driver. See the developer manual. You will have the reward of understanding hardware intimately and seeing your work benefit users worldwide. | + | * If I were independently wealthy and had nothing else to do in life, sure! But unfortunately I have a day job and Etherboot is a hobby. A couple of the drivers were written for pay and the others were written by volunteers. Perhaps you might like to volunteer? If you have a good grasp of C, and understand basic hardware concepts, it is quite doable, and not nearly as difficult as writing a Linux device driver. See the [[dev:devmanual|developer manual]]. You will have the reward of understanding hardware intimately and seeing your work benefit users worldwide. |
- | * If you are a commercial entity, you might consider assigning staff or hiring a volunteer to write the driver. You get the benefit of the rest of the Etherboot code infrastructure and users worldwide get to appreciate your contribution. Bear in mind license conditions detailed in the Section called License, of course. NIC manufacturers note, this may be one way to attract users to your hardware products. NIC users note, petition your NIC manufacturer to support Etherboot. | + | * If you are a commercial entity, you might consider assigning staff or hiring a volunteer to write the driver. You get the benefit of the rest of the Etherboot code infrastructure and users worldwide get to appreciate your contribution. Bear in mind license conditions detailed in the [[#license|License section]], of course. NIC manufacturers note, this may be one way to attract users to your hardware products. NIC users note, petition your NIC manufacturer to support Etherboot. |
* I see that my network adapter is supported in Linux but not in Etherboot. Can I use the Linux driver in Etherboot? Or maybe you can adapt the Linux source for me. I can send you the Linux driver source if you just say the word. | * I see that my network adapter is supported in Linux but not in Etherboot. Can I use the Linux driver in Etherboot? Or maybe you can adapt the Linux source for me. I can send you the Linux driver source if you just say the word. | ||
* No, the structure of Linux and Etherboot drivers are rather different. There are several reasons: Linux drivers are more complicated and written to give good performance, whereas Etherboot drivers are written to be simple. Linux drivers are interrupt driven, whereas Etherboot drivers are polling. Linux drivers have an elaborate support structure, whereas Etherboot drivers are fairly self-standing. | * No, the structure of Linux and Etherboot drivers are rather different. There are several reasons: Linux drivers are more complicated and written to give good performance, whereas Etherboot drivers are written to be simple. Linux drivers are interrupt driven, whereas Etherboot drivers are polling. Linux drivers have an elaborate support structure, whereas Etherboot drivers are fairly self-standing. | ||
* But... you can use Linux drivers as a source of reverse-engineering information. Several of the drivers in Etherboot were adapted from Linux drivers. But don't send me the driver source; see previous FAQ about volunteering. And I have the latest Linux source anyway, doesn't everyone? | * But... you can use Linux drivers as a source of reverse-engineering information. Several of the drivers in Etherboot were adapted from Linux drivers. But don't send me the driver source; see previous FAQ about volunteering. And I have the latest Linux source anyway, doesn't everyone? | ||
+ | |||
==== Miscellaneous ==== | ==== Miscellaneous ==== | ||
* I don't understand something, or I have a question not covered by this list. | * I don't understand something, or I have a question not covered by this list. | ||
- | * Please see the Section called Getting help earlier in this document. | + | * Please see the Section called [[#getting_help|Getting help]] earlier in this document. |