, ,

KATASTROFE: USB passthrough til Home Assistant via ESXi og XPEnology

ADVARSEL: Alt gikk galt i slutten av denne guiden. Ikke følg den. Den får bli stående som en advarsel — og som bevis på at selv enkle operasjoner kan ta livet av et helt system.


Bakgrunn

Jeg har en ConBee II ZigBee-antenne liggende klar til bruk. Den har ligget i en boks merket «SMARTHUS» i ukesvis fordi planen er å flytte Home Assistant fra en Raspberry Pi til Docker. Men for å få det til, må USB-en passthrough’es hele veien gjennom stacken — fra fysisk maskin, gjennom ESXi, gjennom XPEnology, og inn i Docker-containeren.

ConBee II ZigBee-antenne
ConBee II i sitt naturlige habitat

Jeg forsøkte flere ganger å spontankjøpe antennen i en elektronikkbutikk lokalt, men de tok den aldri inn. Så det ble spontankjøp på nett i stedet. Jeg ble kjempeglad da den ankom — og la den rett i boksen. Der lå den altså til i dag.

ConBee II tilkobling
USB-forlenger
Midlertidig oppheng i taket
Tilkobling og midlertidig oppheng i taket med en fem meter USB-forlenger

Arkitekturen — eller: hvorfor dette er vanskelig

Home Assistant kjører i Docker, som kjører på XPEnology, som kjører på ESXi, som kjører på serveren. Antennen må altså passthrough’es gjennom tre lag for å nå frem. Jeg laget denne plansjen for å visualisere galskapen:

Diagram over lag-arkitekturen: server, ESXi, XPEnology, Docker, Home Assistant
Antennen må gjennom RØDT (ESXi), så BLÅTT (XPEnology), så GRØNT (Docker)

Steg 1: ESXi USB passthrough (RØDT lag)

ESXi innlogging
Logg inn på ESXi

Planen var enkel:

  • Gå til Manage → Hardware → PCI Devices
  • Velg USB-kontrolleren for passthrough
  • Restart

Men er du like uheldig som meg, er alt her grået ut. Du kan egentlig ikke passthrough’e noe som helst.

ESXi PCI passthrough grået ut
Lite passthrough-vennlig, dette her

Hacke det til via SSH

Frykt ikke — vi kan hacke dette til. Vi må SSH-e inn og finne PCI-ID-ene til USB-kontrolleren for å manuelt legge dem inn i passthru.map.

Slå på SSH i ESXi
Slå på SSH i ESXi
SSH-tilkobling via Putty
Inne via SSH

Kommandoen lspci viser alle PCI-enheter, mens lspci -n gir deg de numeriske ID-ene vi trenger:

lspci output
lspci avslører at USB-kontrolleren ligger på 0000:00:14.0
lspci -n output
lspci -n avslører Device ID 0xa36d og Vendor ID 0x8086

Nå vet vi PCI-adressen: 8086:a36d. Vi legger dette inn i passthrough-konfigurasjonen:

vi /etc/vmware/passthru.map
# Legg til nederst:
8086 a36d d3d0 false

d3d0 er ønsket reset-metode på PCI-kontrolleren, og false betyr at vi ikke vil ha «Full Passthrough Shareable». Vi kjører safe.

Katastrofen

Etter restart ble USB-kontrolleren sendt videre — men det betydde at ESXi ikke lenger kunne nå sin egen datastore på USB. Og heller ikke oppdatere sin egen konfigurasjon. Som lå på USB.

Jeg prøvde å fikse dette omtrent 20 ganger før det gikk opp for meg hva som egentlig hadde skjedd. Til slutt mountet jeg USB-pennen på en Raspberry Pi for å rette opp innstillingene manuelt. Det gikk heller ikke — fordi jeg endret på feil partisjon.

Da jeg endelig fant riktig partisjon, ble jeg møtt av dette:

ESXi feilmelding etter mislykket passthrough

Jeg ga fullstendig opp og skulle reverte til backup. Men backupen? Backupen lå selvsagt på XPEnology — som nå var utilgjengelig. Hurra.

Etter litt sjelesøking fant jeg en eldre backup på en ekstern disk. Den fungerte godt nok. XPEnology kom opp igjen. Docker ville ikke starte.

Gjenopprettingsprosessen steg 1
Gjenopprettingsprosessen
Gjenopprettingsprosessen

Lærdom

Passthrough-eventyret er satt på vent etter total feil av systemet. Det kom såvidt tilbake. Nå må jeg sette opp alle Docker-containere (utenom SABnzbd og Ghost) på nytt. Ingen filer ble mistet — men det var flaks, ikke planlegging.

Viktigste lærdom: Ha skikkelig backup av Docker-konfigurasjonen. Det blir høyt prioritert nå.


Trenger du hjelp med dette?

Ta kontakt for en uforpliktende prat om hvordan jeg kan hjelpe deg.

Navn