admin 管理员组

文章数量: 887018

文章目录

  • OpenStack Windows 镜像制作
    • 基础环境
    • 准备工作
      • 软件准备
      • OOBE 自动应答文件准备
        • 解压文件
        • 编辑应答文件
    • 镜像制作
      • 创建虚机
      • 系统安装
      • cloud-init 安装配置
        • 关于windows系统密码
      • VirtIO 驱动安装
      • 软件安装,系统配置等
        • 打开远程桌面。
        • 删除系统恢复分区,以便cloud-init可以自动扩展硬盘
        • 修改电源选项,从不休眠
        • 修改时间服务器为本地内网NTP服务器
        • 关闭防火墙
      • 系统封装
        • 整合应答文件
        • 执行 sysprep
    • 上传镜像

OpenStack Windows 镜像制作

基础环境

由于 OpenStack 的虚拟化层是 kvm ,所以最好是在 Linux 上进行制作,使用 VMware 和 Vbox 制作的镜像都会由于驱动问题,导致上传到 OpenStack 环境中后,实例无法启动,蓝屏报错信息:INACCESSIBLE BOOT DEVICE ,无法找到启动设备。

基础环境为一台安装了 kvm 虚拟化的 CentOS 7 机器,最好带桌面环境(如果没有桌面环境可以设置 X11 转发)。
安装 kvm:

# 检查当前环境是否支持虚拟化
grep -E '(vmx|svm)' /proc/cpuinfo
# 安装所需软件
yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer bridge-utils -y
# 开启进程
systemctl start libvirtd
systemctl enable libvirtd
# x11 需要的软件包
yum install "@X Window System" xorg-x11-xauth xorg-x11-fonts-* xorg-x11-utils -y

准备工作

软件准备

本次制作镜像版本为 Windows 10 专业版 2004 版本,所需软件链接已附。

  1. 原生镜像。
  2. Windows ADK(只用到WSIM组件)
    因为全部ADK全部组件下载完成要1个多G;贴出打包好的WSIM单工具地址:下载链接,可执行程序位于.\Assessment and Deployment Kit\Deployment Tools\WSIM\imgmgr.exe
  3. cloud-init 安装程序 :用于获取 OpenStack metadata 数据。
  4. virtio 驱动包:用于适配虚拟化平台。
  5. 其他需要预装到 Windows 中的软件。

OOBE 自动应答文件准备

解压文件

解压 Windows ISO 镜像文件到目录中,打开WSIM 工具,加载镜像中的sources\install.wim,按照提示新增编录文件。

编辑应答文件

参考官方文档,对以下几个选项进行应答。

  • Microsoft-Windows-International-Core settings
  • Microsoft-Windows-Shell-Setup/OOBE settings
  • Microsoft-Windows-Shell-Setup/OOBE/ProtectYourPC
  • Microsoft-Windows-Shell-Setup/UserAccounts
    将这几项都传送到 oobeSystem 中,并根据实际情况设置数值,具体选项含义参考:OOBE 全部配置项参考。

    以下是我已经做好的基于 win10 2004 版本的自动跳过 OOBE 的应答文件部分内容,可根据需要自行修改,也可根据官方文档使用 WSIM 自定义更多初始化配置项。
             <OOBE>
                 <VMModeOptimizations>
                     <SkipAdministratorProfileRemoval>true</SkipAdministratorProfileRemoval>
                     <SkipNotifyUILanguageChange>true</SkipNotifyUILanguageChange>
                     <SkipWinREInitialization>true</SkipWinREInitialization>
                 </VMModeOptimizations>
                 <HideEULAPage>true</HideEULAPage>
                 <HideLocalAccountScreen>true</HideLocalAccountScreen>
                 <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                 <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                 <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                 <NetworkLocation>Work</NetworkLocation>
                 <SkipMachineOOBE>true</SkipMachineOOBE>
                 <SkipUserOOBE>true</SkipUserOOBE>
                 <UnattendEnableRetailDemo>false</UnattendEnableRetailDemo>
                 <ProtectYourPC>3</ProtectYourPC>
                 <OEMAppId>cloud.test</OEMAppId>
             </OOBE>
             <TimeZone>China Standard Time</TimeZone>
             <RegisteredOrganization>test</RegisteredOrganization>
             <SearchBoxVisibleInTouchImprovement>false</SearchBoxVisibleInTouchImprovement>
             <ShowWindowsLive>false</ShowWindowsLive>
             <DisableAutoDaylightTimeSet>true</DisableAutoDaylightTimeSet>
             <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>
             <ShowPowerButtonOnStartScreen>true</ShowPowerButtonOnStartScreen>
             <SignInMode>1</SignInMode>
             <EnableStartMenu>true</EnableStartMenu>
             <ConvertibleSlateModePromptPreference>0</ConvertibleSlateModePromptPreference>
             <AppIconInTouchImprovement>true</AppIconInTouchImprovement>
             <FileExplorerInTouchImprovement>true</FileExplorerInTouchImprovement>
         </component>
     </settings>
    

镜像制作

创建虚机

终端打开 virt-manager,新建虚拟机,加载 windows 系统镜像和 virtio 驱动镜像。

  1. 新建虚拟机

  2. 选择本地 Windows 镜像

  3. 分配内存和 CPU,4G 2CPU 足够

  4. 创建硬盘,15G足够,系统安装完后占用12G左右

  5. 选择 开始安装前自定义配置

  6. 重要:修改 Disk bus 为VirtIO

  7. 添加一块 CDROM,挂载 VirtIO 驱动镜像

  8. 连接 windows 镜像

  9. 修改启动顺序,勾选硬盘和 Windows 镜像

  10. 修改网卡驱动为 VirtIO

  11. 建议:将显示协议选为 VNC,提高操作体验;默认为 SPICE,没有 agent 操作很费劲。

  12. 右下角,Apply ;左上角 Begin Installation 开始安装。

系统安装

进入系统安装页面后,下一步 —> 现在安装 —> 专业版 —> 下一步 —> 自定义安装,直到选择系统盘的页面,加载网卡驱动硬盘驱动

加载网卡驱动:NetKVM/w10/adm64

加载硬盘驱动:viostor/w10/amd64

之后可以看到硬盘已经加载出来,新建一个分区,保留系统分区,选择 主分区,下一步 开始安装。

多次重启后安装完成,直到进入选择地区的页面,此时系统状态为 OOBE,按Ctrl + Shift + F3进入 OOBE 审核模式

关于审核模式的描述,见微软官方文档,审核模式概述。
进入系统后,会弹出 系统准备工具,关闭即可;之后进行系统配置及软件、驱动等的安装。

cloud-init 安装配置

将 clouod-init 安装文件通过 FTP 等方式传入系统中,打开安装。
在“Configuration options”窗口中,设置用户名为自己想要使用的用户,日志输出串口选择“COM1”,完成安装。

安装完成后点击 Finish,完成安装。

安装完成后,需要修改配置文件。
在配置文件 C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf 中补充以下内容(去掉注释):

# 默认系统名只支持小于等于15个字符,修改后可支持到63个字符
netbios_host_name_compatibility=false
# 配置获取 openstack metadata 数据源
metadata_services=cloudbaseinit.metadata.services.httpservice.HttpService
# 配置重传次数,因为windows初始化时间比较长,为了防止无法获取到metadata,重传设置大一些
retry_count=40
retry_count_interval=5
# 默认情况下,第一次登录后,系统会强制用户修改密码,设置为 no 则不用强制
first_logon_behaviour=no
# 防止Windows添加默认路由导致metadata网络不通
[openstack]
add_metadata_private_ip_route=False

同一个配置文件中,还需要修改以下两行的关键字,保证日志可以正常输出:

# 第 12 行和 第 13 行,logdir 改为 log-dir ,logfile 改为 log-file,可能是由于软件版本比较新,软件代码改了而官方自带配置文件未及时更新
log-dir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
log-file=cloudbase-init.log
关于windows系统密码

cloud-init windows 镜像默认使用随机密码或者强制用户首次登录更改密码,配置项中无法指定密码,参见官网定义。
若需要指定密码,可通过新建实例时,指定 metadata 的 admin_pass 字段或使用用户开机脚本来控制,方法见: openstack-windows-admin-password。

还有一种取巧的办法,既然必然会生成随机密码,而且无法获取到,想要固定密码,可以直接修改一下源码,让它直接生成一个固定的密码,这样如果metadata指定密码,则使用metadata的密码;未指定的话,使用固定密码。
可以修改C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\lib\site-packages\cloudbaseinit\plugins\common\setuserpassword.py第70行的函数_set_password,直接在返回随机密码时,将密码修改为固定值。

VirtIO 驱动安装

打开资源管理器后,会看到已经加载了 VirtIO 的CDROM,直接运行 virtio-win-guest-tools,会安装一系列驱动文件。

软件安装,系统配置等

安装自己所需预装软件即可。

打开远程桌面。


打开服务,设置远程桌面相关的 3 个服务为自动启动,并开启服务。

删除系统恢复分区,以便cloud-init可以自动扩展硬盘

使用 DiskGenius 工具,删除500多M的系统自带恢复分区,扩展为系统盘。

删除恢复分区,左上角 保存更改 后,在 磁盘管理 里面 扩展卷,将多余空间合并到系统盘。

合并之后,OpenStack上新建的实例可以进行硬盘自动扩展。

修改电源选项,从不休眠

修改时间服务器为本地内网NTP服务器

按需修改。

关闭防火墙

资源管理器中打开 控制面板\所有控制面板项\Windows Defender 防火墙\自定义设置,关闭防火墙。

系统封装

整合应答文件

目录 C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf中一个 Unattend.xml 文件,是默认的应答文件,该文件中对 OOBE 的应答效果不全,所以要将上文中根据具体系统版本生成的应答文件进行整合。
用文本编辑器将上文生成应答文件中的 <settings pass="oobeSystem"> ......</settings>部分,替换到 Unattend.xml 文件中对应部分即可。

执行 sysprep

在cmd中切换到目录,C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf,使用整合后的应答文件进行系统封装:

C:\windows\system32\sysprep\sysprep.exe /oobe /generalize /shutdown /mode:vm /unattend:my.xml

封装完成后会自动关机,镜像制作完成。

上传镜像

默认情况下,使用 virt-manager 新建的虚机,硬盘位于/var/lib/libvirt/images/win10.qcow2,将该文件直接上传到 OpenStack 中即可使用。

本文标签: 镜像 Windows openstack Image