Read the engineering boundary first#
You need: a supported 64-bit Linux system with systemd, administration access, a trusted workstation, the intended engineering archive and separately authenticated verification information. The owner must understand backups, permissions, clock handling and recovery.
01 — Verify before extracting#
Runs on: a trusted workstation. Obtain the archive and its separately authenticated SHA-256. The package verifier must be available.
kurdpackage verify --archive <archive>Changes: verifies a local archive, not the live server. Success: a successful verifier exit for the intended archive and an identity match with trusted publication information. On failure: stop and obtain the correct package; do not skip verification.
Extract into a new empty directory and inspect manifest.json, SHA256SUMS and the scripts.
02 — Install without silently starting#
Runs on: the owner’s Linux system, inside the verified extracted directory. Inspect the scripts and their prerequisites first.
sudo ./preflight.sh --install
sudo ./install.sh --installChanges: installs the engineering package. The guide explicitly says installation does not create authority keys, enable the listener or start the service.
Success: preflight and installation complete without errors. If preflight fails, correct its reported prerequisite rather than enabling the listener manually.
04 — Prepare the intended device#
Export a fresh public enrollment request from the Android app. Transfer the exact request to the owner through an authenticated channel. The request lets the owner issue a profile for that device; it does not give the app administration powers.
Follow device enrollment05 — Issue a recipient-sealed profile#
Runs on: the owner’s configured VPS, as the kurd-node service user. Prerequisites: healthy local authority, the intended public request and a new empty output directory. Replace the request path with the actual intended file.
sudo -u kurd-node /usr/local/bin/kurdctl profile create \
--data-dir /var/lib/kurd-node \
--name phone \
--valid-for 168h \
--recipient-request /path/to/device.kurd-enrollment \
--recipient-registry-dir /var/lib/kurd-node/recipient-registry \
--output-dir /var/lib/kurd-node/export-phoneChanges: issues a profile under the deployment’s authority and recipient policy. The output is sensitive. Transfer only the intended profile or QR to the intended device; remove temporary copies after import.
Success: the command completes and the intended device can verify the resulting artifact. A generated file alone is not proof of end-to-end Internet access. On failure, inspect safe diagnostics; do not weaken recipient or signature checks.
06 — Enable only after checks pass#
Runs on: the owner’s VPS with system administration authority. Prerequisites: preflight and local checks passed; appropriate network policy and recovery material are in place.
sudo systemctl enable --now kurd-node-network.service kurd-node.socket
sudo systemctl start kurd-node.service
sudo systemctl is-active kurd-node.service kurd-node.socketChanges: enables the documented network policy, socket and service. Success: service and socket report active. That only establishes service status—not production egress qualification.
Failure: do not open arbitrary firewall access or disable authentication. Use the operator guide and safe diagnostics. No speculative repair command is offered here.
07 — Verify the deployment; preserve recovery#
On the intended phone, import and verify the profile, compare the deployment fingerprint and explicitly confirm trust. Keep encrypted recovery material and current encrypted backups off the VPS. Losing both is unrecoverable according to the quickstart.
Do not claim successful Internet egress until the exact build passes the namespace, emulator and owner-VPS evidence gates. This website has not executed those campaigns.
Read the security boundaryUnderstand backup and recoverySource and scope
Reviewed . The linked source describes the implementation; released-build evidence is a separate check.