GAHnix

A small compact Linux distribution based on Trinux, for disk-less network booting nodes.

The latest stable version is 0.0.1. [Alpha Release]

GAHnix is a modified version of Trinux, tailored for the Distributed Computing community, allowing users to build cheap systems that do not require hard drives. The boot floppy contains the 2.2.19 Linux kernel, minimal software and configuration files. The majority of the Linux system is stored on a central HTTP server and loaded across the network at boot time. Nodes may mount network drives using NFS (Network File System). GAHnix includes all library modules (glibc2.1) as required for many of the popular distributed computing projects. User configurable boot scripts allow for the automated starting of your required DC client, including the Tuxtime client.

GAHnix is provided in the form of raw disk image, that must be copied to a 1.44MB 3.5" floppy disk. This boot disk load's the linux kernel, mount's the initrd (initial ramdisk), create additional ramdisks, configure's networking, and load's additional packages from a central HTTP server (Apache).

GAHnix requires a central Linux server providing NFS shares, HTTP server for GAHnix packages and also optionally functions as a gateway for access to the Internet. Any number of GAHnix nodes may be configured and connected to the central server. User access to a GAHnix node may be using a directly connected monitor and keyboard, or via a remote SSH login. GAHnix does not provide user management, all logins are as root.


News | Features | Requirements | Links | Tested DC Clients | Download | Installation | Using GAHnix | Copyright

Development News

Development News

Sat 13 September 2003 Completed ECC2-109 tests, no problems found, stats where registered on the project stats.
Fri 20 September 2002 Completed testing of the Seventeen or Bust Linux client (0.92). Tested on Pentium I-150, Pentium II-450, AMD K7.
No problems found, the client runs well.
Sun 8 September 2002 Documentation updates:- Added minimum memory requirements to the DC client information table, added list of supported network cards. Added more detail to the "Using GAHnix" section.
Sun 25 August 2002 Released the first Alpha of GAHnix, version 0.0.1 [Alpha].
Mon 12 August 2002 Completed testing of the Distributed Folding client, using a Pentium III 450.
No problems found, the client runs well. Note, in order to run this client, the library libncurses.so.4 is required, this dependancy was satisfied by making a symbolic link to libncurses.so.5 and an NFS mount for /tmp is required, since the client requires a larger /tmp partition than is provided in the RAM filesystem.
Sun 21 July 2002 Attempted to run D2OL using the controller:cli command line option (non-GUI console controller).
D2OL tests abandoned as the client runs in a Java VM and therefore requires the Java libraries to run.
Sat 20 July 2002 Both the SSH daemon and SSH client have been tested using DSL keys and both function well. Public keys must be created on a seprate system using: ssh-keygen -d (to create protocol 2.0 DSL keys).
Thur 18 July 2002 Completed ECCp-109 tests, no problems found, stats where registered on the project stats. Awaiting a copy of the D2OL client to be delivered on CD (30Mb download). I beleive this client may run without the Java VM (as a console client) so tests should proceed in several days.
Wed 17 July 2002 Completed RC5 tests, discovered that the client should be configured to point at my Squid HTTP proxy, on port 3128. The client was configured to only work on RC5 packets. Otherwise, the default client configuration works ok.
Distributed Folding - I discovered that the client minimum requirement is a Pentium II processor, client to be re-tested at a later date on a suitable platform.
Tue 16 July 2002 Completed Seti@Home tests, prior client issues where due to tests on a Pentium I with the i686 client :rolleyes:. Results where uploaded to the project site and where registered on the project stats.
Ubero tests abandoned as the client runs in a Java VM and therefore requires a GUI to run.
Sun 14 July 2002 Completed Gimps (Prime 95) tests, no problems found, stats where registered on the project stats.
Completed Genome@Home (FAH3.1) and Folding@Home tests, no problems found, stats where registered on the project stats.
Sat 13 July 2002 Completed Genome@Home (Classic) tests. The older 0.99 client compiled for glibc2.0 is required. otherwise, no problems found, stats where registered on the project stats.
Completed Tuxtime (0.2.0) tests, no problems found.
Distributed Folding tests failed, reason to be investigated.
Mon 8 July 2002 type="disc" Completed setup of Network package loading and Network File System (NFS). Server exports must be with the option "no_root_squash". SSH packages are loaded and installed, yet to configure and test SSH support. There is and shall never be any support of telnet.
Sat 6 July 2002 Completed build of boot floppy. NFS and Network package loading are yet to be sorted.


Features

  • RAM disk operation
  • Boot floppy (initital system)
  • No hard drive needed
  • Network loading of package modules
  • Kernel 2.2.19
  • glibc 2.1
  • SSH
  • NFS
  • bash
  • TuxTime client

Requirements

GAHnix Central Server

  • Linux Installation
  • Local Area Network installed and running
  • Apache HTTP server installed and running
  • Network File System (NFS) installed and running
  • OpenSSH installed and configured

GAHnix Node

  • Intel 486 or higher
  • 32MB RAM (64MB or more preffered, see the client table)
  • 3.5" 1.44MB Floppy Drive
  • 10/100Mbps Ethernet Network Card:-
    • 3Com Etherlink 509 series (ISA)
    • 3Com Etherlink 590/905 series (PCI)
    • Realtek 8139 (PCI)
    • NE2000/Realtek 8129 (PCI)
    • NE2000 (ISA)A (Most old ISA NIC's)
    • AMD PCNet 32
    • Intel EtherExpress Pro 10/100
    • SMC EtherPower II
    • DEC Tulip

Links to Related Pages


Tested Distributed Computing Clients

Tested Distributed Computing Clients

DC Project Status Results Comments Memory (MB)
Tuxtime 0.2.0 Complete OK No issues, client runs well using cron. 32
Genome@Home (Classic) Complete OK Requires client 0.99 compiled for glibc2.0 64
Genome@Home (FAH3.1) Complete OK No issues, client runs well. 64
Folding@Home (FAH3.1) Complete OK No issues, client runs well. 64
Distributed Folding Complete OK No issues, client runs well. Large /tmp required. 128
Seti@Home Complete OK No issues, client runs well. 64
Distributed.net (RC5/OGR) Complete OK No issues, client runs well. 32
Gimps (Prime 95) Complete OK No issues, client runs well. 32
ECCp-109 Complete OK No issues, client runs well. 32
ECC2-109 Complete OK No issues, client runs well. 32
Seventeen or Bust Complete OK No issues, client runs well. 32
Ubero Complete Failed Unable to support, client requires Java VM & GUI. -
D2OL (Sengent) Complete Failed Unable to support, client requires Java VM libraries. -
TSC Complete Failed Unable to support, client requires Java VM libraries. -

Download

Below is a list of all files of the project. Download both files to your local Linux machine as per the installation instructions.

File Arch. Date Size Description
gahnix.img i486 Aug 25 13:32 1474560 GAHnix Boot Image
gahnix_modules.tgz i486 Aug 25 12:54 3350308 GAHnix Module Tarball

Installation

Overview

The installation process consists of several stages, follow each stage in logical order. Installation involves setting up the following equiempent and software, note that the Central Server and Workstation may be the same machine:

  • A Central Linux Server
  • A Linux Workstation
  • Any number of GAHnix Nodes

Preparing the Central Server

This part of the installation assumes the default Apache installation, with your public HTML at /var/www/html/
Refer to the Apache HOWTO for a more detailed guide to installing and configuring Apache.
Refer to the NFS HOWTO for a more detailed guide on installing and configring NFS.
The following steps are performed on the central server as root:

  1. Setting up the GAHnix modules under Apache, to be used by all GAHnix nodes
    1. Make a new directory called: /var/www/html/gahnix
    2. Download the GAHnix module tarball into the directory /var/www/html/gahnix/
    3. Unpack the tarball: tar -zxvf gahnix_modules.tgz
    4. Test the Apache server by pointing your browser to: http://localhost/gahnix
      You should see a filelist, listing the 21 packages contained in /var/www/html/gahnix
  2. Setting up NFS shares for each GAHnix node
    1. Create a new directory for each GAHnix node. ie. /exports/cruncher1
    2. Create a temporary directory for the GAHnix node. ie. /exports/cruncher1/tmp
    3. Add the new share to your NFS configuration, by editing /etc/exports, for example:
          /exports/cruncher1 	(rw,no_root_squash,insecure)
    4. Repeat steps i to iii for each GAHnix node you wish to add to the system
    5. Restart the NFS service: /etc/init.d/nfs restart
  3. Setting up the application software for use by each GAHnix node. Installing the Distributed Folding client as an example:
    1. Download and install the Distributed Folding client (gcc version), install the software in the directory: /exports/cruncher1/distribfold
    2. Ensure that the software binary is exectuable. If not, set the executable bit: chmod +x program_name

Preparing the Linux Workstation

To prepare GAHnix for remote connections using SSH, you must first setup an SSH keypair. The private key is stored on your Linux SSH workstation, while the public key is copied to the GAHnix boot floppy.

On the Linux SSH workstation, open a terminal window and as root do the following:

  1. Creating a public/private SSH key pair (you probably want to do this once only)
    1. Generate the SSH keys: ssh-keygen -d
    2. The private key is stored on your Linux SSH workstation (in /root/.ssh/id_dsa), the public key is created as /root/.ssh/id_dsa.pub and is later copied to the GAHnix boot disk, once the boot disk has been created (see the next section titled "Preparing the GAHnix Nodes").
  2. Adding the hostname of each GAHnix node to /etc/hosts
    1. Add the IP/hostname of the GAHnix node to /etc/hosts, for example:
          192.168.0.10 cruncher1

Preparing the GAHnix Nodes

The following installation process is performed on the Linux workstation. When editing GAHnix configuration files, ensure that each line containing text is terminated by a carriage return. The following configuration files are pre-configured, you must modify them to suit your application.

  1. Building a GAHnix boot floppy for each node
    1. Download the GAHnix floppy image
    2. Insert a blank 1.44MB 3.5" floppy disk into the floppy drive (fd0).
    3. Open a terminal window, change to the directory containing gahnix.img
    4. Type: dd if=gahnix.img of=/dev/fd0
      (Substitute /dev/fd0 with your floppy device if it is not fd0)
  2. Configuring the GAHnix boot floppy
    1. Mount the boot floppy on the installation workstation using: mount -t vfat /dev/fd0 /mnt/floppy
    2. Edit /mnt/floppy/tux/config/eth0 and define the IP address and network mask for the GAHnix node, for example:
          192.168.0.10 255.255.255.0
    3. Edit /mnt/floppy/tux/config/gateway and define the IP address of the gateway machine or router, used to access the internet, for example:
          192.168.0.1
    4. Edit /mnt/floppy/tux/config/dns and define the IP address of the DNS machine.
      This would be typically be your gateway machine (assuming that it runs as a caching name server) or it may be the IP address of your ISP's DNS machine. For example:
          192.168.0.1
    5. Edit /mnt/floppy/tux/config/server and define the IP adress and path of your central HTTP server, for example:
          http://192.168.0.1/gahnix/
    6. Edit /mnt/floppy/tux/config/hostname and define the host name for the GAHnix node, for example
          cruncher1
    7. Edit /mnt/floppy/tux/init/last and setup the application NFS mount for this node, for example:
          mount -o nolock 192.168.0.1:/exports/cruncher1 /mnt
    8. And also setup the temporary directory NFS mount for this node, for example:
          mount -o nolock 192.168.0.1:/exports/cruncher1/tmp /tmp
    9. Unmount the floppy drive: umount /mnt/floppy
  3. Loading the SSH public key onto each GAHnix boot floppy
    To prepare GAHnix for remote connections using SSH, you must have first generated a SSH keypair, as covered in the previous section titled "Preparing the Linux Workstation". We now copy the public key to the GAHnix boot disk, open a terminal window on the SSH Workstation and as root do the following:
    1. Mount the boot floppy on the installation workstation using: mount -t vfat /dev/fd0 /mnt/floppy
    2. Copy the public key to the GAHnix boot floppy: cp /root/.ssh/id_dsa.pub /mnt/floppy/tux/pkg/opensshd/keys
    3. Unmount the floppy drive: umount /mnt/floppy

Testing a GAHnix Node

  1. Insert the GAHnix boot floppy into a suitable node machine
  2. Ensure the machine is connected to the central server
  3. Power up the GAHnix node
  4. The GAHnix system should now boot. Ensure that the modules are loaded fromt he central server, this can be confirmed at boot time by observing the bootup messages
  5. When the system is ready, hit you should be greeted with a bash prompt
  6. Check that the NFS mounts are mounted: mount
    You should see the following:
        root@cruncher1> mount
        192.168.0.1:/exports/cruncher1 on /mnt type nfs (rw,nolock,addr=192.168.0.1)
        192.168.0.1:/exports/cruncher1/tmp on /tmp type nfs (rw,nolock,addr=192.168.0.1)
  7. Check the SSH login, as root on the SSH workstation, type: ssh -2 -l root cruncher1
    You should be greeted with an SSH session from cruncher1 like so:
    ************************************** 
    * Welcome to GAHnix!                 *
    *                                    *
    * Ctl-D to close this SSH session.   *
    **************************************
    root@cruncher1 

Using GAHnix

General

GAHnix does not use login authorisation, and there is one one user - root. A total of 4 consoles are provided, each may be accessed with Alt-F1 to Alt-F4. Most of the standard Linux command line utilities are available such as ls, cd, cp, mv, rm, ps, grep, vi, more, chmod, chown, grep, cat, cut, date, dd, mount, umount, ln, pwd, tail, head, telnet, sort, tar etc.

Accessing a GAHnix node using SSH is quite straight forward. From a Linux or Windows machine, type: ssh -2 -l root node_name where 'node_name' is the host name of the GAHnix node. It is important that SSH seesions are closed by pressing Ctl-D and not by closing the X-Windows window, otherwise the SSH daemon on the GAHnix node will not be killed.

GAHnix should run flawlessly and not require regular maintenance. Should you wish to shutdown or reboot a GAHnix node, use poweroff or reboot.

Configuration

The GAHnix configuration files are stored in /etc/tux/config. You may edit these files using vi, however as the GAHnix filesystem resides in RAM disk, to keep any changes over a re-boot, you must save the configuration to disk using savecfg. Savecfg is a Linux bash script that writes the /etc/tux configuration directories back to the floppy drive.

The NFS mounts are mounted into /mnt by default, as determined by the boot-time script in /etc/tux/init/last. These mounts may be modified as required. You can modify configuration files in /etc/tux at any time, just be sure to save the configuration to disk using savecfg. Alternately, the floppy disk may be edited using a DOS or Windows machine, simply load the disk into a DOS drive and edit the files in A:\tux. This is the same as the /etc/tux directory under Linux.

You may set application's to run at startup by adding them to /etc/tux/init/last, but ensure you add them to the end of the file, after the remote NFS mounts have been mounted. For example, assuming you have the rc5 client mounted in /mnt/dnet your /etc/tux/init/last would look something like this:
    #   
    # Here is where you can add any last-minute commands/scripts 
    # you want executed before consoles' are opened up   
    #                
    echo "Tweaking libraries"    
    ln -s /usr/lib/libncurses.so.5 /lib/libncurses.so.4   
    ldconfig       
    echo "Executing [last]"  
    echo "Mounting NFS mount point in /mnt"  
    mount -o nolock 192.168.0.1:/exports/kochanski /mnt    
    echo "Mounting NFS mount point in /tmp"   
    mount -o nolock 192.168.0.1:/exports/kochanski/tmp /tmp 
    cd /mnt/dnet    
    ./dnetc    


The GAHnix boot floppy may be mounted under GAHnix, using fmount, this will mount the floppy into /floppy. To un-mount the floppy, use fumount.

Config file summary

Config File Description Example
/etc/tux/config/hostname GAHnix node hostname cruncher1
/etc/tux/config/eth0 GAHnix node IP address/network mask 192.168.0.10 255.255.255.0
/etc/tux/config/gateway The IP address of your Internet Gateway/Router 192.168.0.1
/etc/tux/config/dns The IP address of your DNS server 192.168.0.1
/etc/tux/config/server The URL to your HTTP server (GAHnix packages) http://192.168.0.1/gahnix/
/etc/tux/init/last Boot time script, executed once the system is up.
Also contains the NFS mount commands.
(Add your program' to be run at boot time here)
mount -o nolock 192.168.0.1:/exports/cruncher1 /mnt

Backing-up boot floppies

You can back-up a GAHnix boot floppy to a Linux workstation, allowing you to make new boot disks with your configuration settings. Lets say you have a GAHnix boot floppy that is configured correctly, and you wish to back-up this floppy to your Linux workstation and later use this backup to make new GAHnix boot floppies, simply follow these steps:-

  1. Insert the GAHnix boot floppy disk into the floppy drive (fd0) of the Linux workstation.
  2. Open a terminal window, change to the directory that you wish to stoore your backup in.
  3. Type: dd if=/dev/fd0 of=my_gahnix_boot_disk.img
    (Substitute /dev/fd0 with your floppy device if it is not fd0, my_gahnix_boot_disk.img may be any name you choose.)
This will make a disk-image of the boot floppy, called my_gahnix_boot_disk.img on your Linux workstation. You may make new GAHnix boot floppies from this image, like so:-
  1. Insert a blank 1.44MB 3.5" floppy disk into the floppy drive (fd0).
  2. Open a terminal window, change to the directory containing my_gahnix_boot_disk.img
  3. Type: dd if=my_gahnix_boot_disk.img of=/dev/fd0
    (Substitute /dev/fd0 with your floppy device if it is not fd0)
This method is very convinient, as your GAHnix boot disk will all generally have the same dns, server & gateway settings. Only the eth0 & hostname files require modifying from one node to the the next.

Cron

GAHnix includes a cron daemon. The crontab is configured at boot-time using /etc/tux/config/crontab. You may add your own cron tasks by adding them to this configuration file, but remember to save your configuration using savecfg.

When adding new cron tasks to a running GAHnix system, you must add the task to both the running crontab in /var/spool/cron/crontabs/root (alternately you may edit the running crontab using crontab -e) as well as modifying the boot-time crontab as outlined in the previous paragraph above. Failure to modify /etc/tux/config/crontab will result in the loss of crontab modifications over a reboot.



TuxTime

GAHnix includes the version 0.2.0 TuxTime client in /bin/tuxtime.bin. You may add the TuxTime client to your crontab by adding the following to /etc/tux/config/crontab (and also to /var/spool/cron/crontab/root if you dont wish to re-boot the system):
    0 * * * * tuxtime.bin username password 12345 > /dev/null
Where:
0 * * * * runs the TuxTime client once per hour.
username is your TuxTime account name.
password is your account password.
12345 is the TuxTime ID of the GAHnix computer.

CopyRight Information

GAHnix
A small compact Linux distribution based on Trinux, for disk-less network booting nodes.
Copyright (c) 2001, 2002 by Wayne Osborn
aka dna of Ninja Micros/Team 3DHQ/Team Picard
Released under the LMAO Public License

GAHnix is free software. This means that it's yours to try, for free non-commercial use, forever.
If you enjoy the product, please send in a donation to help support further development and web-server costs.