環境聲明:
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