黑帽联盟

 找回密码
 会员注册
查看: 1334|回复: 0
打印 上一主题 下一主题

[基础服务] 使用Cobbler批量部署Linux和Windows:Windows系统批量安装(三)

[复制链接]

895

主题

38

听众

3322

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情

    前天 13:01
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    Tutorial: Installing Windows with cobbler (cobbler安装Windows)

    Windows系统的自动安装需要用到Win PE工具。流程如下:

    • 定制Win PE工具
    • Win PE ISO导入至Cobbler Server端
    • 通过samba共享Windows ISO
    • 客户机器PXE启动安装

    大致是上面四个过程,接下来具体说明相应配置。

    定制Win PE工具:

    定制Win PE工具的目的是为了在通过PXE方式启动的客户端上运行一个Windows预安装环境(相当于linux的initrd.img和vmlinuz,毕竟安装系统类似于安装软件,总得开机才能安装,“开机”则需要运行系统,这个系统就是Win PE。),并且使得Windows预安装环境能够自动执行某些我们需要的动作。

    Win PE的制作微软官方提供有相应的工具,该工具叫做:Windows AIK。我们需要使用该工具来定制Win PE工具,可以从这里下载:适用于 Windows® 7 的 Windows® 自动安装工具包 (AIK)---https://www.microsoft.com/zh-cn/download/details.aspx?id=5753。

    下载之后,解压安装,如下图:

    1.png

    2.png

    3.png

    4.png


    安装完毕后,启动该工具来定制Win PE镜像,如下图:

    5.png 6.png


    定制Win PE ISO所用命令及相关配置:

    1. copype amd64 C:\winpe

    2. imagex /mountrw c:\winpe\winpe.wim 1 c:\winpe\mount

    3. echo ping -n 7 -l 69 192.168.1.199 >> C:\winpe\mount\Windows\System32\startnet.cmd
    4. echo net use z: \\192.168.1.199\share >> C:\winpe\mount\Windows\System32\startnet.cmd
    5. echo Z: >> C:\winpe\mount\Windows\System32\startnet.cmd

    6. #win是包含windows 7 ISO解压文件的父目录
    7. echo cd win >> C:\winpe\mount\Windows\System32\startnet.cmd
    8. echo setup.exe /unattend:Autounattend.xml >> C:\winpe\mount\Windows\System32\startnet.cmd

    9. imagex /unmount c:\winpe\mount /commit

    10. copy c:\winpe\winpe.wim c:\winpe\ISO\sources\boot.wim

    11. # "-bC"中间没有空格
    12. oscdimg -n -bC:\winpe\etfsboot.com c:\winpe\ISO c:\winpe\winpe_cobbler_amd64.iso
    复制代码

    解释一下上面的几行命令:

    1:使用copype命令创建C:\winpe目录,并在该目录下生成Win PE预安装所需的文件。

    3:使用imagex命令挂载c:\winpe\winpe.wim文件到c:\winpe\mount目录下,以便后续进行修改,因为Windows系统的很多核心文件都被打包压缩在这个文件里面,所以我们需要挂载才能读写修改。除了imagex这个工具可以完成修改之外,另一个工具DIMS也能做到,如果你熟悉该工具,则可以使用DIMS来做。

    5-11:修改挂载后的wim文件,向C:\winpe\mount\Windows\System32\startnet.cmd文件中写入一些脚本命令。其中第5行用于测试脚本有无执行,可以删去。剩下的几行是对samba共享文件的加载并执行,具体会在后续第三步samba文件共享那里详细解释。需要注意的是,这里用到的IP地址是我Cobbler Server服务器的地址,具体请根据你自己的服务器地址进行更改。至于为什么是写入到startnet.cmd文件中,是因为Win PE第一次运行时固定使用 Wpeinit 和 Startnet.cmd 运行启动脚本。但是对于Wpeinit我多次测试却没有成功过,因此选择将命令脚本写入到startnet.cmd文件中(startnet.cmd是Win PE ISO镜像自带的脚本文件)。

    一个问题:写入到脚本中的命令用到了Cobber Server端的IP地址,这个IP地址被硬编码到了Win PE ISO镜像中,一个可行的办法是在这里不直接写入具体命令,而是调用另外一个脚本,这个被掉的脚本可以放在其他地方,以方便后续修改。

    13:完成修改后,提交保存修改并去除挂载。

    15:拷贝修改后的winpe.wim到指定目录并重命名。

    18:生成Win PE ISO镜像工具,路径及名称为C:\winpe\winpe_cobbler_amd64.iso。


    Win PE ISO导入至Cobbler Server端:

    上一步中已经定制好了Win PE ISO镜像,接下来我们需要像前面安装CentOS/Ubuntu系统那样,把它导入到Cobbler Server端中。也是下面的三个流程

    • 上传ISO镜像到 Cobbler Server 端
    • 导入ISO镜像到 Cobbler Server 端
    • 配置ISO镜像相关自动值守安装文件

    下面是具体配置:

    • 上传ISO镜像
    将winpe_cobbler_amd64.iso 镜像拷贝至 Cobbler Server 服务器/root/目录下,但无需挂载。

    • 导入ISO镜像
    1. cobbler distro add --name=windows7 --kernel=/var/lib/tftpboot/memdisk --initrd=/root/winpe_cobbler_amd64.iso --kopts="raw iso"
    复制代码
    • 配置ISO镜像自动值守安装文件

    这里需要说明的是:事实上,该自动值守安装文件并没有作用,它不像CentOS的ks以及Ubuntu的Preseed文件那样,内含有操作系统的那些设置,它的作用在于每个系统distro必须有一个profile,因此尽管它并不是实际用来设定系统设置的,但也要指定。如下:

    1. touch /var/lib/cobbler/kickstarts/win7pe.xml
    2. cobbler profile add --name=windows7 --distro=windows7 --kickstart=/var/lib/cobbler/kickstarts/win7pe.xml
    复制代码
    这里的win7pe.xml文件可以为空白,但必须要存在。否则,在通过PXE方式启动客户机器时,客户机器看不到可以通过网络安装的Win PE系统。而实际设定Windows系统安装的配置文件则会在第四步客户机器PXE启动安装那里解释。

    通过samba共享Windows ISO:

    前面已经完成Win PE ISO镜像定制,该ISO镜像通过PXE启动后,能够根据定制中的脚本命令自动获取Windows 7镜像并安装,获取Windows 7镜像的方式是通过网络共享下载。既然是通过网络共享,那么Windows 7镜像就要通过网络共享提供出来,这里使用的方法是使用samba文件共享,通过Cobbler Server端安装部署samba文件共享,提供Windows 7镜像。这里使用的Windows 7 ISO镜像并不是ghost之类的修改版,而是微软官方发布的原生纯净ISO,如果你需要获得相关镜像,可以自行去微软MSDN或者某些网站下载。具体如下:

    安装并启动samba:

    1. yum install samba -y
    2. service smb start
    3. systemctl enable smb
    复制代码

      配置samba共享:

    1. vi /etc/samba/smb.conf

    2. # /etc/samba/smb.conf
    3. [global]
    4. log file = /var/log/samba/log.%m
    5. max log size = 5000
    6. security = user
    7. guest account = nobody
    8. map to guest = Bad User
    9. load printers = yes
    10. cups options = raw

    11. [share]
    12. comment = share directory目录
    13. path = /smb/
    14. directory mask = 0755
    15. create mask = 0755
    16. guest ok=yes
    17. writable=yes
    复制代码

    配置完上面的smb之后,记得重启服务

    1. service smb restart
    复制代码

    配置共享文件夹及Windows 7镜像

    1. mkdir -p /smb/win
    2. mkdir /mnt/win7
    3. mount -o loop,ro /root/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso /mnt/win7
    4. cp -r /mnt/win7/* /smb/win
    复制代码


    上面的命令主要功能是创建samba共享文件夹、挂载Windows 7 ISO镜像、拷贝Windows 7 ISO镜像内容到samba共享文件夹中。实际上,这里的文件不仅仅是Windows 7 ISO镜像解压后的内容,还有一个名为“Autounattend.xml”的文件,这个文件并没有通过上面的操作放入到samba共享文件夹中,它的作用和如何生成会在最后一步解释。

    做完这几步后,我们可以通过Windows的 net use 命令加以访问,如下:

    7.png


    8.png

    这里解释了上面第一步中定制Win PE ISO时用的那几个命令的作用:通过net use访问samba共享服务器上的Windows 7 ISO镜像内容,并启动Windows 7 ISO镜像中的setup.exe程序进行安装。


    客户机器PXE启动安装:

    在第二步中配置ISO镜像自动值守安装文件时,说明到那里指定的profile文件可以为空,并不是实际的生效配置文件,第三步中也说到samba共享文件中不仅仅是Windows 7 ISO镜像解压后的内容,还有一个名为“Autounattend.xml”的文件。事实上,到这里已经很清楚,第二步中的空白profile文件无意义,有意义的文件跑到了第三步samba共享文件中。这个文件指定Windows 7系统安装时的参数,比如账号,硬盘分区,防火墙等。

    这个名为“Autounattend.xml”的文件正是Windows 7 无人值守自动应答文件,它的制作生成稍微有一点繁琐,我也是花了几天才成功。具体可以参考我的另一篇博文:Windows 7 SP1无人值守自动应答文件制作

    这里提供一份我制作好的应答文件:

    md5:44ee48bd4bf78548b8b7760277e2ea0f

    Autounattend.xml: Autounattend.xml (4.53 KB, 下载次数: 0)


    安装过程图示:


    9.png

    10.png

    11.png

    12.png

    13.png

    14.png

    15.png

    16.png

    17.png
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部