从容器中启动

  • 开始构建云桌面,启动基础docker容器

    1
    docker run -dit --privileged --name NikoVDI -p 8288:5900 -p 8289:5901 -p 8888:5988 -p 8889:5989 -v ~/:/metaworld peacedocker10/nikodocker-vncxfce:1.0 /bin/bash
  • 这是一个已经构建好的,直接使用的。

    1
    docker run -dit --privileged --name PeaceMakerVDI -p 18888:5900 -p 18889:5901   -v ~/:/metaworld peacedocker10/nikovdi-spicewin10:1.0 /bin/bash

8288 给vnc;8888和8889给SPICE和SPICE+TLS

spice连接方式: spice://hostaddr:18888

第一part: 准备docker、kvm和qemu

  • docker内容器安装kvm、virt-manager

    1
    apt-get install qemu-kvm libvirt-bin virt-manager bridge-utils qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager
  • kvm-ok指令验证kvm已经启动,否则执行modprobe kvm

  • 执行这个命令重启libvirt和virtlogd

    1
    2
    sudo systemctl enable --now libvirtd
    sudo systemctl enable --now libvirtd

在docker容器内通常会失败,如下。解决方法也在下列。

1
2
3
4
root@5d7cd0495ce9:/# systemctl enable --now libvirtd
Synchronizing state of libvirtd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable libvirtd
System has not been booted with systemd as init system (PID 1). Can't operate.

解决:

1
2
3
4
root@5d7cd0495ce9:/# /etc/init.d/libvirtd restart
* Restarting libvirt management daemon /usr/sbin/libvirtd [ OK ]
root@5d7cd0495ce9:/# /etc/init.d/virtlogd restart
* Restarting libvirt logging daemon /usr/sbin/virtlogd [ OK ]

restart失败时请尝试直接start

  • 安装kvm后,确认系统内已经有了virt-manager这个应用,打开这个应用,如果报错,则重启系统使qemu能够与kvm正常工作。(如果你是docker容器,这意味着你需要重启这个docker容器而没有必要重启整个系统)

如果哪里出错,或在未来某个时刻发现异常,你可以回到这里,尝试命令内核安装kvm模块:

1
sudo modprobe kvm

到这里,virt-manager应该工作正常并且不会再有任何抱怨。此时它会向您展示如下界面。

第二part:安装Windows10客户机

接下来通过windows iso安装虚拟机。过程就像VMWare Station一样,相关步骤常规且简单。

请自己准备版本符合需求的Windows安装镜像。密钥可见本文末尾参考。

  1. 创建虚拟机,注意自定义配置

  2. 磁盘选择Virtio

  3. 配置SPICE

    建议选择为AUTO,可以不用像下图一样指定端口

  1. 可以考虑配置VNC。但是强烈建议仅使用SPICE即可。

  2. 网卡配置为Virtio

  3. Windows需要Virtio的驱动,本文末尾提供下载地址,通过虚拟机的CR-ROM磁盘装入

  4. 配置启动顺序,保证Windows安装镜像位于第一位,QEMU磁盘镜像位于第二位

  5. 配置CPU,使用宿主机CPU配置;设置核心与线程

  6. 务必选择自定义安装,否则因为驱动问题看不到磁盘

  7. 从上述virtio的CD-ROM所在盘加载驱动

  8. 操作正确则如下图,选择磁盘开始安装

  9. 成功进入系统,目前没有为网卡安装驱动

  10. 进入设备管理器,为每个设备安装驱动。这些设备的驱动都是我们上面配置的使用virtio驱动。我们用同样的方式在插入的virtio镜像中搜索并安装驱动

  11. 成功安装驱动如下

第三part:SPICE

  1. windows作为Guest os需要安装SPICE相关工具,才能正确运行SPICE服务
    下载软件(本文末尾参考提供地址),为Windows安装该工具(FAQ第三点有简单描述)
  2. 完成安装后,打开SPICE客户端软件(如remote view),连接到SPICE即可看到云桌面画面!

FAQ

  1. process exited while connecting to monitor (QEMU无法启动虚拟机时)
    1
    2
    3
    4
    5
    6
    Dadding the following:

    user = "root"
    group = "root"

    to the /etc/libvirt/qemu.conf file. Be sure to include the quotes.

然后

1
sudo usermod -a -G kvm username

执行完该步骤后,可能需要重新打开virt-manager;如果还不正常,通过上文讲的重启libvirt的指令再次尝试。如果还不正常,重启docker容器。以上步骤重复执行。

  1. qemu设置不支持TLS:暂时关闭TLS
    ![](https://cdn.jsdelivr.net/gh/NasdaqGodzilla/PeacePicture/img/NikoVDI:如果qemu报错不支持SPICE TLS那么先暂时关闭.jpg)

  2. 为windows安装spice guest tools

  • 可以在guest windows内上网下载该软件(地址见本文末尾参考)
  • 可以通过共享方式将提前下载的软件共享到windows进行安装。如,我的做法是,通过docker将物理机下载的软件共享到docker,在docker通过python启动简易http服务器,在qemu guest windows中打开服务器下载。

参考

  1. install windows 1- on ubuntu kvm
  2. 下载Windows10 virtio驱动
  3. 下载Spice Guest tools
  4. Ubuntu 14.04 KVM - error: internal error: process exited while connecting to monitor: qemu-system-x86_64:
  5. win10企业版(政府版)400年期限密钥
    1
    2
    3
    4
    【EnterpriseG】FV469-WGNG4-YQP66-2B2HY-KD8YX
    【EnterpriseGN】FW7NV-4T673-HF4VX-9X4MM-B4H4T
    【gvlkEnterpriseG】YYVX9-NTFWV-6MDM3-9PT4T-4M68B
    【gvlkEnterpriseGN】44RPN-FTY23-9VTTB-MP9BX-T84FV
  6. Windows 10 Pro(win10专业版激活密钥)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TPYNC-4J6KF-4B4GP-2HD89-7XMP6
    2BXNW-6CGWX-9BXPV-YJ996-GMT6T
    NRTT2-86GJM-T969G-8BCBH-BDWXG
    XC88X-9N9QX-CDRVP-4XV22-RVV26
    TNM78-FJKXR-P26YV-GP8MB-JK8XG
    TR8NX-K7KPD-YTRW3-XTHKX-KQBP6
    VK7JG-NPHTM-C97JM-9MPGT-3V66T
    NPPR9-FWDCX-D2C8J-H872K-2YT43
    W269N-WFGWX-YVC9B-4J6C9-T83GX
    NYW94-47Q7H-7X9TT-W7TXD-JTYPM
    NJ4MX-VQQ7Q-FP3DB-VDGHX-7XM87
    MH37W-N47XK-V7XM9-C7227-GCQG9