Remote, network installation of SGI IRIX 6.5
from a GNU/Linux install server

Last update: Jun 2023 // Previous updates: Jul, Jun, May, Sep 2022, Nov 2021, Mar 2019, Dec, Mar 2018, Jul, Mar 2016, May 2014, Dec 2011, Apr 2009, Feb 2008 // First created: Apr 2007

Davor Ocelic, docelic@spinlocksolutions.com, http://techpubs.spinlocksolutions.com/

http://techpubs.spinlocksolutions.com/irix/remote-irix-6.5-installation-from-linux.html

This is a working, up-to-date guide for performing a network install of the Silicon Graphics IRIX 6.5 operating system onto a SGI MIPS workstation.

A GNU/Linux machine will be configured and used as the remote install server.

So, let's go!

Table of Contents

  1. Table of Contents
  2. Introduction
  3. SGI MIPS Workstations
  4. SGI IRIX 6.5 Software
  5. Overall install procedure
  6. GNU/Linux installation server, the configuration
  7. SGI client machine
  8. Post-install steps

Introduction

To perform a network installation of SGI IRIX 6.5 on a SGI MIPS machine, you will need the following:
  1. SGI MIPS workstation (client machine, hardware)
  2. SGI IRIX release (software)
  3. GNU/Linux machine (helper system) that will be used as the network install server

It is also possible to run SGI IRIX without the SGI hardware, under MAME emulator, although this route is not explored in this guide. See e.g. https://sgi.neocities.org/installguide.html for that topic.

SGI MIPS workstation

For obtaining SGI MIPS workstations, check out the following resources:

For basic desktop play, all workstations, including old Indys, Indigos, and O2 are fine.
400MHz Octane and newer machines are even usable for normal computer use, except that there is no "modern" web browser on them.
The latest/last workstation from SGI was SGI Tezro, sold between 2003 and 2006, with CPU configurations ranging from 1x700MHz to 4x1GHz.

You can see various modern SGI/MIPS performance videos on Irinikus' video channel and various SGI videos/stories on dodoid's channel.

SGI IRIX software

SGI IRIX releases use a 3-part numbering scheme. For example, the latest IRIX 6.5 release had 30 versions, named from 6.5.1 to 6.5.30.
An IRIX 6.5.x release consists of:

IRIX release 6.5.30 is the last/newest version and is recommended for SGI O2, Octane, and newer workstations (IP27, IP30, IP32, IP35).
IRIX release 6.5.22 is the last version working on older workstations (Indy, Indigo2 and others earlier than IP27).
It is recommended to use the highest IRIX release supported by your machine to get all the important software patches etc.

You can find the IPxx value of your SGI workstation here (list copied from "Diskless Workstation Administration Guide"):

Table    2-1    Workstation Hardware Components
Model Name            CPU      Board   Graphics  G.Subgroup  Video
Indigo                R4000    IP20    LIGHT     LG1MC       None
Indigo Elan           R4000    IP20    EXPRESS   EXPRESS     None
Indigo2 XZ            R4000    IP22    EXPRESS   EXPRESS     None
Indigo2 Extreme       R4000    IP22    NEWPRESS  NEWPRESS    None
Indigo2 XL            R4000    IP22    NEWPORT   NG1         None
Indigo2 IMPACT        R4000    IP22    MGRAS     MGRAS       None
Indy                  R4000    IP22    NEWPORT   NG1         VINO
Indy R5000            R5000    IP22    NEPORT    NEWTON      VINO
Power Indigo2         R10000   IP28    EXPRESS   I2_64       None
Power Indigo2 IMPACT  R10000   IP28    MGRAS     I2_64       None
Octane                R10000   IP30    MGRAS     RACER       None
O2                    R5000    IP32    CRIME     CRM         VICE
O2                    R10000   IP32    CRIME     CRM         VICE
Fuel                  R10000   IP35    ODYSSEY   NULL        NULL
Tezro                 R10000   IP35    ODYSSEY   NULL        NULL
Onyx350               R10000   IP35    KONA      NULL        NULL
Origin300             R10000   IP35    SERVER    SERVER      NULL
Origin350             R10000   IP35    SERVER    SERVER      NULL
Origin3000            R10000   IP35    SERVER    SERVER      NULL
Onyx4                 R10000   IP35    VOYAGER   VOYAGER_1_0 NULL
The value you find is the value you need (e.g. "IP30"), except for "IP53" which means "IP35".

There is a difference between full IRIX releases and update releases. Updates do not contain the Foundation CDs.
Foundation CDs are the same for all IRIX 6.5.x releases (independent of minor release) and are required to perform an install.

If you do not have the installation files, you can download IRIX 6.5.30 from e.g. jrra.zone, archive.org, or https://www.pixelbart.net/SGI/IRIX/index.html.
Download the following files to your Linux install server:

From jrra.zone

Or from Archive.org

Note on development CDs: if you have your own Development Foundation and Development Libraries CDs, make sure they are version 1.3 as only that version will match the 7.4.x compiler series which you may want to install later. The links above do contain version 1.3.

If interested, there are also other IRIX releases and software available in Archive.org's or jrra.zone's IRIX collections.

In addition, SGI IRIX files up to and including 6.5.22 can also be found in WinWorld's online museum at https://winworldpc.com/search?q=irix.

GNU/Linux install server

This guide assumes that you will be performing a remote install of IRIX from an install server powered by GNU/Linux.
Remote installs are simpler and faster than using IRIX CDs, and also the only option if your SGI machine does not have a CD/DVD-ROM.

Your choice of GNU/Linux distribution is not particularly important, although this guide shows examples for Debian-based distributions like Debian GNU, Ubuntu, and Devuan GNU+Linux.
If using a different distribution, make sure to use the exact software packages suggested because other (seemingly equivalent) packages have various subtle differences in behavior and SGI clients might not work with them.

(NOTE: if you do not want to configure the GNU/Linux machine yourself, you can check out Booterizer which provides ready-made Raspberry Pi image or VirtualBox image for the GNU/Linux install server. You could use Booterizer and then skip to the next section, but some of the install steps would of course be different and this guide does not currently list/document them.)

OK, let's start with the GNU/Linux install server configuration:

Install mksh

Mksh shell is required for user account to which IRIX 'inst' clients will be connecting to:

apt-get install mksh

Create user account

User account to which IRIX 'inst' clients will be connecting to is required. It's best to make this a regular (non-root) account. I suggest a user named irix:

adduser --home /home/irix --shell /bin/mksh --system --group --disabled-password --gecos 'SGI IRIX' irix
(The choice to make the user be a "system" user is optional, it does not affect the installation.)

Allow access to account

IRIX 'inst' clients require to be able to log in to the chosen user account via rsh and without a password. To enable passwordless login, we need to add an entry to the user's .rhosts file.

echo '+ root' > /home/irix/.rhosts
The line above will allow all remote root users to connect to this account without a password.
Instead of using a "+" to indicate all machines, you could enter the SGI client's IP specifically, such as 10.0.0.2.
However, the assumption here is that in the case of multiple SGI client machines you probably do not want to maintain their list of IP addresses in this file, so a match-all "+" is shown here.

Define the network configuration

In our example, the network will look like this:

Hostname IP Address Purpose / Function
srv1 10.0.0.1 GNU/Linux install server
boyd 10.0.0.2 SGI IRIX workstation (being installed)

These machines can be connected via ethernet either directly or via a switch, the choice doesn't matter.

For installing older machines like Indy or Indigo, you might need to run the following on the Linux server to solve any network problems that a MIPS PROM might have when talking to it:

echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc
echo "2048 32767" > /proc/sys/net/ipv4/ip_local_port_range
Note that the above settings are not retained over a server reboot, so if you want to make them permanent, do so by adding them to the system startup files such as /etc/sysctl.conf, /etc/sysctl.d/local.conf, /etc/bootmisc.sh, /etc/rc.local or similar file.

Install bootp, tftp, and rsh

IRIX' remote install procedure requires a working bootp, tftp, and rsh server on the GNU/Linux machine. The packages exist in Debian so you won't need to download them manually, but they are listed here for completeness or help if you are not using Debian:

We need to install the packages and perform simple configuration steps:
apt-get install openbsd-inetd bootp tftpd rsh-redone-server rsh-redone-client

# Then edit /etc/inetd.conf and:
# 1. Enable 'shell' if not already enabled
# 2. Remove '#' at the beginning of 'bootps' line and add "-d 4" to the end
# 3. Enable 'tftp' if not already enabled and add option -s to it
# The final contents should look like this:
shell           stream  tcp     nowait  root    /usr/sbin/tcpd     /usr/sbin/in.rshd
bootps          dgram   udp     wait    root    /usr/sbin/bootpd   bootpd -i -t 120 -d 4
tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd     /usr/sbin/in.tftpd -s /srv/tftp

# Then edit /etc/bootptab to add an entry for the SGI client machine:
# Only two fields are needed:
# 1) Intended client machine hostname (must be hostname, not IP). It does not matter if the hostname resolves or not.
# 2) IP address the client will connect from (and later have)
# The final contents should look like this:
boyd:ip=10.0.0.2

# Then check for existence of file /etc/pam.d/rsh. If this file is present and it contains
# a comment like this:
#   # Due to limitations in the rsh protocol, modules depending on the conversation
#   # function to work cannot be used.  This includes authentication modules such
#   # as pam_unix.so.
# Then you should simply comment/disable all lines in it.

# Finally, reload all services:
pkill bootpd
pkill in.tftpd
pkill in.rshd
invoke-rc.d openbsd-inetd reload

Create directory structure

IRIX software can be found in the form of physical installation media (CDs), CD images (in EFS format, not ISO), or tarballs (.tar.gz files).
The format varies, but the files they contain should be identical.

Regardless of the type of archive you have, I suggest using directory /home/irix/i/ for common IRIX 6.5 files and then using subdirectories 30/ and 22/ for IRIX 6.5.30- and 6.5.22-specific files. The following commands will set up that structure:

mkdir -p /home/irix/i/{30,22}
chown -R root:root /home/irix

mkdir -p /srv/tftp
ln -sf /home/irix/i /srv/tftp/i
Please note that the directory structure is free-form; you can use any less or more developed hierarchy that will suit your needs. For example, if you also want to use this for IRIX 5.3 and IRIX 6.2 installations, then inside /home/irix/i/ you would probably want to insert another level of directories for 5.3, 6.2, and 6.5.

Unpack the SGI IRIX archives

By now you should have the IRIX install files (if not, see section #2 above).
The following subsections explain how to unpack them:

SGI IRIX tarballs

This section explains where to put and how to unpack .tar.gz files. If you instead have the IRIX 6.5 installation CDs or CD images, you can skip to the next sections "SGI IRIX CDs" or "SGI IRIX CD images".

cd /home/irix/i

# Place the following IRIX 6.5 tarballs in this top-level directory:
# Foundation 1
# Foundation 2
# Development Foundation
# Development Libraries
# ONC3NFS

# Then, for IRIX 6.5.30:
cd /home/irix/i/30

# And place the following IRIX 6.5.30 tarballs in that subdirectory:
# Overlays 1 of 3
# Overlays 2 of 3
# Overlays 3 of 3
# Applications
# Complementary Applications

# And/or for IRIX 6.5.22:
cd /home/irix/i/22

# And place the following IRIX 6.5.22 tarballs in that directory:
# Overlays 1 of 3
# Overlays 2 of 3
# Overlays 3 of 3
# Applications

Once you have the tarballs placed in appropriate directories, simply execute the unpack-all command in every directory where tarballs exist.
In our case those are directories /home/irix/i/, /home/irix/i/30/, and /home/irix/i/22/, so the commands to execute are:

cd /home/irix/i
for p in *.tar.gz; do tar zvxf $p; done

cd /home/irix/i/30
for p in *.tar.gz; do tar zvxf $p; done

cd /home/irix/i/22
for p in *.tar.gz; do tar zvxf $p; done
Depending on where you obtained the tarballs from, the names/structure of the extracted directories will vary.
First, make sure that each tarball unpacks into its own subdirectory, and not into the current dir. This is because each archive contains some files of the same name but different content, and so they would overwrite each other.
Then, I suggest that you either rename the directories (or make symlinks to them) using the following short, but recognizable names:

apps, capps, devl, devf, ovl1, ovl2, ovl3, f1, f2, nfs, ...

This is because you will have to type in each of these directory names from the IRIX 'inst' client, so the shorter the better.

SGI IRIX CDs

If you have IRIX software on CDs, the procedure requires to first make raw images of the physical CD media on the disk.
This is because SGI CD-Roms have an EFS filesystem on them and a 512-byte block size.
GNU/Linux of course supports EFS, but typical PC CD-Rom drives do not support the 512-byte block size so they can't mount them directly.

The solution is to dd the physical CD images to disk. That will create EFS image files, which can later be mounted locally from the hard disk using mount -o loop -t efs, circumventing the block size issue.

Here's the procedure that should be done for each physical CD you have (we just create the CD images on disk):

cd /home/irix/

# Make a raw copy (image) of every CD (don't worry about any read errors reported at the end):
dd if=/dev/cdrom of=IMAGE_NAME.img
NOTE about IMAGE_NAME: Image name corresponds to the short names explained in the previous section (apps, capps, ...).

After dd-ing, continue with the next section SGI IRIX CD images.

SGI IRIX CD images

If/when you have the CD images on the local disk, you should mount each of them to access their files and copy them over to local directories.
It would also be possible to just keep the images mounted to appropriate directories, avoiding the need to copy anything.
However, this would require the mounts to be preserved over reboots; for simplicity we just copy the files out of the original CD images and at that point the images are no longer relevant for the installation.

Run the following for each image you have:

cd /home/irix/i/... # (Whereever each image is)

# Mount the image from disk:
# NOTE: If wondering about IMAGE_NAME, see previous section.
mkdir -p tmp
mount -o loop -t efs IMAGE_NAME.img tmp

# Copy files found in the image to the filesystem:
cp -a tmp IMAGE_NAME

# Done with this CD, clean up:
umount tmp
#rm IMAGE_NAME.img # Optional step, not done by default
NOTE about cp: The target directory must not exist before running the cp -a command! If it already exists, you will end up with files copied to IMAGE_NAME/tmp/ rather than to IMAGE_NAME/ directly. In that case either first remove it, or use rsync -av tmp/ IMAGE_NAME/ instead of cp. In the case of using rsync, make sure that there is an ending "/" in "tmp/", because otherwise you will end with the same effective problem as with cp.

Final file/directory structure — recap

After following the procedures above and copying/extracting the files, you should end up with /home/irix/i/ filled with contents.
The output of ls -al beginning from that directory should look like this (if you didn't use tarballs ignore the .tar.gz files):

cd /home/irix/i
ls -al . 30 22

/home/irix/i:
drwxr-xr-x 9 root root 49152 May 29 02:55 .
drwxr-xr-x 3 root root 49152 May 29 01:12 ..
drwxr-xr-x 3 root sys   4096 Feb 18  2009 devl
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5-Development-Libraries.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 devf
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5-Development-Foundation-1.3.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 f1
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5-Foundation-1.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 f2
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5-Foundation-2.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 nfs
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5-ONC3NFS.tar.gz

/home/irix/i/30:
drwxr-xr-x 9 root root 49152 May 29 02:55 .
drwxr-xr-x 3 root root 49152 May 29 01:12 ..
drwxr-xr-x 3 root sys   4096 Feb 18  2009 apps
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5.30-Applications.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 capps
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5.30-Complementary-Applications.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 ovl1
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5.30-Overlays-1.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 ovl2
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5.30-Overlays-2.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 ovl3
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5.30-Overlays-3.tar.gz

/home/irix/i/22:
drwxr-xr-x 9 root root 49152 May 29 02:55 .
drwxr-xr-x 3 root root 49152 May 29 01:12 ..
drwxr-xr-x 3 root sys   4096 Feb 18  2009 apps
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5-Applications.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 ovl1
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5.22-Overlays-1.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 ovl2
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5.22-Overlays-2.tar.gz
drwxr-xr-x 3 root sys   4096 Feb 18  2009 ovl3
-rwxr-xr-x 3 root sys   4096 Feb 18  2009 SGI-IRIX-6.5.22-Overlays-3.tar.gz

NOTE: The first files that will be booted remotely from the SGI workstation are the files from the "Installation Tools and Overlays 1" CD. That means files from ovl1/stand/, file ovl1/dist/sa, and files from ovl1/dist/miniroot/.
So, while you are here, to further confirm that your directory structure is correct and that you have the required files, your output of listing those files/dirs with ls -al should look like this:

cd /home/irix/i
ls -al 30/ovl1/dist/sa 30/ovl1/dist/miniroot 30/ovl1/stand

-rwxr-xr-x 1 root root 20067840 Feb 21 2011 30/ovl1/dist/sa

30/ovl1/dist/miniroot/:
-rwxr-xr-x 1 root root 11753200 Feb 21 2011 unix.IP27
-rwxr-xr-x 1 root root 10804368 Feb 21 2011 unix.IP30
-rwxr-xr-x 1 root root  8330648 Feb 21 2011 unix.IP32
-rwxr-xr-x 1 root root 12819040 Feb 21 2011 unix.IP35

30/ovl1/stand/:
-rwxr-xr-x 1 root root  516752 Feb 21 2011 fx.64
-rwxr-xr-x 1 root root  274940 Feb 21 2011 fx.ARCS
-rwxr-xr-x 1 root root 1598624 Feb 21 2011 ide.IP30
-rwxr-xr-x 1 root root  750032 Feb 21 2011 ide.IP32
-rwxr-xr-x 1 root root  266768 Feb 21 2011 sash64
-rwxr-xr-x 1 root root  343604 Feb 21 2011 sashARCS
(The fx.64 and fx.ARCS are the disk partitioning programs that you will use before starting the actual installation.
As usual, the extension "64" or no extension indicates a 64-bit variant, while "ARCS" indicates 32-bit.)

Overall install procedure

So, how will the whole remote install procedure look like?

The first contact that the SGI workstation will make with the GNU/Linux install server will be using the bootp protocol ("Internet Bootstrap Protocol"). This service will allow the client to configure its own basic settings like name, server name, IP addresses, and the initial boot file.

Then, the SGI client will use the TFTP protocol to download the basic files needed to start the installation program. This will include files such as i/30/ovl1/stand/sash*, i/30/ovl1/stand/fx*, i/30/ovl1/dist/sa, and i/30/ovl1/dist/miniroot/unix.IPXX.

And finally, once the installation program ('inst') starts, it will no longer use bootp or tftp, but it will use rsh to connect to the install server and transfer files.

Monitoring log files on the GNU/Linux install server

It is absolutely necessary to be monitoring the logs while trying to connect to the Linux server from SGI clients.

So, make sure you have the following running on Linux:

tail -f /var/log/*log -n0
Make absolutely sure that you are watching the logs because we will now test bootp, tftp, and rsh.

Testing bootp and tftp

It is crucial to confirm that the bootp and tftp server we have configured above work correctly and are usable from the SGI client.

Historically, the intricacies of the Netkit "bootpd" daemon and incorrect flavors of tftpd daemon were causing various problems in this step.
However, the configuration given above was thoroughly tested to provide the simplest, fully complete, and widest-working configuration, so you generally shouldn't run into obstacles.

The best way to test the whole thing consists of just two steps:

  1. On the Linux install server, after installing and configuring services as explained above, you should monitor the log files with tail -f /var/log/*log -n0
  2. On the SGI client, try to boot "sash" ("standalone shell") remotely from the GNU/Linux install server. You won't actually need to use "sash", but booting it will be a good test that many aspects of the GNU/Linux install server work as expected.

The complete procedure for booting 'sash' is as follows:

  1. Turn on the SGI machine
  2. Press ESC during "Starting up the system" to bring up menu
  3. Press 5 to go to Command Monitor (PROM shell)
  4. Set the IP address of the client: setenv netaddr 10.0.0.2
  5. Disable tape (for older systems): setenv notape 1
  6. Boot sash (type it exactly as shown here): bootp():i/30/ovl1/stand/sash64

(Of course replace sash64 with sashARCS if you are installing a 32-bit system, and replace "30/" with "22/" if you are working with IRIX 6.5.22.)

In the PROM shell, for easier typing you can invoke previous command lines with key combination Ctrl+p (this is the equivalent of arrow-up in GNU Readline-enabled prompts).

When you run that bootp() line, you should see some logs scrolling by on the Linux server, and on the SGI client you should now be in "sash".

NOTE: before trying to boot sash or after exiting from it, you can type "?" to see the list of available local commands, and you can play around with commands like "hinv" and "printenv".
There is also "ping", but this command will not work and you cannot use it as a test of network connectivity.

In any case, if booting sash works, this is absolutely great. You can look around with command "?" if desired, and then press Ctrl+d to exit sash and get back to the PROM monitor.

The following subsection deals with troubleshooting in case the sash test didn't work. You can skip it and move to the next section if your test was successful!

Troubleshooting bootp and tftp

So, if bootp() of sash didn't work, there could be only 7 causes (and solutions!) to this:

  1. Firewall on the Linux machine is preventing incoming connections.
    Run iptables -L -vn to ensure that the firewall is not getting in the way.
    If you are not seeing "policy ACCEPT", the easiest way to flush everything and allow all connections is to run iptables --flush; iptables -P INPUT ACCEPT; iptables -P OUTPUT ACCEPT.
    If you want to use a firewall but allow the installations to work, make sure the ports 67, 69, and 514 on the Linux machine are open.
     
  2. No bootpd or tftpd service is running on the Linux server at all.
    In our setup, bootpd and tftpd are started via inetd, so actually you want to ensure that inetd is running and listening on UDP ports 67 and 69.
    The easiest way to confirm this is to run netstat -nlp |grep :6. (Netstat is an "old generation" command in Linux. If your system does not have it installed by default, install package net-tools to get it. Alternatively, use ss -ntlp :))
    If inetd is not listed on these ports, re-check all the steps you did above as part of "Bootp configuration" and "TFTP configuration".
     
  3. There is no network connectivity between client and server.
    An indication of this would be that you checked the previous two points and they are OK, but there are still no any logs scrolling on the Linux server when you run bootp() on the SGI client.
    To fix it, check network hardware connectivity and also try connecting the machines with a cable (and even a second/different cable) directly, to rule out problems with the ethernet switch or a particular cable.
    Also, while here, check that both the Linux server and the SGI client have the intended IP addresses.
    This can be checked with ifconfig -a or ip a on Linux, and with printenv netaddr in the SGI PROM.
    To re-set the IPs, this is done again with ifconfig or ip on Linux, and with setenv netaddr ... in the SGI PROM shell.
    (The most common cause why/how the Linux machine can lose its IP address is if you have left a DHCP client running on it. The DHCP client can re-set or delete any IP address that was set. Run ps aux |grep dhcli to make sure that there is no "dhclient" or a similar process running. If there is one, try to stop it via its service/init script or with say, pkill -9 dhcli.)
     
  4. There are unclear network transfer problems.
    This might happen with older machines if you did not run the configuration lines given above under "Network configuration", or if you rebooted the Linux server and these settings got reverted.
    Re-check the "Network configuration" section and repeat the steps there again.
     
  5. Bootpd server receives requests, but ignores them.
    This dreaded condition can be confirmed by seeing bootpd log messages such as:
    May 29 19:02:34 srv1 bootpd[3044]: ignoring request for server 10.0.0.1 from client at Ethernet address 01:00:99:13:fd:f8
    This is caused by a bug in Netkit bootpd server related to determining whether it should handle the incoming bootpd request or not.
    You should not run into this problem if you have executed bootp() on the SGI client the way we have shown above ("bootp():ovl1/stand/sash64"). Our method purposely does not include the bootpd server name in that line, so that bootpd would unconditionally try to handle this request instead of running the decision function.
    (If you absolutely must specify the bootp server name in your bootp() line, then read the next item #6 for caveats.)
     
  6. There are multiple bootpd servers already present on the network, and the wrong one is trying to handle the request.
    This problem is basically the opposite of the previous one. Instead of too few servers available to handle the request, you have too many :).
    Either temporarily remove/disconnect the other bootpd servers, or specify the bootpd server name in the bootp line on the SGI client, such as: bootp()srv1:ovl1/stand/sash64
    HOWEVER, if you specify server name explicitly, three conditions must hold true for the Netkit bootpd service on the Linux server to respond as expected:
    1. The name of the server which you specify in bootp() line must be a hostname and not an IP address
    2. The name of that server must be identical to the output of the command "hostname" on the Linux server
    3. And, on the Linux server, this hostname must be known, but regardless of the actual IP to which it resolves! If you do not have a DNS server running, then the easiest way to achieve this is to add an entry to /etc/hosts locally on the Linux server, using any IP address. In our case of an example server named "srv1", this would be done with command: echo "127.0.0.1 srv1" >> /etc/hosts
      (As mentioned, the IP to which the server hostname resolves is not relevant to bootpd, but you could certainly use the actual network IP of the server instead of 127.0.0.1 to be fully correct.)
       
  7. Bootp works, but TFTP doesn't find files which are requested.
    There are a couple possible causes here, all simple:
    1. One obvious problem here could be that you typed an incorrect boot filename. This could be verified by looking at the logs scrolling by on Linux, and seeing if the filenames appear correct. Checking the logs in this way will be easy if you are monitoring them with "tail -f /var/log/*log -n0" as we advised above. In case the useful content has scrolled out of the screen, use Shift+PgUp/PgDown to move around, and/or Ctrl+s and Ctrl+q to pause and resume output respectively.
    2. Another problem could be that the SGI system you are trying to install is legitimately not finding the necessary files. This could happen if, for example, you unpacked the IRIX 6.5.30 distribution, but are trying to install an older machine such as Indy or Indigo, or the files needed for the machine architecture (32bit / 64bit) are not found.
    3. And finally, the files could end up not being found if the TFTP configuration is incorrect, or your bootp request path is incorrect. To verify/fix this, re-check the "Packages and configuration" section above and pay attention specifically to the tftpd option "-s" and the tftp root directory which needs to remain at "/srv/tftp", but in it should be a symlink "i" pointing to "/home/irix/i". Then, make sure that the files are indeed there in /home/irix/i (for that, re-check the section "Directory structure"), and make sure that you are not including "/home/irix/i" in your bootp lines. Specifically, if everything was configured as advised, then a bootp request for file "ovl1/stand/sash64" will translate to file "/home/irix/i/ovl1/stand/sash64" on the Linux server, and you should double check that this file really exists.
       
  8. Are you seeing any other problem not listed here? Let me know.

Testing rsh

Testing RSH is easy. Since our user's .rhosts file includes a "+ root", this means passwordless logins to this account are available from user root on all machines, including localhost.

Ideally we would test the connection from the SGI client, but since we have already confirmed the network connectivity with the bootp/tftp test, we can just try connecting to the rsh server locally (it should allow passwordless login to the account).

As root on the GNU/Linux install server, run the following:

rsh irix@0
If it works (i.e. gives you a MOTD and a new shell), it means it has logged you in into the local machine. Press Ctrl+d of course to log out and get back to your original prompt.

If it doesn't work, re-check the user setup and RSH setup, and review the system logs that show up when you try to connect.

QUICK NOTE: If your test at this step works but IRIX 'inst' client fails to work later on, check if your server log mentions "denied access" and "PAM requires conversation". If yes, re-check the "Packages and configuration" section, and specifically its notes for the file /etc/pam.d/rsh.

SGI client machine

Preparation

Before you start the installation, check if your SGI machine has multiple monitor outputs. If so, make sure that the monitor cable is plugged into the first monitor.
E.g. in the case of a DCD (Dual Channel Display) option for Tezro, this would unintuitively be the bottom-right DVI port when looking from the back.

Things will work just fine even if you connect the monitor to the other port, but when the installation completes and the system reboots into a graphical login, you will be looking into a secondary/empty screen instead of the login prompt.

Partitioning

Before installation always run fx first to set up or verify partitions, and particularly if you are installing over an old IRIX version that used the EFS filesystem (i.e. IRIX 5.x).
If you do not change the old EFS partition type, IRIX 6.5 will honor the EFS setting and require the EFS packages. EFS packages do not exist in the default IRIX 6.5 distribution, and will prevent you from starting the installation.

So to run the partitioner:

(Remember, .64 for 64-bit, .ARCS for 32-bit)

If invoking the partitioner does not work, refer back to the section "Testing bootp and tftp". We have tested the install server there by trying to run "sash" — this here isn't any different, except that we are booting "fx.64 -x" instead of "sash64".

Partitioning instructions

When fx starts up, it will ask three questions to determine which drive you want to partition:

fx: "device-name" = (dksc)
fx: ctlr# = (0)
fx: drive# = (1)
...opening dksc(0,1,0)
Just press ENTER three times.
If you've got multiple disks, the second disk will be drive# 2 and so on.

fx supports hierarchical menus. To display the current partitioning layout on the disk, you can type "label", "show" and then "partitions".
A shorthand notation for this is "l", "sh", "part". Or even for all at once, you can type "l/sh/part".

If you type "l", "sh", etc. and get deeper into the menu hierarchy, you can go back a level by typing ".." or multiple levels by typing "../.." etc.
If you want to partition another disk, you can type "/.." and 'fx' will exit all menus and present you with the new disk chooser prompt.
If you want to interrupt any current command or prompt, press Ctrl+c.

To partition your main/root disk, choose "[r]epartition/" and "[ro]otdrive", accept "xfs", and type "yes". An alternative way for the same thing is to run "[l]abel", "[c]reate", "[a]ll".

To partition an additional disk (if you have one), go back to the disk chooser prompt, choose the other disk, and then partition it using "[r]epartition/" and "[o]ptiondrive", accept "xfs", and type "yes".

If you are done partitioning, type "/exi" to exit fx and return to the PROM monitor.

Starting the installation

After you are done with fx, there are two ways to start the installation:

  1. From the PROM shell
    1. Find out the "IPXX" value appropriate for your SGI machine:
      You can do this by finding your SGI workstation model detailed on the Internet and searching for mentions of "IP".
      The value you see is the value you want (e.g. "IP30"), except for "IP53" which means "IP35".
    2. Once you have the IPXX value, verify that your IRIX installation files on the Linux server contain file "/home/irix/i/30/ovl1/dist/miniroot/unix.IPXX".
    3. Finally, in the SGI PROM press "5" to go to the shell, and then start the installation with:
      bootp():i/30/ovl1/dist/miniroot/unix.IPXX
       
  2. From the PROM menu (see NOTE below if you use this option)
    1. Exit the Command Monitor to go back to PROM menu
    2. In the SGI PROM menu press "2" for "Install system software"
    3. Press "1" for "From remote directory"
    4. Type "srv1" as server name (your actual hostname of the Linux install server)
    5. Type "i/30/ovl1/dist" as path

NOTE FOR OPTION 2: For this method to work, your Linux server must satisfy all 3 requirements listed above in the section "Testing bootp and tftp" under its troubleshooting item #6.

After starting the installation on the SGI, it will create a "miniroot" on the local disk by transferring the installation data from the remote server to it.

If working with a new disk, the installer will ask to format partitions and the block size to use. Use 4096kB block size for disks larger than 4GB, or 512B otherwise.

The installer might then ask you:

What is the hostname (system name) of your machine?
What is the network address of ____?
Answer with the same hostname and IP address you have dedicated to this machine in /etc/bootptab on the Linux install server.

Installation, first steps and opening distributions

At this point you should be in the 'inst' prompt.

If you are working with a non-clean disk, you must erase the disk by choosing "13", "11", "y", and "yes" in inst menus.
Also, inside Admin menu ("13"), you can choose options "12" and "13" to re-set the machine hostname and IP, just to be sure that they have the values you want. (Set these fields to the values you have intended for this system in /etc/bootptab on the Linux server.)
Then type ".." to exit Admin mode and go back to regular inst.

Now you need to load the available packages for installation by "opening" the first software distribution.
This is done using command "from" for the first image ("Installation Tools and Overlays 1"), and command "open" for all subsequent/additional images.
Inst might also keep you in a repeating prompt that allows you to easily open previously-used distributions and reduce the amount of typing.

Note that, as we mentioned earlier, the access to the Linux server at this stage is no longer being done via bootp/tftpd. Inst uses rsh.
Therefore, when you specify distributions to open, you need to include both the username and the Linux server's IP.
Also, please note that since TFTP is no longer involved and we are working with RSH, the file paths are no longer automatically prefixed with "/home/irix"; theoretically meaning we should be including /home/irix/ ourselves now. However, since we have set the irix user's home directory to "/home/irix", we can continue using "i/30/ovl1" and other relative paths without prefixing them with /home/irix/.

Here's how the session would look like from "from" onwards:

from irix@10.0.0.1:i/30/ovl1/dist

# The installation will then ask whether you want to install the "Maintenance" (compatibility) or "Feature" (features) stream.
# Choose "Feature" unless you know why you want "Maintenance".

Then open the following additional distributions in this order:

irix@10.0.0.1:i/30/ovl2/dist
irix@10.0.0.1:i/30/ovl3/dist
irix@10.0.0.1:i/f1/dist
irix@10.0.0.1:i/f2/dist
irix@10.0.0.1:i/devf/dist
irix@10.0.0.1:i/devl/dist
irix@10.0.0.1:i/nfs/dist
irix@10.0.0.1:i/30/apps/dist
irix@10.0.0.1:i/30/capps/dist
(Some distributions come with additional notes which show on the screen page by page. If you wish to exit the pager and continue with loading, press "q".)

After you have loaded all the distributions, run the following:

keep *
install standard
install prereqs
rem java_dev.*
(It is OK if "install prereqs" reports that no prereqs were found.)

At this point, you should run conflicts to check if there are any important unresolved dependencies.
If everything went as planned, there should be only one, for java2_plugin.sw.mozilla_freeware, which you remove from installation by typing conflicts 1a

The response from the above should finally be "no conflicts", and then you can type go to start the software installations and quit when they are done.

After the procedure is done and you reboot, you should find yourself in your shiny new IRIX 6.5 installation!

Post-install topics

Inst and swmgr

Native IRIX packages come in tardist format. Command line IRIX software installation tool is called inst and its graphical equivalent is called swmgr. In addition to being able to read local directories, inst is also able to read remote locations via http. However, the http support in inst is buggy even in 6.5.30 and will randomly return errors mid-installation, so installing from local repositories is advised.

IRIX patches

After booting into your system and looking around, you should download and install IRIX patches. The download links mentioned at the beginning of the guide include them.

Please note that installing patches is not a foolproof procedure - installing incorrect patches might succeed, but then break the system. Be prepared for the possibility that you will have to reinstall the machine if you install a wrong patch (and be sure to skip it the next time :).

Patch purpose/details can be found in the patch files as well as on https://wiki.preterhuman.net/Category:IRIX_Patches.

Setup / config tasks

There is a number of useful or necessary things that should be done on the IRIX system after installation. All those steps are listed somewhere within SGI users group Wiki pages (which were hosted first at wiki.nekochan.net, now at https://wiki.preterhuman.net/).

Finding and executing those instructions manually is not optimal. So I have converted all of them into runnable, idempotent shell scripts.
The scripts can currently be found in http://techpubs.spinlocksolutions.com/irix/scripts2/. They have the extension ".txt" so that they could be viewed as text.

Browse them and execute the ones you want and which are possible on your hw/sw combination.
NOTE: The text exists in all the scripts, although not all of it has been enabled, tested, or exactly reviewed yet. So if you find some scripts with just comments, this is why — they're waiting to be reviewed and finished. But usually there is enough context in them to understand whether you want them or not, and to run things yourself.

Note on Nekochan and Nekoware

Nekochan was a decades-old SGI user community that had its services centered around the website nekochan.net. It was without notice shut down by its founder Peter Plank (Nekonoko) some time in 2018, bringing down with it tens of thousands of forum posts, wiki articles, media, user setup/computer room photos, user-contributed software packages (Nekoware), and other content that was not mirrored or archived elsewhere (at least not in full).

Nekoware was a collection of open source software compiled for IRIX, maintained by the Nekochan community members, that put emphasis on using SGI-native MIPSPro compiler and producing packages in the IRIX-native tardist format. This was also its weak point because compiling with MIPSPro was getting increasingly difficult, tardists were big and slow to unpack, Nekoware mirrors (desperately needed due to slow speed of the primary mirror) were unreliable, and the porting effort was in general falling behind and ultimately stopped.

Mirror of the Nekoware archive is available at http://www.pixelbart.net/SGI/Nekoware/, and a (partial?) snapshot of the archive can also be obtained from https://archive.org/details/irix-packages-collection.

The scripts that managed Nekoware repository metadata were also buggy and they produced descript.ion files which contained bugs, so some packages were not installable. Since the maintainers were not interested in fixing the issues, I have created three incremental helper tools:

Silicon Graphics Users Group (SGUG)

The SGI users group (SGUG) has been rebuilt from scratch at SGI.SH. There are SGUG forums, IRC, and discord chats and more.

The software porting effort has been reestablished as well, based on more efficient principles. The GCC compiler has been reenabled (after IRIX support was removed in 2011), packaging switched to using the RPM package manager, and the sgug-rse software environment has been provided. See how to get it running at https://github.com/sgidevnet/sgug-rse or read its initial announcement at https://forums.sgi.sh/index.php?threads/the-sgug-rpm-software-environment.146/.

Proprietary software

In addition to open source SGUG-RSE, you will probably want to install additional software from proprietary vendors. There are countless professional or exciting 3rd party software packages available, from the whole IRIX-native video editing pipeline, to Blender, Adobe Premiere and Photoshop, SoftWindows (Windows95 emulator), and/or Wolfram Mathematica 4.2/5.2. Some of the software can be found in the mentioned Archive.org's IRIX collection and/or listed at SGI.SH SGI Software Resources page.

Other resources

You can access archived contents of the old SGI techpubs.sgi.com at https://techpubs.jurassic.nl/.
A Wiki with SGI stuff (including Nekochan's Wiki pages) is available at Higher Intellect Wiki - SGI.
A larger archive of what was salvaged from the now-defunct Nekochan is available at https://gainos.org/~elf/sgi/nekonomicon/forum/index.html.
A treasure trove of SGI CD images can be found at https://jrra.zone/sgi/.
And still more SGI IRIX software can be found at The UNIX Files FTP.

You can check out resources at Modern_IRIX. This page contains links to ALL relevant resources that exist on the Wiki to help with running SGI IRIX in the context of modern times. There are occasional links to other/broken resources such as Nekochan forums (but retrievable in Nekonomicon archive) or Nekochan FTP. If you find exact links to archived/working copies, please let me know to update the links.

Diskless (nfs root) machines

It would also be possible to install IRIX to a NFS root. In that case the SGI machine would be a diskless workstation. In addition to less heat and noise, it could circumvent the U160 (160MB/s) throughput limit of SCSI channels in all SGIs. So the SGI workstation would not require a disk at all, or SATA disks could be installed (they couldn't be booted from, but could be connected as secondary disks via SATA cards).

This setup would require being familiar with the SGI Diskless Workstation Administration Guide and would currently not be possible from GNU/Linux only since it requires the shared and client NFS trees to first be created using native SGI/IRIX tools. This guide does not currently explore this option, although covering this has been planned, and notes from people who have done it can be found at https://forums.sgi.sh/index.php?threads/reanimator-1-0-released.778/, https://github.com/Docter60/sgi-irix-net-boot-guide, and https://forums.sgi.sh/index.php?threads/irix-diskless-workstation-an-alternative-way.825/.


I hope this is all and works on the first try. Comments/suggestions/feedback welcome.