Debian on old Sgi Indigo


These notes are reporting how I managed to install Linux (Debian) on a Silicon Graphics Indy workstation.I know it's old stuff but it has been a challenging interesting task from the technical point of view.

The CD-ROM drive

First I made an external SCSI CD-ROM drive out of an internal one. I borrowed an external HD box. Removed the Hard drive and used the internal SCSI Plextor PX-40TSI. I just checked what was the jumpers setting and I set it in order to give the device an ID equal to 6. I set on termination jumper, parity jumper, and left off the block jumper.

I started with Debian CD #1 "testing" release lenny_di_beta1.

Unfortunately the system was not able to boot automatically from the CD. So I held the Esc button at startup until I've got the setup menu. I selected to enter in the console monitor. Running the inventory command

hinv -v -t -p

Among other things, it was possible to see the name of the SCSI CD-ROM


and listing files I could run from it

ls scsi(0)cdrom(6)rdisk(0)partition(8)

I found the name of the image I had to use to boot the system


In fact, on the CD you can see there is the image install/r4k-ip22-boot.img. At this point I had all the information for booting from the CD-ROM drive through the following command on the monitor console

boot -f scsi(0)cdrom(6)rdisk(0)partition(8)r4k-ip22

or alternatively

boot -f scsi(0)disk(6)rdisk(0)partition(8)r4k-ip22

Linux/Debian distribution

I started with CD #1 "testing" release lenny_di_beta1. I was happy to see Linux booting until I got something like

VFS: Mounted root (cramfs filesystem) readonly
Freeing unused kernel memory: 348K freed
cramfs: bad compressed block size 29091
cramfs: bad compressed block size 12209
request_module: runaway loop modprobe binfnt_000
request_module: runaway loop modprobe binfnt_000
request_module: runaway loop modprobe binfnt_000
request_module: runaway loop modprobe binfnt_000
request_module: runaway loop modprobe binfnt_000

and the boot didn't proceed. I went back to the "stable" release ETCH, and this is what I have installed, without problems.


There are a couple of things that is worth mentioning about the partition.

The SGI monitor, when booting from the scsi HD, it boots from a special partition, called Volume Header
The SGI monitor, the one I have, it is not able to run ELF format file

This means that there is a need to leave an SGI partition structure on the hard drive, i.e. an SGI volume header partition (type 0) as well as a partition that cover the whole HD (type 6). After that is possible to add regular Linux partitions (of type 0x83 for Linux and 0x82 for the swap area).

One should not be worried about deleting everything and starting from scratch. The only problem is that the installation program is invoking fdisk in standard mode rather than in the extended one. Fortunately there are a couple of ways to run a shell during the installation

Select Go back in the installation rather than Continue and it's possible to find nearly at the end of the installation menu, an option to run a shell.
With ALT+F2 or ALT+F3 you can always enter in a shell. To go back to the installation is ALT+F1 while all the details of the installation can be found on the ALT+F4 screen

I have found very useful all the information at Jan Ivar Pladsen's web page. Before touching the hard drive I had

Disk /dev/scsi/host0/bus0/target1/lun0/disc (SGI disk label): 67 heads, 62 sectors, 1010 cylinders
Units = cylinders of 4154 * 512 bytes

----- partitions -----
Pt# Device Info Start End Sectors Id System
 1: /dev/scsi/host0/bus0/target1/lun0/part1 boot    1  990 4112075 7 SGI efs
 2: /dev/scsi/host0/bus0/target1/lun0/part2 swap  991 1010   81510 3 SGI raw
 9: /dev/scsi/host0/bus0/target1/lun0/part3         0    0    3135 0 SGI volhdr
11: /dev/scsi/host0/bus0/target1/lun0/part4         0 1010 4196720 6 SGI volume
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----
0: sgiload sector    3 size    512
1: idle    sector    4 size 283648
2: sash    sector  558 size 283648
3: symmon  sector 1112 size 276994

At this point I followed Pladsen's instructions. Due to the fact the installation invokes fdisk in standard mode, I had to leave for a while the installation and from a shell running

dd if=/dev/zero of=/dev/sda count=1 bs=512

and then

fdisk /dev/sda

With the help of both Pladsen's web page and the menu of fdisk I ended up with the following partition

Disk /dev/sda (SGI disk label): 67 heads, 62 sectors, 1010 cylinders
Units = cylinders of 4154 * 512 bytes

----- partitions -----
Pt# Device Info Start End Sectors Id System
 1: /dev/sda1 boot  74  910 3470236 83 Linux native
 2: /dev/sda2 swap 911 1009  407092 82 Linux swap
 9: /dev/sda3        0   74  303242  0   SGI volhdr
11: /dev/sda4        0 1009 4195540  6   SGI volume
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----

I spent a while to understand how I ended up with an empty Directory Entries table. Well, the fact is that you would need a tool, provided by Debian, called dvhtool that let you add and remove files into the SGI volume header, because it is there that the SGI booter is going to check for files to load. However, being the boot unable to execute ELF programs, there is no way to place there any vmlinux image. Fortunately one of the last step of the Debian installation is to install arcboot.

arcboot should be installed and when prompted about where, the answer is /dev/sda.

Before the end of the installation, before letting the installation to reboot the system, in one of the other screen (ALT+F2 for instance) I went to check that arcboot was indeed there. You can check it running either fdisk or dvhtool

Now the booting

First a manual test to check everything is fine.

boot -f scsi(0)disk(1)rdisk(0)partition(8)arcboot root=/dev/sda1

This worked fine, so to make Indy booting automatically I needed to store the following information:

 • where the monitor should find the Linux boot loader in SystemPartition
 • what is the name of the boot loader in OSLoader
 • what is the name of the file the boot loader will load in OSLoaderFilename
 • which partition is the Linux root one, in OSLoaderPartition

Below there is a list of command I used to set the environment variables.

setenv SystemPartition scsi(0)disk(1)rdisk(0)partition(8)
setenv OSLoaderPartition /dev/sda1
setenv OSLoader arcboot
setenv OSLoaderFilename vmlinux

Now the system boots automatically to Linux. Next step is to configure the X server.

Booting from the network

Here some notes on booting from the network using Ubuntu 7.10 as tftp and dhcp server. Again I found very useful all the information at Jan Ivar Pladsen's web page. However I had to do some changes from the Pladsen's page.

DHCP server

After searching for a dhcp package

apt-cache search dhcp

I installed the software

sudo apt-get install dhcp3-server

I used my laptop as server while it was connected via wireless through eth1 to my home router (subnet So I used an old hub to connect eth0 on my laptop with the Ethernet interface of the Indy.

I configured my laptop eth0 using a different IP class address.

sudo ifconfig eth0

And finally I wrote into /etc/dhcpd.conf.


subnet netmask {}

#Entry for indy

host indy {
    hardware ethernet 08:00:69:08:5a:bc;
    option host-name "indy";
    filename "/tftpboot/tftpboot.img";

TFTP server

I used the information found at David Sudjiman's page. I Installed the software

sudo apt-get install xinetd tftpd

Created /etc/xinetd.d/tftp with in it

service tftp
    protocol    = udp
    port        = 69
    socket_type= dgram
    wait        = yes
    user        = nobody
    server      = /usr/sbin/in.tftpd
    server_args= /tftpboot
    disable     = no

Created the directory /tftpboot with the tftpboot.img, and changed some attributes following Sudjiiman's recipe sudo chmod -R 777 /tftpboot sudo chown -R nobody /tftpboot

But before running the dhcp daemon, I went back to the Pladsen's recipe where he wrote

"The PROM of the Indy don't handle source ports over 32767...also has problem with MTU discovery...."

The problem with his recipe is that in Ubuntu I was not allowed to echo into /proc/sys/net/ipv4/ip_no_pmtu_disc, so that the amended steps are now through the use of sysctl rather than the echo command

sudo sysctl -w net.ipv4.ip_local_port_range="1024 32767"
sudo sysctl -w net.ipv4.ip_no_pmtu_disc=1

Finally, I was ready for

sudo /etc/init.d/xinetd start

on my laptop side, and

bootp(): root=/dev/ram0

on the Indy monitor side.I could see Indy booting properly.


The X server didn't start at the first run. I had to wait for the X server to crash and edit the file /etc/X11/xorg.conf. I'm not sure this is the optimal configuration for Indy. At least it works here it is

# /etc/X11/xorg.conf (xorg X Window System server configuration file)
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
# Edit this file with caution, and see the /etc/X11/xorg.conf manual page.
# (Type "man /etc/X11/xorg.conf" at the shell prompt.)
# This file is automatically updated on xserver-xorg package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xorg
# package.
# If you have edited this file but would like it to be automatically updated
# again, run the following command:
# sudo dpkg-reconfigure -phigh xserver-xorg

Section "Files"
    FontPath    "/usr/share/fonts/X11/misc"
    FontPath    "/usr/X11R6/lib/X11/fonts/misc"
    FontPath    "/usr/share/fonts/X11/cyrillic"
    FontPath    "/usr/X11R6/lib/X11/fonts/cyrillic"
    FontPath    "/usr/share/fonts/X11/100dpi/:unscaled"
    FontPath    "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
    FontPath    "/usr/share/fonts/X11/75dpi/:unscaled"
    FontPath    "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
    FontPath    "/usr/share/fonts/X11/Type1"
    FontPath    "/usr/X11R6/lib/X11/fonts/Type1"
    FontPath    "/usr/share/fonts/X11/100dpi"
    FontPath    "/usr/X11R6/lib/X11/fonts/100dpi"
    FontPath    "/usr/share/fonts/X11/75dpi"
    FontPath    "/usr/X11R6/lib/X11/fonts/75dpi"
    # path to defoma fonts
    FontPath    "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"

Section "Module"
    Load    "i2c"
    Load    "bitmap"
    Load    "ddc"
    Load    "dri"
    Load    "extmod"
    Load    "freetype"
    Load    "glx"
    Load    "int10"
    Load    "vbe"

Section "InputDevice"
    Identifier    "Generic Keyboard"
    Driver        "kbd"
    Option        "CoreKeyboard"
    Option        "XkbRules"    "xorg"
    Option        "XkbModel"    "pc104"
    Option        "XkbLayout"    "us"

Section "InputDevice"
    Identifier    "Configured Mouse"
    Driver        "mouse"
    Option        "CorePointer"
    Option        "Device"        "/dev/psaux"
    Option        "Protocol"        "ImPS/2"
    Option        "Emulate3Buttons"    "true"

Section "Device"
    Identifier    "Newport Graphics"
    Driver        "newport"
Option        "no_accel"
#    Option        "UseFBDev"        "false"

Section "Monitor"
    Identifier    "SGI GDM17E11"
    Option        "DPMS"
    HorizSync    30-65
    VertRefresh    50-75
#    HorizSync    30-82
#    VertRefresh    50-120

Section "Screen"
    Identifier    "Screen 1"
    Device        "Newport Graphics"
    Monitor        "SGI GDM17E11"
    DefaultDepth    24    
    SubSection "Display"
        Depth        1
        Modes        "1280x1024"
    SubSection "Display"
        Depth         8
        Modes         "1280x1024"
    SubSection "Display"
        Depth        15
        Modes        "1280x1024"
    SubSection "Display"
        Depth        16    
        Modes        "1280x1024"
    SubSection "Display"
        Depth        24    
        Modes        "1280x1024"

Section "ServerLayout"
    Identifier    "Default Layout"
    Screen        "Screen 1"
    InputDevice    "Generic Keyboard"
    InputDevice    "Configured Mouse"

Section "DRI"
    Mode    0666

I will try to keep it up to date.