(OK)(OK) seem-tools-auto_create_vm_android.sh

#!/bin/sh

#------------------------------------------------------------------------------------------
# This init script (seem-tools-auto_create_vm_android.sh) is released under GNU GPL v2,v3
# Author: Tongguang Zhang
# Date: 2016-06-29
# 
# Note, Prerequisites for using this script:  You have already created android-x86_64 virtual machine in VirtualBox.
# Path in my notebook:
# [root@localhost virtualbox-os]# pwd
#     /run/media/root/158a840e-63fa-4544-b0b8-dc0d40c79241/virtualbox-os
# [root@localhost virtualbox-os]# ls
#     android-x86_64-6.0-rc1-0.vdi
#
# Note: this script will auto create android-x86_64-6.0-rc1-[1-252].vdi from android-x86_64-6.0-rc1-0.vdi
#
# NOTE: in android-x86_64-6.0-rc1-0.vdi,
# execute "sed -i '459a init_in_android-x86_64.sh' /system/etc/init.sh"
# copy quagga to /system/xbin/quagga, refer to http://blog.csdn.net/ztguang/article/details/51768680
# that is: install_quagga-0.99.21mr2.2_on_android-x86_64_in_Fedora23.txt
#
# also can execute ./seem-tools-init-android-x86_64-6.0-rc1-0.sh to init android-x86_64-6.0-rc1-0.vdi
#
# NOTE: After copying android-x86_64-6.0-rc1-[1-252].vdi from android-x86_64-6.0-rc1-0.vdi, 
# First execution will be failed,
# Second execution will be successful, may be take a long time.
#------------------------------------------------------------------------------------------



#------------------------------------------------------------------------------------------
# copy_vdi() 
# receive three parameter
# num1=$1, the begin number of VM to be created
# num2=$2, the end number of VM to be created
# path=$3, the folder which includes the file android-x86_64-6.0-rc1-0.vdi
#
# copy android-x86_64-6.0-rc1-[1-252].vdi from android-x86_64-6.0-rc1-0.vdi, this process will take a long time.
#
# can copy the files in CLI, such as:
# [root@localhost virtualbox-os]# /bin/cp android-x86_64-6.0-rc1-0.vdi android-x86_64-6.0-rc1-1.vdi; /bin/cp android-x86_64-6.0-rc1-0.vdi android-x86_64-6.0-rc1-2.vdi; /bin/cp android-x86_64-6.0-rc1-0.vdi android-x86_64-6.0-rc1-3.vdi; /bin/cp android-x86_64-6.0-rc1-0.vdi android-x86_64-6.0-rc1-4.vdi; /bin/cp android-x86_64-6.0-rc1-0.vdi android-x86_64-6.0-rc1-5.vdi
#
# [root@localhost virtualbox-os]# ll -h
# -rw-------. 1 root root 3.1G 6月  30 15:43 android-x86_64-6.0-rc1-0.vdi
# -rw-------. 1 root root 3.1G 6月  30 15:45 android-x86_64-6.0-rc1-1.vdi
# -rw-------. 1 root root 3.1G 6月  30 15:47 android-x86_64-6.0-rc1-2.vdi
# -rw-------. 1 root root 3.1G 6月  30 15:48 android-x86_64-6.0-rc1-3.vdi
# -rw-------. 1 root root 3.1G 6月  30 15:50 android-x86_64-6.0-rc1-4.vdi
# -rw-------. 1 root root 3.1G 6月  30 15:51 android-x86_64-6.0-rc1-5.vdi
#
#------------------------------------------------------------------------------------------
copy_vdi(){
	num1=$1
	num2=$2
	path=$3

	echo "enter $path"
	cd $path

	for((id=$1; id<=$2; id++))
	do

		vm_name=android-x86_64-6.0-rc1-$id.vdi
		vm_name_bac=android-x86_64-6.0-rc1-$id.vdi.bac
		name=android-x86_64-6.0-rc1-

		# copy android-x86_64-6.0-rc1-[1-252].vdi from android-x86_64-6.0-rc1-0.vdi
		# if [ ! -f "$vm_name" ]; then
		if [ -f "$vm_name" ]; then
			echo "$vm_name exists, backup it, then copy $vm_name from android-x86_64-6.0-rc1-0.vdi"
			#mv $vm_name $vm_name_bac
			rm $vm_name
		fi

		echo "copying $vm_name from android-x86_64-6.0-rc1-0.vdi"
		cp android-x86_64-6.0-rc1-0.vdi $vm_name
	done

	echo "exit $path"
	cd -

}
#------------------------------------------------------------------------------------------



#------------------------------------------------------------------------------------------
# create_init() 
# create init_in_android-x86_64.sh
# receive one parameters
#
# adb push ${init_name} /system/xbin/quagga/sbin/init_in_android-x86_64.sh
#------------------------------------------------------------------------------------------
create_init(){

	init_name=init_in_android-x86_64.sh.$1

	eth0_br_ip="112.26.2.$1"

	echo -e "#!/system/bin/sh\n" > $init_name

	# waiting a while, push init_in_android-x86_64.sh in create_vm(),
	# due to that init_in_android-x86_64.sh may be exist in android-x86_64-6.0-rc1-[1-252].vdi
	# if create android-x86_64-6.0-rc1-[1-252].vdi from scratch create, then can delete the following line. 
	echo "sleep 60" >> $init_name

	echo "ifconfig eth0 down" >> $init_name
	echo "ifconfig eth0 ${eth0_br_ip} netmask 255.255.0.0 up" >> $init_name

	echo "mount -o remount,rw /system" >> $init_name
	echo "mount -o remount,rw /" >> $init_name

	echo "mkdir -p /opt/android-on-linux/quagga/out/etc" >> $init_name
	echo "cp /system/xbin/quagga/etc/zebra.conf /opt/android-on-linux/quagga/out/etc/" >> $init_name
	echo "cp /system/xbin/quagga/etc/ospf6d.conf /opt/android-on-linux/quagga/out/etc/" >> $init_name

	echo "sed -i '21a \ router-id 10.1.0.$1' /opt/android-on-linux/quagga/out/etc/ospf6d.conf" >> $init_name

	echo "pkill zebra" >> $init_name
	echo "pkill ospf6d" >> $init_name
	echo "sleep 1" >> $init_name

	echo "/system/xbin/quagga/sbin/zebra -d" >> $init_name
	echo "/system/xbin/quagga/sbin/ospf6d -d" >> $init_name
}
#------------------------------------------------------------------------------------------



#------------------------------------------------------------------------------------------
# create_vm() 
# receive three parameter
# num1=$1, the begin number of VM to be created
# num2=$2, the end number of VM to be created
# path=$3, the folder which includes the file android-x86_64-6.0-rc1-0.vdi
#------------------------------------------------------------------------------------------
create_vm(){
	num1=$1
	num2=$2
	path=$3

	# make sure that the first vm get IP 192.168.56.3
	#kill -9 `ps aux|grep vboxnet0|grep -v grep|awk '{print $2}'` &>/dev/null

	echo "enter $path"
	cd $path

	for((id=$1; id<=$2; id++))
	do

		echo "create init_in_android-x86_64.sh"
		create_init $id

		name=android-x86_64-6.0-rc1-
		init_name=init_in_android-x86_64.sh.${id}

		# make sure that the first vm get IP 192.168.56.3 from vboxnet0_DHCP
		kill -9 `ps aux|grep vboxnet0|grep -v grep|awk '{print $2}'` &>/dev/null
		sleep 1

		VBoxManage createvm --name $name${id} --ostype Linux_64 --register
		VBoxManage modifyvm $name${id} --memory 1024 --vram 128 --usb off --audio pulse --audiocontroller sb16 --acpi on --rtcuseutc off --boot1 disk --boot2 dvd --nic1 hostonly --nictype1 Am79C973 --hostonlyadapter1 vboxnet0 --nic2 none --nic3 none --nic4 none
		VBoxManage storagectl $name${id} --name "IDE Controller" --add ide --controller PIIX4
		VBoxManage internalcommands sethduuid $name${id}.vdi
		VBoxManage storageattach $name${id} --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium $name${id}.vdi

		# look at VirtualBox Gloable Setting, that is, vboxnet0: 192.168.56.1, 192.168.56.2(DHCPD), (3-254)
		#host0=$[2+id]
		#eth0_vn_ip="192.168.56.${host0}"

		eth0_vn_ip="192.168.56.3"

		# NOTE:
		#  Serial creation, otherwise, have problems.
		# First execution will be failed,  (may be sleep 36)
		# Second execution will be successful, may be take a long time,  (may be sleep 110)

		gnome-terminal -x bash -c "VBoxManage startvm --type headless $name${id}; \
sleep 110; \
gnome-terminal -x bash -c \"adb connect ${eth0_vn_ip} && adb -s ${eth0_vn_ip} root\"; \
sleep 1; \
gnome-terminal -x bash -c \"adb connect ${eth0_vn_ip} && adb -s ${eth0_vn_ip} root\"; \
sleep 1; \
gnome-terminal -x bash -c \"adb connect ${eth0_vn_ip} && adb -s ${eth0_vn_ip} root\"; \
sleep 1; \
adb connect ${eth0_vn_ip}; \
echo \"adb connect ${eth0_vn_ip}\"; \
adb -s ${eth0_vn_ip} shell mount -o remount,rw /system; \
adb -s ${eth0_vn_ip} shell mount -o remount,rw /; \
adb push ${init_name} /system/xbin/quagga/sbin/init_in_android-x86_64.sh; \
adb -s ${eth0_vn_ip} shell chmod 755 /system/xbin/quagga/sbin/init_in_android-x86_64.sh; \
echo OK; \
echo \"$name${id} poweroff\"; \
sleep 3"

#adb -s ${eth0_vn_ip} shell poweroff"

		# adb -s ${eth0_vn_ip}:5555 shell sed -i '459a \ init_in_android-x86_64.sh' /system/etc/init.sh; \
		# NOTE: in android-x86_64-6.0-rc1-0.vdi, 
		# execute "sed -i '459a init_in_android-x86_64.sh' /system/etc/init.sh"

		# add cp command after the line 459 of /system/etc/init.sh in android-x86_64
		# run my script at boot time in android-x86_64

		# NOTE:
		#  Serial creation, otherwise, have problems.
		# First execution will be failed,  (may be sleep 50)
		# Second execution will be successful, may be take a long time,  (may be sleep 120)
		sleep 120
		VBoxManage controlvm $name${id} poweroff
		sleep 2

		#VBoxManage modifyvm $name${id} --memory 1024 --vram 128 --usb off --audio pulse --audiocontroller sb16 --acpi on --rtcuseutc off --boot1 disk --boot2 dvd --nic1 bridged --bridgeadapter1 virbr0 --nic2 none --nic3 none --nic4 none

	done

	echo "exit $path"
	cd -
}
#------------------------------------------------------------------------------------------




#------------------------------------------------------------------------------------------
# function unregister_vm()
# Description:
# receive two parameters,
# num1=$1, the begin number of VM to be created
# num2=$2, the end number of VM to be created
#------------------------------------------------------------------------------------------

unregister_vm(){

	# $1, the begin number of VM to be created
	# $2, the end number of VM to be created

	for((id=$1; id<=$2; id++))
	do
		name=android-x86_64-6.0-rc1-$id

		VBoxManage controlvm ${name} poweroff &>/dev/null
		VBoxManage unregistervm ${name} &>/dev/null
		rm "/root/VirtualBox VMs/${name}" -rf &>/dev/null

		sleep 1
	done
}
#------------------------------------------------------------------------------------------



#------------------------------------------------------------------------------------------
# usage() 
# script usage
#------------------------------------------------------------------------------------------
usage(){
	cat <<-EOU
    Usage: seem-tools-auto_create_vm_android.sh num1 num2 path
        num1, the begin number of VM to be created
        num2, the end number of VM to be created
	path, the folder which includes the file android-x86_64-6.0-rc1-0.vdi

    For example:
        [root@localhost virtualbox-os]# pwd
            /run/media/root/158a840e-63fa-4544-b0b8-dc0d40c79241/virtualbox-os

        [root@localhost virtualbox-os]# ls android-x86_64-6.0-rc1-0.vdi
            android-x86_64-6.0-rc1-0.vdi

        [root@localhost fedora23server-share]# ls seem-tools-auto_create_vm_android.sh
            seem-tools-auto_create_vm_android.sh

        ./seem-tools-auto_create_vm_android.sh 1 1 /run/media/root/158a840e-63fa-4544-b0b8-dc0d40c79241/virtualbox-os

	EOU
}
#------------------------------------------------------------------------------------------

# num1=$1, the begin number of VM to be created
# num2=$2, the end number of VM to be created
# path=$3, the folder which includes the file android-x86_64-6.0-rc1-0.vdi

if [ $# -eq 3 ]; then
	if [ ! -f "$3/android-x86_64-6.0-rc1-0.vdi" ]; then
		echo "please enter correct folder which includes the file android-x86_64-6.0-rc1-0.vdi"
		exit
	fi

	# copy android-x86_64-6.0-rc1-[1-252].vdi from android-x86_64-6.0-rc1-0.vdi
	# this process will take a long time.
	# Need to pay attention
	# copy_vdi $1 $2 $3

	unregister_vm $1 $2
	#unregister_vm $1 $2

	create_vm $1 $2 $3
else
	usage
fi

# [root@localhost fedora23server-share]# pwd
# /opt/share-vm/fedora23server-share

# it is safe to execute the following command (./seem-tools-CLI-semi-auto.sh destroy 0 1) twice.

# [root@localhost fedora23server-share]# ./seem-tools-CLI-semi-auto.sh destroy 0 1 centos-manet android-x86_64-6.0-rc1- /run/media/root/158a840e-63fa-4544-b0b8-dc0d40c79241/virtualbox-os

# [root@localhost fedora23server-share]# ./seem-tools-CLI-semi-auto.sh destroy 0 1 centos-manet android-x86_64-6.0-rc1- /run/media/root/158a840e-63fa-4544-b0b8-dc0d40c79241/virtualbox-os

# [root@localhost fedora23server-share]# ./seem-tools-auto_create_vm_android.sh 1 1 /run/media/root/158a840e-63fa-4544-b0b8-dc0d40c79241/virtualbox-os

# [root@localhost fedora23server-share]# ./seem-tools-CLI-semi-auto.sh destroy 0 5 centos-manet android-x86_64-6.0-rc1- /run/media/root/158a840e-63fa-4544-b0b8-dc0d40c79241/virtualbox-os

# [root@localhost fedora23server-share]# ./seem-tools-auto_create_vm_android.sh 1 5 /run/media/root/158a840e-63fa-4544-b0b8-dc0d40c79241/virtualbox-os


posted @ 2016-06-29 17:52  张同光  阅读(103)  评论(0编辑  收藏  举报