openstack镜像之Windows(可重置密码)
环境声明:
os windows2008r2
openstack mitaka
本文修改主机密码的方式为 metadata 注入方式,在云主机内部再配合一个修改密码、重置密码的脚本,达到修改、重置云主机密码的作用; 目前修改、重置密码的脚本都是python脚本,所以做此镜像需要在镜像中安装python,pywin32才行,因为目前测试的结果是,cloud-init在windows系统中,只会在初始化的时候启动一次,之后便不会再启动了,所以还有一个重置密码的脚本,重置密码的脚本会在系统中生成一个reset-Administrator的系统服务,此服务需要将启动类型修改为“延迟自启”;要是哪位大神看到了,希望可以指点一二
原文链接:http://readshlinux.blog.51cto.com/9322509/1902888
1.在kvm中安装虚拟机
然后开始安装即可
2.为kvm中的虚拟安装虚拟驱动
断开连接---->挂载virtios-win.iso---->安装设备驱动
安装如下3个就ok
viostor
vioserial
NetKVM
viostor
vioserial
NetKVM
虽然出现磁盘了,但是还需要安装网卡的驱动,继续
3.继续安装系统
断开virtios-win.iso ----> windows.iso
安装完系统之后,需要将系统激活,开启远程桌面,添加重置密码的脚本(安装python、 python32),第一次修改密码的脚本,安装cloud-init软件包 这些操作
=================================================================================================================================================================================================================================================================================
最关键的是将这些信息传入进去
1.在windows系统设置一个共享文件夹
2.在linux系统(kvm宿主机)上挂载改windows系统的共享文件夹
mount //windows_ip/gx /data/gx/ -o username=Administrator,password=Admin@
3.复制相应信息到 linux系统(kvm宿主机)挂载windows共享目录的磁盘
4.复制信息完成
5.在windows中将该信息放在正确的地方
6.最后卸载linux系统挂载的windows共享文件夹
umount /data/gx/
7.将windows中的共享文件夹删除(不要在系统中留下不该留的信息)
8.激活windows系统,安装传入的python安装程序,并将python添加到系统环境变量中(在cmd中直接执行python,看会不会进入到pythonide的界面中),最后安装“reset26重置密码”服务,我是直接拷贝到python的安装目录,之后解释用cmd命令切入到reset的目录中,执行python reset26.py install 即可安装reset的服务啦
重置密码脚本
该脚本会在windows services服务中出现一个名为reset-Administrator的系统服务,注意一定要将他设置为开机延迟启动,否则重置不了密码;
===========================================================================================
#!/usr/bin/env python #coding:utf8 import os import json import urllib import win32serviceutil import win32service import win32event def get_data(): data = urllib.urlopen("http://169.254.169.254/openstack/latest/meta_data.json").read().decode() return data def parse_data(data): json_data = json.loads(data) changePasswd = json_data.get("meta").get("changePasswd") if changePasswd: adminPass = json_data.get("meta").get("admin_pass") os.system("net user Administrator /active:yes") os.system("net user Administrator %s" % adminPass) class reset(win32serviceutil.ServiceFramework): _svc_name_ = "reset" _svc_display_name_ = "reset-Administrator" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): parse_data(get_data()) win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) if __name__==‘__main__‘: win32serviceutil.HandleCommandLine(reset)
===========================================================================================
windows添加环境变量
我的电脑---->属性---->高级系统设置---->系统属性---->高级---->环境变量---->添加到Path后就ok
看不懂自行百度、谷歌
cmd命令行中,执行services.msc 进入到系统的服务目录,查看有没有reset-Administrator的一个服务,并将属性中的常规启动类型修改为“自动(延迟启动)”,还有恢复中的 第一次失败到第最后一次失败 都修改为重新启动服务 即可
9.安装cloud-init服务,
快安装完时,把脚本添加到
C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
即可
修改密码脚本
===========================================================================================
# -*- coding:utf-8 -*- import os import json import urllib.request def get_data(): data = urllib.request.urlopen("http://169.254.169.254/openstack/latest/meta_data.json").read() return data def parse_data(data): data1 = str(data) json_data = json.loads(data.decode()) changePasswd = json_data.get("meta").get("changePasswd") if changePasswd == "True": adminPass = json_data.get("meta").get("admin_pass") os.system("net user Administrator /active:yes") os.system("net user Administrator %s" % adminPass) data = get_data() parse_data(data)
===========================================================================================
最后把两个钩都打上就ok啦,这个服务会自动清理历史命令,mac地址,ip地址等
最后记得把cloud-init这个包删除,在点击finish之后,立马删除就ok
显示kvm中所有虚拟机
virsh list --all
在kvm中删除虚拟机,仅仅删除xml文件,不会删除镜像文件
virsh undefine windows
将镜像压缩
qemu-img convert -c -O qcow2 压缩之前的路径+名字 压缩之后的路径+名字
参考文档:https://docs.openstack.org/image-guide/windows-image.html
参考文档:http://www.cnblogs.com/eineseite/archive/2009/07/02/1515388.html
参考文档:https://kurisu.love/index.php/archives/47/
参考文档:http://www.bubuko.com/infodetail-705509.html
参考文档:http://blog.csdn.net/ghostfromheaven/article/details/8604738
本文出自 “RSLinux” 博客,请务必保留此出处http://readshlinux.blog.51cto.com/9322509/1902888