Skip to content

Command Cheat Sheet

This is a fast lookup of the commands that matter on Amiga Unix (Amix) 2.1: system administration, package management, building/installing a kernel and drivers, networking, clock handling, and getting data on and off the box. Each entry is a one-liner with a short note and a confidence tag. Where a command is nuanced enough to need its own page, this sheet links to the deep dive.

Read this first: Amix is AT&T System V Release 4 (SVR4) on the 68030 ✅, so most SVR4 admin conventions apply. But a few SVR4-isms bite hard:

  • the /bin/sh is pre-POSIX ✅ — no $(...) command substitution, no grep -q (use backticks and grep … >/dev/null); the default interactive shell is ksh ✅.
  • grep is classic SVR4: no \| alternation and no grep -w ✅. A multi-pattern grep 'a\|b' matches nothing and exits 1 — so it reads as "the symbol is absent," which is exactly the wrong conclusion when you are, say, checking whether a de-instrumented kernel still carries a diagnostic. Use one simple pattern per grep, or egrep. (Root-caused on a real A4000 + Z3660 where nm /stand/unix | grep 'a\|b' returned empty for two symbols that both exist.)

Commands below assume you are root unless noted.

For terminology (major/minor numbers, STREAMS, cdevsw, RDB, etc.) see the glossary. For every device node and its major/minor, see the device list. For what each version supports, see versions.


System administration

Command What it does Tag
sysadm SVR4 menu-driven admin front-end (standard SVR4 tool)
amixadm Amix's post-install / admin tool — sets nodename, domain, timezone, date, root password, X11
init <level> Switch run level (SVR4 init + /etc/inittab)
who -r Show the current run level
shutdown -i6 -g0 -y Reboot now (-i6 = run level 6); use -i0 to halt, -iS for single-user
telinit S Drop to single-user (maintenance) mode
Alt+F1 .. Alt+F8 Switch between the 8 virtual consoles

Run levels (SVR4 standard) ✅. Amix uses init, /etc/inittab, and SVR4 run levels. shutdown -i6 reboots; -i0 powers down to the bootstrap; S/s is single-user. The canonical "I changed the kernel, now reboot into it" step throughout these docs is:

shutdown -i6 -g0 -y

Finishing an install ✅. After the distribution is laid down and the kernel is built, amixadm walks you through the final configuration: node name, NIS/DNS domain, timezone, the date (set the year to 1999 or earlier on unpatched systems — see Time and the clock), the root password, and X11 setup. This is reconstructed from the root.adf install scripts (brief §9).

Note on the default password 🟡. Community reports a post-install login password of wasp. Treat as community lore, not a guarantee.

See first login and tour for what to do right after the install reboots.


Packages (SVR4 pkg*)

Amix ships the standard SVR4 packaging toolchain ✅. A package is a datastream or directory of files plus a pkginfo/pkgmap; you build with pkgmk/pkgtrans and install with pkgadd. For the on-disk internals — the /var/sadm database, the contents(4) record format, and a stock-image defect that breaks pkgrm/pkginfo -l out of the box — see package management.

Installed on the running system ✅: /usr/bin has pkginfo pkgmk pkgproto pkgparam pkgtrans; /usr/sbin has pkgadd pkgrm pkgchk installf (pkgadd/pkgrm/installf are root-only, r-x------). Not installed: pkgask, removef, and amixpkg — the last lives only on the root.adf install media (see below). There are no pkg* man pages on the box (the man tree is Amiga-reorganised). ✅

Command What it does Tag
pkginfo List installed packages
pkgadd -d <device|file> [pkg] Install a package from a device or datastream file
pkgrm <pkg> Remove an installed package
pkgproto <paths> > Prototype Generate a prototype file from a file tree
pkgmk -o -d <dir> Build a package (directory format) from a Prototype
pkgtrans <src> <dest.pkg> <pkg> Convert a directory package to a single datastream file
amixpkg -i -m -d <dev> -r /mnt -y standard Amix install-time package wrapper — on the root.adf install media only, not the installed system 🟡

Gotchas. - pkgproto omits symbolic links from the prototype 🟡 — add them back by hand or your package will be missing files. - amixpkg isn't on the installed system ✅ — it is the root.adf install-media wrapper that drives the distribution install (amixpkg -i -m -d … -r /mnt -y standard) ✅, not a general-purpose installed command. Its "widely reported broken" reputation 🟡 is at least partly explained by the next item. For your own packages use the raw pkgadd/pkgmk/pkgtrans tools, which are installed. - On the stock 2.1c image, pkgrm and pkginfo -l fail out of the box ✅ — a single malformed contents record (a file whose name contains a space) aborts every full parse of the package database with bad read of contents file … problem=unknown ftype. Deleting that one line fixes both. Full diagnosis and fix on the package-management page.

Pre-built packages 🟡. Michael Parson's AmixBP is 40+ re-bundled .pkg files hosted on amigaunix.com/downloads. An alternative distribution form seen in the wild is a zoo-compressed cpio archive 🟡.

HTTP package-repo layout gotcha ✅. When serving packages over HTTP for a network client, the payloads sit one directory below the catalog: a catalog filename field of stock/foo.pkg is relative to a pkgs/ segment, so the real URL is <repo>/pkgs/stock/foo.pkg, not <repo>/stock/foo.pkg. A hand-rolled probe that drops the pkgs/ segment gets a 404 and mis-reads it as "the payloads were never published" — the client itself builds the correct URL, so only manual host-side checks fall into this. Verify against the client's own catalog, not a guessed path. Full format spec — tree, catalog grammar, integrity model, client behaviour: the package repository format.


Kernel and driver builds

Amix is a monolithic SVR4 kernel with no loadable modules ✅ — drivers are statically linked in, so adding or changing a driver means relinking the kernel and rebooting. The kernel source/objects live in /usr/sys ✅; the switch tables live in master.d/kernel.c ✅.

Command What it does Tag
cd /usr/sys Kernel build root (object libraries + makefiles)
make Relink the kernel from the configured cdevsw[]/bdevsw[] tables
make install Build/stage the new kernel image (relocunix)
cp relocunix /stand Copy the new kernel to /stand before writing the boot partition
make bootpart KERNEL=relocunix Write the kernel to the 2 MB boot partition
mknod /dev/<name> c <major> <minor> Create a character device node
mknod /dev/<name> b <major> <minor> Create a block device node

The full driver install loop (Ditto paper procedure + va2000 repo refinements ✅):

# 1. drop driver .o (and source) into a subdir under /usr/sys, add it to that Makefile
# 2. edit master.d/kernel.c: add cdevsw[]/bdevsw[] slot, int2_tbl[]/init_tbl[] entries, extern decls
cd /usr/sys
make                              # produces the new kernel
make install                      # stage as relocunix
cp relocunix /stand
make bootpart KERNEL=relocunix    # write the boot partition
mknod /dev/mydev c 68 0           # create the node (char major 68, minor 0 — example)
shutdown -i6 -g0 -y               # reboot into the new kernel

Kernel-image name 🟡. The 1990 Ditto paper calls the built kernel rdbunix; modern 2.1 systems and the community repos call it relocunix — treat this as a historical rename and verify per version (brief §13.3). The modern repos relink with make force (full kernel) or make bootpart KERNEL=… (boot partition) ✅.

Before relinking, clean stale objects ✅ (from the va2000 driver notes) or the link picks up old code:

rm -f amiga/config/unix.o master.d/exp unix

Always keep the old /unix as a fallback ✅ — if the new kernel panics, you can boot the previous one.

Deep dives: the kernel build process, the driver model, writing a char driver, and writing a STREAMS driver.


Networking

Amix networking is SVR4 STREAMS TCP/IP ✅. The A2065 Ethernet interface is aen0 ✅. There is no DHCP — static IP only ✅, and DNS resolution is off by default ✅ (the system resolves names from /etc/hosts until you switch it on).

Command What it does Tag
ifconfig aen0 Show the A2065 Ethernet interface state
ifconfig aen0 <ip> netmask <mask> up Bring the interface up with a static address
slink addaen /dev/hya0 hya0 Link the Hydra STREAMS NIC into IP (Amix SVR4.0 has no ifconfig plumb), then ifconfig hya0 …
route add default <gw> 1 Add a default route — the trailing 1 (metric/hops) is required
netstat -rn Show the routing table

Default route — don't drop the metric ✅:

route add default 192.168.0.1 1

The trailing 1 is the hop count/metric and is mandatory on this SVR4 route.

Enabling DNS ✅ (off by default — the system uses /etc/hosts). The steps are:

# 1. point libsocket at the DNS-capable resolver shared library
ln -f /usr/lib/libsockdns.so /usr/lib/libsocket.so
# 2. edit /etc/netconfig so name lookups use DNS
# 3. start the name server / resolver: in.named
# 4. create /etc/resolv.conf with your nameserver(s)

After this, hostname lookups go through DNS instead of /etc/hosts.

Other networking facts. - NFS server and client both work ✅. - SLIP is buggy — you must reboot between sessions 🟡. - No PPP 🟡. - The Hydra NIC is a STREAMS/DLPI driver registered at cdevsw slot 47 (hya) ✅; see the Hydra case study.

Deep dive: networking. For the interface device nodes, see the device list.


Mounting filesystems

Amix uses the SVR4 mount(1M)/umount(1M) front-ends. mount -F <fstype> <special> <dir> execs the per-fstype helper /usr/lib/fs/<fstype>/mountwithout that helper binary the fstype cannot be mounted at all ✅. Two gotchas worth knowing:

Fact Detail Tag
/etc/mnttab is userland-maintained The kernel never writes it; the per-fstype mount helper appends the line (a single O_APPEND write), the way /proc//dev/fd do
umount(1M) matches by the special field It locates the mount by the entry's special (first) field — so a device-less filesystem must record its mount point there (like /proc /proc proc …), or umount silently fails while still deleting the mnttab line
Repeated mount stacks silently A second mount of the same media on the same dir returns 0 and stacks; the fs must reject it. Duplicate fstype lines in /etc/mnttab are the tell — see quirks #19

The kernel-side half of this contract (writing an in-kernel filesystem) is on the driver model.

Time and the clock

Command What it does Tag
setclk Read/write the hardware (battery-backed) clock
date Show/set the system time (set via amixadm at install)

Y2K warning ✅. Unpatched Amix has a Y2K problem on two fronts: - setclk has a %02d year-formatting bug ✅, and - the kernel caps the date at 1999 ✅.

So on an unpatched system, set the install date to 1999 or earlier ✅. The community fix is the patch disk (raising the system to 2.1p2a / kernel 2.1c), which ships a Y2K-corrected setclk ✅. After applying the patch, run the patched setclk to set a correct post-1999 date.

See the quirks page for the clock-drift and Y2K details, and the patch disk anatomy for how the patch is applied.


Media: tape, raw devices, and identifying the system

The distribution is streamed from QIC tape at SCSI ID 4 ✅ — the tape device is hard-coded. The raw, no-rewind tape node is /dev/rmt/4hn ✅ (the n = no rewind on close; 4h = unit 4, high density). The hard disk is ID 6 by convention — the installer prompts for the disk target; the chosen ID is baked into the device names once installed 🟡.

Command What it does Tag
uname -svrm Print system name, OS version, release, and machine (m68k)
uname -a Full identification line
dd if=/dev/rmt/4hn bs=256k \| cpio -imdcu Read the distribution from tape and extract it
dd if=/dev/rmt/4hn bs=256k \| zcat \| cpio -imdcu Same, for a compress(1)-compressed tape stream
cpio -icdmuv Extract an ASCII (-c) cpio archive, making dirs, preserving mtime

The install-tape pipeline ✅ (from the root.adf scripts) reads the no-rewind raw tape and pipes it through cpio:

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

cpio flags used here: -i extract, -m retain modification times, -d create directories as needed, -c ASCII header format, -u overwrite unconditionally.

Identifying the running system ✅. The patch disk's own header script greps uname -v for the pattern ^2\.1.* 08004..$ before it will apply ✅, so uname is the canonical way to check what you're on:

uname -svrm     # e.g. m68k release/version fields used by the patch's uname -v check

Non-standard tape drives 🟡/✅. The kernel only supports specific tapes (A3070 QIC-150 and similar). viper_kludge (Frank "Crash" Edwards), shipped on root.adf ✅, patches kernel memory so an Archive Viper 2150S works — but its README warns it is incompatible with A3070/Caliper/Wangtek/Sankyo drives ✅. Tape-free installs (write a cpio image to the swap partition from Linux/AmigaDOS, then extract with cpio) are documented on comp.unix.amiga 🟡.

For the SCSI ID rules and other hard-coded limits, see the hardware page and the quirks checklist. For the install in full, see the install walkthrough.


See also

Sources

  • sources/research-brief.md §3 (boot/kernel build, make bootpart KERNEL=relocunix), §4 (run levels, virtual consoles, pkg*/amixpkg, monolithic kernel), §5 (device-driver model, mknod, major/minor, /usr/sys, kernel.c), §7 (toolchain & packaging, pkgproto symlink gotcha, AmixBP), §9 (install flow, tape dd … | cpio pipeline, amixadm finish, viper_kludge), §11 (networking: aen0, route add default … 1, DNS-enable steps, NFS/SLIP/PPP; userland shells and pre-POSIX /bin/sh), §12 (quirks: SCSI IDs, Y2K/setclk, DNS off by default), §13 (rdbunix/relocunix rename caveat), §20 (stock pkg-system internals — the installed toolset and its three absences pkgask/removef/amixpkg, and the contents-DB space-in-pathname defect).
  • amix_21_root.adf analysis via tools/inspect-adf.sh/dev/rmt/4hn, amixpkg -i -m -d -r /mnt -y standard, viper.README, BPART=/dev/dsk/c${SCSI}d0s${BOOTPART} (SCSI ID hard-coding).
  • amix_21_patch.adf analysis via tools/inspect-adf.shuname -v match ^2\.1.* 08004..$, Y2K-fixed setclk, patch-apply mechanism.
  • Ditto, Writing Amix Device Drivers, 1990 European Amiga Developer's Conference — driver install procedure (/usr/sysmakemknod → reboot), cdevsw/bdevsw, rdbunix.
  • asokero/va2000-amix repo — rm -f amiga/config/unix.o master.d/exp unix, cp relocunix /stand, make bootpart KERNEL=relocunix, mknod /dev/va2000 c 68 0, pre-POSIX /bin/sh note.
  • isoriano1968/hydra-amix repo — slink addaen /dev/hya0 hya0, native make / make force, mknod /dev/hya0 c 47 0, STREAMS cdevsw slot 47.
  • The amix-kerntools bench forensics @ 8a76775 — SVR4 grep has no \| alternation and no grep -w (a multi-pattern grep silently matches nothing and exits 1), root-caused on a real A4000 + Z3660, 2026-07-12 ✅.
  • The amix-cdfs project @ 31e8c3b (6f727b1+d3beca7, platform/amix/mount.c) — the /usr/lib/fs/<fstype>/mount helper requirement, /etc/mnttab being userland-maintained (O_APPEND), and umount(1M) matching by the special field (so a device-less fs records its mount point there), measured on a real A4000 + Z3660 + stock-kernel precedent (/proc, /dev/fd), 2026-07-13 ✅. See the driver model.
  • amigaunix.com — networking, patch-disk, y2k-dst, tape-creation, downloads pages (community-reported items above).
  • The amix-packagemanager repo tooling (tools/repo/publish.sh, gen-catalog.py) — the HTTP package-repo pkgs/-segment URL layout, verified live 2026-07-22 ✅.