Expand description
isb machine: incus runs only on Linux, so on macOS isb manages a Lima VM
that runs it, the way podman machine does.
The VM is plain Lima (limactl, installed separately) driven by a YAML
file isb generates into ~/.isb/machine/<name>/lima.yaml:
- Ubuntu 24.04 with incus from Zabbly’s stable channel. incus’s socket is
owned by the Lima user (a
SocketUserdrop-in), because Lima forwards it over an ssh connection that was opened before any group change. $HOMEmounted writable at the same path (virtiofs), so a bind source like./appresolves to the same absolute path on the Mac and in the VM. Apple’s virtiofs reports every file as owned by whoever asks and writes as the Mac user, so any container uid can write a bind mount andidmap: automaps nothing (ISB_BIND_CALLER_OWNEDtells the daemon).- The incus socket and
isb serve’s socket forwarded to~/.isb/machine/<name>/{incus,serve}.sock, and loopback listeners (incus proxy devices, the stack balancer, the daemon’s 8092) forwarded to the Mac’s 127.0.0.1 by Lima. isb serveruns in the VM as a system unit, as the Linux binary, next to the bridges its balancer must reach.
Structs§
- Init
Options - Launch
Agent Install - Lima
Config - What the generated Lima YAML depends on.
- Status
- What
isb machine statusreports.
Constants§
- DEFAULT_
NAME - The machine every command uses unless told otherwise, and the one whose
sockets
Client::default_socketand the serve socket fall back to. - LAUNCH_
AGENT_ LABEL - launchd label of the agent
isb serve installwrites on macOS. - SERVE_
LISTEN - The daemon’s HTTP listener in the VM, forwarded to the same address on the Mac.
Functions§
- dir
~/.isb/machine/<name>: the Lima YAML, the staged guest binary and the forwarded sockets.- guest_
user - The guest user name: the Mac user’s when it is a valid Linux name, else
lima, as Lima itself would choose. - incus_
socket - init
- Create and start the machine, install incus and the guest’s
isb serve.logreceives one progress line per step. - install_
launch_ agent - Write the LaunchAgent, load it (which starts the machine), and wait for the daemon in the machine to answer.
- release_
asset - The release asset name for a version and architecture.
- remove
- Delete the VM, its files and a LaunchAgent that starts it.
- render_
guest_ unit - The
isb serveunit in the guest.@HOME@is filled in there. - render_
launch_ agent - The LaunchAgent: run
isb machine start NAMEat login.pathis the PATH it runs with, which must findlimactl. - render_
lima_ yaml - The Lima instance definition
isb machine initstarts. - serve_
socket - shell_
command limactl shell NAME [argv], for the caller to exec.- start
- Start a stopped machine (a no-op when it is running) and wait for its sockets.
- status
- stop
- uninstall_
launch_ agent - Unload and delete the LaunchAgent (a no-op without one).
- validate_
name - A machine name doubles as the Lima instance name.