Architecture

HomeArchitecture → Airgap deployment

Airgap deployment

Ironmark installs on an airgap network from a signed offline bundle. In normal operation there are no outbound network calls — no telemetry, no license phone-home, no auto-update. Updates are opt-in and travel the same way the original install did: a signed bundle, hand-carried in.

The install bundle

Ships as a single IM_setup.tar.gz with a detached .sig signed by the vendor. The bundle contains everything needed to install on a clean Debian/Ubuntu box:

ApplicationBackend + frontend + SDM packages
Python wheels~60 wheels prebuilt for manylinux2014_x86_64. No pip network fetch required.
System depsMySQL 8, nginx, Node, Java (for Apache FOP) — as .deb files or system-installed via the install script
Setup scriptinstall.sh handles user creation, MySQL init, systemd unit install, nginx config, and cert setup
Bundle size~128 MB

Install path

Same script for airgap and connected installs. The connected path optionally uses Let's Encrypt; airgap uses a self-signed or customer-supplied cert.

Typical time on a clean nanode-equivalent VM: ~10 minutes end-to-end.

Updates

Same bundle format. Two update paths:

Both paths verify the bundle's detached signature against the customer's installed pubkey. Unsigned or tampered bundles are rejected at the load stage.

License enforcement

Licenses are signed .irm files issued by the vendor. Customer installs verify against the license pubkey, offline, at boot and periodically. On expiry, reads and exports keep working; publish is gated until renewal. No phone-home for enforcement.

On the outbound-call posture: the app makes no outbound HTTP in the default configuration. The only outbound call Ironmark can make is a dependency-CVE check, and even that is opt-in. If your program wires up an SMTP relay for notifications, that's configured explicitly. Everything else stays on the network you put it on.

Backup + restore

What isn't included

← Back to Architecture