3.Cobbler自动化安装Windows7
<!doctype html>02_2.部署Windows7
定制PE工具
首先下载微软官方提供的制作工具 Windows AIK。点击 | 进入下载页面
下载完成之后,解压压缩包,点击目录中的StartCD.exe
进行安装
选择Windows AIK安装程序进行安装
安装完毕之后,以管理员身份运行该工具
# 使用copype创建E:\winpe目录,同时在该目录下生成Win PE预安装所需文件
copype amd64 E:\winpe
# 使用imagex命令挂载E:\winpe\winpe.wim文件到E:\winpe\mount目录下,主要是挂载完成之后,方便我们进行修改。
imagex /mountrw E:\winpe\winpe.wim 1 E:\winpe\mount
# 向startnet.cmd文件中写入一些脚本命令
# 测试机器与Cobbler机器之间的网络是否相同,如果无法ping通,则检查网络
echo ping -n 3 -l 69 192.168.0.196 >> E:\winpe\mount\Windows\System32\startnet.cmd
# 访问连接samba共享的目录(samba服务具体看后面)
echo net use z: \\192.168.0.196\share >> E:\winpe\mount\Windows\System32\startnet.cmd
# 进入到samba服务目录中
echo z: >> E:\winpe\mount\Windows\System32\startnet.cmd
# 进入win目录中(对应后文中的/smb/win的win)
echo cd win >> E:\winpe\mount\Windows\System32\startnet.cmd
# 此步为最关键的一步,具体的自动化安装为该步,Autounttend.xml的制作方式后面详细说明
echo setup.exe /unattend:Autorunwin7.xml >> E:\winpe\mount\Windows\System32\startnet.cmd
# 去除挂载
imagex /unmount E:\winpe\mount /commit
# 拷贝修改后的winpe.wim文件
copy E:\winpe\winpe.wim E:\winpe\ISO\sources\boot.wim
# 生成Win PE ISO镜像工具
oscdimg -n -bE:\winpe\etfsboot.com E:\winpe\ISO E:\winpe\winpe_cobbler_amd64.iso
Cobbler服务端
1.上传ISO镜像到Cobbler Server端
2.导入ISO镜像到Cobbler Server端
# 将winpe_cobbler_amd64.iso镜像拷贝到Cobbler Server端
# 导入镜像
$ Cobbler distro add --name=windows7 --kernel=/var/lib/tftpboot/memdisk --initrd=/root/winpe_cobbler_amd64.iso --kopts="raw iso"
3.配置ISO镜像相关的自动值守安装文件
$ touch /var/lib/cobbler/kickstarts/win7pe.xml
$ cobbler profile add --name=windows7 --distro=window7 --kickstart=/var/lib/cobbler/kickstarts/win7pe.xml
4.配置samba共享Windows ISO
4.1 安装samba服务
$ yum -y install samba
$ systemctl start smb && systemctl enable smb
4.2 配置共享
x
$ vim /etc/samba/smb.conf
[global]
log file = /var/log/samba/log.%m
max log size = 5000
security = user
guest account = nobody
map to guest = Bad User
load printers = yes
cups options = raw
···
[share]
comment = this is samba share directory
path = /smb/ # 共享目录
directory mask = 0755
create mask = 0755
guest ok = yes
writable = yes
# 更改配置文件,重启生效
$ systemctl restart smb
$ mkdir -p /smb/win
$ mkdir /mnt/win7
# 将WIN7的镜像挂载到/mnt/win7
$ mount -o loop,ro cn_windows_7_ultimate_x64_dvd_x15-66043.iso /mnt/win7
# 将镜像中的内容拷贝到samba的共享目录中
$ cp /mnt/win7/* /smb/win
此时我们已经完成了整个流程的一部分,接下来进行调试
本地测试
# 连接samba共享
net use z: \\192.168.0.196\share
# 进入samba目录
z:
# 进入到镜像目录
cd win
# 此时目录中可以看到一个setup.exe文件。该文件就是安装win7的安装程序文件
setup.exe # 可以看到如下图
此时我们已经进入到了可以手动安装win7的界面,接下来说明自动化的关键步骤,也就是前面的Autorunwin7.xml
4.3 Autorunwin7.xml
一定要使用纯净版的ISO镜像,不然可能会出现各种各样的问题
打开AIK工具中的Windows 映像管理器
打开工具之后界面如下:
此时我们将我们的win7镜像解压到一个目录中,然后通过 Windows system image manager工具,选择Windows 映像或编录文件,选择的文件为镜像解压的目录中的sources/install.wim文件,此时会弹出四个版本选择(这里的选择要对应我们后文中的选择,此次我们安装的是旗舰版,所以选择最后一个)
选择完成之后,左下角会出现两个目录,一个Componets 和 Packages,点开Compontes,里面会出现很多内容。
不要觉得很复杂看不懂,跟我一起制作完成一个,你就会基本了解,并且简单的阅读制作完成的xml文件,你也可以更加的理解之前的配置。
1.新建应答文件
2.指定地区和语言选项
- amd64_Microsoft-Windows-International-Core-WinPE
设置语言
设置安装windows时的语言
3.接受EULA
- Microsoft-Windows-Setup
接受Eula,设置AcceptEula=true
4.选择镜像版本
设置Key为 /image/index Value为 4
该值对应的是版本号,之前我们添加镜像的时候选择的是第四个旗舰版本,这里的4与之对应,也可以通过AIK的Tools工具进行查看。
imagex /info E:\ISO\win7\sources\install.wim
这个镜像包含四个版本,我们往下翻,可以看到IMAGE INDEX="4" Ultimate ,确定我们的Value为4
5.配置磁盘
DiskID是硬盘编号,从0开始,表示第一块硬盘
WillWipeDisk表示是否格式化硬盘
Order表示硬盘的分区顺序,与后面添加磁盘符标签等时的Order要一致
Size表示分区大小
Type表示类型,这里设置为主分区
Active表示是否激活磁盘
Extend
Format表示磁盘格式为NTFS
Label表示标签,也就是磁盘的名字
Letter表示磁盘的盘符,这里设置为 C
Order与前面的对应
PartitionID分区ID,与后面设置的要一致
选择系统镜像的安装位置,磁盘ID为0,分区ID为1.与前面的设置对应
6.设置用户名和计算机名
Microsoft-Windows-Shell-Setup
DisplayName 显示的用户名
Group 用户组
Name 用户名
ComputerName 设置计算机名。 *表示随机生成
7.设置密码
设置用户的密码,空字符串为无密码
8.设置Windows密钥
随便百度一个与你安装版本对应的密钥即可,不一定是要能激活的秘钥
6K2KY-BFH24-PJW6W-9GK29-TMPWP
9.网络
Micrisift-Windows-Shell-Setup
NetworkLocation=work表示工作网络
ProtecYourPC=3表示以后询问我
具体界面展示如下:
10.时区
TimeZone : China Standard Time
至此,自动应答文件创建结束,保存即可
4.4 参考
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SetupUILanguage>
<UILanguage>zh-CN</UILanguage>
</SetupUILanguage>
<InputLocale>zh-CN</InputLocale>
<SystemLocale>zh-CN</SystemLocale>
<UILanguage>zh-CN</UILanguage>
<UserLocale>zh-CN</UserLocale>
</component>
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UserData>
<ProductKey>
<Key>87VT2-FY2XW-F7K39-W3T8R-XMFGF</Key>
</ProductKey>
<AcceptEula>true</AcceptEula>
</UserData>
<ImageInstall>
<OSImage>
<InstallFrom>
<MetaData wcm:action="add">
<Key>/image/index</Key>
<Value>4</Value>
</MetaData>
</InstallFrom>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
</OSImage>
</ImageInstall>
<DiskConfiguration>
<Disk wcm:action="add">
<CreatePartitions>
<CreatePartition wcm:action="add">
<Order>1</Order>
<Size>30000</Size>
<Type>Primary</Type>
</CreatePartition>
</CreatePartitions>
<DiskID>0</DiskID>
<WillWipeDisk>true</WillWipeDisk>
<ModifyPartitions>
<ModifyPartition wcm:action="add">
<Active>true</Active>
<Extend>false</Extend>
<Format>NTFS</Format>
<Label>OS</Label>
<Letter>C</Letter>
<Order>1</Order>
<PartitionID>1</PartitionID>
</ModifyPartition>
</ModifyPartitions>
</Disk>
</DiskConfiguration>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>
<Value>UABhAHMAcwB3AG8AcgBkAA==</Value>
<PlainText>false</PlainText>
</Password>
<Group>Administrator</Group>
<Name>XLL</Name>
<DisplayName>XLL</DisplayName>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<OOBE>
<NetworkLocation>Work</NetworkLocation>
<ProtectYourPC>1</ProtectYourPC>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
</OOBE>
<TimeZone>China Standard Time</TimeZone>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ComputerName>*</ComputerName>
</component>
<component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SkipAutoActivation>true</SkipAutoActivation>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:e:/iso/win7/sources/install.wim#Windows7 64位旗舰版" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>
至此,我们查看完XML文件,其实大部分都是可以看懂,你可以进一步深入了解,自定义更多功能
4.5 可能出现的问题
运行setup.exe显示拒绝访问
。
#需要在smb共享的目录中,给予setup.exe权限
$ chmod 666 /smb/win/setup.exe
- 在执行setup.exe AutorunWin7.xml时报错
Error: The file 'autorun.dll' could not be loaded or is corrupt. Setup cannot continue: Error code is [0x7E]
# 很大一部分可能性是因为镜像不是纯净版,哪怕你这个镜像你自己单独安装没有问题,但是这里这里就是不行
Windows 7 Ultimate (x64) - DVD (Chinese-Simplified)
文件名:cn_windows_7_ultimate_x64_dvd_x15-66043.iso
SHA1:4A98A2F1ED794425674D04A37B70B9763522B0D4
文件大小:3.11GB
下载地址:ed2k://|file|cn_windows_7_ultimate_x64_dvd_x15-66043.iso|3341268992|7DD7FA757CE6D2DB78B6901F81A6907A|/
- 一直卡在 setup.exe /unattend.Autoattend.xml或者启动安装程序中
出现这种情况可能是你的配置文件出现了错误,或者你缺少了一些必要的选项