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/shis pre-POSIX ✅ — no$(...)command substitution, nogrep -q(use backticks andgrep … >/dev/null); the default interactive shell is ksh ✅. grepis classic SVR4: no\|alternation and nogrep -w✅. A multi-patterngrep '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 pergrep, oregrep. (Root-caused on a real A4000 + Z3660 wherenm /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:
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:
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 ✅:
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>/mount — without 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:
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¶
- Device list — every
/devnode with its major/minor number. - Versions — which release supports what; the
2.1c/ "2.2" caveats. - How Amix boots — Superkickstart → bootstrap → kernel.
- Kernel build and the driver model.
- Install walkthrough and first login and tour.
- amigaunix.com — end-user, install-media, and historical material (we cross-link rather than duplicate it).
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,pkgprotosymlink gotcha, AmixBP), §9 (install flow, tapedd … | cpiopipeline,amixadmfinish,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/relocunixrename caveat), §20 (stock pkg-system internals — the installed toolset and its three absencespkgask/removef/amixpkg, and thecontents-DB space-in-pathname defect).amix_21_root.adfanalysis viatools/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.adfanalysis viatools/inspect-adf.sh—uname -vmatch^2\.1.* 08004..$, Y2K-fixedsetclk, patch-apply mechanism.- Ditto, Writing Amix Device Drivers, 1990 European Amiga Developer's Conference — driver install
procedure (
/usr/sys→make→mknod→ reboot),cdevsw/bdevsw,rdbunix. asokero/va2000-amixrepo —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/shnote.isoriano1968/hydra-amixrepo —slink addaen /dev/hya0 hya0, nativemake/make force,mknod /dev/hya0 c 47 0, STREAMScdevswslot 47.- The amix-kerntools bench forensics @
8a76775— SVR4grephas no\|alternation and nogrep -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>/mounthelper requirement,/etc/mnttabbeing userland-maintained (O_APPEND), andumount(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-repopkgs/-segment URL layout, verified live 2026-07-22 ✅.