昨天完成了python脚本实现通过kvm img镜像模板快速进行guest主机脚本部署的总结。不过此时的主机还需要更改主机名、IP地址、SID等,这也是上篇最后提到的问题。当然,这一部分可以手工去更改,不过我是个懒人,总希望能通过脚本一次性搞定。下面根据win平台和linux分别进行总结。

一、win平台

win平台可能涉及主要两个问题,一个是主机名会和模板主机名重复、SID值会和以前的相同。

1、更改主机名

1set name=PC-%date:~2,2%%date:~5,2%%date:~8,2%%time:~6,2%%random:~0,3%
2netdom renamecomputer %computername%  /newname:%name% /force

基于时间点生成主机名,避免主机名重复,也可以是基于交互式的,如下:

1set /p name=请输您的计算机名:
2wmic computersystem where "name='%computername%'" call rename %newname%

这里有netdom方式更改,换成了wmic方式更改 ,多提供一种方法 。网上可能还有很多是基于注册表修改的,个人感觉太繁琐 。

2、修改SID

SID也就是安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。

先通过psgetsid程序查看sid值,该工具是pstools里的一个,系统未自带,可通过下面的地址下载:http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx ,查看方法如下:

如果不修改该值在安装运行各种服务时可能会有未可预料的问题 ,win2003以后系统已经不能使用newsid生成,需要通过系统自带的sysprep工具重新生成。该工具的默认路径是c:WindowsSystem32sysprepsysprep.exe ,其默认使用的是图形化的配置界面(微软的东西似乎最擅长搞这玩意),如下:

sysprep

不过我还是喜欢用命令来操作:

1c:\Windows\System32\sysprep\sysprep.exe /oobe /reboot

以上两个功能结合起来写在批处理里,安装完成后,直接运行下该批处理就行了。查看系统信息会用到命令有:systeminfo、nbtstat -n 、psgetsid 。

二、linux平台

linux平台下有主有两个常见的问题,一个主机名的问题,一个是IP地址的问题。

1、更改主机名

这里涉及到两个文件,而文件内容可能类似如下:

1# cat /etc/sysconfig/network
2NETWORKING=yes
3HOSTNAME=361way.com
4# cat /etc/hosts
5127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4   361way 361way.com
6::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

这一步可以利用cat EOF脚本很容易的实现 ,如下:

1cat << EOF >/etc/sysconfig/network
2NETWORKING=yes
3HOSTNAME=361way.com
4EOF
5cat << EOF > /etc/hosts
6127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4   361way 361way.com
7::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
8EOF

将上面的内容保存为sh脚本后,执行,就会把原先的内容全部覆盖掉,而后面的主机名很多时候是一个未知的名字,这时候我们可以在脚本里通过传参的方式搞定,也可以通过read交互式的方式解决,如:

1#!/bin/bash
2read -p "Enter your hostname ,like: 361way.com !  " name
3echo "you hostname will be change to $name"
4exit 0

我们要做的就是把上面的$name,在上面的 cat EOF脚句里再替换成变量就OK了。

2、IP地址

IP地址里需要在做好IMG镜像模后做两个操作:

其一是:执行rm -rf /etc/udev/rules.d/70-persistent-net.rules 把该文件删掉 ,该文件相当于一个mac和IP对应的缓存文件,如果不删除该文件在利用模板创建虚拟机时(注意,创建时会改mac)仍会在该文件里使用原模板主机的mac 。而删除后对系统也不会有影响,因为系统启动时会自动重新生成该文件。

其二是:在做完IMG模板时,文件/etc/sysconfig/network-scripts/ifcfg-eth0里不要配置mac地址和UUID 。虽然后面该文件里的内容是要通过cat EOF语句进行替换的,不过还是建议操作该步。

cat EOF的内容类似如下:

 1cat  <<  EOF >/etc/sysconfig/network-scripts/ifcfg-eth0
 2DEVICE=eth0
 3TYPE=Ethernet
 4ONBOOT=yes
 5NM_CONTROLLED=yes
 6#IPADDR=192.168.1.251
 7PREFIX=24
 8NETMASK=255.255.255.0
 9GATEWAY=192.168.1.1
10#BOOTPROTO=dhcp
11EOF

这里也可以使用交互式的方式解决 。这里换用python给下交互的步骤:

1#!/usr/bin/env python
2ip=raw_input('please input you ipaddress !   ')
3print ip

注意python里的变量是不需要加$ 符号的 ,这么简单的一个功能就不建议使用python去实现了,还是shell比较简洁 。

三、新的反思

在完成v2.0版脚本的更改后,发现又有3.0版本的需求。为了实现模板的通用性更强,guest主机准备按系统数和数据盘分离的做法,这个和阿里云、AWS等云平台的做法类似。而后面这个数据盘是否要增加,需要多大的空间,也可以在脚本里实现 。这个在后续有精力的时候再实现该功能 。