热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在KVM虚拟机中安装WindowsServer2008R2并激活

在一台DELLR310的宿主机上安装了UbuntuServer12.10默认集成KVM虚拟机,用户态虚拟机软件qemu-kvm使用seabios的作为bios实现(位于/usr/share/qemu-kvm/bios.bin,来自于qemu-common1.2.0+noroms-0ubuntu2),该bios.bin仅

在一台DELL R310的宿主机上安装了Ubuntu Server
12.10默认集成KVM虚拟机,用户态虚拟机软件qemu-kvm使用seabios的作为bios实现(位于
/usr/share/qemu-kvm/bios.bin,来自于qemu-common
1.2.0+noroms-0ubuntu2),该bios.bin仅包含部分来自宿主机的SLIC信息,但不完整,无法通过Window
OEM验证。

本文将介绍安装KVM虚拟机,借助virt-install安装Windows客户机,去除bios.bin里内置的SLIC,然后使用-acpitable参数载入正确的SLIc 2.1信息,导入OEM证书和OEM key激活Windows。

由于Ubuntu Server没有安装图形环境,DELL R310服务器也是不带显示器的,所有windows的安装过程是通过本来的Macbook Air的VNC客户端操作的。

安装KVM虚拟机

首先检查你的处理器是否支持硬件虚拟化;如果支持,下面这个命令

$ sudo egrep '(vmx|svm)' --color=always /proc/cpuinfo

会看到如下类似信息

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe
syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good
nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl
vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2
popcnt lahf_lm ida dtherm tpr_shadow vnmi flexpriority ept vpid

若什么都没有显示,那么你的处理器不支持硬件虚拟化,就此打住,不要往下折腾了。

检查bios虚拟化开关是否开启

$ sudo kvm-ok

正确的返回如下

INFO: /dev/kvm exists
KVM acceleration can be used

安装KVM,(若在Ubuntu Server安装过程中已经安装了KVM忽略此步骤)

$ sudo apt-get install ubuntu-virt-server  kvm-ipxe

之后,将当前用户添加到libvirtd群组

$ sudo adduser `id -un` libvirtd
$ sudo adduser `id -un` kvm

你需要要重新登录一下,才能让新群组生效。

验证kvm是否成功安装

cloud03@cloud03:~$ virsh -c qemu:///system list
 Id    Name                           State
----------------------------------------------------
cloud03@cloud03:~$
安装Windows Server 2008 R2 准备

Windows Server 2008 R2 安装镜像ISO

Windows VirtIO Drivers,若不加载该驱动windows installer会无法找到虚拟磁盘(没有验证过,网上是怎么说的) 点击下载:virtio-win-0.1-30.iso

安装virt-install $ sudo apt-get install virtinst

开始安装
$ virt-install --connect qemu:///system --arch=x86_64 -n win2k8 -r 4096 --vcpus=2 \
-c /home/cloud03/cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_vl_build_x64_dvd_617396.iso \
--noautoconsole --os-type windows --os-variant win2k8 \
--disk path=/home/cloud03/virtio-win-0.1-30.iso,device=cdrom,perms=ro \
--disk path=/var/lib/libvirt/images/win2k8.img,size=50 \
--graphics vnc,password=foobar,listen=0.0.0.0

部分参数说明

-n win2k8 虚拟机的名称为win2k8

-r 4096 分配4G内存

-vcpus=2 两个cpu

-c /home/cloud03/cn_windows…617396.iso 指向ISO安装镜像位置

?disk path=/home/cloud03/virtio-win-0.1-30.iso,device=cdrom,perms=ro 加载virtio驱动

?disk path=/var/lib/libvirt/images/win2k8.img,size=50 创建虚拟磁盘,并分配50G的空间

?graphics vnc,password=foobar,listen=0.0.0.0 开启VNC,password选项是为了兼容mac内置Screen Sharing VNC终端无法连接不加密的VNC Server,listen选项是为了让VNC终端在所有IP地址上都开启监听,默认在127.0.0.1上监听,仅适用于本机VNC终端访问。

使用VNC客户端打开远程桌面,Mac下非常简单,在Terminal.app里输入open vnc://192.168.18.130回车即可。windows和linux桌面系统请自行安装vnc客户端。

另外不少网友推荐Mac下用Chicken of the VNC.app,试用过后不如内置Screen Sharing好,特别是系统重启断线重连的时候内置的客户端表现很稳定,Chicken of the VNC会假死,需要退出程序重开。

编译bios.bin

seaslic 项目对seabios项目打了一个patch用于解决预安装正版windows的宿主机,改装linux运行kvm后,让虚拟机bios也有和宿主机一样的SLIc。简单的说就是把宿主机bios里的SLIc信息导入到虚拟机的bios.bin文件中去。让虚拟机也有正确的OEM标识。

经过测试seaslic项目导入的SLIc信息不完整,(至少在DELL R310下是不完整的),无法通过windows校验。

qemu-kvm有一个-acpitable选项,可以通过file=… 装载一个外部的SLIC文件(SLIC 2.1 BINS 1-31-2011.7z) 这里几乎有所有OEM机器的SLIC文件和证书)。

但是如果直接使用-acpitable选项加载外部SLIC进BIOS无论是使用内置的bios.bin(/usr/share/qemu-kvm/bios.bin),还是seaslic项目打过Patch的bios.bin都会导致ACPI table里有两条SLIc记录,一条正确的一条不完整的,导致windows无法激活。

一个可行的方案:在sealic项目的基础上,稍作修改编译一个完全不包含SLIc的bios.bin,然后在结合-acpitable选项载入外部SLIC文件。经实践,可以激活。

具体步骤如下:

下载sealic项目源码

$ cd ~
$ git clone git://github.com/ghuntley/seaslic

执行./patch.sh,该脚本会运用patch然后编译出bios.bin,调用该脚本只需要其运用patch的功能,编译出来的bios.bin先别管。

$ cd seaslic
$ ./patch.sh

编辑acpi.c文件

$ vim  seabios.submodule/src/acpi.c

注释掉638-647行,

/*#ifdef CONFIG_OEM_SLIC
{ void *buf = malloc_high(sizeof(SLIC));
  if (!buf)
    warn_noalloc();
  else {
    memcpy(buf, SLIC, sizeof(SLIC));
    ACPI_INIT_TABLE(buf);
  }
}
#endif*/

然后编译

$ cd seabios.submodule
$ make

替换系统内置bios.bin

$ sudo cp out/bios.bin /usr/share/qemu-kvm/bios.bin
修改虚拟机配置

使用virsh edit命令可以修改虚拟机的配置。

$ virsh edit win2k8

将第一行


改成


然后,在靠近文件的末尾处,便签之后,加入如下内容


    
    

保存退出。其中,SLIC-DELL-PE_SC3-2.1.BIN文件可以从SLIC 2.1 BINS 1-31-2011.7z找到。

重启虚拟机,然后在虚拟机下载windows工具SLIC Toolkit.若“SLIC诊断”栏显示SLIC状态为验证通过则表明已生效。

在Windows里安装OEM证书和序列号

现在是完事具备只欠东风了,从SLIC 2.1 BINS 1-31-2011.7z压缩包中可以找到DEL的OEM证书。

在windows控制台中使用如下命令导入

> slmgr -ilc DELL-DELL-2.0.XRM-MS

然后在这里Server 2008/Server 2008 R2 OEM SLP Keys找到对应的Key。使用下面的命令导入

> slmgr -ipk D7TCH-6P8JP-KRG4P-VJKYY-P9GFF

Server 2008 R2 Standard DELL OEM KEY
D7TCH-6P8JP-KRG4P-VJKYY-P9GFF
Server 2008 R2 Enterprise DELL OEM KEY
BKCJJ-J6G9Y-4P7YF-8D4J7-7TCWD

重新打开SLIC Toolkit工具,若“序列号与证书验证及备份”栏显示证书正确,那表示已经大功告成。


推荐阅读
  • 探索PWA H5 Web App优化之路(Service Worker与Lighthouse的应用)
    本文探讨了如何通过Service Worker和Lighthouse工具来优化PWA H5 Web App,旨在提升用户体验,包括提高加载速度、增强离线访问能力等方面。 ... [详细]
  • 深入理解FastDFS
    FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ... [详细]
  • 本文介绍了如何通过安装 VirtualBox 和 Vagrant 来快速搭建和管理虚拟机环境。我们将详细探讨如何选择合适的 Box 镜像,以及如何高效地下载、添加和管理这些镜像。 ... [详细]
  • 本文详细介绍了MySQL在Linux环境下的主从复制技术,包括单向复制、双向复制、级联复制及异步复制等多种模式。主从复制架构中,一个主服务器(Master)可与一个或多个从服务器(Slave)建立连接,实现数据的实时同步。 ... [详细]
  • Redis 教程01 —— 如何安装 Redis
    本文介绍了 Redis,这是一个由 Salvatore Sanfilippo 开发的键值存储系统。Redis 是一款开源且高性能的数据库,支持多种数据结构存储,并提供了丰富的功能和特性。 ... [详细]
  • 在Ubuntu系统上安装搜狗输入法的详细步骤
    本文介绍了如何在Ubuntu操作系统中安装搜狗输入法,包括安装输入框架、下载安装包以及配置输入法的具体步骤。 ... [详细]
  • 本文深入探讨了SSH隧道技术,详细介绍了如何利用SSH协议构建安全的通信通道,实现跨网络的数据传输。通过实例分析,分别阐述了动态SSH隧道、本地SSH隧道和远程SSH隧道的配置方法及应用场景。 ... [详细]
  • 本文详细介绍如何在Android模拟器上安装TaintDroid的过程,包括解决源代码链接失效及服务器文件变动等问题,旨在帮助后续用户避免不必要的麻烦。 ... [详细]
  • 本文详细探讨了电脑重装操作系统后无法访问网络邻居的原因及解决方案,包括检查网络配置、权限设置等多个方面。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
  • Linux环境下Memcached安装指南
    本文详细介绍如何在Linux虚拟机上安装Memcached,包括必要的依赖库安装,以及使用Xshell进行文件传输的具体步骤。 ... [详细]
  • 使用Adobe Illustrator打造独特的家族徽章:牡鹿图腾设计教程
    本文详细介绍了一种基于《权力的游戏》灵感,运用Adobe Illustrator创作独特家族图腾——牡鹿徽章的方法。本教程不仅展示了具体的步骤,还提供了多种技巧,帮助读者创作出既具个人特色又符合设计原则的作品。 ... [详细]
  • 本文介绍了如何在 Linux 系统上构建网络路由器,特别关注于使用 Zebra 软件实现动态路由功能。通过具体的案例,展示了如何配置 RIP 和 OSPF 协议,以及如何利用多路由器查看工具(MRLG)监控网络状态。 ... [详细]
  • 首先说一下,这是我在CSDN上的第一个文章,其实这个账号早在几年前就申请了,不过当时只是为了下载一个资源,而且也不怎么懂信息技术相关的领域,后来就再也没怎么动过,直到今天我才开始使用这个账号 ... [详细]
  • 解决Linux Ubuntu下Ping IP正常但无法Ping域名的问题
    本文介绍了在Linux Ubuntu系统中遇到的一种常见问题——能够Ping通IP地址,但无法Ping通域名,并提供了有效的解决方案。 ... [详细]
author-avatar
UJXo小妖春日望美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有