Before You Start

Before You Start #

What to bring #

A Mac or a Linux laptop, and your own SD card if you’ll take your backend home. Everything below can be installed before the meetup. At the meetup, the provider, Terraform, Pi Imager, MicroPython and the take-home image come from the site’s tenant downloads rather than the venue’s internet.

From the operator, at admission:

An enrollment tokenone-time, bound to your tenant name, valid 72 hours
The API endpointhttps://api.mobile.deevnet.net:8080
The DVNTM-TD Wi-Fi keythe network you work from ( below)
The site CAsite-ca.pem, the certificate authority for everything Deevnet serves over TLS. Check its SHA-256 fingerprint: ED:ED:43:04:B8:40:8A:CE:14:FE:B8:AB:6C:B6:43:BC:A5:56:84:E8:26:A3:C2:75:CD:BD:EB:70:DF:E5:2D:5C

Tools #

Required to apply your Terraform:

ToolWhymacOSFedoraDebian / Ubuntu
gityour repositoryxcode-select --installsudo dnf install gitsudo apt install git
Terraform β‰₯ 1.5applies your tenantbrew install hashicorp/tap/terraformfrom tenant downloads terraform/, or HashiCorp’s repothe same
deevnet/deevnet provider 0.4.xthe Deevnet resourcesinstall-provider.shthe samethe same
curl, opensslTLS checks, the CAbuilt insudo dnf install curl opensslsudo apt install curl openssl

For devices:

ToolWhymacOSFedoraDebian / Ubuntu
mosquitto_pub, mosquitto_subMQTT test clientsbrew install mosquittosudo dnf install mosquittosudo apt install mosquitto-clients
mpremotecopies files to a Picopython3 -m pip install --user mpremotethe samethe same
MicroPython β‰₯ 1.23 for the Pico Wthe Pico’s firmwarefrom tenant downloads tools/the samethe same
Thonny or the Arduino IDE with PubSubClientediting firmware (Pico / ESP32)thonny.org / arduino.ccthe samethe same
dig, python3name checks, scriptingbrew install bind; python3 built insudo dnf install bind-utils python3sudo apt install dnsutils python3

Plus the board itself (a Pico W or an ESP32) and a USB data cable.

To convert your tenant to a Pi image:

ToolWhymacOSFedoraDebian / Ubuntu
Raspberry Pi Imager and an SD card readerflashes your cardfrom tenant downloads tools/ (.dmg)Imager from tools/ (.deb) or Flathub.deb from tools/
An SSH clientreaches the Pibuilt inbuilt inbuilt in
.local names<hostname>.localbuilt insudo dnf install nss-mdns avahisudo apt install libnss-mdns avahi-daemon
Podman or Docker with arm64 buildsbuilds your app for the Pibrew install podmansudo dnf install podman qemu-user-staticsudo apt install podman qemu-user-static

Check your laptop #

tenant-check.sh checks all of the above. For each missing tool it prints the command that installs it on your laptop. Run it at home with --offline; on DVNTM-TD it also checks every service you’ll use:

bash tenant-check.sh --offline      # at home: the tools only
bash tenant-check.sh                # on DVNTM-TD: tools and the site's services

It is in tenant downloads scripts/, and attached to every provider release.


Tenant downloads #

At the site, on DVNTM-TD, everything above that isn’t a package-manager install is served at https://downloads.mobile.deevnet.net:8443/. It is read-only and verified with the site CA ( CHG-0025):

PathWhat
site-ca.pemthe site CA. Check its fingerprint against the one above before trusting it
scripts/install-provider.sh, tenant-check.sh
provider/<version>/the deevnet provider for macOS and Linux, Intel and ARM, with SHA256SUMS
providers/grafana/<version>/the Terraform grafana provider, for dashboards
terraform/<version>/Terraform itself
tools/Raspberry Pi Imager (macOS, Linux) and MicroPython for the Pico W
pi/the tenant Pi image and its sha256

Getting the provider #

The provider isn’t on the public registry. It goes into Terraform’s local mirror (~/.terraform.d/plugins/…), where terraform init finds it. At the site:

curl -fsSLk -o site-ca.pem https://downloads.mobile.deevnet.net:8443/site-ca.pem
openssl x509 -in site-ca.pem -noout -fingerprint -sha256     # must match the fingerprint above
curl -fsSL --cacert site-ca.pem -O https://downloads.mobile.deevnet.net:8443/scripts/install-provider.sh
bash install-provider.sh

It installs deevnet/deevnet and the grafana provider, and checks every download against its SHA256SUMS. Off-site, bash install-provider.sh --github fetches the same prebuilt provider from the GitHub release. From source (needs Go and make): clone the repository, check out the latest tag (git checkout "$(git describe --tags --abbrev=0)"), then make mirror.

Pin it in your configuration:

deevnet = {
  source  = "deevnet/deevnet"
  version = "~> 0.4"
}

Where you need to sit on the network #

Terraform talks to the Deevnet API. Which Wi-Fi your laptop is on decides whether it can:

Your laptop is onReaches the API?Use it for
Guest Wi-FiNo β€” internet onlyreading these docs
IoT Wi-Fi (DVNTM-IOT)No β€” that is where your devices go, not your laptopnothing
Tenant dev Wi-Fi (DVNTM-TD)Yes β€” the tenant-facing services and the internetterraform plan / apply, MQTT test clients

Apply from DVNTM-TD, on your own laptop. Ask the operator for its key. It reaches the services your Terraform, test clients and browser use (the API, the state store, the broker, the log store, Grafana and the tenant downloads) and nothing else on the site.

DVNTM-TD uses the site’s own DNS. If your laptop has a VPN, iCloud Private Relay or a hard-coded DNS server, turn it off, or api.mobile.deevnet.net will not resolve.

Page last modified: September 26, 2026