由于公司的特殊需求,经常需要在一台服务器上安装大量的虚拟机,并且虚拟机必须使用静态IP地址。总是一台台虚拟机的开机-登录-修改ip会特别麻烦。所以查了些资料,通过shell脚调用vmrun命令来减少这种无聊单调的工作。
先介绍下工作环境。服务器是dell的,上面装的是OL6.5的操作系统,不熟悉的朋友可以简单的理解成RHEL6.5或者Centos6.5.虚拟机软件使用的是 VMware Workstation 11.
下面进入正题。里面安装的虚拟机是centos 6.5的。在下面,按照约定,我们将OL系统的服务器称为主机,centos6.5的虚拟机称为客户机。
大体思路 如下:
虚拟机的复制不多说了,就是关了虚拟机直接 cp就好了。如果少的话直接cp,多的话用个for循环什么的就好。
开启虚拟机的话,可以在主机中使用如下命令
vmrun start $PATH/$NAME.vmx
这里貌似只有在图形界面下才有用,如果不是图形界面,应该还要加什么参数什么的。反正我用ssh连接的时候不能用,用vnc连接就没什么问题。
开启虚拟机之后,还要在里面执行命令来配置IP,网关,DNS等等。在主机使用下面命令可以执行客户机中的命令或脚本。
vmrun -gu root -gp $passwd runProgramInGuest /home/vm/whois/whoisbak.vmx $cmd $argc //将其中的$passwd 换成你客户机中的密码,将后面/home/vm/whois/whoisbak.vmx 换成你的虚拟机的全路径,$cmd 换成你要执行的命令,argc换成命令的参数。
下面说下我做的具体的过程。
我是在/home/vm目录下,有个虚拟机whois0,现在需要将其复制20份,并分配不同的地址。
我们公司内网网段为192.168.100.0,网关为100.254 。 为了更改ip方便,我在虚拟机中写了脚本setip.sh,内容如下。使用时参数为ip地址最后三位。
#!/bin/bash
#auth:zhao xl
#date:2014/12/19
#usage: setip.sh 123
echo "DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
IPADDR=192.168.100.$1
NETMASK=255.255.255.0
GATWAY=192.168.100.254" >/etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
这里要保证虚拟机中,启动的网卡接口名称为eth0.如果是从别的主机上复制来的虚拟机,网卡名可能会变成eth1.再复制到其它主机上时,网卡名可能就会变成eth2.这时需要修改/etc/udev/rules.d/70-persistent-net.rules 文件,删除其中的内容后重启机器就好了。
之后关闭虚拟机,将虚拟机复制20份。即将whois0目录复制20份。如果写到脚本中运行,所有命令和文件名都一定要使用绝对路径,不然不一定出什么问题。查找命令的绝对路径可以使用which 命令。如which vmrun。
for i in `/usr/bin/seq 20`;do /bin/cp -r /home/vm/whois0 /home/vm/whois$i done;
然后将每个虚拟机都开启一遍。这时会询问你你是复制的还是移动的虚拟机,选择i copy it。这部一定要做,不然虚拟机无法启动,下面的命令也就无法执行。
之后设置虚拟机的ip,我是将他们设置为160到179.使用脚本setvmip.sh如下。
#!/bin/bash
PATH=/home/vm
for i in `/usr/bin/seq 20`;
do
/usr/bin/vmrun -gu root -gp passwd runProgramInGuest /home/vm/whois$i/whoisbak.vmx /bin/setip.sh $[160+$i]
done
这个就不需要使用图形界面了。用ssh连接就可以了。。
这些脚本都是临时使用的,所以写的不太讲究。有时间的话会再改改。对参数进行下验证,把起始ip和数量都作为命令行参数。总之细节方面还有很多需要完善的,各位可以根据自己的需要来修改