Skip to content

Installing Amix (Emulation-First Walkthrough)

This page walks the complete Amix 2.1 install, from the two install floppies through partitioning, streaming the distribution off a SCSI tape, building the kernel into the boot partition, first boot, and finally applying the patch disk to reach kernel 2.1c (2.1p2a). The flow below is reconstructed from the actual scripts on the install floppies ✅ — every step maps to something the installer really does.

Before you start: stand up an emulator first. This page assumes a working virtual A3000 with the correct CPU/MMU/FPU and two SCSI targets (a disk on ID 6, a tape on ID 4). Set that up with the WinUAE setup guide (the reference target) or the FS-UAE setup guide, or Amiberry 8.x — which also emulates the A3000 SCSI disk + tape Amix needs. There is no working QEMU recipe 🟡. For period-correct real hardware instead of emulation, see installing on real hardware.

Licensing: the boot/root/patch floppies and the distribution are Commodore material. Since 2026-09-23 the Amix release restriction is lifted (Amiga Corporation's approval — see AGENTS.md §5); until then this project treated them as abandonware, not licensed for redistribution. This repo does not ship them. Obtain the images yourself from amigaunix.com / archive.org. Verify them against sources/CHECKSUMS.txt before use.

The three floppies and what each does

Amix 2.1 installs from three 880 KB Amiga floppy images. Their internals are documented in detail on the boot disk anatomy, root disk anatomy, and patch disk anatomy pages; the short version:

Floppy Role Contents (✅)
amix_21_boot.adf Bootstrap AmigaDOS OFS bootblock (DOS\0 + checksum + 68k bootstrap) → loads and decompresses a checksummed install kernel. No AmigaDOS filesystem on the disk.
amix_21_root.adf Miniroot An s5 miniroot image: the installer ELF binaries (cpio, fsck, dd, amixpkg, …), the /bin/sh install scripts, and viper.README.
amix_21_patch.adf Patch Self-extracting "Patch Disks 1 & 2" → brings 2.1 up to 2.1p2a / kernel 2.1c.

The distribution itself (the actual OS packages) does not live on a floppy — it streams from a SCSI tape at ID 4 (see Stage 4).

Prerequisites checklist

These are hard constraints baked into the kernel and the install scripts ✅. Get them wrong and the install will not complete.

  • CPU: 68020 or 68030 with a real MMU (not 68EC020/030) plus a 68881/68882 FPU. No soft-float.
  • Emulator: MMU ON, JIT OFF (JIT causes kernel panics), FPU 68882. See the WinUAE config table.
  • SCSI hard disk on ID 6 — the conventional disk target (the installer prompts for it; ID 6 is the default everything assumes, and the ID is baked into the device names once installed). The installer's BPART derives from /dev/dsk/c${SCSI}d0s${BOOTPART} ✅.
  • SCSI tape on ID 4 — the distribution device is /dev/rmt/4h ✅.
  • Fast RAM: 4 MB minimum; on an A3000, 16 MB of motherboard RAM for the stock install kernel — a bigger bank loads the kernel below 0x07000000, where the stock kernel never registers the internal SCSI and cannot mount root (quirks §57) ✅. The 040/060 kernels run 128 MB ✅ (measured on a 68060; the 68040 uses the same 4 KiB-page kernel, not yet measured 🟡). (The old "16 MB maximum" rule had the mechanism wrong, not the advice.) The real limit is total describable RAM, which fails silently — the RAM ceiling.
  • Disk image size: roughly 450–900 MB is the usual range for the ID 6 hardfile 🟡; keep individual partitions ≲ 1 GB 🟡.

Stage 0 — wire up the virtual disks

In your emulator, attach:

  • a writable RDB hardfile on SCSI ID 6 (this becomes the system disk);
  • a tape image on SCSI ID 4 holding the distribution as a cpio stream;
  • amix_21_boot.adf in DF0.

The exact knobs differ per emulator — for WinUAE map ID 6 to the hardfile and ID 4 to the tape image (WinUAE table); for FS-UAE use hard_drive_0_controller = scsi6 and hard_drive_0_type = rdb (FS-UAE snippet).

Tape-free alternative 🟡: if you cannot present a tape, the community documents dd-ing a cpio distribution image onto the swap area (or another partition) from Linux/AmigaDOS and extracting it with cpio directly — discussed on comp.unix.amiga. That bypasses Stage 4's tape read but is fiddlier; the tape path below is the documented default.

Stage 1 — boot the install kernel

Power on with amix_21_boot.adf in DF0. The Superkickstart ROM reads the OFS bootblock, runs the 68k bootstrap, which then loads and decompresses the install kernel, verifying its checksum ✅. You may see bootstrap messages like Load boot volume %d; failures surface as Decompression failed! or WARNING! Kernel file checksum mismatch. (these strings are embedded in the bootstrap ✅).

The install kernel is NFS/RPC-capable — it carries a full RPC client string table — which is what lets a networked install pull packages, though the tape path is what we use here.

Stage 2 — mount the miniroot

When prompted, insert amix_21_root.adf. Its body is an SVR4 s5 filesystem (superblock at byte 0x200, s5 magic 0xfd187e20 ✅; the lost+found and fsck strings in the image once suggested UFS, but they are not a UFS fingerprint — see the root disk anatomy), and it mounts as the miniroot. The installer — a set of m68k ELF binaries plus /bin/sh scripts living on that miniroot — now takes over.

Note: the Amix /bin/sh is pre-POSIX ✅ — no $(...) command substitution, no grep -q. This matters if you ever read or edit the install scripts: they use backticks and explicit redirection.

Stage 3 — partition the disk (RDB)

The installer inspects the ID 6 disk's Rigid Disk Block (RDB) scheme, looks for a "suitable UNIX rdb," and either computes "obvious" partition choices or asks you ✅. The default layout it builds:

Partition Purpose Sizing rule (from the root.adf scripts ✅)
/ (root) Root filesystem Remainder / user choice
swap Paging Larger when the disk is bigger than BREAKPT=120 MB
boot/bootstrap Holds the bootable kernel BOOTSIZE=2 MB → BOOTLEN = BOOTSIZE * 2048 blocks
data Additional storage User choice

Filesystem type is asked per filesystem. The choices are s5 (System V — likely a 3B2-lineage holdover) and ufs (Berkeley FFS — recommended 🟡, on community consensus). The scripts default to s5, not ufs ✅ — so do NOT just press RETURN if you want UFS; you must type ufs explicitly. The root partition prompt is:

readask "What file system type is the root partition? [s5] "
case $ask in
""|"s5")  ANS="s5" ;;                          # empty input -> s5
"ufs")    ANS="ufs"; ROOT_OPT="$UFS_OPT" ;;    # only when typed explicitly
esac

There is no [ufs] prompt anywhere in amix_21_root.adf (0 occurrences of [ufs], 2 of [s5]) ✅. Note also the sibling branch ROOT_FSYS="s5" # Johann ROM can only boot s5 filesystem, so on some ROM/controller combinations s5 is not merely the default but the only bootable choice 🟡.

Why these numbers matter: BOOTSIZE=2 and the ID-6/ID-4 wiring are not cosmetic — make bootpart in Stage 5 writes the kernel into exactly this 2 MB boot partition, and the distribution read in Stage 4 targets /dev/rmt/4h. The exact RDB partition type IDs Amix stamps (boot vs swap vs UFS) are not publicly documented 🔴.

Stage 4 — stream the distribution from tape (SCSI ID 4)

With the target partitions created and mounted under /mnt, the installer streams the distribution off the tape. The core command (driven by amixpkg -b/-i -r /mnt) is ✅:

dd if=/dev/rmt/4hn bs=256k | cpio -imdcu

/dev/rmt/4hn is the no-rewind, high-density tape at SCSI ID 4; bs=256k is the block size; cpio -imdcu extracts (-i) in copy-in mode, preserving modification times (-m), creating directories (-d), copying unconditionally (-u), with a portable header (-c). Some package members arrive compressed, handled by a zcat variant of the same pipe ✅:

dd if=/dev/rmt/4hn bs=256k | zcat | cpio -imdcu

The package install is orchestrated by amixpkg. The root.adf scripts invoke it as ✅:

amixpkg -i -m -d -r /mnt -y standard

That installs (-i) the standard package set, moving/deleting per the package's directives, rooted at /mnt, answering yes non-interactively. (amixpkg is widely reported to be flaky 🟡; the scripted invocation above is the reliable path, and it is what the installer itself uses.)

Non-standard tape drives — viper_kludge

If your tape drive is an Archive Viper 2150S (a common period substitute), the standard Amix tape driver mis-handles it. The root.adf ships viper_kludge by Frank "Crash" Edwards ✅ — it patches kernel memory at install time so the non-standard drive works (see viper.README on the miniroot).

Warning: viper_kludge is incompatible with the standard A3070 and with Caliper/Wangtek/ Sankyo drives — its own README explicitly warns not to use it with those ✅. Only apply it for the drives it names. In emulation you generally present a standard A3070-style tape, so you will not need viper_kludge — leave it alone.

Stage 5 — build the kernel and write the boot partition

After the files land on disk, you build the runnable kernel and write it into the 2 MB boot partition ✅.

The kernel sources/objects live in /usr/sys; you build there with make, producing the kernel image (modern 2.1 systems call it relocunix; the 1990 Ditto paper called the equivalent image rdbunix — a historical rename 🟡). Then write it to the boot partition:

make bootpart KERNEL=relocunix

make bootpart copies the kernel into the BOOTSIZE=2 MB boot partition created in Stage 3 so the Superkickstart ROM can boot it directly from the SCSI disk on next power-on. (The general kernel build/relink flow — /usr/sys, editing master.d/kernel.c, make install, copying to /stand, then make bootpart — is covered in depth on the kernel build page.)

Then shut down and reboot:

shutdown -i6

Remove the floppy so the machine boots from the SCSI disk (ID 6).

Stage 6 — first boot: Commodore's system.setup

The machine now boots relocunix from the boot partition. At every boot /etc/sysinit runs Commodore's /usr/amiga/bin/system.setup for as long as that script is executable ✅ (the stock files). It asks, in order:

  • nodename (hostname) and domain;
  • the date and time — the date is typed as mmddyy, so only a year ≤ 1999 fits ✅ (a limit of the tool, not the kernel; set the real date afterwards — see the Y2K step);
  • "Would you like to assign a password to all of the system accounts? [y]" — yes sets root's password and copies it to the other system accounts, and a second question covers guest (details: accounts and remote logins);
  • a first user account, the monitor type, X11 for a colour card, an xdm login screen, and Netnews.

It then shows a summary; answering that nothing needs changing clears the script's execute bit, so it does not run again. amixadm is the same steps as a menu, for later use ✅.

Default password lore 🟡: community sources report a post-install login password of wasp on pre-built images. A system you installed has the password you typed here — or none, if you declined the password questions. Set one with passwd.

After this, you have a running Amix 2.1. For a guided look around your new system — virtual consoles (Alt+F1..F8), the default ksh, and starting X — see the first login and tour page.

Stage 7 — apply the patch disk (→ 2.1p2a / kernel 2.1c)

The retail 2.1 is not the end state. The patch disk brings it to 2.1p2a / kernel 2.1c, the release widely considered definitive (it carries the inet/NFS fixes) ✅. Our patch.adf self-identifies as "Patch Disks 1 and 2 for International, USA-Only, 2-user, and Unlimited-User Amiga UNIX System V Release 4.0 Version 2.1." ✅

The patch disk is a self-extracting hybrid ✅: the first 1 KB is a #!/sbin/sh bootstrap script, and everything after byte 1024 is a single SVR4 ASCII cpio (070701) archive whose payload is an LHA-compressed archive.lha. To apply it, run the patch image's bootstrap as a root shell script on the running system. Internally that script (paraphrased from the decoded header ✅):

# starts flopd, sleeps 10s (REQUIRED), verifies you are root,
# and checks that `uname -v` matches ^2\.1.* 08004..$  (else "USE AT YOUR OWN RISK")
QUIETDD=y dd if="$0" bs=1k iseek=1 2>/dev/null | (cd /; QUIETCPIO=y cpio -icdmuv)
uncompress -f /var/patch/*.Z
exec /var/patch/apply

apply then uses the bundled lha to unpack archive.lha, honoring the patch's replace.list / modify.list / delete.list plus changes/preload. The full mechanism is dissected on the patch disk anatomy page.

Version-check guard: the patch refuses to run unless uname -v already matches ^2\.1.* 08004..$ ✅. If it prints "USE AT YOUR OWN RISK," you are not on a clean 2.1 — stop and recheck your install rather than forcing it.

After the patch completes and you reboot, uname should reflect the patched 2.1c kernel.

Stage 8 — Y2K: make the clock work past 1999

Stock 2.1 has one Y2K bug, in the tooling, not the kernel ✅ (corrected 2026-09-29). setclk, which /etc/sysinit runs at every boot, hands the battery-clock year to date as %02d of years-since-1900 (126 for 2026); date rejects it (date: bad conversion), so the box never takes its time from the battery clock. The kernel itself has no year cap — date MMDDhhmmCCYY with a 4-digit year sets 2026 — but amixadm accepts only ≤ 1999, which is why Stage 6 asked for such a date. The patch disk does not fix this (its cpio carries no setclk). The fix is the community-patched setclk (the AmigaUnix wiki's y2k-dst page), plus /etc/clkzone naming the zone the battery clock holds — AmigaOS keeps it in local time. Details: quirks §7. The community Y2K/DST notes on amigaunix.com cover the corner cases.

Recap: the install in one screen

1. DF0 = boot.adf            → bootstrap loads & decompresses the install kernel
2. insert root.adf           → s5 miniroot mounts; installer runs
3. partition the ID 6 disk   → BOOTSIZE=2 MB boot part, swap (BREAKPT=120), FS: type ufs (default s5)
4. tape @ SCSI ID 4:         dd if=/dev/rmt/4hn bs=256k | cpio -imdcu
                             amixpkg -i -m -d -r /mnt -y standard
                             (viper_kludge only for nonstandard tape drives)
5. make bootpart KERNEL=relocunix ; shutdown -i6 ; remove floppy
6. first boot → system.setup: nodename/domain/date+time (≤1999)/system-account pw/guest pw/user/X11
7. apply patch disk          → 2.1p2a / kernel 2.1c
8. Y2K: community setclk + /etc/clkzone → clock from the RTC

See also

Sources

  • The first-boot system.setup (read 2026-11-02) ✅ — the stock etc/sysinit and usr/amiga/bin/system.setup, passwdall and amixadm in amigaux/amix-system (761a82e). This replaces the earlier "amixadm walks you through" reading.
  • The 2026-09-29 stock-kernel RAM-layout measurement ✅ — on the emulated bench the same 64 MB A3000 motherboard bank boots a kernel that probes for the A3000 SCSI and stops the pinned stock kernel at s5mountroot VOP_OPEN error 6 (no card 0), symbolised against the stock autocon() load-address guess (first-party record, 2026-09-29; quirks §57).
  • The 2026-09-29 Y2K correction ✅ — date 092912002026 accepted on a stock 2.1c box; the stock setclk boot run ending in date: bad conversion; the patch disk's 103-member cpio carrying no setclk (quirks §7; first-party record, 2026-09-29).
  • sources/research-brief.md §9 (installation flow) and §10 (boot/root/patch disk anatomy) — the primary grounding for every stage on this page.
  • amix_21_root.adf analysis via tools/inspect-adf.sh — partition logic (BOOTSIZE=2, BREAKPT=120, ANS="ufs", BPART=/dev/dsk/c${SCSI}d0s${BOOTPART}), the tape pipe (dd if=/dev/rmt/4hn bs=256k | cpio -imdcu), amixpkg -i -m -d -r /mnt -y standard, and viper.README.
  • amix_21_boot.adf analysis via tools/inspect-adf.sh — OFS bootblock, compressed checksummed install kernel, embedded bootstrap/NFS-RPC strings.
  • amix_21_patch.adf analysis via tools/inspect-adf.sh — the 1 KB #!/sbin/sh bootstrap, the uname -v ^2\.1.* 08004..$ guard, the 070701 cpio + archive.lha payload, and the self-identifying "Patch Disks 1 and 2 … Version 2.1" string.
  • Ditto, Writing Amix Device Drivers, 1990 European Amiga Developer's Conference — kernel build flow (/usr/sys → make → boot partition; rdbunix/relocunix naming).
  • amigaunix.com — installation, patch-disk, and Y2K/DST notes; default-password lore (🟡 community-reported).
  • comp.unix.amiga (archived) — tape-free install discussion (🟡).