Repository navigation
Releases
v0.5.1
Installs over a private QEMU network no longer stall for minutes after the guest drops packets.
Fixes
- Installs no longer stall for minutes after lost packets. When an emulated machine's network card drops a burst, Instigator now resends the rest straight away instead of waiting longer after every retry. Before, one install could sit idle for more than ten minutes in total.
- The install shell sends directory listings and other short output in fewer, fuller packets, so emulated machines drop them less often.
v0.5.0
Instigator can now share host folders with IRIX as well as serve installation media. The release also includes ready-made IRIX configurations and guides for installing, sharing, extracting files, and troubleshooting.
File sharing
instigator shareexports host directories, read-write, over NFSv2 and NFSv3 on UDP and TCP, with portmap and MOUNT. It can listen on the host network or a private QEMU network. Private-network mode needs no root privileges.serve --share NAME=DIRadds shares alongside installation media on a private network. Repeat--sharefor several exports.- Shares stay inside their host directory, including when resolving symlinks. Guest writes run as the user who started Instigator. File handles survive restarts, with a persistent path table on Windows and filesystems without file birth times.
Installation and networking
- Shipped configs cover IRIX 6.5.30 standard and minimal installations, and IRIX 6.5.22 standard installations. Media URLs are filled in. Change the server and client addresses before use. The general
addons:list adds the supplied MIPSpro or RAD4 installation files. - IP22 sets print the 32-bit
fx.ARCSpartitioner boot command. The hardware guide explains returning to the maintenance menu to boot the installer. Indy and Indigo2 installation remains untested on hardware. - Private networks answer DHCP alongside BOOTP and can offer a hostname.
share --client MAC=IP,HOSTNAMEsupplies those settings without an installation config. dhcp_server_idandshare --dhcp-server-idlet a guest keep the same DHCP server identity when moving between private and QEMU user networks. For Origami's default user network, use192.0.2.2. The server's own address and BOOTP replies stay unchanged. Long-term lease renewal has not been observed from IRIX.
Fixes
- Remote image reads retry transient range-request failures.
- NFS UDP socket buffers are raised for macOS transfers.
- Private share shutdown no longer blocks on failure reports.
NFS has no NLM locking or NFSv4 support. Path-table handles cannot detect a host process replacing a file at the same path. See the sharing guide for permissions, ports, and limitations.
v0.4.2
v0.4.1
Changelog
- 06c9fad check: probe remote sources instead of reading them
v0.4.0
Source builds require Go 1.27.1 or newer.
Instigator can now extract files from SGI install media and run add-on installation and post-install commands from generated scripts.
instigator extractreads products from images, directories, or configured install sets and writes their files with a JSONL manifest.--manifest-onlyinspects entries without reading archives.--unpackremoves installed.Zand.zcompression. Extraction combines ordered sets into an installed view, but it does not apply every replacement rule that IRIXinstuses. Check the manifest before using the output as an exact installed system.- Mark third-party media
addon: trueand select it in an install script'sthenpass to install it after the operating system. This preserves operating-system links that a driver could otherwise replace with directories during the first pass. Eachgois timed separately. - An install script's
post_installcommands run throughshrootafter its lastgo. The completion line appears only after every command succeeds. Instigator restores the default/bin/cshshell preference on success. If a command fails,inststops the command file and leaves/bin/shselected.
Release archives include the third-party notices for the extraction decoders. Binaries: Linux and macOS (amd64/arm64), Windows (amd64).
v0.3.2
Source builds require Go 1.27.1 or newer.
Instigator reports its executable version and records elapsed time for generated install attempts.
instigator --versionreports the module version embedded by Go. Submodule and worktree builds record Instigator's own revision and dirty state.- Generated install scripts log timestamped starts and returns from
go, including the script, client, attempt and elapsed time. Captures retain these events, and trace summaries pair them by attempt. Missing returns remain incomplete. - Command-line failures include a timestamp and error severity.
Install timing includes marker fetch overhead and prompts during go. A return confirms that execution reached the command after go. Verify installation success from guest output and first boot. Handwritten scripts have no timing markers.
Generated handoffs were tested with installed IRIX 6.5 inst 4.1. A complete successful miniroot installation with the timing markers has not been verified.
Binaries: Linux and macOS (amd64/arm64), Windows (amd64).
v0.3.1
Private-network installs use fewer backing reads, allocations, and socket writes.
- Small
ddblocks are grouped into about 32 KiB transfers while preserving count, skip, record accounting, and foreground interruption. - QEMU private networking batches up to 32 frames already queued and flushes immediately when the queue empties. Receive scratch is reused after packets are copied into gVisor-owned storage.
- IRIX SIGINT requests interrupt supported foreground file transfers, allowing the installer to seek without first receiving the rest of each file. Background sessions and unsupported pipelines keep their previous signal behavior.
- A complete QEMU frame header with a missing body is reported as a truncated frame.
In one fresh-disk QEMU/IRIX comparison on macOS, the grouped-transfer and framing
changes reduced the package phase from 27m45s to 22m51s. Median fixed-transfer
throughput increased from 25.3 to 31.9 MB/s. All six guest checksums matched, and
both installations rebooted to serial login.
This comparison predates the SIGINT fix and does not measure its additional
effect. Both installers logged the same package diagnostics. Details and limits
are in docs/qemu-network-performance.md.
Binaries: Linux and macOS (amd64/arm64), Windows (amd64).
v0.3.0
IRIX media validation, V7 archives, and Windows private-network installs.
instigator checkassembles and validates the configured media tree before service ports are bound. It accepts a config file or standard input. Local.tar,.tardist, and compressed archive sources are supported. Orderedreplacementsentries let a named later layer replace files from one earlier layer. Unrelated conflicts still require an exact collision winner.- V7 tar archives inside gzip now unpack through the bounded extraction path. Named install selections are checked against served
.swor.manfiles, including the selected package type. - Windows QEMU installs can use
--network-tcpwith an explicit loopback IP and port. It uses the same framed private network as the Unix socket mode. The first local process to connect takes the single install session. - When
instopens its numbered distribution menu after the primary source is reopened, choose thedoneitem on the guest console. The sourced install script then continues with its package selections. - Private install shells remain open during long quiet transfers. If the QEMU machine disconnects, Instigator stops serving and records that reason in the capture.
Binaries: Linux and macOS (amd64/arm64), Windows (amd64).
v0.2.1
Readiness signalling, always-lazy raw images, and multi-homed BOOTP.
- Readiness over sd_notify.
servereports ready once the install sets are built and the listeners are bound, so aType=notifyunit orsystemd-notify --forklearns when it is serving. The operational log moves to stderr, and a readiness report that cannot be delivered is now fatal rather than ignored. - Raw images are always read by HTTP byte-range. The per-layer
sha256key is gone, and ignored if still present, so a full disc is never downloaded just to verify it. - BOOTP replies leave by the interface the request arrived on, which is correct on a multi-homed host.
- The command line is parsed with
urfave/cli.
Binaries: Linux and macOS (amd64/arm64), Windows (amd64).
v0.2.0
Changelog
- d775c41 Merge pull request 'serve: keep setuid, setgid, and sticky bits on served files' (#13) from efs-mode-bits into main
- cdb8bc9 bootp: enable SO_BROADCAST on Windows
- cb5990e config: source/base/stand/sha256 layers and a credentials block
- 7b92398 efs: add read-only io/fs.FS view over an image
- 351a47f efs: carry the inode mode in the fs view's Stat
- a147ddb efs: report special-file types through the fs view
- 03503b9 efs: separate a missing entry from a read error, and sort dir entries
- 62fe0ae rcmd: match Winsock error codes on Windows
- 5b5a2e2 release: build macOS and Windows binaries
- 1cefb14 serve: hint at privilege when a bind is refused
- 9347504 serve: keep setuid, setgid, and sticky bits on served files
- eca0f7d serve: redact URL sources in logs and run.json
- ee62486 serve: resolve layer sources through a configured source resolver
- 5ca0f36 source: add fetch timeouts
- 768a2c9 source: bound the range reader's chunk cache
- 510497e source: check the cache file close before verifying
- 1fbbf97 source: chunk-caching byte-range reader with a consistency pin
- 2b18933 source: content-identity cache with atomic install
- bf14356 source: end-to-end test of a remote set served through Build
- f8b0e22 source: guard the range reader for concurrent reads
- 480cfba source: harden and test the tar extractor's symlink checks
- 741fc02 source: harden the credential redirect check and the fallback store
- c67f456 source: host-matched basic auth credentials from config
- a8d3e45 source: key the fetch cache on the full url
- 983196f source: prove ForceWhole takes the whole-file branch
- 72df917 source: reject a 200 to a ranged chunk GET instead of caching it
- 675fb64 source: remove dead ExpandEnv
- ac7951c source: replace buf-readerat with an owned concurrency-safe chunk cache
- 1619510 source: resolve a local or remote source to a read-only filesystem
- e9a27a8 source: rework fetch, extract and range reads onto libraries
- 82a2678 source: safe extractor for raw, gzip and tar archives
- 69b956b source: signal EOF only on a short range read
- 70d8f89 source: strip auth on cross-host redirect
- 322cf31 source: test the whole-file fetch fallback and cache reuse
- ea744af source: whole-file fetch with optional sha256 verification
- c665c16 vfs: assemble the tree through one io/fs.FS walker
- c5c31ae vfs: build install sets from a resolved source, with base and stand
- 798f7cc vfs: document the over-climbing-symlink divergence in resolveLink
- 2dc6b6c vfs: drop the dead source.closer field
- dacce88 vfs: fix ownerOf's comment on directory-layer permissions
- 6dfaa0b vfs: generalize Close's doc, fix a test that skipped its own check
- b646fd3 vfs: guard the directory-layer symlink origin invariant
- 0853a78 vfs: move the mkfifo test to a unix-tagged file
- bd32a9d vfs: open an image from any reader and add the resolver seam
- 1571f5d vfs: preserve setuid, setgid, and sticky bits on image files
- fc22ae5 vfs: verify a shared source against every layer's digest