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 nonmtools
?
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[40;37;1m[hal91][0m, 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