FreeBSD-9.0-RELEASE-amd64上のQEMU

タスク:ubuntu-12.04.1-server-amd64-1pc OSを搭載したqemuマシンを実行し、nを構成します(この例では3を開始します)。 およびFreeBSD-9.0-RELEASE-amd64。 amd64バージョンは、ubuntu開発者によって推奨されています。



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/



All Articles