这几天在折腾如何自动化安装windows 2003操作系统,想象的结果应该是这样的:机器一开机就通过PXE引导,到dhcp服务器获得IP,然后到tftp服务器获得启动镜象,镜象启动起来后 再到samba获取安装文件,按照提前配置好的文件自动回答安装过程中的提问,直到系统完成安装。这个过程我们使用了Unattended4.7,一个开 源的项目,大家可以到http://unattended.sourceforge.net/了解更详细的东西。这期间学到了一些东西,也遇到了一些问 题,记录下来,算是对自己的一个交代,也希望需要的朋友少走弯路。
一、环境
服务器: CentOS5.2+DHCP+TFTP+SAMBA
Unattended4.7
192.168.254.128
客户端: MAC:00:0C:29:FA:77:E3
192.168.254.171
二、配置服务器
1.安装Unattended4.7
你也可以直接参考http://unattended.sourceforge.net/step-by-step.php来安装。
(1)下载Unattended4.7及相关文件
unattended-4.7.zip
unattended-4.7-dosboot.zip
unattended-4.7-linuxboot.zip
csdpmi5b.zip
djdev203.zip
perl561b.zip
pico396b.zip
这些软件包都可以到http://unattended.sourceforge.net/ 下载到。
(2)安装
将上面的包都拷贝到/opt目录下,然后按照如下步骤执行
#unzip unattended-4.7.zip
#unzip unattended-4.7-dosboot.zip
#unzip unattended-4.7-linuxboot.zip
这时生成了/opt/unattended-4.7目录,然后执行如下操作:
#mkdir -p /opt/unattended-4.7/install/djgpp
将csdpmi5b.zip、djdev203.zip、perl561b.zip、pico396b.zip这四个包拷贝到djgpp目录下,然后这样解压即可:
#unzip -L csdpmi5b.zip
#unzip -L djdev203.zip
#unzip -L perl561b.zip
#unzip -L pico396b.zip
为了防治winnt.exe不能识别超过64个字符长度路径的问题,我这里将/opt/unattended-4.7目录改名并移到/目录下:
#mv /opt/unattended-4.7 /unattend
2.配置DNS
官方文档上说要有DNS服务器将Unattended服务器解析为ntinstall,我这里并没有配,只是在/etc/hosts里添加一行:
192.168.254.128 ntinstall
3.配置SAMBA
(1)#vi /etc/samba/smb.conf 更改添加如下部分:
smb passwd file = /etc/samba/smbpasswd 这个文件需要你创建,别忘了 netbios name = ntinstall |
(2)由于unattended默认是通过用户guest,口令guest来挂在samba共享的,所以我们还需要配置用户,命令如下:
#useradd guest
#smbpasswd -a guest 密码也是guest
(3)#service dhcpd start
#chkconfig –level 345 dhcpd on
(4)验证
#smbclient -L ntinstall -U guest 看看是否能看到什么:)
4.配置TFTP
(1)
#vi /etc/xinetd.d/tftp 把diable=yes改为如下:
disable = no
(2)拷贝启动镜象到tftpboot下
#mkdir /tftpboot/win
#cp -a /unattend/linuxboot/tftpboot/* /tftpboot/win/
#cp -a /unattend/bootdisk/tftpboot/pxelinux.0 /tftpboot/win/
注 1:大家一定不要用/unattend/bootdisk/tftpboot/下的dos启动镜象,因为经过N次实验,虽然可以正常引导启动,但当拷贝完 安装文件到本地后,安装时总是会提示缺少文件。后来从官方的maillist里发现是dos启动文件的bug,linuxboot就没有这样的问题。
注 2:但是linuxboot有一个问题,从客户端启动起来,最后出现了unable to determine boot device at /usr/bin/find-boot-device line212的错误。从邮件列表里找到的原因是:启动核心里缺少了支持SCSI的驱动(我在vmware的客户端采用的是SCSI硬盘)。在真实的机器 上,可以在BIOS里将硬盘类型设置成compatible或者IDE之类的。我这里是vmware虚拟客户端,于是我将vmware客户端的硬盘删除, 重新建立一块IDE硬盘,这个问题得到解决。
5.配置DHCP
#vi /etc/dhcpd.conf 添加如下内容:
max-lease-time 7200; server-name "autoinstall"; default-lease-time 600; allow booting; allow bootp; option domain-name-servers 192.168.254.128,192.168.254.2; |
6.生成unattend.txt文件
这 个文件中设置了windows安装过程中问题的答案。怎么样生成如下的文件呢?可以将windows安装光盘中Support\Tools文件夹中的 Deploy.cab文件复制到本地硬盘,并将其解压,运行其中的setupmgr.exe打开配置向导。 通过这个程序来生成unattend.txt文件。
我的unattend.txt文件如下:
[Data] AutoPartition=1 MsDosInitiated="0" UnattendedInstall="Yes" |
生成的unattend.txt文件放到/unattend/install/site/目录下。
7.拷贝安装文件到/unattend/install/os/目录下
这是服务器设置的最后一步了,我们需要将windows 2003安装光盘的文件拷贝到/unattend/install/os下,但是必须创建一个文件夹来反映操作系统版本,我这里创建了win2k3,如果你装xp,可以建立winxp。
#mkdir /unattend/install/os/win2k3
挂载windows 2003 安装盘
#mount -o loop /dev/cdrom /media
#cp -a /media/I386 /unattend/install/os/win2k3/
三、配置客户端
开机时候我们使机器从PXE设备启动就可以了。
四、遗留的问题
1. 本想客户端开机后,什么都不需要做,直接把系统装好,但现在有一点问题,就是每次还需要回答几个问题(不是windows安装过程中的问题,而是 unattended的问题),主要是磁盘分区,格式化,是否选择安装其它软件,是否更改配置文件四个问题,我截了图供参考:
选择分区方案,这里我选择3
是否格式化,是否针对不同人员执行特定脚本。这里我选择格式化,和4
选择要额外安装的软件。我选择2
是否更改配置文件。我选择4
接下来,系统就会自动按照我们在unattend.txt文件里的设置安装。
我觉得解决上面的问题,可以通过更改/unattend/install/dosbin/install.pl脚本来实现,只不过我的功力还不够,:(
2.另一种情况我还没有实现,就是在/unattend/install/site/unattend.csv文件里加入多个需要自动安装的客户端的相关信息,然后做如下更改
#mv /unattend/install/site/config.pl /unattend/install/site/orig-config.pl
#mv /unattend/install/site/sample-config.pl /unattend/install/site/config.pl
之后,不同的客户端自动安装时需要回答的问题的答案通过config.pl从unattend.csv文件里读出。这样可以根据自动安装多个不同设置的系统。
五、总结
我 的目标是:希望做一个集中的服务器,以后新安装的机器都可以连接上来获取安装介质,并且根据预定义好的设置来自动完成安装,设置包括需要的软件等等。网络 上有许多关于gost服务器的方法,觉得那样做在办公环境中还是相当方便,但是对于上架的服务器来说,肯定不妥。