1. Introduction
Note: This howto is currently very SPARC-centric and expecting that you will be setting up your netboot server on an existing Gentoo Linux machine. |
This document will describe how to setup a network booting environment for a Sun Microsystems SPARC or UltraSPARC based computer. The document assumes that you have an existing Gentoo Linux computer available to act as the netboot server.
Both the netboot server and netboot client will need to be on the same network subnet, as the ARP protocol is typically not forwarded across different network subnets.
A generic overview of what happens during the netboot process is as follows;
Based on this overview, we will need to install software for a reverse ARP daemon and a tftp daemon.
2. Software Installation And Configuration
Currently, there are two choices for a reverse ARP daemon. They are net-misc/iputils (installed as part of the system profile) and net-misc/rarpd.
Note: Installing net-misc/rarpd will overwrite the rarpd and rarpd manpage from net-misc/iputils |
Setting up common rarpd elements: /etc/ethers
No matter which rarpd you choose to use, you will need to setup the /etc/ethers file. This file indicates which hosts rarpd should respond to when a request is seen, and what address to reply with.
The format of /etc/ethers is MAC address of the NIC the machine will be netbooting from and the hostname. Whitespace delimits the MAC address from the hostname, and each entry should have its own line. The following example is for a host named sparc-netboot.gentoo.org:
Code Listing 2.1: Example /etc/ethers |
08:00:20:77:1f:3e sparc-netboot.gentoo.org |
Note: If a given hexidecimal number in the MAC address starts or is 0, you can chose to omit the first 0 (i.e. 08:00:20:77:1f:3e becomes 8:0:20:77:1f:3e). |
If you desire to add additional hosts to /etc/ethers, you do not need to restart the rarpd services as the file is checked each time a request is received.
Resolving hostnames: /etc/hosts
Since each entry in /etc/ethers has a hostname, the netboot server needs to be able to resolve the hostname into its IP address. This can be done two ways, /etc/hosts or the nameserver the netboot server uses.
An /etc/hosts entry for resolving a hostname will look very similar to the one that probably exists from when you installed Gentoo on the netboot server. For our example host, sparc-netboot.gentoo.org, we'll assume that it has an IP address of 10.0.1.15. So the /etc/hosts entry would look like;
Code Listing 2.2: /etc/hosts |
10.0.1.15 sparc-netboot.gentoo.org |
Note: Depending on the environment, you may need to consult your network administrator to get an appropriate IP address or addresses to netboot the host with. |
If you use a nameserver, then the DNS server administrator will need to add a record for the hostname, in our example sparc-netboot.gentoo.org, to point to the appropriate IP address. Please consult your DNS server administrator and/or the documentation for the DNS server's DNS software for how to add the entry.
Note: If both /etc/hosts and the nameserver have an entry for the host to be netbooted, /etc/hosts will be used first (granted the order of /etc/nsswitch.conf has not been changed from the default). |
Setting up net-misc/iputils rarpd
First, we will need to determine the options to use for rarpd. While there are more options than we'll cover here, these options should get you started As there is currently no init.d script for net-misc/iputils version of rarpd, an entry will need to be added to /etc/conf.d/local.start if you want to enable rarpd servies at boot time. A sample entry is as follows;
Code Listing 2.3: /etc/conf.d/local.start |
/usr/sbin/rarpd -v -e eth0 |
An explination of the above rarpd options (as taken from the man page):
For more options, consult the section 8 man page on rarpd
Setting up net-misc/rarpd
Firstly, we'll need to install rarpd with the following command:
Code Listing 2.4: Installing rarpd |
# emerge net-misc/rarpd
|
Next, options for rarpd will need to be set in /etc/conf.d/rarpd. For an equivalent configuration as the one used above for net-misc/iputils rarpd, adjust /etc/conf.d/rarpd to look like the following
Code Listing 2.5: /etc/conf.d/rarpd |
RARPD_OPTS="-v -i eth0" |
An explination of the above rarpd options (as taken from the man page);
For more options, consult the section 8 man page on rarpd and rarpd --help.
Here there are three options for a tftp daemon, net-misc/atftp, net-misc/netkit-tftp and net-misc/tftp-hpa. You only need to install one of the tftp daemons for proper operation.
Setting up common tftpd elements
Each tftp daemon will need a directory from which to serve files to tftp clients. The directory we will use for this howto will be /tftpboot. This will appear as the root (/) directory to the clients when requests are received. Additionally, we'll setup the system to run the tftp daemon with the user and group nobody.
If the directory you have chosen does not currently exist, it will need to be created with the mkdir command. The command for the example /tftpboot is;
Code Listing 2.6: Creating /tftpboot |
# /bin/mkdir /tftpboot
|
Then we will need to change the owner of /tftpboot so that it is owned by user nobody and group nobody;
Code Listing 2.7: Changing ownership |
# chown nobody:nobody /tftpboot
|
First, install the net-misc/atftp package as follows;
Code Listing 2.8: Installing atftp |
# emerge net-misc/atftp
|
After the net-misc/atftp package has been installed, it will need to be configured. If tftpd services are desired at boot time, an entry to /etc/conf.d/local.start will need to be added as atftp has no init.d, inetd or xinetd scripts of its own. If you want to use inetd or xinetd for controlling the tftpd service, please see their respective man pages.
Below is an example entry for atftpd in /etc/conf.d/local.start;
Code Listing 2.9: /etc/conf.d/local.start |
/usr/sbin/in.tftpd -v --daemon /tftpboot |
An explination of the above rarpd options (as taken from the man page);
For more options, consult the section 8 man page on atftpd
First, install the net-misc/netkit-tftp package as follows;
Code Listing 2.10: Installing netkit-tftp |
# emerge net-misc/netkit-tftp
|
Secondly, install sys-apps/xinetd if it is not currently present; After the net-misc/netkit-tftp and sys-apps/xinetd packages have been installed, netkit-tftp will need to be configured. netkit-tftp needs to be run from xinetd, however it does not provide example scripts of its own. A sample xinetd file is provided below;
Code Listing 2.11: Sample /etc/xinetd.d/tftp file |
service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody group = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot only_from = 10.0.1.0 disable = no } |
Note: This sample xinetd configuration file for tftp uses the line "disable = no", which enables the service by default. This is opposite of the default way packages in Gentoo provide their respective xinetd configuration files, which have disable set to yes. |
An explination of the above options which can be changed; user user in.tftpd requests are handled as group group in.tftpd requests are handled as server_args root directory for tftp daemon to serve files from only_from tells xinetd what hosts to allow tftp connections from
Additional information on xinetd configuration files can be found in the section 5 manpage on xinetd.conf
If xinetd is running, you can send it the HUP signal to have it re-read its configuration files;
Code Listing 2.12: Sending HUP signal to xinetd |
# /bin/killall -HUP xinetd
|
If xinetd is not running, start it with the init.d command;
Code Listing 2.13: Starting xinetd |
# /etc/init.d/xinetd start
|
For more information, consult the section 8 man page on in.tftpd
First, install the tftp-hpa package using the following command;
Code Listing 2.14: Installing tftp-hpa |
# emerge net-misc/tftp-hpa
|
tftp-hpa comes with an init.d and the accompanying conf.d configuration file. Check to make sure that INIITFTPD_PATH and INITFTP_OPTS in /etc/conf.d/in.tftpd match those below;
Code Listing 2.15: /etc/conf.d/in.tftpd |
INTFTPD_PATH="/tftpboot" INTFTPD_OPTS="-s -v -l ${INTFTPD_PATH}" |
The tftp daemon can then be started via the init.d script;
Code Listing 2.16: Starting in.tftpd |
# /etc/init.d/in.tftpd start
|
For more options, consult the section 8 man page on tftpd.
3. Preparing a tftpboot image for use by a client
Make sure you have an image you want to use for netbooting. For a sparc or sparc64 netboot image, please check your local Gentoo distfiles mirror under experimental/sparc/tftpboot for the appropriate image. We'll assume you are planning to boot a sparc64 host using the gentoo-sparc64-1.4_rc4-20040102.tftpboot image.
Once you have an image, copy the image into /tftpboot;
Code Listing 3.1: Copying the image |
# cp gentoo-sparc64-1.4_rc4-20040102.tftpboot /tftpboot
|
Now, when the netboot client makes a tftp request, it looks for a file that is the hexidecimal number of its current IP address, and on some platforms an .ARCH suffix. The hexidecimal number should use capital characters.
A guide on how to convert decimal to hexidecimal is available at http://www.permadi.com/tutorial/numDecToHex/
And for the lazy/impatient, you can find a decimal to hexidecimal conversion tool at http://dan.drydog.com/hextemp.html
Note: For each octet in the IP address (the 10 in 10.0.1.15 for instance), you will need to convert it to hexidecimal, rather than converting the IP address asa singular number. |
So for our example IP address, 10.0.1.15, let's look at its hexidecimal equivalent;
Code Listing 3.2: Example IP address |
decimal 10 0 1 15 hexidecimal 0A 00 01 0F |
So for the example sparc64 netboot client, it would look for a file named 0A00010F when it tftpboots.
On sparc however, the file would be 0A00010F.SUN4M, 0A00010F.SUN4C or 0A00010F.SUN4D depending on what type of sparc system.
Additionally, if you are really really lazy (like me), you can netboot the host to get the filename the client is looking for from the netboot server logs.
Make sure that both the rarpd and tftpd daemon you've chosen are currently running, then boot the host as described below in "Netbooting the client".
The client will appear to hang after the boot net command is issued. Then on the netboot server, check the system logs for an entry for in.tftpd.
An example entry from a netboot server running sysklogd and tftp-hpa looks like;
Code Listing 3.3: Log entry for netboot server |
Jan 3 22:48:59 stargazer in.tftpd[8368]: RRQ from 10.0.1.15 filename 0A00010F |
The filename is shown above after "filename" in the log entry, which in this case is 0A00010F.
As a way to keep track of what netboot image you are using, and to allow multiple machines to use the same netboot image, you can use a soft link to create the file with the hexidecimal value. To create this using our sample sparc64 host and the gentoo-sparc64-1.4_rc4-20040102.tftpboot, use the following command;
Code Listing 3.4: Linking the image files |
# /bin/ln -s /tftpboot/gentoo-sparc64-1.4_rc4-20040102.tftpboot \
/tftpboot/0A00010F
|
Now everything should be set for netbooting!
4. Netbooting the client
From OpenBoot PROM (OBP) on the SPARC, enter the command;
Code Listing 4.1: Booting OBP |
ok boot net
|
Other methods for certain machines are:
Code Listing 4.2: Booting OBP, alternative |
ok boot net-tpe
|
Note: If your system doesn't present you with an OBP at boot time, you will either need to press the Stop and A key, or send a break signal via serial console before the system boots an OS. If your system cannot find an OS, it should either try to boot via the network interface (which is what we want), or leave you at an OBP prompt. |
This will initiate the networking booting process. A constantly changing string of hexidecimal digits should appear. When the image has finished loading, the kernel will take over and start the OS booting process. In the case of our sparc64 install image, you will be left at a shell prompt from which you can begin the install process.
5. Troubleshooting
Building the prerequisite software
If the netboot server is a Gentoo/LINUX system and experience problems installing the rarpd and tftpd packages, please search http://forums.gentoo.org and http://bugs.gentoo.org to see if this problem has been encountered by anyone else. If it has not, or the solutions found do not work, then please open a new bug at http://bugs.gentoo.org
I've issued the boot net command but it appears to hang.
This is presumably because the file your system is trying to load from the tftpboot server is not available. On a SPARC system, you would probably see the following;
Code Listing 5.1: Booting appears to hang |
Rebooting with command: boot Boot device: net File and args: |
Double check that the file the client needs does exist in /tftpboot. You can confirm the filename it is requesting by looking in the system logs. Also, once this file exists, the client will try to load it. Sometimes, when the file is missing originally, it will freeze downloading the file once it appears. To resolve this, just get back to an OBP prompt, and issue the "boot net" command again. The host should then start downloading the tftpboot image and boot the OS.
I'm trying to netboot, but all I see are "Timeout waiting for ARP/RARP packet" messages.
This could be due to a few different problems;
To change the value of tpe-link-test? from an OBP prompt, issue the following command;
Code Listing 5.2: Changing tpe-link-test value |
ok setenv tpe-link-test? true
tpe-link-test? = true
|
This shows the value of tpe-link-test? is now true. Try netbooting the client again.
The contents of this document are licensed under the Creative Commons - Attribution / Share Alike license.