EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

bbvirt – Online in der Cloud

Führen Sie bbvirt im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, den Windows-Online-Emulator oder den MAC OS-Online-Emulator aus

Dies ist der Befehl bbvirt, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


bbvirt – Hotplug von BitBabbler-Geräten in von libvirt verwaltete Domänen

ZUSAMMENFASSUNG


bbvirt Aktion [Optionen]

bbvirt anhängen|DETACH Gerät [Optionen]

bbvirt alles anhängen|alles abtrennen [Domain] [Optionen]

BESCHREIBUNG


Das bbvirt Das Programm ist ein Versuch, etwas von dem Schmerz aus dem, was derzeit ist, zu nehmen
erforderlich, um mehrere USB-Geräte zwischen den virtuellen Host- und Gastmaschinen zu verteilen.
Es gibt zwar mehrere Möglichkeiten, dies zu konfigurieren und zu verwalten, derzeit jedoch keine
von denen tatsächlich eine vollständige und kohärente Lösung für sich allein bietet, fallen sie alle aus
in irgendeiner bedeutsamen und ärgerlichen Weise verfehlt. Das Ziel hier ist das Zusammenfügen
Genug dieser Hacks, um tatsächlich alle Funktionen zu erhalten, die wir jetzt wollen, bis zum
Die native Unterstützung von libvirt dafür ist soweit verbessert, dass sie nicht mehr benötigt wird.

Derzeit handelt es sich dabei um von libvirt verwaltete virtuelle QEMU/KVM-Maschinen.

Was do we wollen?
Das ideale Verhalten ist hier ziemlich einfach. Gegeben sei eine beliebige Anzahl von BitBabblern
Geräte sollten wir in der Lage sein, sie entweder dem Host-Computer oder einer Gast-VM zuzuweisen
darauf laufen, und sobald wir das tun, sollten sie sich wie von jedem erwartet normal verhalten
USB Gerät.

- Wenn sie beim Starten des Gastcomputers angeschlossen sind, sollten sie dort sichtbar sein
Maschine, wie sie vom Host sein würden.

- Wenn sie nach dem Starten der Maschine angeschlossen werden, sollten sie per Hotplug angeschlossen werden
wie auf dem Host.

- Wenn sie bei laufender Maschine vom Stromnetz getrennt werden, sollten sie sauber entfernt werden
es, wie sie auf dem Host wären.

Warum kann nicht we haben es?
Derzeit bietet uns libvirt zwei Möglichkeiten, wie wir USB-Geräte vom Host einem zuweisen können
Gastdomäne.

- Wir können sie anhand ihres USB-Anbieters und ihrer Produkt-ID zuordnen. Aber das funktioniert nur, wenn es da ist
ist nur ein einzelnes Gerät dieses Typs im Host. Was in den meisten Fällen ziemlich nutzlos ist
die Fälle, die uns hier am Herzen liegen, wo der Gastgeber und jeder der Gäste wahrscheinlich sind
Ihnen sind ein oder mehrere eigene BitBabbler-Geräte zugewiesen.

- Wir können sie anhand ihrer logischen Adresse am USB-Bus zuweisen. Aber das ist keine Konstante
die wir statisch für die Domäne konfigurieren können. Jedes Mal, wenn ein Gerät angeschlossen wird, oder
Wenn das Gerät neu angeschlossen oder zurückgesetzt wird oder der Host-Rechner neu gestartet wird, wird sich diese Adresse wahrscheinlich ändern
da es dynamisch zugewiesen wird, wenn das Gerät auf dem Bus aufgelistet wird.

Es gibt einen dritten Weg, der jedoch auf der Umgehung der normalen libvirt-Konfiguration beruht
Direkte Nutzung der QEMU-Fähigkeit, ein Gerät anhand seiner physischen Adresse auf dem Bus zuzuweisen.
Was besser ist, aber immer noch kein Allheilmittel, da es auf genau das gleiche Einstecken ankommt
Geräte jedes Mal in genau die gleichen Ports zu stecken (und diese Ports darin aufzulisten).
auf die gleiche Weise durch den Host bei jedem Neustart, was ebenfalls nicht garantiert ist). Es zwingt auch
Wir müssen uns durch andere Hürden springen lassen, da wir dann zusätzliche Komplikationen benötigen, um das zu bewältigen
Zugriffsberechtigungen des Geräts manuell außerhalb von libvirt, aber immer noch in Abstimmung
mit ihm.

Der noch größere Fehler, den alle diese Methoden gemeinsam haben, besteht darin, dass sie alle darauf angewiesen sind
Das Gerät ist bereits angeschlossen, bevor der Gast gestartet wird. Wenn es danach eingefügt wird
Der Gast wird gestartet oder entfernt und erneut angeschlossen, während der Gast ausgeführt wird, oder wenn der Host
Wenn ein Bus oder ein Hub abspringt und die Verbindung wiederhergestellt wird, wird das Gerät nicht (erneut) an den angeschlossen
Gast. Die einzige Möglichkeit, dies zu beheben, besteht darin, das Gerät manuell mit einem erneut anzuschließen
arkane Beschwörungsformel in XML (die davon abhängt, dass Sie die neue Adresse des Geräts kennen) oder
um den Gast vollständig herunterzufahren und neu zu starten. Nicht der Gipfel der Benutzerfreundlichkeit
Operation, die wir hier suchen.

Was kann we do About es?
Vor einigen Jahren wurde libvirt ein Patch vorgelegt, der ein Gerät ermöglicht hätte
muss sowohl durch seine USB-Produkt-ID als auch durch seine Seriennummer angegeben werden, aber das hat einige Push-
zurückgekehrt und wurde bisher noch nicht im Upstream-Bereich angewendet. Das hätte weit gebracht
Ziel ist es, dies sowohl einfach als auch sauber zu gestalten, sodass wir uns nur noch mit dem Hotplug-Aspekt befassen müssen
mit. Wir lassen den mürrischen Spott darüber als Übung für den Leser ...

Eine andere Alternative besteht darin, dass wir die Suche nach der logischen Adresse des Geräts an einen Hotplug delegieren können
Manager wie udev(7). Das ist insofern attraktiv, als wir wissen können, wann die Adresse lautet
wie sich ein Gerät ändert und was es ändert, aber udev selbst ist nicht sehr freundlich zu dem
Idee einer lokalen Admin-Anpassung (obwohl dies möglich ist, scheint es jedoch erfolgreich zu sein).
davon wird immer mehr abgeraten) und die Verwendung erfordert immer noch etwas externen Kleber
Übersetzen Sie seine Ereignisse in etwas, auf das libvirt reagieren kann, um den Gast zu konfigurieren
Maschine.

Das bbvirt Das Programm stellt diesen Kleber und eine benutzerfreundliche Methode zur Zuweisung bereit
Geräte sollten zu welchen Gastdomänen gehören und ein Frontend, das manuell aufgerufen werden kann
oder durch andere vom Administrator kontrollierte Aufgaben, um BitBabbler-Geräte schnell und einfach hinzuzufügen oder zu entfernen
von einer der laufenden Gastmaschinen.

Die Einschränkung dieses Ansatzes besteht jedoch darin, dass er nicht einfach erkennen kann, wann ein Gastcomputer vorhanden ist
gestartet, zu dem bereits angeschlossene Geräte hinzugefügt werden sollten. Theoretisch sind wir
könnte sie zu seiner persistenten Domänendefinition hinzufügen, aber das hat seine eigenen Probleme, weil
Wir können Geräte nur anhand ihrer kurzlebigen logischen Adresse hinzufügen und können dies nicht garantieren
wird aufgerufen, sie wieder aus der Domain zu entfernen, wenn diese Adresse ungültig wird
(z. B. wenn der Host plötzlich ausgeschaltet wird oder aus anderen Gründen nicht sauber heruntergefahren wird), also wir
könnte dazu führen, dass sich viele veraltete Einträge in der persistenten Domänenkonfiguration ansammeln,
das später zu einem völlig anderen Gerät passen könnte als dem, an das wir es angeschlossen haben wollten
Es. Das heißt, bis das irgendwie behoben ist, ist es nur sicher, sie einem Live-Gast hinzuzufügen
Domain, so dass sie immer wieder entfernt werden, wenn sie angehalten wird, egal wie sie läuft
wurde schließlich gestoppt.

Offensichtlich haben wir noch einen weiten Weg vor uns, um hier unser Ideal zu erreichen.

Was if we Throat Hit it mit *zwei* Hämmer?
Es scheint nur zwei Möglichkeiten zu geben, über die Anwesenheit eines Gastcomputers benachrichtigt zu werden
derzeit begonnen. Eine davon besteht darin, noch einen weiteren Daemon-Prozess auszuführen, was ausreichen würde
kaum mehr als nur herumzusitzen und darauf zu warten, dass jemand einen Gast anmeldet, damit er es uns sagen kann
über das. Aber dann müssten wir noch etwas anderes konfigurieren, noch einen Prozess
Laufen, und noch mehr Probleme, herauszufinden, wie wir sicherstellen können, dass wir wann kein Rennen verlieren
Der Host wird zwischen dem Abrufen des ersten Satzes von Geräteereignissen, diesem Prozess, gebootet
bereit und aktiv, und alle Gäste, die beim Booten automatisch gestartet werden, starten tatsächlich.

Die andere Möglichkeit besteht darin, einen libvirt-Hook zu verwenden. Was wiederum das Problem mit sich bringt, eigentlich nicht
Dadurch können wir alle libvirt-Funktionen ausführen, die wir zum Anhängen ausführen müssen
das Gerät an den Host. Und wir können nicht garantieren, dass wir es einfach standardmäßig installieren können,
denn es kann nur einen solchen Hook auf dem System geben, den der lokale Admin möglicherweise schon hat
verwenden ...

Es gibt eine dritte Möglichkeit, aber dazu müsste der lokale Administrator alle Gäste starten
Maschinen durch eine eigene Hülle, anstatt über den Mechanismus, den sie bereits kennen
und verwenden. Das lässt sich nicht skalieren, um unter anderem andere USB-Geräte in der gleichen Situation zu unterstützen
die vielen Arten, die den Menschen eine schreckliche Lösung zufügen würden.

Aber es gibt eine Lücke, die wir ausnutzen können. Wir können den libvirt qemu-Hook verwenden, um a auszulösen
Ereignis ändern für udev, was wiederum aufgerufen werden kann bbvirt auf die gleiche Art und Weise, wie das auch der Fall wäre
Dies kann passieren, wenn das Gerät wirklich im laufenden Betrieb angeschlossen war, was uns eine zusätzliche Indirektionsebene bietet
Wir müssen in der Lage sein, das sicher vom Haken aus zu tun. Rube Goldberg wäre stolz, und
Einige der Teile müssen möglicherweise von Hand zusammengebaut werden, aber wenn dies alles vorhanden ist, können wir es schaffen
etwas, das der normalen USB-Funktionalität in den Gastmaschinen ähnelt.

Es ist nicht schön, aber es wird mit dem funktionieren, womit wir arbeiten müssen.

Ok, nur erzählen me woher zu Throat Hit es.
Um dies zusammenzufassen, müssen Sie Folgendes sicherstellen:

- Das udev(7) Regeln aus dem Bit-Babbler-Paket werden installiert. Wenn Sie dies installiert haben
aus den Debian-Paketen, die bereits erledigt sein sollten. Wenn Sie dies nicht getan haben, müssen Sie dies tun
Installieren Sie die Regeln, die in enthalten sind debian/bit-babbler.udev vom Quellpaket zu a
geeigneten Ort auf Ihrem System (wahrscheinlich /etc/udev/rules.d).

- Das bbvirt(1) Das Skript wird an einem Ort installiert, an dem das udev Regeln werden es finden. Wenn du
habe dies nicht aus den Debian-Paketen installiert und es ist nicht enthalten / usr / bin, dann brauchst du
um das zu optimieren udev Regeln passend.

- Die Geräte, die Sie in Gastmaschinen verwenden möchten, und die Maschinen, in denen Sie sie verwenden möchten,
sind in der angegeben bbvirt Konfigurationsdatei. Der Standardspeicherort dafür ist
/etc/bit-babbler/vm.conf. Wenn Sie eine andere Datei verwenden möchten, müssen Sie diese übergeben
Standort mit der --config Option in der udev Regeln und aktualisieren Sie das Hook-Skript
Datei auch. Die Einzelheiten dazu, was Sie in diese Datei einfügen können, werden im beschrieben
CONFIGURATION OPTIONAL Abschnitt unten.

- Die libvirt-Hook-Datei ist installiert. Wenn alles oben Genannte erledigt ist, sind die Geräte vorhanden
werden zu den laufenden Gastmaschinen hinzugefügt, wenn diese angeschlossen werden, während der Gast läuft.
Dieser letzte Schritt stellt sicher, dass bereits angeschlossene Geräte neu hinzugefügt werden
auch gestartete Gäste (einschließlich Gäste, die automatisch gestartet werden, wenn der Host
Maschinenstiefel).

Bis es eine sichere Möglichkeit gibt, dies zu installieren, ohne dass es zu Konflikten oder Überschreibungen kommt
Wenn Sie einen vorhandenen Hook verwenden, muss jeder diesen Schritt manuell ausführen. Wenn Sie installiert haben
die Debian-Pakete, dann kann das Beispiel-Hook-Skript sein, das wir dafür bereitgestellt haben
gefunden in /usr/share/doc/bit-babbler/examples/qemu-hook. Wenn Sie es nicht getan haben, können Sie es finden
in libvirt/qemu-hook des Quellpakets.

Sie müssen diese Datei als installieren /etc/libvirt/hooks/qemu, oder seinen Inhalt mit zusammenführen
die bestehende qemu Datei dort, wenn Sie diesen Hook bereits gesetzt haben. Wenn diese Datei nicht vorhanden ist
bereits vorhanden ist, müssen Sie einen Neustart durchführen libvirtd(8) damit es in Betrieb genommen werden kann.

Damit sollte die gesamte erforderliche Automatisierung abgedeckt sein, Sie können aber auch Geräte an- und abkoppeln
jederzeit auch manuell möglich. Die Einzelheiten dazu werden im Folgenden beschrieben
Abschnitt. Ansonsten besteht, wenn alle oben genannten Punkte erledigt sind, kein weiterer Grund für eine Berufung
bbvirt direkt.

OPTIONAL


Es gibt zwei Hauptbetriebsmodi für bbvirt die von der Initiale ausgewählt werden
Aktionsoption. Wenn die auszuführende Aktion lautet anhängen or DETACH dann nur ein einziges Gerät
auf die reagiert wird, und welches Gerät das sein soll, muss explizit angegeben werden, auch wenn
Es ist jeweils nur ein Gerät auf dem Host vorhanden. Beim Aufruf bbvirt manuell,
Gerät kann durch seine Seriennummer, seine logische Adresse auf dem Bus (im
unten stehende Formular busnum:Devnum, angegeben als dezimale Ganzzahlen) oder seine physikalische Adresse auf dem Bus (im
unten stehende Formular busnum-port [.Hafen ...]).

Wenn die auszuführende Aktion lautet alles anhängen or alles abtrennen, dann sind die Geräte, auf die reagiert werden soll
ausgewählt durch Domain Verein statt. Wenn ein Domain explizit angegeben ist, dann alle
Geräte, die dieser Gastdomäne in der Konfigurationsdatei zugewiesen sind, werden berücksichtigt
auf die gleiche Weise, als ob bbvirt wurde für jeden von ihnen einzeln mit dem aufgerufen
anhängen or DETACH Aktion. Wenn nein Domain bereitgestellt wird, dann alle konfigurierten Gäste
Domänen werden auf diese Weise bearbeitet.

Folgende zusätzliche Optionen stehen zur Verfügung:

-VS, --config
Geben Sie eine alternative Konfigurationsdatei an, aus der die Gerätezuweisungen importiert werden sollen.
Wenn der Pfad zur Datei nicht explizit angegeben wird, wird in gesucht
/etc/bit-babbler Verzeichnis (mit a .conf Suffix).

-C, --connect=URI
Präzisiere das virsch(1) Verbindung URI benutzen. Dadurch wird a überschrieben DOMAIN_URI kompensieren
für die Domäne in der Konfigurationsdatei. Wenn dies nicht der Fall ist, verwenden Sie eine dieser Optionen
Methoden dann die virsch Standard für den Benutzer, der ausgeführt wird bbvirt werden verwendet.

-D, --domain=Name
Geben Sie die libvirt-Domäne an, auf die reagiert werden soll. Dies kann zum Übersteuern des Geräts verwendet werden
Zuordnung aus der Konfigurationsdatei, wenn bbvirt manuell aufgerufen wird, oder um zu handeln
auf einem Gerät oder einer Domäne, die derzeit nicht in der Konfigurationsdatei angegeben ist.

-B, --busnum=num
Geben Sie die USB-Busnummer an, an die das Gerät angeschlossen ist. Diese Option ist meistens
verwendet, um zu vermeiden bbvirt Sie müssen dies nachschlagen, wenn es bereits bekannt ist (z. B. wann
es heißt von a udev Regel). Normalerweise gibt es keinen großen Grund, dieses Wenn zu bestehen
aufrufen bbvirt manuell, da Sie das Gerät einfach über sein logisches Oder angeben können
stattdessen eine physische Adresse.

-D, --devnum=num
Geben Sie die USB-Gerätenummer an, die dem Gerät derzeit zugewiesen ist. Zusammen mit
die Busnummer, diese bildet die logische Adresse des Gerätes. Diese Option ist
Meistens verwendet, um zu vermeiden bbvirt Sie müssen dies nachschlagen, wenn es bereits bekannt ist (z
als wenn es von a aufgerufen wird udev Regel). Normalerweise gibt es nicht viel Grund, zu bestehen
Dies beim Aufrufen bbvirt manuell, da Sie das Gerät einfach anhand seines angeben können
stattdessen eine logische Adresse.

-nicht, --Probelauf
Schließen Sie keine Geräte an oder entfernen Sie sie nicht, sondern zeigen Sie nur, was versucht werden würde, wenn dies ein wäre
Live-Lauf. Diese Option impliziert ein Mindestmaß an - ausführlich, aber die Ausführlichkeit kann
durch die explizite Übergabe dieser Option weiter erhöht werden.

-in, - ausführlich
Machen Sie mehr Lärm darüber, was wirklich vor sich geht. Es kann mehrmals an übergeben werden
Erhöhen Sie die Ausführlichkeit weiter.

-?, --help
Zeigt eine kurze Zusammenfassung der verfügbaren Optionen an.

CONFIGURATION OPTIONAL


Das bbvirt Die Konfigurationsdatei enthält Variablenzuweisungen mithilfe von bash(1) Schale
Syntax. Es handelt sich um ein Shell-Snippet, sodass Sie es im Prinzip erstellen können
Die Konfiguration erfolgt für jede Domäne dynamisch, in der Regel handelt es sich jedoch um eine einfache statische Zuweisung
von Geräten zu Domänen reicht aus. Wenn Sie sich dafür entscheiden, Code darin auszuführen, sollten Sie sehr vorsichtig sein
Ich bin defensiv, wenn es um die Benennung anderer von Ihnen verwendeter Variablen oder andere Nebenwirkungen geht
könnte dazu führen, dass etwas passiert. Darin können beliebig viele Gastdomänen konfiguriert werden.

Für jede Gastdomäne steuern zwei Variablen das Verhalten von bbvirt:

DOMAIN_URI_Domain=URI
Diese Variable ist optional und legt fest virsch(1) Verbindung URI wann verwenden
Anbringen oder Lösen von Geräten an der gegebenen Stelle Domain. Wenn der --verbinden Option ist
explizit übergeben an bbvirt es überschreibt, was hier eingestellt ist. Wenn die Verbindung
URI nicht mit einer dieser Methoden festgelegt wird, dann virsch Standard für den Benutzer
Laufen bbvirt wird verwendet (was normalerweise root wäre, wenn es ausgeführt wird). udev).

DOMAIN_RNG_Domain=( Gerät seriell Zahlen ... )
Diese Variable ist erforderlich, wenn ein automatisches Passthrough von Geräten zu einer Domäne erfolgt
gewünscht. Es handelt sich um ein Bash-Array, das mit einer durch Leerzeichen getrennten Liste aller Elemente gefüllt ist
Geräteseriennummern, denen Sie zugewiesen werden möchten Domain. Es handelt sich nicht um einen Fehler
Hier werden Geräte aufgelistet, die derzeit nicht angeschlossen sind. Dies ist wichtig
Stellen Sie sicher, dass Geräte nur einem zugeordnet sind Domain obwohl, und diese Geräte
Gastdomains zugewiesene Domains werden von einem nicht verwendet samen(1) Instanz läuft auf dem
host (was bedeutet, dass der samen Für die Konfiguration muss eine explizite Liste übergeben werden
die Geräte, die es auch verwenden kann).

Hier ist immer die Geräteseriennummer zu verwenden. Sie können kein Gerät angeben
seine logische oder physikalische Adresse auf dem Bus (wie Sie es an den meisten anderen Orten tun können).
wir nehmen eine Geräte-ID).

Nutzen Sie bbvirt online über die Dienste von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad