UbuntuのKVMにWindowsシステムをインストールする方法
最近会社のことで書く時間があまりないので、技術的な文章で数えましょう。
このようなことですが、当社には組み込みシステムに基づいて開発された小さなものがあり、AndroidでもiOSプラットフォームでもありません。ええと、これは何を意味しますか?これは、Java、Objective-C、またはSwiftではなく、この小物を開発する言語がC言語であることを意味します。このコードをコンパイルするには、Cross Compiler、すなわち俗称のクロスコンパイル環境が必要です。
実はXcodeがコンパイルしたiOS Appもクロスコンパイルの範疇に属しています。
しかし、このクロスコンパイル環境はWindowsプラットフォームしかありません!実は、GCC以外にも使いやすいクロスコンパイル環境はWindowsの下にあるようです。多くの組み込み型の学生は知っているはずですが、現在業界で使われているのはKeilとIARシリーズです。残念なことに、どちらもWindows特製で、macOSやLinuxバージョンはありません。
どうしてWindowsは私をこんなに不快にさせますか?普段は仕事の効率を高めるために、使わなければならない業界のアプリケーションを除いてWindowsの下に走らなければならないときは、MacだけでWindowsを使わないからです。だから、私たちはほとんどアイドルと裕福なWindowsホストを持っていません。いいえ。根こそぎで、「ほとんどない」という言葉はありません。
サーバー側では、Windows Serverクラウドなんて言わないでください。macOSとUbuntuの脳障害ユーザーとして、私はBare metalでWindows Serverを走ることはできません。サーバーはLinuxしか走っていませんが、他には興味がありません。
では、質問ですが、私たちは自動化コンパイルシステム、つまりよく知られているCIシステム(Continuous integration)を持っています。Atlassianのファミリーバケツを使っています。Bitbucket、Bamboo、JIRA、Confluenceなど、すべてLinuxプラットフォームのDocker仮想化容器の中で走っています。
今、私たちはこの小物もコンパイラを自動化して、人力をよりよく解放するために、将来的にReleaseの内容を追跡し、管理するのに便利にしたいと思っています。最初に解決しなければならない問題は、Windowsのサーバがありません。
仮想化が流行している以上、既存のUbuntuサーバを利用してWindowsを仮想化しましょう。
KVMとはKVMのフルネームは、Kernel-based Virtual Machineです。簡単な一言で言えば、Linuxカーネルベースの仮想化管理システムです。
Linuxカーネルのバージョン2.6.20からこの機能が統合されています。Dockerはアプリケーション層での仮想化であり,KVMはシステム層での仮想化であることを簡単に理解する.
違いは、Dockerが仮想化したコンテンツは、ホストとカーネルを共有する必要があります。つまり、Linuxクラスのシステムしか走ることができません。
KVMはホスト全体の仮想化なので、Linux自体に限らず、異なるOSをインストールできます。しばらく風が吹いたら、UbuntuでmacOSを仮想化できるかどうか見てみましょう。これにより、iOS Appのコンパイルを自動化するためにMacホストを単独で作成する必要がなくなります。
KVMのインストールこちらはUbuntu 16.04 LTSバージョンを使用していますが、長期的な使用と安定性を考慮して基本的にLTSバージョンのみを選択していますが、他のバージョンの違いもあまり大きくないので、参考にすればいいと思います。
まず、KVM関連のパッケージファイルをインストールします。私のサーバーはコマンドラインで、Xデスクトップをインストールしていないので、--no-install-recommendsパラメータを追加しました。そうでないとvirt-viewerなどのパッケージがインストールされ、依存関係にはX 11や多くのグラフィックライブラリがあり、これらは使用できません。しかし、デスクトップシステムを開いている場合は、このパラメータを追加しなくてもいいです。
$ sudo apt-get install --no-install-recommends qemu-kvm qemu-utils libvirt-bin virtinst cpu-checker
すべてOKかどうか検証してみましょう
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
はい、すべて順調です。ブリッジネットワークを作りましょう。実はこれも必要ではありません。あなたの使用シーンを見てください。
KVMは自分でvirbr 0のブリッジネットワークを作成しますが、これはNATのネットワークであり、ローカルエリアネットワーク内の他のホストと通信することはできませんので、サボらないで、自分でブリッジネットワークを構築しましょう。
参照構成は次のとおりです。$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The bridged network interface
auto br0
iface br0 inet static
address 1.2.3.4
netmask 255.255.255.0
gateway 1.2.3.1
dns-nameservers 1.2.3.1
bridge_ports enp9s0
bridge_stop off
bridge_fd 0
bridge_maxwait 0
ネットワークを再起動し、ブリッジのステータスを確認します。$ sudo systemctl restart networking
$ sudo brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f079593874d9 no enp9s0
virbr0 8000.525400087ef2 yes virbr0-nic
OK、すべて正常で、仮想ホストの作成を開始することができます。
仮想ホストの作成KVMは最初のステップを完了しただけで、仮想ホストを作成してから続行する必要があります。
始める前に、いくつかのものを用意します。
1.Windowsインストールミラー
2.Virtio ISOとフロッピーディスクミラー
3.VNCクライアント(macOS付属)
私がここで使っているのはVirtio 0.1.126-2バージョンです。OSバージョンは、Ubuntu 16.04.1 LTSです。
virt-installコマンドを使用して仮想マシンの作成を支援する準備が整いました。
virt-install \
--name win10 \
--memory 2048 \
--vcpus sockets=1,cores=1,threads=2 \
--cdrom=/path/to/windows_10.iso \
--os-variant=win8.1 \
--disk /path/to/win10/win10.qcow2,bus=virtio,size=40 \
--disk /path/to/virtio/virtio-win-0.1.126_amd64.vfd,device=floppy \
--network bridge=br0,model=virtio \
--graphics vnc,password=Passw0rd,port=5910 \
--hvm \
--virt-type kvm
基本的に構成情報はすべて上にあり、仮想情報機の構成は以下の通りです。2 Gメモリ
CPU 1個、コア1個、スレッド2個
CDROM×1(WindowsインストールCD)
40 Gハードディスク(システムディスク)
1台のFDD(Virtioドライブ)
5910ポートでVNCリモートデスクトップをオープン
コマンドの入力が正しい場合は、次のようなフィードバックが得られます。
Starting install...
Creating domain...
Domain installation still in progress. Waiting for installation to complete.
簡単に言えば、仮想マシンは作成されていますが、画像インタフェースがないので、次のステップはできません。VNCに接続すると、下に進むことができます。このヒントは一度しか現れず、システムをインストールした後、この起動待ちは発生しません。
Windows 10のインストール仮想マシンの作成時に、VNCリモートデスクトップを提供するために5910ポートを使用することを示しました。しかし、このポートは直接アクセスできません。デフォルトでは127.0.0.1にバインドされているため、ローカルのみがアクセスできます。まず、リモートのローカルポートを、コストベースのポートをマッピングする必要があります。
ssh -L 5910:127.0.0.1:5910 server
次にmacOSの下で、□+SpaceからSpotlightを呼び出し、次のように入力します。
vnc://127.0.0.1:5910
ポップアップウィンドウにパスワードを入力:Passw 0 rd
そしてWindowsシステムを快適にインストールすることができます。ハードディスクが認識できない場合は、手動でドライバをロードし、Aディスクと対応するWindowsディレクトリを選択すればいいです。同様に、NICが駆動されていなければ、法のように砲撃されます。
インストールが完了したスクリーンショットを添付します。