From 52be7f8750a88e4ab4993b0c8a257e39154d2154 Mon Sep 17 00:00:00 2001 From: mittanl Date: Mon, 19 Oct 2026 13:40:42 +0200 Subject: [PATCH] Add Azure IoT Edge install script and README Co-Authored-By: Claude Opus 5.5 --- .gitattributes | 1 + README.md | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ install.sh | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 .gitattributes create mode 100644 README.md create mode 100644 install.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfdb8b7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.sh text eol=lf diff --git a/README.md b/README.md new file mode 100644 index 0000000..b1ce711 --- /dev/null +++ b/README.md @@ -0,0 +1,86 @@ +# VM Install Script – Azure IoT Edge + +`install.sh` installeert op een Debian- of Ubuntu-VM: + +1. de Microsoft package repository +2. `moby-engine` (Docker), met `log-driver: local` +3. `aziot-edge`, gekoppeld aan de IoT Hub met jouw Device ID en Shared Access Key + +## Benodigd + +- Een VM met Debian (bijv. 12) of Ubuntu (bijv. 22.04 / 24.04) +- Een gebruiker met `sudo`-rechten en internettoegang +- De **Device ID** en **Shared Access Key** van het IoT Edge-device + (Azure Portal → IoT Hub → Devices → jouw device) + +## Stap 1 – Script naar de VM kopiëren + +Vanaf je Windows-pc (PowerShell): + +```powershell +scp .\install.sh gebruiker@:~/ +``` + +Of maak het bestand direct op de VM aan met `nano install.sh` en plak de inhoud. + +## Stap 2 – Uitvoerbaar maken + +Log in op de VM (`ssh gebruiker@`) en voer uit: + +```bash +chmod +x install.sh +``` + +> **Let op (Windows line endings):** als je de foutmelding +> `/usr/bin/env: 'bash\r': No such file or directory` krijgt, is het bestand +> opgeslagen met Windows-regeleinden. Los dit op met: +> +> ```bash +> sed -i 's/\r$//' install.sh +> ``` + +## Stap 3 – Script draaien + +```bash +sudo ./install.sh +``` + +Voorbeeld: + +```bash +sudo ./install.sh mijn-edge-device-01 'abc123...=' +``` + +Zet de key tussen **enkele aanhalingstekens**, omdat keys vaak tekens als `=`, `+` of `/` bevatten. + +### Andere IoT Hub gebruiken + +Standaard wordt `iot-shared-v6odheqozqccs-prod.azure-devices.net` gebruikt. Een andere hub geef je zo op: + +```bash +sudo IOT_HUB_HOSTNAME=mijn-hub.azure-devices.net ./install.sh +``` + +## Stap 4 – Controleren + +```bash +sudo iotedge system status # services moeten 'Running' zijn +sudo iotedge check # uitgebreide controle van configuratie en verbinding +sudo iotedge list # draaiende modules (edgeAgent, edgeHub, ...) +``` + +Het kan een paar minuten duren voordat `edgeAgent` en `edgeHub` verschijnen. + +## Opnieuw draaien + +Het script kan veilig opnieuw gedraaid worden, bijvoorbeeld met een andere Device ID. +De bestaande `/etc/aziot/config.toml` wordt dan overschreven. + +## Problemen oplossen + +| Probleem | Oplossing | +|---|---| +| `Dit script moet als root draaien` | Start het script met `sudo`. | +| `Kon packages-microsoft-prod.deb niet downloaden` | Je OS-versie wordt (nog) niet door Microsoft ondersteund, of er is geen internet. | +| `iotedge check` geeft verbindingsfouten | Controleer Device ID, key, hostname en of uitgaande poorten 443/5671/8883 open zijn. | +| Logs bekijken | `sudo iotedge system logs` | diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..df2fdb8 --- /dev/null +++ b/install.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +# +# Installeert Docker (moby-engine) en Azure IoT Edge op een Debian/Ubuntu VM +# en koppelt het device aan de IoT Hub. +# +# Gebruik: +# sudo ./install.sh +# +# Optioneel (environment variabele): +# IOT_HUB_HOSTNAME IoT Hub hostname (standaard: iot-shared-v6odheqozqccs-prod.azure-devices.net) + +set -euo pipefail + +IOT_HUB_HOSTNAME="${IOT_HUB_HOSTNAME:-iot-shared-v6odheqozqccs-prod.azure-devices.net}" + +log() { echo -e "\n\033[1;34m==> $*\033[0m"; } +fail() { echo -e "\033[1;31mFOUT: $*\033[0m" >&2; exit 1; } + +usage() { + echo "Gebruik: sudo $0 " + exit 1 +} + +# --- Controles ------------------------------------------------------------- + +[[ $# -eq 2 ]] || usage +DEVICE_ID="$1" +SHARED_ACCESS_KEY="$2" + +[[ $EUID -eq 0 ]] || fail "Dit script moet als root draaien. Gebruik: sudo $0 ..." + +[[ -r /etc/os-release ]] || fail "/etc/os-release niet gevonden; onbekend besturingssysteem." +# shellcheck disable=SC1091 +. /etc/os-release +case "${ID}" in + debian|ubuntu) ;; + *) fail "Niet ondersteund OS: ${ID}. Alleen Debian en Ubuntu worden ondersteund." ;; +esac + +export DEBIAN_FRONTEND=noninteractive + +# --- 1. Microsoft package repository --------------------------------------- + +log "Microsoft package repository toevoegen (${ID} ${VERSION_ID})" +apt-get update +apt-get install -y curl ca-certificates + +TMP_DEB="$(mktemp --suffix=.deb)" +trap 'rm -f "$TMP_DEB"' EXIT +curl -fsSL "https://packages.microsoft.com/config/${ID}/${VERSION_ID}/packages-microsoft-prod.deb" -o "$TMP_DEB" \ + || fail "Kon packages-microsoft-prod.deb niet downloaden voor ${ID} ${VERSION_ID}." +apt-get install -y "$TMP_DEB" +apt-get update + +# --- 2. Container engine ---------------------------------------------------- + +log "moby-engine installeren" +apt-get install -y moby-engine + +log "Docker logging configureren (log-driver: local)" +mkdir -p /etc/docker +echo '{"log-driver": "local"}' > /etc/docker/daemon.json +systemctl restart docker + +# --- 3. Azure IoT Edge ------------------------------------------------------ + +log "aziot-edge installeren" +apt-get install -y aziot-edge + +log "IoT Edge configureren voor device '${DEVICE_ID}'" +iotedge config mp --force --connection-string \ + "HostName=${IOT_HUB_HOSTNAME};DeviceId=${DEVICE_ID};SharedAccessKey=${SHARED_ACCESS_KEY}" +iotedge config apply -c /etc/aziot/config.toml + +# --- 4. Controle ------------------------------------------------------------ + +log "Installatie voltooid. Status:" +iotedge system status || true +echo +echo "Controleer de verbinding met: sudo iotedge check"