Wie emuliere ich Bluetooth in einem Docker-Container?

3

Ich versuche, eine Linux-Anwendung in einem Docker-Container auszuführen, von dem erwartet wird, dass der Computer Bluetooth-Verbindungen unterstützt, sodass er mit dem Fehler "HCI-Socket kann nicht geöffnet werden" abstürzt.

Jetzt wird die Bluetooth-Funktionalität für meinen speziellen Anwendungsfall nicht mehr benötigt, sodass ich mit einer Art Bluetooth-Dummy-Treiber zurechtkommen kann, der sich zum Beispiel so verhält, als ob sich keine anderen Bluetooth-Geräte in Reichweite befinden.

Gibt es eine einfache Möglichkeit, ein solches virtuelles Bluetooth-Gerät in einem Docker-Container zu erstellen? Ich kann den Container nicht im privilegierten Modus ausführen oder die Bluetooth-Ressourcen des Hosts verwenden.

shang
quelle

Antworten:

3

Teilantwort: Ich habe ein bisschen rumgespielt und das Kernel-Modul gefunden hci_vhci, mit dem sich /dev/vhcivirtuelle Host-Controller-Schnittstellen erstellen lassen.

Etwas zu finden, das dieses Kernelmodul tatsächlich verwendet, war etwas schwieriger. Anscheinend gab es einmal ein Programm, hciemudas eine HCI-Schnittstelle zumindest teilweise simulierte, aber es scheint von den meisten Distributionen verschwunden zu sein.

Außerdem konnte ich keine Dokumentation finden.

Nach dem Herunterladen einer noch zugänglichen TAR-Datei mit Quellcode (der nicht mehr von der Haupt-Download-Seite verlinkt zu sein scheint), Kompilieren und Ausführen

# modprobe hci_vhci
# hciemu localhost:10

Ich endete mit einer HCI-Schnittstelle,

$ hciconfig
hci0:   Type: Primary  Bus: Virtual
    BD Address: 7F:00:00:01:00:0A  ACL MTU: 192:8  SCO MTU: 0:0
    DOWN 
    RX bytes:0 acl:0 sco:0 events:8 errors:0
    TX bytes:36 acl:0 sco:0 commands:8 errors:0

Dies kann für Ihren Anwendungsfall ausreichen oder nicht.

Wenn jemand herausfinden kann, wie man diese Schnittstellen tatsächlich nutzt, wäre ich sehr interessiert.

dirkt
quelle