mercoledì 16 luglio 2025

Hal91 quando linux stava in un floppy

 

 

Eccoci per la pagina nostalgia canaglia....... 

Hal91 è stata forse la terza distribuzione Linux che ho provato.
Mi ha sempre affascinato e colpito per l'obiettivo, all'epoca impensabile: far stare un'intera distribuzione Linux in un floppy da 1.44 megabyte.
Sembra incredibile anche solo pensarlo oggi, quando 8 giga byte non bastano più per nulla...

Scordatevi Xorg e il browser ma anche midnight commander  o curl pensate piuttosto a un sistema essenziale con lo stretto indispensabile anzi un po meno.

Al momento Hal91 non è più recuperabile da internet, quindi ho deciso di allegarla in fondo a questo post, così da renderla nuovamente disponibile (almeno finché Blogspot non chiude!).


Estrazione del contenuto del floppy

Per studiarla meglio, ho scritto due script.

🛠 extract.sh

#!/bin/bash
# Estrae hal91.img montandolo in loop

IMG="hal91.img"
MOUNTDIR="mnt_hal91"
DESTDIR="hal91"

mkdir -p "$MOUNTDIR" "$DESTDIR"

sudo mount -o loop "$IMG" "$MOUNTDIR"
cp -r "$MOUNTDIR"/* "$DESTDIR"
sleep 1
sudo umount "$MOUNTDIR"
rmdir "$MOUNTDIR"

Perché usare mount e non mtools?
Perché mtools non supporta le cartelle, e nel floppy c’è una cartella importante (hal91/) che altrimenti andrebbe persa.


📁 Contenuto del floppy

├── hal91
│   ├── add.tgz
│   ├── docs.gz
│   ├── hal91.ini
│   ├── loadlin.exe
│   ├── modules
│   │   ├── 3c501.gz
│   │   ├── 3c503.gz
│   │   ├── 3c509.gz
│   │   ├── loop.gz
│   │   ├── ne.gz
│   │   └── plip.gz
│   └── no-map.gz
├── HAL91.BAT
├── hal91.msg
├── initrd.gz
├── LDLINUX.SYS
├── SYSLINUX.CFG
└── vmlinuz

🔍 Analisi di initrd.gz

Con un secondo script ho estratto il contenuto di initrd.gz.

Ecco la struttura:

/bin     → bash, gzip, tar, mount, ecc.
/dev     → console, hda, sda, ram, tty, ecc.
/etc     → mtab, ld.so.cache
/lib     → libc5, ld-linux.so.1
/proc    → vuoto, viene montato
/linuxrc → lo script init

Ecco il contenuto di /linuxrc

#!/bin/sh
#
# hal91's initfile (/linuxrc), the bootup script of the system
#

VERSION=0.2.0

#
echo "c[hal91], ver. $VERSION by Øyvind Kolås (okolaas@online.no) initializing" 

PATH="/bin:/usr/bin:/usr/local/bin:."
TERM=linux
ignoreeof=10
no_exit_on_failed_exec=yes
export PATH DISPLAY TERM ignoreeof
umask 022

echo -n "mounting proc: "
mount /proc/ /proc -v -t proc 

INIT_LOC=`cat /proc/sys/kernel/real-root-dev`

echo -n "Loading init-script from: "
case $INIT_LOC in
  769) echo "hda1"
	mount /dev/hda1 /mnt/tmp
	;;
  770) echo "hda2"
	mount /dev/hda2 /mnt/tmp
	;;
  771) echo "hda3"
	mount /dev/hda3 /mnt/tmp
	;;
  772) echo "hda4"
	mount /dev/hda4 /mnt/tmp
	;;
  775) echo "hdb1"
	mount /dev/hdb1 /mnt/tmp
	;;
  776) echo "hdb2"
	mount /dev/hdb1 /mnt/tmp
	;;
  777) echo "hdb3"
	mount /dev/hdb1 /mnt/tmp
	;;
  778) echo "hdb4"
	mount /dev/hdb1 /mnt/tmp
	;;
  2201) echo "hdc1"
	mount /dev/hdb1 /mnt/tmp
	;;
  2202) echo "hdc2"
	mount /dev/hdb1 /mnt/tmp
	;;
  2203) echo "hdc3"
	mount /dev/hdb1 /mnt/tmp
	;;
  2204) echo "hdc4"
	mount /dev/hdb1 /mnt/tmp
	;;
  8805) echo "hdd1"
	mount /dev/hdb1 /mnt/tmp
	;;
  8806) echo "hdd2"
	mount /dev/hdb1 /mnt/tmp
	;;
  8807) echo "hdd3"
	mount /dev/hdb1 /mnt/tmp
	;;
  8808) echo "hdd4"
	mount /dev/hdb1 /mnt/tmp
	;;
   *) echo "floppy"
	echo -n " mounting: "
	mount /dev/fd0 /mnt/tmp -t msdos
esac;

[ -f /mnt/tmp/hal91/hal91.ini ] && cat /mnt/tmp/hal91/hal91.ini \
| tr -d '\r' >/hal91.ini
[ -f /hal91.ini ] && chmod 777 /hal91.ini
[ -f /hal91.ini ] && exec /hal91.ini

echo
echo "** hal.ini failed.. starting a shell"
echo
exec bash

⚙️ Il file hal91.ini

Ecco lo script che avvia il sistema:

#!/bin/sh
cd /
echo
echo -n "Extracting filesystem: "
tar -xozf /mnt/tmp/hal91/add.tgz 2>/dev/zero
echo

echo -n "Starting update:"
/bin/update
echo

echo -n "Copying documentation: "
[ -f //mnt/tmp/hal91/docs.gz ] && gunzip -c /mnt/tmp/hal91/docs.gz > /UserGuide.txt
echo

# (Configuring norwegian keyboard layout),
#echo -n "Setting keyboard mappings: "
#
#gunzip -c /mnt/tmp/hal91/no-map.gz > /tmp/key.map
#loadkeys /tmp/key.map
#echo
#rm /tmp/key.map

echo "Initializing gpm-services: "
#
gpm -m /dev/cua0 
echo 

umount /mnt/tmp
rm -r /mnt/tmp

echo -n "Loading loop-device module: "
gunzip -c /mnt/tmp/hal91/modules/loop.gz >/tmp/loop.o
insmod /tmp/loop.o 
rm /tmp/loop.o

echo "Opening Virtual Consoles: "
#
open -c 2 -- bash -rcfile /etc/bashrc
open -c 3 -- bash -rcfile /etc/bashrc
open -c 4 -- bash -rcfile /etc/bashrc
open -c 5 -- bash -rcfile /etc/bashrc
open -c 6 -- bash -rcfile /etc/bashrc
open -c 7 -- bash -rcfile /etc/bashrc
open -c 8 -- bash -rcfile /etc/bashrc
exec bash -rcfile /etc/bashrc

Il sistema funziona interamente in RAM, crea un FS temporaneo di 3MB, e vi estrae add.tgz e docs.gz.


🖥️ Requisiti minimi

  • CPU: 486 DX o superiore

  • RAM: almeno 8MB

  • Supporto: Floppy da 1.44MB o avvio da DOS con loadlin

Nel 1998 era incredibile. Oggi, un capolavoro da studiare!


🔄 Avvio con QEMU

start.sh

#!/bin/bash
# Avvia HAL91 con QEMU

qemu-system-i386 -fda hal91.img -boot a -m 16 -vga std

Funziona anche con VirtualBox, impostando l’immagine floppy come disco.


📦 Download

hal91.zip

 

Nessun commento:

Posta un commento

Hal91 quando linux stava in un floppy

    Eccoci per la pagina nostalgia canaglia.......  Hal91 è stata forse la terza distribuzione Linux che ho provato. Mi ha sempre affasci...