英語フランス語スペイン語

Ad


OnWorksファビコン

bbvirt - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーター上の OnWorks 無料ホスティング プロバイダーで bbvirt を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド bbvirt です。

プログラム:

NAME


bbvirt - BitBabbler デバイスを libvirt 管理ドメインにホットプラグします

SYNOPSIS


bbvirt アクション [オプション]

bbvirt アタッチ|デタッチ デバイス [オプション]

bbvirt すべて添付|すべてを切り離す [ドメイン] [オプション]

DESCRIPTION


  bbvirt プログラムは、現在の状況からいくつかの苦痛を取り除く試みです
ホスト仮想マシンとゲスト仮想マシン間で複数の USB デバイスを分散するために必要です。
これを構成および管理するにはいくつかの方法がありますが、現時点ではありません。
それらのうち、実際には完全で一貫したソリューションを独自に提供しますが、それらはすべて当てはまります
重大かつ迷惑な点で基準を下回っています。 ここでの目的は、一つにまとめることです
これらのハックは、現在必要なすべての機能を実際に取得するのに十分なものです。
これに対する libvirt のネイティブ サポートは、もう必要ないほど改善されました。

現時点では、これは libvirt で管理される QEMU/KVM 仮想マシンを扱います。

この試験は do we 欲しいです?
ここでの理想的な動作は非常にシンプルです。 任意の数の BitBabbler が与えられると、
デバイスをホスト マシンまたはゲスト VM に割り当てることができるはずです。
その上で実行すると、それらは通常の動作をするはずです。
USBデバイス。

- ゲスト マシンの起動時に接続されている場合は、ゲスト マシンによって認識されるはずです。
ホスト側と同じようにマシンにアクセスできます。

- マシンの起動後に接続されている場合は、そのマシンにホットプラグする必要があります。
ホスト上の場合と同じようにマシンにアクセスできます。

- マシンの稼働中にプラグが抜かれている場合は、マシンからきれいに取り外す必要があります。
ホスト上と同様です。

なぜ することはできません we 持ってる それ?
現時点では、libvirt では、ホストからホストに USB デバイスを割り当てる XNUMX つの方法が提供されています。
ゲストドメイン。

- USB ベンダーと製品 ID によって割り当てることができます。 しかし、それはそこにいる場合にのみ機能します
ホスト内のそのタイプの単一のデバイスにすぎません。 これはほとんどの場合まったく役に立たない
ここで私たちが注目するのは、ホストと各ゲストが次のような状況に陥る可能性がある場合です。
XNUMX つ以上の独自の BitBabbler デバイスが割り当てられている。

- USB バス上の論理アドレスによってそれらを割り当てることができます。 しかし、それは一定ではありません
ドメインに対して静的に構成できます。 デバイスが接続されるたび、または
再接続、リセット、またはホスト マシンの再起動により、そのアドレスは変更される可能性があります。
これは、デバイスがバス上で列挙されるときに動的に割り当てられるためです。

XNUMX 番目の方法がありますが、これは通常の libvirt 設定をバイパスすることに依存しています。
QEMU 機能を直接使用して、バス上の物理アドレスによってデバイスを割り当てます。
どちらのほうが優れていますが、まったく同じように接続する必要があるため、それでも特効薬ではありません。
デバイスを毎回まったく同じポートに接続します (そして、それらのポートが
再起動のたびにホストによって同様に実行されますが、これも保証されていません)。 それはまた強制します
管理するには追加の複雑さが必要になるため、他のフープを飛び越える必要があります。
libvirt の外部でデバイスのアクセス許可を手動で設定しますが、まだ調整中です
それと。

これらすべての方法に共通するさらに大きな欠点は、それらがすべて依存していることです。
デバイスはゲストが起動する前にすでに接続されています。 後から挿入した場合
ゲストが起動されているか、ゲストの実行中に削除されて再接続された場合、またはホストが
バスまたはハブがバウンスして再接続が発生すると、デバイスはデバイスに (再) 接続されません。
ゲスト。 この問題が発生した場合にそれを修正する唯一の方法は、デバイスを手動で再接続することです。
XML での難解な呪文 (デバイスの新しいアドレスを知っていることが前提)、または
完全に電源を切り、ゲストを再起動します。 ユーザーフレンドリーの最高峰ではない
ここで探している操作。

この試験は できる we do それ?
数年前に libvirt に提出されたパッチがあり、デバイスの
USB プロダクト ID とシリアル番号の両方で指定する必要がありましたが、それについてはプッシュされました。
戻ってきましたが、今のところ上流ではまだ適用されていません。 それは長い道のりだっただろう
これを簡単かつクリーンにする方向で、対処すべきはホットプラグの側面のみになります。
と。 それについての不機嫌そうな嫌味は、読者の練習として残しておきます...

もう XNUMX つの方法は、デバイスの論理アドレスの検索をホットプラグに委任することです。
マネージャーのような udev(7)。 住所がいつ分かるのかという点では魅力的です。
デバイスの変更とその変更内容、 udev それ自体はあまり友好的ではありません
ローカル管理者のカスタマイズのアイデア (それは可能ですが、
ますます強く推奨されません)、それを使用するには依然として外部接着剤が必要です。
そのイベントを libvirt が動作してゲストを構成できるものに変換します。
機械。

  bbvirt プログラムはその接着剤と、どれを割り当てるかのユーザーフレンドリーな方法を提供します。
デバイスはどのゲストドメインに属する必要があるか、および手動で呼び出すことができるフロントエンド
または、他の管理者制御タスクによって、BitBabbler デバイスを迅速かつ簡単に追加または削除できます。
実行中のゲスト マシンのいずれかから。

ただし、このアプローチには制限があり、ゲスト マシンがいつ停止するかを簡単に知ることができないことです。
これには、すでに接続されているデバイスが追加されているはずです。 理論的には、私たちは
それらを永続的なドメイン定義に追加することもできますが、それ自体に問題があります。
デバイスを追加できるのは一時的な論理アドレスによってのみであり、追加できることを保証することはできません。
そのアドレスが無効になると、ドメインから削除するために再度呼び出されます。
(ホストの電源が突然オフになったり、正常にシャットダウンされなかった場合など)
永続的なドメイン構成に多くの古いエントリが蓄積される可能性があります。
これは、後で、私たちが接続したいと思っていたものとはまったく異なるデバイスと一致する可能性があります。
それ。 つまり、それが何らかの形で修正されるまでは、ライブゲストに追加することだけが安全です
ドメインを停止すると、その方法に関係なく、常に再び削除されるようになります。
結局止められてしまいました。

ここで私たちの理想に到達するには、まだ道が必要であることは明らかです。

この試験は if we ヒット it   *二* ハンマー?
ゲスト マシンの通知を受け取る方法は XNUMX つだけのようです。
現在始めました。 XNUMX つは、さらに別のデーモン プロセスを実行することです。
誰かがゲストを開始するのをただ座って待っているだけで、それが私たちに知らせてくれるでしょう
そのことについて。 しかし、その後、さらに別のものを設定する必要があり、さらに別のプロセスが必要になります。
ランニング中ですが、レースで負けないようにするにはどうすればよいかを考える上でさらに多くの問題があります。
デバイス イベントの初期セットを取得する間にホストが起動され、そのプロセスが実行されます。
準備ができてアクティブになり、起動時に自動起動されるゲストが実際に起動します。

もう XNUMX つの方法は、libvirt フックを使用することです。 実際にはそうではないという問題があります
これにより、そこから任意の libvirt 関数を実行できるようになります。これは、アタッチするために実行する必要があります。
デバイスをホストに送信します。 デフォルトでインストールできるかどうかは保証できませんが、
システム上にはそのようなフックは XNUMX つしか存在できず、ローカル管理者がすでにそれを使用している可能性があるためです。
使用している...

XNUMX 番目の方法がありますが、これにはローカル管理者がすべてのゲストを起動する必要があります。
マシンがすでに知っているメカニズムではなく、独自のラッパーを介してマシンを実行します。
そして使用します。 これは、同じ状況で他の USB デバイスをサポートするように拡張できません。
人々を苦しめる恐ろしい解決策となるであろう多くの方法。

しかし、悪用できる抜け穴があります。 libvirt qemu フックを使用して、
イベントを変更する udev、次に呼び出すことができます bbvirt それとほぼ同じように
デバイスが実際にホットプラグされている場合に発生し、間接的な層が追加されます。
それをフックから安全に実行できる必要があります。 ルーブ・ゴールドバーグも誇りに思うだろうし、
一部の部品は手作業で組み立てる必要があるかもしれませんが、これをすべて適切に配置すれば、
ゲスト マシンの通常の USB 機能に似たもの。

あまりきれいではありませんが、私たちが取り組まなければならないものにはうまくいきます。

[OK]を、 ただ 言う me コラボレー 〜へ ヒット ボーマンは
これをまとめるには、次のすべてを確認する必要があります。

- udev(7) bit-babbler パッケージのルールがインストールされます。 これをインストールした場合
すでに完了しているはずの Debian パッケージから。 そうでない場合は、次のことを行う必要があります
にあるルールをインストールします debian/bit-babbler.udev ソースパッケージから
システム上の適切な場所 (おそらく /etc/udev/rules.d).

- bbvirt(1)スクリプトは以下の場所にインストールされます。 udev ルールはそれを見つけます。 もし、あんたが
これは Debian パッケージからインストールしたものではありません。 / usr / bin、その後、必要になります
を微調整する udev 自分に合ったルール。

- ゲストマシンで使用したいデバイスと、それを使用したいマシン
で指定されています bbvirt 設定ファイル。 そのデフォルトの場所は次のとおりです
/etc/bit-babbler/vm.conf。 別のファイルを使用したい場合は、そのファイルを渡す必要があります。
との位置 --config 内のオプション udev ルールを作成し、それを使用してフック スクリプトを更新します
ファイルも。 そのファイルに何を入れることができるかの詳細については、
CONFIGURATION OPTIONS 以下のセクションをご覧ください。

- libvirt フック ファイルがインストールされている。 上記のすべてが完了すると、デバイスは次のようになります。
ゲストの実行中にゲスト マシンが接続されると、実行中のゲスト マシンに追加されます。
この最後のステップにより、既に接続されているデバイスが新たに追加されます。
ゲストも開始しました (これには、ホストが起動したときに自動的に開始されるゲストも含まれます)
マシンブーツ)。

競合したり上書きしたりせずにこれをインストールできる安全な方法が見つかるまで
既存のフックを使用する場合は、全員がこのステップを手動で実行する必要があります。 インストールしている場合
Debian パッケージの場合、このために提供したフック スクリプトの例は次のようになります。
見つかった /usr/share/doc/bit-babbler/examples/qemu-hook。 見つけられなかった場合でも見つけることができます
in libvirt/qemu-フック ソースパッケージの。

そのファイルを次のようにインストールする必要があります /etc/libvirt/フック/qemu、またはそのコンテンツをマージします
既存の qemu すでにそのフックが設定されている場合は、そこにファイルを追加します。 そのファイルがそうでなかった場合
以前に存在した場合は、再起動する必要があります libvirtd(8) 使用を開始してもらいます。

これで必要な自動化がすべてカバーされますが、デバイスの接続と取り外しも可能です。
いつでも手動で。 それを行う詳細については、以下で説明します
セクション。 それ以外の場合、上記のすべてが完了したので、他に呼び出す必要がある理由はありません。
bbvirt 直接。

OPTIONS


には XNUMX つの主な動作モードがあります。 bbvirt イニシャルによって選択されるもの
アクションオプション。 実行するアクションが アタッチ or デタッチ その場合はデバイスが XNUMX つだけ
が動作することになりますが、どのデバイスが動作するかを明示的に指定する必要があります。
現時点ではホスト上に存在するデバイスは XNUMX つだけです。 呼び出すとき bbvirt 手動で
  デバイス シリアル番号、バス上の論理アドレス (
フォーム バスナム:デバイス番号、XNUMX 進整数として与えられます)、またはバス上の物理アドレス (
フォーム バスナム-ポート[。ポート ...])。

実行するアクションが すべて添付 or すべてを切り離すの場合、動作するデバイスは次のとおりです。
によって選択されました ドメイン 代わりに協会。 もし ドメイン 明示的に指定されている場合は、すべて
構成ファイルでそのゲストドメインに割り当てられているデバイスが動作します。
あたかも同じように bbvirt それぞれに対して個別に呼び出されます。
アタッチ or デタッチ アクション。 いいえの場合 ドメイン が提供されると、構成されたすべてのゲストが
ドメインはこの方法で処理されます。

次の追加オプションが利用可能です。

-C、 --config
デバイス割り当てのインポート元となる代替構成ファイルを指定します。
ファイルへのパスが明示的に指定されていない場合は、次の場所で検索されます。
  /etc/ビットバブラー ディレクトリ ( .conf サフィックス)。

-NS、 --connect =URI
特定します おとなしい(1)接続 URI 使用します。 これは、 DOMAIN_URI セッションに
構成ファイル内のドメインの場合。 これらのいずれかを使用して設定されていない場合
メソッド、次に おとなしい 実行中のユーザーのデフォルト bbvirt 使用されます。

-NS、 --domain =
動作する libvirt ドメインを指定します。 これはデバイスをオーバーライドするために使用できます
構成ファイルからの割り当て bbvirt 手動で呼び出すか、アクションを実行するために
現在構成ファイルで指定されていないデバイスまたはドメイン上で。

-NS、 --バス番号=NUM
デバイスが接続されている USB バス番号を指定します。 このオプションはほとんどの場合、
避けるために使われる bbvirt すでにわかっている場合(次のような場合)、これを調べる必要があります。
から呼び出されます udev ルール)。 通常、これを渡す理由はあまりありません。
呼び出す bbvirt 論理的または論理的にデバイスを指定できるため、手動で
代わりに物理アドレス。

-NS、 --devnum=NUM
現在デバイスに割り当てられている USB デバイス番号を指定します。 一緒に
バス番号。これはデバイスの論理アドレスを形成します。 このオプションは
主に回避するために使用されます bbvirt すでにわかっている場合は調べる必要があります (たとえば、
から呼び出されたときのように udev ルール)。 通常、合格する理由はあまりありません
これを呼び出す場合 bbvirt 手動でデバイスを指定するだけなので、
代わりに論理アドレスを使用します。

-NS、 -ドライラン
デバイスの取り付けや取り外しは行わず、これが次の場合に何が試行されるかを示すだけです。
ライブラン。 このオプションは、最小限のレベルを意味します。 -詳細ただし、冗長になる可能性があります。
そのオプションを明示的に渡すことによってさらに増やすことができます。

-v、 -詳細
実際に何が起こっているのかについてもっと騒ぎましょう。 複数回渡される可能性があります
さらに冗長性を高めます。

-?、 - 助けて
利用可能なオプションの簡単な概要を表示します。

CONFIGURATION OPTIONS


  bbvirt 設定ファイルには、 bash(1) シェル
構文。 これはシェル スニペットとして提供されるため、原則として次のように構築できます。
各ドメインの構成は動的に行われますが、最も一般的には単純な静的な割り当てです。
デバイスからドメインまでの数で十分です。 その中でコードを実行することを選択した場合は、非常に優れた処理を実行する必要があります。
使用する他の変数の名前空間やその他の副作用について防御的になる
が起こる可能性があります。 任意の数のゲスト ドメインを構成できます。

各ゲスト ドメインについて、XNUMX つの変数がゲスト ドメインの動作を制御します。 bbvirt:

ドメイン_URI_ドメイン=URI
この変数はオプションであり、 おとなしい(1)接続 URI ときに使用する
指定されたデバイスからのデバイスの取り付けまたは取り外し ドメイン。 もし - 接続 オプションがある
明示的に渡される bbvirt ここで設定された内容はオーバーライドされます。 接続の場合
URI これらの方法のいずれかを使用して設定されていない場合、 おとなしい ユーザーのデフォルト
ランニング bbvirt が使用されます (通常、から実行する場合は root になります) udev).

ドメイン_RNG_ドメイン=( デバイス シリアル 番号 ... )
この変数は、デバイスのドメインへの自動パススルーが有効な場合に必要です。
希望。 これは bash 配列であり、すべての
割り当てたいデバイスのシリアル番号 ドメイン。 エラーではありません
現在接続されていないデバイスがここにリストされます。重要なことは、
デバイスが XNUMX つのみに割り当てられていることを確認してください ドメイン ただし、そのデバイス
ゲストドメインに割り当てられたドメインは、 シード済み(1) 上で実行されているインスタンス
ホスト (つまり、 シード済み 設定には明示的なリストを渡す必要があります。
使用される可能性のあるデバイスも含まれます)。

ここでは常にデバイスのシリアル番号を使用する必要があります。 でデバイスを指定することはできません
バス上の論理アドレスまたは物理アドレス (他のほとんどの場所と同様)
デバイス ID を取得します)。

onworks.net サービスを使用して bbvirt オンラインを使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad