1.インストール(ポート仲間BSD'delnikiを更新することを忘れないでください)
main [16:54:emulators / qemu]#cd / usr / ports / emulators / qemu
main [16:55:emulators / qemu]#インストールをクリーンにする
だから:
main [17:25:エミュレーター/ qemu-devel]#pkg_info | grep "qemu"
kqemu-kmod-devel-1.4.0.p1_5 QEMU CPUエミュレーター用カーネルアクセラレーター(開発バージョン
qemu-0.11.1_11 QEMU CPUエミュレーター
main [17:25:エミュレーター/ qemu-devel]#
アクセラレータとプロセッサエミュレータがインストールされています。
2.ワークスペースの作成と環境のセットアップ
main [17:40:/ usr / QEMU] #mkdir —p / usr / QEMU / UbuEx1
公式サイトからブートディスクイメージubuntu-12.04.1-server-amd64.isoをダウンロードします。 カーネルモジュールを読み込んでloader.confに追加します(必要に応じて作成します)
main [17:53:/ usr / QEMU]#touch /boot/loader.conf
main [17:53:/ usr / QEMU]#echo 'kqemu_load =&aquo; YES»' >> /boot/loader.conf
main [17:53:/ usr / QEMU]#echo 'aio_load =&aquo; YES "' >> /boot/loader.conf
kqemu.ko-加速モジュール。
aio.ko-非同期I / Oモジュール。
または、aioモジュールをカーネルに追加して、ネットワークをエミュレートするだけで、タップデバイスが必要です。したがって、次のモジュールをカーネルにロードする必要があります。
オプションVFS_AIO
デバイスタップ
オプションIPFILTER
オプションIPFILTER_LOG
main [17:53:/ usr / QEMU]#cd / usr / src
main [17:53:/ usr / QEMU]#make buildkernel KERNCONF = <kernel_name>
...
main [17:53:/ usr / QEMU]#make installkernel KERNCONF = <kernel_name>
...
main [17:53:/ usr / QEMU]#shutdown —r now
aio.koモジュールをロードしないと、QEMUは泣き叫ぶでしょう:
不正なシステムコール:12(コアダンプ)
ホストFreeBSDとゲストシステム間のネットワークの確立を計画している場合は、次のモジュールもダウンロードする必要があります。
main [18:14:〜]#kldload if_bridge
main [18:14:〜]#kldload if_tap
再起動後、モジュールがカーネルに沈んでいることがわかります。
メイン[18:22:〜]#kldstat
Id Refsアドレスサイズ名前
1 28 0xffffffff80200000 1203808カーネル
2 1 0xffffffff81404000 2bdd0 kqemu.ko
3 1 0xffffffff81612000 42a7 linprocfs.ko
4 1 0xffffffff81617000 1e00b linux.ko
5 1 0xffffffff81636000 1582 fdescfs.ko
6 1 0xffffffff81638000 64b00 radeon.ko
7 1 0xffffffff8169d000 13a2b drm.ko
8 1 0xffffffff816b1000 2655 if_tap.ko
9 1 0xffffffff816b4000 55fe if_bridge.ko
10 1 0xffffffff816ba000 353d bridgestp.ko
bridgestp.ko-自動的にロードされます。
次に、メインIDEマスターバスがDMAトポロジをサポートしていることを確認します(現在、ほとんどのアーキテクチャでサポートされています)。
かけがえのないカーネルモジュールはすでにロードされているため、ゲストOSでの今後のネットワークセットアップのためにホストOSの準備を続けます。 if_tap.koモジュールをロードすると、システム変数の中に、tap *インターフェースの動作を制御する変数が表示されます。 2つに興味があります-
main [19:26:〜]#sysctl -a | grep "net.link.tap"
net.link.tap.debug:0
net.link.tap.devfs_cloning:1
net.link.tap.up_on_open:0
net.link.tap.user_open:0
net.link.tap.up_on_open-/ dev / tapが開いているときにインターフェースをアップ位置にします。 net.link.tap.user_open-ユーザーが開く/開発/タップすることができます。 デバイスの使用を制限するには、/ dev / tap *で所有者とアクセス権を変更します。 これは、/ etc / devfs.rulesファイルにdevfsルールを設定することで実行できます。デフォルトではFreeBSD 9.0にはないため、作成します。
main [20:12:〜]#touch /etc/devfs.rules
main [20:18:〜]#echo "[sysqemu = 11]" >> /etc/devfs.rules
main [20:17:〜]#echo "add path 'tap *' mode 0660 group qemu" >> /etc/devfs.rules
次に、変数を変更しましょう。
main [20:20:〜]#sysctl net.link.tap.user_open = 1
net.link.tap.user_open:0-> 1
main [20:21:〜]#echo net.link.tap.up_on_open = 1
net.link.tap.up_on_open = 1
次に、ネットワークを準備します。 すべてのマシンがIPを介して外部接続でき、仮想マシンのローカルネットワークにアクセスできる必要があります。 したがって、3つのタップインターフェイスを組み合わせてブリッジインターフェイスを作成する必要があります。
main [20:54:〜]#ifconfig bridge0 create
main [20:54:〜]#ifconfig bridge0 addm bfe0 addm tap0 addm tap1 addm tap2 up
main [20:58:〜]#ifconfig bridge0
bridge0:flags = 8843 <UP、BROADCAST、RUNNING、SIMPLEX、MULTICAST>メトリック0 mtu 1500
エーテル02:a5:80:8e:f1:00
id 00:00:00:00:00:00優先度32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
ルートID 00:00:00:00:00優先度32768 ifcost 0ポート0
メンバー:tap2 flags = 143 <学習、発見、自動エッジ、自動PTP>
ifmaxaddr 0 port 14 priority 128 path cost 2,000,000
メンバー:tap1フラグ= 143 <学習、発見、自動エッジ、自動PTP>
ifmaxaddr 0 port 12 priority 128 path cost 2,000,000
メンバー:tap0 flags = 143 <学習、発見、自動エッジ、自動PTP>
ifmaxaddr 0 port 11 priority 128 path cost 2,000,000
メンバー:bfe0 flags = 143 <学習、発見、自動エッジ、自動PTP>
ifmaxaddr 0 port 7 priority 128 path cost 200000
bfe0は私の物理インターフェイスです。
次のステップはディスクイメージを作成することです。これは将来、仮想マシンに接続します。 Qemuはいくつかの画像形式をサポートしています。これらの形式については、manページで詳しく説明しています。 ネイティブのqemuとプロジェクトに最適なqcow2形式に焦点を当てます。 その特徴は、事前に定義された設定で作成した後、将来、同じ設定の画像を使用する場合、元の画像を指し、新しいマシンのディスクは正確に一致するという事実にありますが、新しい画像に加えられたすべての変更はそうではありませんテンプレートに記録されます。 qemuのこのプロセスは、「コピーオンライト」と呼ばれます。 この形式は、暗号化、スナップショット、女の子とビールとzlib圧縮をサポートしています。
ベースイメージを変更するには、次のコマンドを使用する必要があります
コミット[-f fmt]ファイル名
main [23:20:QEMU / UbuEx1]#qemu-img create -f qcow2 ubuntu_tamplate.qcow2 7G
メイン[23:22:QEMU / UbuEx1]#ls -al
合計200
drwxr-xr-x 2ルートホイール512 Sep 22 23:22。
drwxr-xr-x 5ルートホイール512 Sep 21 17:40 ...
-rw-r-r-- 1ルートホイール262144 Sep 22 23:22 ubuntu_tamplate.qcow2
これで、環境の作成が完了しました。 エミュレータを起動して、ubuntu-12.04.1-server OSをインストールしましょう。
3. OSの起動とインストール
コマンド構文を検討してください。 さらに苦労せずに、最も頻繁に必要なオプションを分析します。
一般的な形式:
main [13:57:QEMU / UbuEx1]#qemu [オプション] [ディスクイメージ]
X86_32から遠いアーキテクチャをエミュレートするには、次のコマンドを使用します。
qemu-system-mips qemu-system-ppcemb
qemu-system-mips64 qemu-system-sh4
qemu-system-arm qemu-system-mips64el qemu-system-sh4eb
qemu-system-cris qemu-system-mipsel qemu-system-sparc
qemu-system-m68k qemu-system-ppc qemu-system-sparc64
qemu-system-microblaze qemu-system-ppc64 qemu-system-x86_64
最も一般的なオプションは次のとおりです。
1. -smp n
Sparc32またはLinuxアーキテクチャn = {1..4}のマルチプロセッシングサポート、n = {1..255}。
2. -numa opts
NUMAシステムのサポート、メモリがプロセッサ間で共有されているメモリへの不均一なアクセス、パフォーマンスの向上を提供します。

3. -fdaファイル
-fdbファイル
イメージファイルまたは実デバイス/ dev / fd0を使用する-QEMUマシンのフロッピードライブとしてのフロッピーホスト。
4. -hdaファイル
-hdbファイル
-hdcファイル
-hddファイル
ファイルをハードディスクQEMUマシンとして使用します。 x86アーキテクチャー表記では、-a -b floppy、-c first hdd、-d cdrom
5. -cdromファイル
QEMUマシンのCDROMとしてイメージファイルを使用します。 -hdcオプションと-cdromオプションを同時に使用することはできません。 host / dev / cdromのcdromを使用することもできます。
6. -driveオプション[、オプション[、オプション[、...]]]
デバイス定義。 イメージは、デバイス、メディアデバイス、これらのデバイスのスナップショットを作成する機能、デバイスタイプとして接続できます。
例:
cdrom接続
qemu -driveファイル=ファイル、インデックス= 2、メディア= cdrom
バスに乗る
qemu -drive file = file、if = ide、index = 1、media = cdrom
ファイルオプションを指定せずに空のデバイスを接続します
qemu -drive if = ide、index = 1、media = cdrom
ドライブ接続
qemu -driveファイル=ファイル、インデックス= 0、メディア=ディスク
qemu -driveファイル=ファイル、インデックス= 1、メディア=ディスク
qemu -driveファイル=ファイル、インデックス= 2、メディア=ディスク
qemu -driveファイル=ファイル、インデックス= 3、メディア=ディスク
フロッピードライブ接続
qemu -drive file = file、index = 0、if = floppy
qemu -driveファイル=ファイル、インデックス= 1、if =フロッピー
ユニットID = 6バス= 0のSCSI接続
qemu -drive file = file、if = scsi、bus = 0、unit = 6
ideインターフェイスがデフォルトで使用され、インデックスがインクリメントされます。
qemu -drive file = a -drive file = bはqemu -hda a -hdb bと同等です
7. -mtdblockファイル
-sdファイル
-pflashファイル
さまざまな種類のフラッシュメモリ。
8. -boot [order = drives] [、once = drives] [、menu = on | off]
起動順序を決定するオプション。 ドライブ= ab(フロッピー)c(hdd)d(cdrom)n(ネットワーク)。 -boot order = ac-最初にフロッピーで起動し、次にhddで起動します
-boot once = d-cdromから起動してから再起動
9.-スナップショット
生画像ではなく一時ファイルにショットを書き込む。
10. -m megs
RAM値を設定します。 GBまたはMb。
11. -k言語
言語表:
ar de-ch es fo fr-ca hu ja mk no pt-br sv
da en-gb et fr fr-ch is lt nl pl ruth
de en-us fi fr-be hr it lv nl-be pt sl tr
デフォルトはen-usです。
12. -usb
USBドライバー接続。
13. -usbdevice devname
USBデバイスを入手しました。 デバイスの種類には、マウス、タブレット、ディスクなどがあります。
14. -name name
-uuid uuid
ゲストシステムの名前。 ゲストID
15. -vgaタイプ
エミュレーション用のVGAカードのタイプ。
irrus-Windows 95以降のWindows OSファミリでサポート
std-高解像度に使用されます。 ほとんどの場合、Cirrusとstdで十分です。
VMware
なし
16. -net tap [、vlan = n] [、name = name] [、fd = h] [、ifname = name] [、script = file] [、downscript = dfile]
ゲストシステムでネットワークインターフェイスを作成します。 男性の例:
qemu linux.img -net nic、vlan = 0 -net tap、vlan = 0、ifname = tap0 \
-net nic、vlan = 1 -net tap、vlan = 1、ifname = tap1
異なるタイプの異なる名前を持つ複数のVLANインターフェイスが作成されています。 -net nicは、VLANインターフェイスを備えたPCIカードを作成します。 -net tapは、ホストタップデバイスをvlan0およびvlan1インターフェイスに接続します。
17. -d
/tmp/qemu.logにログインします
kqemu.ko
QEMUエミュレータには、たとえばホストなどの物理デバイスのリダイレクトなど、多くの便利なオプションがまだあります;そのすべてのおいしいプロパティの説明は、この記事の範囲外です。
それでは、参照マシンのVMを起動します。
FreeBSDのkqemu.koモジュールの不安定性のため、VMを起動する前に、ゲストOSのインストール段階でこのモジュールをメモリからアンロードします。
main [14:41:dassi / QEMU]#kldunload kqemu.k
main [0:08:dassi / QEMU]#qemu-system-x86_64 -net nic、model = e1000 -net tap、name = tap0、script = no -cdrom ubuntu-12.04.1-server-amd64.iso -hda tamplates /Ubuntu_T/ubuntu_tamplate.qcow2-ブート順序= dc m 256 -localtime
`127.0.0.1:5901 'で実行されているVNCサーバー
警告:keysym 0のスキャンコードが見つかりません
警告:keysym 0のスキャンコードが見つかりません
VNCサーバーに接続し、インストールを開始します。


次のステップは、ホストOSとゲストOS間のローカルエリアネットワークを構成することです。 開始するには、どのように機能しますか。 ゲストOS用の物理インターフェイスを作成する必要があります。これは、仮想スイッチを介してホストOSに接続されます。 このようなqemu表記の切り替えは、vlanと呼ばれます。

LANでゲストOSとホストOSを接続するには、いくつかのオプションがあります。
1.ユーザーモードでは、ゲストマシンは組み込みのホスト交換システムを使用します。
main [19:45:dassi / QEMU]#qemu-system-x86_64 -net nic、vlan = 0 -net user、vlan0 -hda tamplates / FreeBSD_T / freebsd_tamplate.qcow -boot c -m 256 -localtime
ゲストOSで起動した後、組み込みのdhcpサーバーを使用してネットワークを構成する必要があります。
10.0.2.0/8の範囲からアドレスを取得します。
2.ホストインターフェイスtun * \ tap *をゲストインターフェイスにリンクします。
main [19:45:dassi / QEMU]#qemu-system-x86_64 -net nic、vlan = 0 -net tap、vla0、script = no、downscript = no -hda tamplates / FreeBSD_T / freebsd_tamplate.qcow -boot c -m 256-現地時間
起動時に、/ usr / local / etc / qemu-ifupおよび/ usr / local / etc / qemu-ifdownファイルを設定することをお勧めします。これらは起動/シャットダウン時のネットワーク設定スクリプトです。

3. 3番目の方法は、外部からゲストマシンにアクセスする必要がある場合に使用されます。
これは、ホストマシンでブリッジタイプの接続を作成し、その物理インターフェイスと仮想tun * \ tap *をそこに配置することにより実現されます。 この接続は、ホストOSを使用するか、qemuネットワークシステムの起動スクリプトを編集することにより作成されます。 通常、設定は手順2を繰り返します。

qemuシステムは、ホストOSソケットを介して仮想マシンをネットワークに結合し、vlan *をポートにバインドし、特定のvlanのネットワークトラフィックをダンプし、ネットワークインターフェースが不要な場合は-net noneオプションが使用されることに注意してください-net nic -netユーザー値。
それで、次のネットワーク図を整理するための一連のステップがあります
main [21:38:dassi / QEMU]#ifconfig bridge0 create
main [21:38:dassi / QEMU]#ifconfig tap0 10.100.0.1/24
main [21:38:dassi / QEMU]#ifconfig tap1 10.101.0.1/24
main [21:38:dassi / QEMU]#ifconfig tap2 10.102.0.1/24
main [22:14:dassi / QEMU]#ifconfig bridge0 addm tap0 addm tap1 addm tap2 addm bfe0
main [22:14:dassi / QEMU]#ifconfig bridge0
bridge0:フラグ= 8802 <ブロードキャスト、シンプレックス、マルチキャスト>メトリック0 mtu 1500
エーテル02:a5:80:8e:f1:00
id 00:00:00:00:00:00優先度32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
ルートID 00:00:00:00:00優先度0 ifcost 0ポート0
メンバー:bfe0 flags = 143 <学習、発見、自動エッジ、自動PTP>
ifmaxaddr 0ポート7プライオリティ128パスコスト55
メンバー:tap2 flags = 143 <学習、発見、自動エッジ、自動PTP>
ifmaxaddr 0 port 14 priority 128 path cost 2,000,000
メンバー:tap1フラグ= 143 <学習、発見、自動エッジ、自動PTP>
ifmaxaddr 0 port 12 priority 128 path cost 2,000,000
メンバー:tap0 flags = 143 <学習、発見、自動エッジ、自動PTP>
ifmaxaddr 0 port 11 priority 128 path cost 2,000,000
(この段階で、お気づきのとおり、ホストの構成は完了です。タップホストインターフェイスと仮想ゲストOSインターフェイスのペアは、マスク24を持つ同じサブネット上にあります。bfe0-内部ネットワークを見ている物理インターフェイス)
これで、マシンを起動し、ゴスOSを使用して、対応するアドレス10.0.100.2、10.0.101.2、および10.0.102.2をそれぞれ仮想インターフェイスに割り当てるだけで十分です。 素晴らしい、今私たちのマシンは内部ネットワークを見て、そこから見えるようになっています。
結果:Ubuntu-1pcとFreBSD-2pcを実行している3台のマシンで、LANを「表示」し、そこから「見える」状態で断続的に動作しています。 タスクが完了しました。
使用したリソース
男frebsd;
http://wiki.freebsd.org/qemu ;
http://www.lissyara.su/articles/freebsd/programms/qemu_lan/