Reformatted version of the Diskless X server tutorial.

This commit is contained in:
Nik Clayton 1999-08-16 22:00:10 +00:00
parent 28ded3fede
commit 59dba67e39
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=5367
4 changed files with 726 additions and 0 deletions

View file

@ -0,0 +1,14 @@
# $Id: Makefile,v 1.1 1999-08-16 22:00:10 nik Exp $
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?=gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.sgml
DOC_PREFIX?= ../../..
.include "../../../share/mk/docproj.docbook.mk"

View file

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

View file

@ -0,0 +1,14 @@
# $Id: Makefile,v 1.1 1999-08-16 22:00:10 nik Exp $
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?=gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.sgml
DOC_PREFIX?= ../../..
.include "../../../share/mk/docproj.docbook.mk"

View file

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