1 SuSE Linux 7.3 on the IBM 7043-140 PowerPC

The IBM model 7043-140 system is not supported by SuSE, but thanks to the efforts of the Linux community, most notably Leigh Brown, a modified Linux kernel exists that will boot on this system. See Leigh's website on this subject at: http://www.solinno.co.uk/7043-140/ for detailed, step-by-step instructions of this process. Note that the 7043-140 is a PREP system (not CHRP), which you will need to know.

There are several major steps that have to be performed in order to get a running Linux system on a 7043-140:

  1. SuSE Linux 7.3 on the IBM 7043-140 PowerPC
  2. Hardware setup
  3. Upgrade the system's firmware
    1. Create firmware upgrade floppy
    2. Perform the firmware upgrade
  4. Create Linux floppy disks
    1. Create PPC boot disk on a floppy
    2. Create PPC initial RAM disk on a floppy
    3. Put Kernel Modules and preptool on floppies
  5. Get a running Linux kernel
    1. Set up a serial console
    2. Boot to firmware prompt
    3. Boot Linux Kernel from floppy
  6. Install SuSE Linux to hard disk
    1. Partition disks
      1. Logical Partitions
    2. Install software
    3. Reboot
    4. Install the kernel
    5. Install the Kernel Modules
    6. Set up the System Console
    7. Configure network
    8. Configure XFree86

The following sections guide you through this process. You will need:

And now, on with the show!

2 Hardware setup

Connect keyboard, mouse and monitor to the standard connectors. Connect a network cable to the network card on the PCI bus if you have one, if not, connect to the on-board ethernet port. The on-board ethernet connector is located above the keyboard and mouse connectors when the unit is in its usual, upright position.

If you have an external disk drive box, connect the SCSI cable to the lower of the two SCSI connectors on the back of the unit. The top one wasn't recognized by Linux for some reason, but the bottom one worked fine. I think they are different controllers. Both are differential SCSI controllers (NCR53c825 and NCR53c875).

Connect one end of your Null-Modem cable to the upper serial port, which is ttyS0 (or COM1). Connect the other end to your nearby Linux box's first serial port (also ttyS0 or COM1).

3 Upgrade the system's firmware

The Linux kernel is known to work with firmware revision TIG99292 or later. Firmware upgrades are available from IBM at:

http://techsupport.services.ibm.com/server/mdownload//7043140I.html

To see if you need to upgrade the firmware, boot your 7043-140. Right after it beeps and the display comes on, it will start to display a row of icons as it checks hardware. Note the firmware revision number in the lower right corner of the screen. If it is after TIG99292, you do not have to upgrade the firmware. The number after "TIG" is a two-digit year followed by a three-digit day-within-year, so TIG02316 is from late 2002, and thus after TIG99292 which was in 1999.

3.1 Create firmware upgrade floppy

I upgraded to revision TIG02316, the most recent one at the time. IBM provides packages that unpack on AIX or DOS systems, so if you get a different one you'll need to unpack it there. Then you need to put it onto a floppy. On your working Linux system or from AIX, copy the firmware upgrade (tig*.img) to a floppy with a command such as: dd if=tig02316.img of=/dev/fd0. On DOS, you can DOS-format the floppy and just copy the file to it, but you will have to change your boot commands (as described below).

3.2 Perform the firmware upgrade

Now put that floppy into the 7043-140 and power it up. Right after it beeps and the display comes on, it will start to display a row of icons as it checks hardware. Immediately after the Keyboard icon appears, press F1 repeatedly (at least ten times). After the last icon (Speaker) appears, it will go into the graphical firmware interface instead of booting software from disk, because you were pressing F1. Select Utilities, then the firmware upgrade option and follow the instructions. Make sure the power does not go out while upgrading the firmware, or you will have a very large paperweight on your hands!

4 Create Linux floppy disks

To boot Linux, you will need a Linux boot floppy that contains a specially modified kernel for the 7043-140, and an initial RAM disk floppy that contains the SuSE linuxrc program that starts the installation process. Check Leigh's site to see if there are later versions of these: http://www.solinno.co.uk/7043-140/. The ones I used: zImage.prep-2.4.19 is the boot disk and ramdisk.image.gz is the initial RAM disk. You will also need a clever PERL script that Leigh wrote: preptool, which modifies the kernel boot parameters in the boot image, and the set of modules for that kernel modules-2.4.19.tar.gz.

4.1 Create PPC boot disk on a floppy

Before creating the boot floppy, you should probably set up the kernel arguments that you need in the boot image. You don't have to do this, but it will make life easier if you end up booting multiple times if things go wrong. The arguments you want are:

root=/dev/fd0 load_ramdisk=1 ramdisk_size=128000 video=s3trio:off console=ttyS0 

You can use either the boot disk image above or a newer one obtained from Leigh's site. Use preptool to set the arguments. Give the above as the argument to the -s option of preptool, and provide the filename of the boot disk image as an argument, like so:

./preptool -s "root=/dev/fd0 load_ramdisk=1 ramdisk_size=128000 \ 
        video=s3trio:off console=ttyS0" zImage.prep-2.4.19 

You can then verify that the correct kernel options are in the kernel using the -q option:

./preptool -q zImage.prep-2.4.19 

To create the PowerPC boot floppy, copy the boot disk image to a floppy disk on your working Linux box. Use the command:

dd if=zImage.prep-2.4.19 of=/dev/fd0 

Label this disk as Linux 7043-140 Boot Disk.

4.2 Create PPC initial RAM disk on a floppy

To create the PowerPC initial RAM disk floppy, copy the above RAM disk image or the one from the SuSE CDs (suse/images/ramdisk.image.gz) to a floppy disk on your working Linux box. The command: dd if=ramdisk.image.gz of=/dev/fd0 will do the trick. Label this disk as SuSE Linux 7.3 Initial RAM Disk.

4.3 Put Kernel Modules and preptool on floppies

After you've installed Linux, you'll need preptool again to reconfigure the kernel's default arguments, and you'll also need the modules for your kernel. The module archive is too big, so you'll have to split it up using split(1). Do the following:

split -b 1400000 modules-2.4.19.tar.gz mod. 
# Insert a floppy. 
fdformat /dev/fd0 && mke2fs /dev/fd0 && mount /dev/fd0 /mnt 
cp mod.aa /mnt && umount /mnt 
# Remove the first floppy and insert a second one. 
fdformat /dev/fd0 && mke2fs /dev/fd0 && mount /dev/fd0 /mnt 
cp mod.ab preptool /mnt && umount /mnt 

That puts the first part of the module archive on one floppy, and the second part and preptool on a second floppy. Label the first disk as modules1 and the second as modules2.

5 Get a running Linux kernel

Now it's time to boot Linux. But of course it's not as simple as it should be: you can't just stick in the floppy and boot, you have to change a few things first.

5.1 Set up a serial console

You were wondering what that Null-Modem cable was for, weren't you? Well, the specially-modified kernel does not know how to write output to or prompt for input from the standard console. It only knows how to use a serial console. So you have to set things up so that you can interact with the booting kernel over the serial port.

You've already installed the Null-Modem cable, so to use it, you need a terminal emulator running on the working Linux box. The screen(1) program is a good one to use. As the superuser, type screen /dev/ttyS0 to run a terminal emulator on the serial port you plugged the cable into.

I tried doing this from a Windows box using Hyperterm, and could not get it to work. Hyperterm didn't seem to want to send the arrow key sequences over the line, so I couldn't make selections in the SuSE installation programs. That's why I recommend using screen on Linux.

Insert the Linux 7043-140 Boot Disk floppy into the 7043-140 and power it up. It takes about 20 seconds to turn on the display, so use this time to insert the first SuSE installation CD into the CD-ROM drive.

If the system starts displaying the hardware check icons, press F1 repeatedly after the Keyboard icon appears. After the last icon (Speaker) appears, it should go into the graphical firmware interface instead of booting software from disk, because you were pressing F1. Select Utilities, then Console which gets it to let you select which console to use.

The system may have detected your serial connection and automatically gone into console selection mode. In either case, the graphical console now is asking you to press "1" to select it, and the terminal emulator connected to the serial port is asking you to press "0" to select it. On the working Linux system, press "0" to select the serial console. The system will now start to boot, sending output to the serial console.

5.2 Boot to firmware prompt

As the system boots on the serial console, it will start to display the names of the various hardware it is testing (instead of the icons it would display on the graphical console). After the word Keyboard appears, press 8 repeatedly. After it displays the last check (Speaker) appears, it will give you a firmware prompt:

0> 

You now have to change a couple of firmware environment values. Type these commands:

printenv load-base 
printenv real-base 
setenv load-base 1000000 
setenv real-base c00000 

Write down the original values of the load-base and real-base, so that you can restore them later on.

5.3 Boot Linux Kernel from floppy

Now you are ready to boot the kernel. Use the command:

boot floppy: root=/dev/fd0 load_ramdisk=1 ramdisk_size=128000 
   video=s3trio:off console=ttyS0 

Put all that on a single line. The system will begin to read the floppy. After about a minute, it will display some statistics about the kernel, and display a boot prompt beginning with:

Linux/PPC 
load: 
. Anything after that prompt are the command line arguments it will boot with. If you used preptool to set those up, you are good to go and can just press ENTER or wait until the prompt times out in five seconds. If you need to change the kernel arguments, you can backspace-edit them to be what you need. If nothing appears after that prompt, you will have to type in the kernel boot arguments (everything from root= on) again.

After that second prompt is satisfied, Linux will begin to boot. It will go through the process of mapping the hardware, then it will prompt for the initial RAM disk. Remove the boot floppy and insert the one you had labeled SuSE Linux 7.3 Initial RAM Disk, then press ENTER. It will begin reading that floppy and continue the boot process. It will eventually run the SuSE linuxrc program, which is the beginning of the installation process.

6 Install SuSE Linux to hard disk

There's lots of documentation on how to install SuSE Linux. I'll just cover the exceptions here. I had originally tried to do an FTP installation, but it kept failing when it was downloading setup files for the installer. It turned out that it was trying to download a file (.S.u.S.E-disk-*) that did not exist on the FTP site. I think that's a file that appears on the CDs, so the FTP installation appeared to be broken. I gave up on FTP and ordered the CDs.

Using YaST2 in text mode can be confusing because the interface is designed to be used with a mouse. However, the keyboard commands work pretty well. Use TAB to move from one field to the next within a window. Use ENTER to select a button, which is a word within square brackets, like [Next]. Use the space-bar to select radio-buttons or check-boxes. In text-entry fields, you can use backspace (or control-H) to erase characters; and you must erase the contents of a field before you can type in a new value. If a text entry field ends in a "v", it means it's a combo-box and pressing the down-arrow will make a list of choices appear. You can move up and down such lists with the arrow keys, and select an item with ENTER. The biggest omission is that back-tab does not move to the previous field, so if you tab too far, you have to cycle through all the fields to get back to where you want to be. Note that the help area on the left counts as a field, and you can scroll it using the up- and down-arrow keys.

When asked if you want to install using YaST (text install) or YaST2 (graphical install), select YaST2. It will work on your serial console using text mode, although it seems to have trouble positioning windows sometimes. Although the text display can become corrupted, you should be able to use it. And if your terminal emulator has a command to redraw the display, then you can use that to see what the screen should really look like. If you are using HyperTerm on Windows, be sure to set the Emulation field on the Settings tab of the Properties dialog to "VT100", or it will badly corrupt the display and the arrow keys will not work.

Answer the questions about which language to use, then proceed to partitioning disks.

6.1 Partition disks

By default, SuSE proposes a very dumb partitioning scheme, so you should replace it with your own. You may also have to remove any existing partitions on your hard disk in order to do a clean install. Select Custom Partitioning when YaST2 asks you which hard disk to partition. Then select Expert mode and delete the entire partition table. You're now ready to create a new one.

I usually set up a small boot partition and some swap, then use the Logical Volume Manager (LVM) for the rest of it. But this kernel doesn't have LVM support. I haven't yet determined how to deal with that. So instead I created some physical partitions for the filesystem structure I like to use:

Device Size Mount Id System
/dev/sda1 4.0MB 0x41 PPC PReP Boot
/dev/sda2 512.0MB 0x82 Linux swap
/dev/sda3 400.0MB / 0x83 Linux
/dev/sda4 7.7GB 0x0f Win95 Ext'd
/dev/sda5 2.0GB /usr 0x83 Linux
/dev/sda6 200.0MB /var 0x83 Linux
/dev/sda7 5.5GB /home 0x83 Linux

There are three primary partitions, then an extended partition which takes up the rest of the disk. Within the extended partition are three Linux partitions.

The first partition is special, and you must define it manually. In the YaST2 window for adding partitions, you must select Do not format, then enter the hex value 0x41 in the Filesystem ID field. This should be no larger than 4MB in size, so enter +4M in the End cylinder field. This partition is where you will copy your custom Linux kernel to so that the system can be successfully booted.

The second partition is the usual swap partition, which is twice the size of the system's RAM. I'm told that this kernel won't use more than 256MB of RAM, but I don't know if that's true because that's all that was in the system I set up. You must also select Do not format when adding this partition, and can select Linux swap from the pull-down list on the Filesystem ID field.

The third partition is the root partition, and the remaining Linux partitions just segment things a bit so your root doesn't fill up if, say a user goes hog-wild or you install too many packages.

Once you have defined all your partitions, check them all over, and select [Next] to proceed to software installation.

Note: the above setup uses only one disk. If you have more, you can spread your filesystems out a bit. I had an external box with two 8.4GB drives in them, so I replaced the entire extended partition in the above setup with /home, put a larger /tmp, /var and /usr on the second disk, and made the third /opt.

6.1.1 Logical Partitions

I was able to set up Logical Volume Management on another PowerPC system, which SuSE supports, so I'll describe how that's done here in case some day I can create a kernel for the 7043-140 with LVM. This cannot be done with the kernel supplied here, because it does not have LVM support enabled.

Instead of creating a root partition and an extended partition for other filesystems, make the third primary partition be of type Linux LVM and fill the rest of the disk with it. So the partition table on the first disk looks like this:

Device Size Id System
/dev/sda1 4.0MB 0x41 PPC PReP Boot
/dev/sda2 512.0MB 0x82 Linux swap
/dev/sda3 8.1GB 0x8e Linux LVM

All three are Primary partitions. The first two are as described above. The last partition occupies the remainder of the disk, and we will build our logical filesystems within it. You must select Do not format when adding this partition, and can select Linux LVM from the pull-down list on the Filesystem ID field.

If you have other disks, create a single, primary, Linux LVM partition on each one that occupies the entire disk.

Once you have created your physical partitions, you need to create the logical filesystems within them. From the YaST2 expert partitioning screen, select LVM to enter the Logical Volume Management setup. The first screen will ask you to create a volume group named system with an extent size of 4MB. Accept that, because you only need a single volume group and 4MB is a good extent size. The next screen lets you select which partitions are assigned to the volume group, and will contain a list of all the Linux LVM partitions you created. Assign them all to the system volume group. Then select the [Next] button.

On the next screen, the LVM setup lets you create logical filesystems within your volume group. You must create at least a root filesystem. I usually create the following filesystem structure:

Name Mount Point FS Type Min Size
root / reiserfs 300MB
var /var reiserfs 200MB
tmp /tmp reiserfs 100MB
home /home reiserfs 1GB
usr /usr reiserfs 2GB
opt /opt reiserfs 1GB

With Reiser filesystems under LVM, you can resize them at any time if you need to rearrange your filesystem structure. You would usually make those filesystems larger than those minimum sizes. SuSE will fit in the above, but starting with larger filesystems gives you room to add stuff right off.

After you define all the logical partitions, select [Next] to return to the expert partitioning screen.

6.2 Install software

The easiest thing to do here is just accept the default installation. This will put on all the packages you need to do basic administration. You can select other packages if you want, but it will be a lot easier to do that once you have XWindows running and can do it from a graphical environment. The default installation usually only requires the first installation CD, so you won't have to switch CDs if you take the default.

After selecting which software to install, you are asked where to place the boot loader. Select the partition you configured as the PPC PReP Boot type, which is /dev/sda1 in my example. It will also want to know what kernel options you need. Put in video=s3trio:off console=ttyS0 so that it will continue to boot off the serial console. You'll change this later.

Finally, set up the root password and an unprivileged user account, then confirm the installation. YaST2 will start installing packages, and showing you its progress.

6.3 Reboot

After all the packages are installed, YaST2 will prompt you to reboot the system. Remove the installation CD and the initial RAM disk floppy, put the Linux 7043-140 Boot Disk back in, and let it reboot. When the system starts checking hardware, press "8" after the word Keyboard appears again to get to the firmware prompt. This time, you don't need an initial RAM disk because everything you need is on disk, so boot the kernel and specify the root partition:

boot floppy: root=/dev/sda3 video=s3trio:off console=ttyS0 

That specifies to boot from the root partition we just installed, and to still use the serial console. The kernel will boot off the floppy, then use the hard drive for the rest of the system. YaST2 will be run again to do some final setup. It will then ask if you want to set up any additional hardware. Decline, because you can do it later. It will then bring the system up to multi-user mode and give you a login prompt. Log in as root.

6.4 Install the kernel

Now we need to install our custom kernel for the 7043-140 onto the boot partition, which is /dev/sda1. While we're at it, we will configure its boot parameters so that it will know where the root partition is and use the main console instead of the serial console.

First copy the boot disk into your boot partition:

dd if=/dev/fd0 of=/dev/sda1 

Then remove the boot floppy and insert the one labeled modules2, and copy that file with:

mount /mnt/floppy 
cp /mnt/floppy/preptool . 
umount /mnt/floppy 

Remove the modules2 floppy. Now make the preptool script executable, and use it to modify the kernel parameters of your boot partition, then check it:

chmod +x ./preptool 
./preptool -s "root=/dev/sda3" /dev/sda1 
./preptool -q /dev/sda1 

The output should show a command line containing just the root=/dev/sda3 argument. Your system will now boot directly off the hard disk, on the system console. You could reboot it again to test this, but it's probably best to do the next section before rebooting.

6.5 Install the Kernel Modules

Now that you have the network running, you can copy over the modules that were built for the kernel you installed. If you look in /lib/modules, you will see a 2.4.12 directory, but you installed a 2.4.19 kernel, so it won't use those. You need to get the modules-2.4.19.tar.gz file onto your new system. If you've been following along, you have split it up onto two floppies. To get it back into one piece and then unpack it, do the following:

cd /lib/modules 
# Insert the floppy labeled "modules1". 
mount /dev/fd0 /floppy 
cp /floppy/mod.aa modules-2.4.19.tar.gz 
umount /floppy 
# Remove the first floppy and insert the one labeled "modules2". 
mount /dev/fd0 /floppy 
cat /floppy/mod.ab >> modules-2.4.19.tar.gz 
umount /floppy 
tar xzf modules-2.4.19.tar.gz 

Note that you append the second part to the first part with that cat command. You can remove the tarfile after unpacking it if you want. Now you have the correct modules for your kernel installed, so reboot yet again to get it to use them. This reboot is necessary so that the correct network drivers can be found for the network setup.

6.6 Set up the System Console

While you're rebooting, it would be a good idea to stop using that serial console and use the system console at last. When the hardware boot sequence gets to the point of listing the names of the hardware it is testing on your serial console, start pressing '1' after the word keyboard appears to get it to enter its setup menu system. On the first menu, type '3' to change the configuration. On the second menu, type '7' to select the console.

It will then display messages on both the serial console and the system console, asking you to press '0' to select the serial console, and '1' to select the system console. On the system console, press '1' to select it. It will then continue the boot sequence on the serial console. You can terminate the screen program (or whatever you are using) that views the serial console, and unplug the Null Modem cable.

6.7 Configure network

The 7043-140 has a built-in AMD network interface, but it will only run at 10Mbps, and it's stuck at full duplex because the driver is compiled into the kernel. This doesn't work well if your network switch doesn't support full duplex. It's better to put in a faster PCI card, such as the 3c590TP card, which is a 100MB card. With this one, the driver is in a loadable module, so we can easily configure it.

Now that you're on the system console, you can run YaST2 without all the display confusion that happened on the serial console. Type yast2 to start YaST2, and select Network/Basic / Network card configuration. From there, you should see the AMD card (really a built-in port) and maybe the 3Com card mentioned above. If you're going to use the AMD card, select it, and set it up to use DHCP or a static IP, depending on your network facilities.

If you're not going to use the AMD, set it up anyway to use DHCP, because if you don't, YaST will try to assign your other card to eth0, and it has to be eth1 to work. After setting up the AMD, set up your 3Com card with your real information (DHCP or static IP). Then select the AMD card in the list and delete it. You'll now have the 3Com card on the eth1 interface.

Save your changes, and go back to the first YaST2 screen. If you set your card up to use DHCP, you're done and can exit YaST.

If using a static IP, select Network/Basic / Hostname DNS and set up your host name, domain name, DNS server address and domain search list. Save your changes. Now select Network/Advanced / Routing and enter the IP address of your gateway. Save your changes, and exit YaST. You should now have a working network.

It's a good idea to wade through /etc/rc.config to see what the various parameters are, and turn thing on or off. For example, I usually turn on the NTP server this way, although it can probably be done from YaST. After changing this file, run /sbin/SuSEconfig to make them take effect.

That will get a basic network connection up and running, but the AMD card will only run at 10Mbps, and it's stuck at full duplex because the driver is compiled into the kernel. This doesn't work well if your network switch doesn't support full duplex. See below for how to get a faster network card working. In fact, you could skip this and do just the faster network card setup, but

6.8 Configure XFree86

I haven't gotten XWindows to run on the console yet, but I have it working remotely just fine. Here's what I tried to get the console to work.

SuSE recommends using SaX2 to set up XFree86. When I ran it, it consistently hung while checking the hardware. It seemed to be in a loop trying to determine video modes. Maybe I just didn't let it go long enough, but five minutes should have been enough. So I gave up on SaX2.

My backup was to try xf86config, which is a very basic tool to create a configuration file. I got a config file which looks OK, but when I run startx to test it I just get a red screen. If I run init 5 to move to runlevel 5, KDE comes up, but it is at the lowest resolution and the mouse doesn't work. This is where I stopped.