环境声明:

os windows2008r2

openstack mitaka


   本文修改主机密码的方式为 metadata 注入方式,在云主机内部再配合一个修改密码、重置密码的脚本,达到修改、重置云主机密码的作用; 目前修改、重置密码的脚本都是python脚本,所以做此镜像需要在镜像中安装python,pywin32才行,因为目前测试的结果是,cloud-init在windows系统中,只会在初始化的时候启动一次,之后便不会再启动了,所以还有一个重置密码的脚本,重置密码的脚本会在系统中生成一个reset-Administrator的系统服务,此服务需要将启动类型修改为“延迟自启”;要是哪位大神看到了,希望可以指点一二


原文链接:http://readshlinux.blog.51cto.com/9322509/1902888





1.在kvm中安装虚拟机

wKiom1i41BGB4qtvAADUxCM7Bk0127.png-wh_50


wKioL1i41ELxgbAKAAGTHL8Rk7k795.png-wh_50



wKioL1i41HOB84RBAAF860LwDes439.png-wh_50


然后开始安装即可



2.为kvm中的虚拟安装虚拟驱动


断开连接---->挂载virtios-win.iso---->安装设备驱动


安装如下3个就ok

viostor

vioserial

NetKVM

wKioL1i41L_AEfZfAACSh35loPY518.png-wh_50


wKioL1i41cDCgM4FAAEsj40wfh0906.png-wh_50


wKiom1i41jOhKdvdAAOSyvd4IP4700.png-wh_50


wKioL1i41luymCFaAAAgkLjps04096.png-wh_50



viostor

vioserial

NetKVM


wKioL1i41wXQBycBAAEACJwXCbY467.png-wh_50


wKioL1i41yyQD4vbAAEhM-1aanU762.png-wh_50


虽然出现磁盘了,但是还需要安装网卡的驱动,继续


wKioL1i411_CM-rAAAD6uGeYD-g191.png-wh_50


wKioL1i4143xb_nDAAEYf-XkFF0938.png-wh_50




3.继续安装系统

断开virtios-win.iso ----> windows.iso

wKiom1i418_jgCSOAACSh35loPY938.png-wh_50


wKioL1i42BqgReoUAAM3DG2ZH8g413.png-wh_50



安装完系统之后,需要将系统激活开启远程桌面,添加重置密码的脚本(安装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的系统服务,注意一定要将他设置为开机延迟启动,否则重置不了密码;



===========================================================================================

  1. #!/usr/bin/env python
  2. #coding:utf8
  3. import os
  4. import json
  5. import urllib
  6. import win32serviceutil
  7. import win32service
  8. import win32event
  9. def get_data():
  10. data = urllib.urlopen("http://169.254.169.254/openstack/latest/meta_data.json").read().decode()
  11. return data
  12. def parse_data(data):
  13. json_data = json.loads(data)
  14. changePasswd = json_data.get("meta").get("changePasswd")
  15. if changePasswd:
  16. adminPass = json_data.get("meta").get("admin_pass")
  17. os.system("net user Administrator /active:yes")
  18. os.system("net user Administrator %s" % adminPass)
  19. class reset(win32serviceutil.ServiceFramework):
  20. _svc_name_ = "reset"
  21. _svc_display_name_ = "reset-Administrator"
  22. def __init__(self, args):
  23. win32serviceutil.ServiceFramework.__init__(self, args)
  24. self.hWaitStop = win32event.CreateEvent(None00None)
  25. def SvcStop(self):
  26. self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
  27. win32event.SetEvent(self.hWaitStop)
  28. def SvcDoRun(self):
  29. parse_data(get_data())
  30. win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
  31. if __name__=='__main__':
  32. win32serviceutil.HandleCommandLine(reset)


===========================================================================================




windows添加环境变量

我的电脑---->属性---->高级系统设置---->系统属性---->高级---->环境变量---->添加到Path后就ok

看不懂自行百度、谷歌



cmd命令行中,执行services.msc 进入到系统的服务目录,查看有没有reset-Administrator的一个服务,并将属性中的常规启动类型修改为“自动(延迟启动)”,还有恢复中的 第一次失败到第最后一次失败   都修改为重新启动服务   即可



9.安装cloud-init服务,

wKiom1i42PqhgNnBAABhmw5cGpo019.png-wh_50


快安装完时,把脚本添加到

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\

即可


修改密码脚本

===========================================================================================

  1. # -*- coding:utf-8 -*-
  2. import os
  3. import json
  4. import urllib.request
  5. def get_data():
  6. data = urllib.request.urlopen("http://169.254.169.254/openstack/latest/meta_data.json").read()
  7. return data
  8. def parse_data(data):
  9. data1 = str(data)
  10. json_data = json.loads(data.decode())
  11. changePasswd = json_data.get("meta").get("changePasswd")
  12. if changePasswd == "True":
  13. adminPass = json_data.get("meta").get("admin_pass")
  14. os.system("net user Administrator /active:yes")
  15. os.system("net user Administrator %s" % adminPass)
  16. data = get_data()
  17. parse_data(data)

===========================================================================================



wKiom1i42RaQcRGPAAJIEY0ih9E324.png-wh_50


最后把两个钩都打上就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/p_w_picpath-guide/windows-p_w_picpath.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