文章目录
[隐藏]

windows7操作系统在公有云和私有云中都是用户比较常用的操作系统,但目前第三方win7的Openstack镜像不是很多,Cloudbase提供Windows Server 2012r2镜像下载,创建自定义的win7镜像已成为必做的功课。下面介绍在CentOS系统下基于qemu和vrit-manager制作win7镜像。

Openstack Windows系列镜像下载传送门:《 Openstack Windows系列镜像分享【附下载链接】》

一、镜像及工具准备

Windows 7安装光盘镜像:ed2k://|file|cn_windows_7_ultimate_x64_dvd_x15-66043.iso|3341268992|7DD7FA757CE6D2DB78B6901F81A6907A|/

VirtIO驱动镜像:virtio-win-0.1-94.iso http://pan.baidu.com/s/1pKL6btp PW:pxth

Activate链接:http://pan.baidu.com/s/1qYyJADe PW:5vj4

Cloudbase-Init:https://cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi

说明:VirtIO驱动版本已经更新,windows最新版本是0.1.133,但与当前window7 64位操作系统不兼容,只有0.1-94这个版本兼容、破解工具也是如此,普通的Oem7F7.exe无法完成破解。

二、镜像制作

1、镜像操作系统安装

(1)、CentOS操作系统中需要安装virt-manager等工具

(2)、创建20G的镜像文件

(3)、执行virt-install设置镜像配置,网卡、磁盘需要设置成virtio类型

此时会弹出virt-viewer,但虚拟机没有进入安装程序,并提步中示“No bootable device”错误,这是因为没有指定光盘启动的原因,按Ctrl+C结束当前进程,下面从第4步中会从virt-manager中简单配置。

(4)、利用virt-manager图形化工具进行定制

弹出virt-manager管理界面,如下

双击winds7.qcow2的KVM虚拟机,弹出virt-viewer,还是提示错误,点击设置按钮,如下

图形化显示我们virt-install的配置项,为使接下来配置生效,此时需要关机操作,点击Virtual Machine–>Shut Down–>Force Off。

设置Boot Options从window7的安装光盘启动,

重新开机,进入熟悉的win7安装操作系统界面

傻瓜式操作下一步,安装操作系统,同意许可,自定义安装,直到出现找不到的安装位置界面,如下:

因为没有加载硬件驱动,系统无法识别硬盘,故找不到安装位置,这时需要安装VirtIO的驱动,选择加载驱动程序,如下

选择64位的硬盘驱动Red Hat VirtIO SCSI controller驱动,安装即可,之后就会出现安装位置。

后面操作系统安装和实际安装一样,安装完成后,会自动重启,设置账户及密码,进入桌面系统。此时,虚拟机还需要安装网卡等驱动,在设备管理器中更新驱动程序,选择VirtIO驱动位置更新即可。

2、镜像配置

(1)破解

然后开始利用破解工具破解即可,破解工具可以通过FTP或HTTP下载到虚拟机,也可以通过加载光盘方式,下面介绍光盘加载文件方式,将所有文件拷贝到目录tools,将tools做成ISO镜像,

虚拟机关机,在virt-manager中弹出VirtIO驱动,加载上tools.iso即可,重新开机,安装软件即可。

破解完成后需要进行镜像配置,配置工作主要有:

(2)、允许远程桌面访问

设置防火墙,设置入站规则,打开TCP3389端口,或直接关闭防火墙。

(3)、允许ICMP

不然无法ping通该虚拟机设置的浮动IP。

(4)、安装cloudbase-init

Cloudbase-Init 是类似 Cloud-Init 可以用于Windows的云初始化程序,支持OpenStack、Amazon EC2、OpenNebula和Ubuntu MAAS等多种云平台,同样也支持多个window操作系统镜像。在Openstack虚拟机镜像中安装Cloudbase-Init,能够从OpenStack元数据服务(http://169.254.169.254)中获取信息,进而能够设置主机名、初始化密码、配置网络、配置SSH、磁盘扩展(根据云主机的flavor的磁盘大小动态扩展虚拟机磁盘大小)和执行配置脚本(PowerShell脚本)等等。

以下为安装过程,

安装到在这里时会产生有默认的管理员用户Admin,如果不存在该用户,Cloudbase-Init会在初始化阶段自动创建(临时帐号也可以被删除),并基于该用户进行配置管理,如果在上面安装操作系统时,创建了Admin用户,这用户的密码会被更改,所以这里的Username最好是跟系统默认管理员帐号不同(但帐号不同创建虚拟机时会自动创建Admin帐号,如果选择相同账户不想重新安装Cloudbase-Init ,并且还希望新建虚拟机拥有固定的密码,请看“Cloudbase-init禁用修改密码配置”的配置)。

3、Cloudbase-init禁用密码修改

如果安装操作系统时创建默认管理员账户(比如名称为Cloud)与安装Cloudbase-Init 时Username账户(比如为Admin)不同,基于该镜像创建虚拟机会在配置完成后自动创建一个用于Cloudbase-init配置的管理员账户Admin,用户还不知道这个账户的登录密码,真让人感觉莫名其妙,如下图:

另外,如果安装操作系统时创建默认管理员账户是Admin,并且安装Cloudbase-Init 时Username也选择了Admin,安装Cloudbase-Init后,后面基于该win7镜像初始化虚拟机时就会出现管理员Admin密码(镜像安装操作系统)被修改的情况,虽然每次可以通过“nova get-password 实例名称 密钥文件”找回密码,但实际上不是很方便,会出现用户不知道密码而无法登录虚拟机的现象。

下面提供两种方式取消修改密码的功能。

a)方法一: 修改Cloudbase-Init的配置文件

在镜像中,找到Cloudbase-Init的配置文件目录:C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf,修改cloudbase-init.conf和cloudbase-init-unattend.conf,删除username、groups、inject_user_password配置项,并在首行插入plugins配置项,内容如下:

配置文件截图如下:

b) 方法二:修改Python源码

插件为Python编写,在C:\program files\cloudbase solutions\cloudbase-init\python\lib\site-packages\cloudbaseinit\plugins\common\setuserpassword.py中,注释掉修改修改密码的相应代码即可,如下:

保存文件。

Cloudbase-init完成配置后,需要重启机器进行系统配置,如下:

配置,完成后关机,镜像制作完毕。

4、备注

(1)、强烈建议安装Cloudbase-Init,并且系统默认账户与Cloudbase-Init 的配置账户相同(统一成Admin管理员),为避免管理员用户密码被修改,建议采用修改Cloud-init的配置文件的方法(源码修改时py换行格式容易出错)。磁盘自动扩展真的非常棒,重新调整虚拟机大小时磁盘自动扩容依然有效!

(2)、cloudbase-init的配置只在首次安装并重启生效,卸载后重新安装,并更改配置不会生效(貌似没有再次进行系统配置)。

三、验证操作

可以压缩虚拟机镜像磁盘:

其中,-c表示使用压缩,-p表示执行过程中显示进度,-O指定输出格式

转换成raw格式,创建openstack镜像。

然后可以基于该镜像创建虚拟机了。

四、参考文档

https://docs.openstack.org/image-guide/windows-image.html

http://foolishfish.blog.51cto.com/3822001/1618447

http://120.92.9.196:8080/manual_kec_v16151320161205164206/_book/firewallsetting.html

http://yunlzheng.github.io/2015/02/10/openstack-create-windows-images/

http://www.penguincomputing.com/documentation/scyld-cloud-manager/admin-guide/admin/openstack/windows.html

https://kurisu.love/index.php/archives/47/

https://www.ibm.com/support/knowledgecenter/SS4KMC_2.5.0/com.ibm.ico.doc_2.5/c_adding_cloud_init_to_windows_i.html