1#!/bin/sh
2
3version=`cat /cloud_version`
4sleep_time_1=60
5sleep_time_2=300
6sleep_time_3=600
7sleep_time_4=1800
8sleep_time_5=3600
9
10dynamic_sleep() {
11	if [ $retry_count -lt 5 ]; then
12		let retry_count=$retry_count+1
13	fi
14	eval sleep_time=\$sleep_time_$retry_count
15	sleep $sleep_time
16}
17
18start() {
19	[ -d /opt ] && {
20		/opt/xagent/run-xagent.sh
21		/www/cgi-bin/readycloud_control.cgi
22		sleep 2
23		readycloud_enable=$(/bin/config get readycloud_enable)
24		if [ "$readycloud_enable" = "1" ]; then
25			readycloud_user_admim="$(/bin/config get readycloud_user_admin)"
26			readycloud_user_passsword="$(/bin/config get readycloud_user_password)"
27			./opt/rcagent/scripts/register.sh $readycloud_user_admim $readycloud_user_passsword
28		fi
29	}
30}
31
32uninstall() {
33	[ -s /opt/filelist ] && cat /opt/filelist | xargs rm -f
34	rm -rf /opt
35}
36
37checkversion() {
38	[ -d /opt ] || return 1
39	[ "x$(grep $version /opt/version)" = "x" ] && uninstall
40}
41
42backup() {
43	[ -s /overlay/opt/filelist ] || return 1
44	while read file; do
45		target="/tmp/clouddir$(dirname $file)"
46		mkdir -p $target
47		cp -f $file $target
48	done < /overlay/opt/filelist
49}
50
51restore() {
52	[ -d /tmp/clouddir ] || return 1
53	cp -fpR /tmp/clouddir/overlay/* /overlay
54	rm -rf /tmp/clouddir
55}
56
57install_local(){
58	tar -zxvf /lib/readygeniecloud-r7800new-20161026-01.tar.gz -C /
59	echo 20161026 > /opt/version
60	sed '2s/^/source \/etc\/profile\n/' /opt/rcagent/run_server.sh > /tmp/run_server.sh
61	cp /tmp/run_server.sh /opt/rcagent/run_server.sh
62
63	start
64}
65
66update() {
67	local cloud_binary_install=$(/bin/config get cloud_binary_install)
68	[ -f /tmp/.cloud_updated ] && return 1
69	PID_file=/var/run/cloud.pid
70	[ -f $PID_file ] && return 1
71	install_local
72	echo "$$" > $PID_file
73	echo "start to get info from ftp://updates1.netgear.com/sw-apps/ready-genie-cloud/r7800/"
74	retry_count=0
75	while [ 1 ]; do
76		curl ftp://updates1.netgear.com/sw-apps/ready-genie-cloud/r7800/ 2>/dev/null | grep readygeniecloud-r7800new-*-.*.tar.gz > /tmp/cloud_info
77		[ -s /tmp/cloud_info ] && break
78		echo "cannot access ftp://updates1.netgear.com/sw-apps/ready-genie-cloud/r7800/ or don't find readygeniecloud tarball with version $version"
79		dynamic_sleep
80	done
81	fullversion=`tail -1 /tmp/cloud_info | awk '{print $9}'`
82	if [ -f /opt/version -a "x$(cat /opt/version)" = "x$fullversion" ]; then
83		rm -f /tmp/cloud_info
84		touch /tmp/.cloud_updated
85		rm -f $PID_file
86		echo "the readygeniecloud on update server is same as on R/W filesystem"
87		start
88		return 1
89	fi
90	size=`tail -1 /tmp/cloud_info | awk '{print $5}'`
91	echo "start to download ftp://updates1.netgear.com/sw-apps/ready-genie-cloud/r7800/$fullversion"
92	retry_count=0
93	while [ 1 ]; do
94		curl ftp://updates1.netgear.com/sw-apps/ready-genie-cloud/r7800/$fullversion -o /tmp/cloud.tar.gz 2>/dev/null
95		[ "$(wc -c /tmp/cloud.tar.gz | awk '{print $1}')" = "$size" ] && break
96		echo "fail to download ftp://updates1.netgear.com/sw-apps/ready-genie-cloud/r7800/readygeniecloud-r7800-$fullversion"
97		dynamic_sleep
98	done
99	uninstall
100	mkdir /tmp/clouddir
101	tar xfz /tmp/cloud.tar.gz -C /tmp/clouddir
102	echo $fullversion > /tmp/clouddir/opt/version
103	touch /tmp/clouddir/opt/filelist
104	find /tmp/clouddir -type f | sed 's/\/tmp\/clouddir/\/overlay/' > /tmp/clouddir/opt/filelist
105	cp -fpR /tmp/clouddir/* /
106	rm -f /tmp/cloud_info
107	rm -f /tmp/cloud.tar.gz
108	rm -rf /tmp/clouddir
109	touch /tmp/.cloud_updated
110	# add newline "source /etc/profile" in file /opt/rcagent/run_server.sh
111	sed '2s/^/source \/etc\/profile\n/' /opt/rcagent/run_server.sh > /tmp/run_server.sh
112	cp /tmp/run_server.sh /opt/rcagent/run_server.sh
113
114	echo $fullversion | cut -d - -f 3 > /cloud_version
115	echo "install ftp://updates1.netgear.com/sw-apps/ready-genie-cloud/r7800/$fullversion to R/W filesystem successfully"
116	start
117	rm -f $PID_file
118}
119
120case "$1" in
121	start)
122	start
123	;;
124	backup)
125	backup
126	;;
127	restore)
128	restore
129	;;
130	checkversion)
131	checkversion
132	;;
133	update)
134	update
135	;;
136esac
137
138