How to install Linux (Debian) on an SGI Indy
 
Preface
These notes are reporting how I managed to install Linux (Debian) on a Silicon Graphics Indy workstation.

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 untill 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 

scsi(0)cdrom(6) 

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 

r4k-ip22 

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 throught 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. 

Partition
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 sturcture 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 need 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 enviroment 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 192.168.0.0). 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 10.0.0.25 

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

 
#dhcp.conf
                
 subnet 10.0.0.0 netmask 255.0.0.0 {}
                
 #Entry for indy
                
  host indy { 
             hardware ethernet 08:00:69:08:5a:bc;
             fixed-address 10.0.0.11;
             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.

Xorg.conf
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"
EndSection

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

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

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

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

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

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

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

Section "DRI"
	Mode	0666
EndSection


I will try to keep it up to date.
http://www.pvv.org/%7Epladsen/Indy/HOWTO.html#tophttp://www.pvv.org/%7Epladsen/Indy/HOWTO.html#tophttp://www.davidsudjiman.info/2006/03/27/installing-and-setting-tftpd-in-ubuntu/shapeimage_4_link_0shapeimage_4_link_1shapeimage_4_link_2