Made-with: Cursor
2.6 KiB
Device Provisioning Script
Task: AZ-187_device_provisioning_script Name: Device Provisioning Script Description: Interactive shell script that provisions Jetson device identities (CompanionPC users) during the fuse/flash pipeline Complexity: 2 points Dependencies: AZ-196 (POST /devices endpoint) Component: DevOps Tracker: AZ-187 Epic: AZ-181
Problem
Each Jetson needs a unique CompanionPC user account for API authentication. This must be automated as part of the manufacturing/flash process so that provisioning 50+ devices is not manual.
Outcome
- Interactive
provision_devices.shdetects connected Jetsons, registers identities via admin API, and runs fuse/flash pipeline - Serial numbers are auto-assigned server-side (azj-0000, azj-0001, ...)
- Provisioning runbook documents the full end-to-end flow
Scope
Included
provision_devices.sh: scan USB for Jetsons in recovery mode, interactive device selection, call admin APIPOST /devicesfor auto-generated serial/email/password, write credentials to rootfs, fuse, flash- Configuration via
scripts/.env(git-ignored), template atscripts/.env.example - Dependency checks at startup (lsusb, curl, jq, L4T tools, sudo)
- Provisioning runbook: step-by-step for multi-device manufacturing flow
Excluded
- fTPM provisioning (covered by NVIDIA's ftpm_provisioning.sh)
- Secure Boot fusing (covered by solution_draft02 Phase 1-2)
- OS hardening (covered by solution_draft02 Phase 3)
- Admin API POST /devices endpoint implementation (AZ-196)
Acceptance Criteria
AC-1: Script registers device via POST /devices Given the admin API has the POST /devices endpoint deployed When provision_devices.sh is run and a device is selected Then the admin API creates a new user with auto-assigned serial (e.g. azj-0000) and Role=CompanionPC
AC-2: Credentials written to rootfs
Given POST /devices returned serial, email, and password
When the provisioning step completes for a device
Then $ROOTFS_DIR/etc/azaion/device.conf contains the email and password with mode 600
AC-3: Device can log in after flash Given a provisioned and flashed device boots for the first time When the loader reads /etc/azaion/device.conf and calls POST /login Then a valid JWT is returned
AC-4: Multi-device support Given multiple Jetsons connected in recovery mode When provision_devices.sh is run Then the user can select individual devices or all, and each is provisioned sequentially
AC-5: Runbook complete Given the provisioning runbook When followed step-by-step on new Jetson Orin Nano devices Then the devices are fully fused, flashed, provisioned, and can communicate with the admin API