luna_scanner 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,273 @@
1
+ #!/bin/bash
2
+
3
+ NOW=`date '+%Y-%m-%d %H:%M'`
4
+
5
+ echo "Start at ${NOW}"
6
+
7
+ UPDATE_HOST=http://10.0.4.48
8
+ LIMIT_SPEED=900k
9
+
10
+ if [ $# -ge 1 ]; then
11
+ echo "Use update host $1"
12
+ UPDATE_HOST=$1
13
+ else
14
+ echo "Use default update host ${UPDATE_HOST}"
15
+ fi
16
+
17
+ if [ $# -ge 2 ]; then
18
+ LIMIT_SPEED=$2
19
+ echo "Use download speed ${LIMIT_SPEED}"
20
+ else
21
+ echo "Use default download speed ${LIMIT_SPEED}"
22
+ fi
23
+
24
+ if [ ! -d /root ]; then
25
+ echo "/root directory not exist! Exit"
26
+ exit 1
27
+ fi
28
+
29
+ if [ ! -f /proc/itc_sn/sn ]; then
30
+ echo "/proc/itc_sn/sn file not exist! Exit"
31
+ exit 1
32
+ fi
33
+
34
+ if [ ! -f /boot/uboot/uEnv.txt ]; then
35
+ echo "/boot/uboot/uEnv.txt file not exist! Exit"
36
+ exit 1
37
+ fi
38
+
39
+ which wget
40
+ if [ ! $? -eq 0 ]; then
41
+ echo "wget tool not installed. Exit"
42
+ exit 1
43
+ fi
44
+
45
+ which md5sum
46
+ if [ ! $? -eq 0 ]; then
47
+ echo "md5sum tool not installed. Exit"
48
+ exit 1
49
+ fi
50
+
51
+ which awk
52
+ if [ ! $? -eq 0 ]; then
53
+ echo "awk tool not installed. Exit"
54
+ exit 1
55
+ fi
56
+
57
+ SN=`cat /proc/itc_sn/sn`
58
+ echo "Serial NO. ${SN}"
59
+
60
+
61
+ echo "Start download firmware.md5 file."
62
+ # tell server I have started.
63
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=1 &> /dev/null
64
+ sleep 1
65
+ wget -O /root/firmware.md5 ${UPDATE_HOST}/static/firmwares/firmware.md5 --limit-rate=${LIMIT_SPEED}
66
+ ret=$?
67
+ if [ ! $ret -eq 0 ]; then
68
+ echo "firmware.md5 file downlaod failed! ${ret}"
69
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=401\&reason=firmware.md5_download_failed &> /dev/null
70
+ exit 1
71
+ fi
72
+
73
+ echo "Start download package 1 -> vardir ..."
74
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=2 &> /dev/null
75
+ sleep 1
76
+ wget -O /root/vardir.tar.xz ${UPDATE_HOST}/static/firmwares/vardir.tar.xz --limit-rate=${LIMIT_SPEED}
77
+ ret=$?
78
+ if [ ! $ret -eq 0 ]; then
79
+ echo "Package vardir.tar.xz download failed! ${ret}"
80
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=402\&reason=vardir.tar.xz_download_failed &> /dev/null
81
+ exit 1
82
+ fi
83
+
84
+ echo "Start download package 2 -> rootfs.tar.xz ..."
85
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=3 &> /dev/null
86
+ sleep 1
87
+ wget -O /root/rootfs.tar.xz ${UPDATE_HOST}/static/firmwares/rootfs.tar.xz --limit-rate=${LIMIT_SPEED}
88
+ ret=$?
89
+ if [ ! $ret -eq 0 ]; then
90
+ echo "Package rootfs.tar.xz download failed! ${ret}"
91
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=403\&reason=rootfs.tar.xz_download_failed &> /dev/null
92
+ exit 1
93
+ fi
94
+
95
+ echo "Start download uImage ..."
96
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=4 &> /dev/null
97
+ sleep 1
98
+ wget -O /root/uImage ${UPDATE_HOST}/static/firmwares/uImage --limit-rate=${LIMIT_SPEED}
99
+ ret=$?
100
+ if [ ! $ret -eq 0 ]; then
101
+ echo "Package uImage download failed! ${ret}"
102
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=404\&reason=uImage_download_failed &> /dev/null
103
+ exit 1
104
+ fi
105
+
106
+ echo "Finished download. Start validate firmware."
107
+
108
+ if [ ! -f /root/firmware.md5 ]; then
109
+ echo "/root/firmware.md5 not exist. Exit"
110
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=401\&reason=firmware.md5_not_exist &> /dev/null
111
+ exit 1
112
+ fi
113
+
114
+ if [ ! -f /root/vardir.tar.xz ]; then
115
+ echo "/root/vardir.tar.xz not exist. Exit"
116
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=402\&reason=vardir.tar.xz_not_exist &> /dev/null
117
+ exit 1
118
+ fi
119
+
120
+ if [ ! -f /root/rootfs.tar.xz ]; then
121
+ echo "/root/rootfs.tar.xz not exist. Exit"
122
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=403\&reason=rootfs.tar.xz_not_exist &> /dev/null
123
+ exit 1
124
+ fi
125
+
126
+ if [ ! -f /root/uImage ]; then
127
+ echo "/root/uImage not exist. Exit"
128
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=404\&reason=uImage_not_exist &> /dev/null
129
+ exit 1
130
+ fi
131
+
132
+ cd /root
133
+
134
+ Vardir_md5=`md5sum vardir.tar.xz | awk -F' ' '{print $1}'`
135
+ Vardir_md5_download=`grep vardir firmware.md5 | awk -F' ' '{print $1}'`
136
+
137
+ if test "${Vardir_md5}" != "${Vardir_md5_download}" ; then
138
+ echo "vardir.tar.xz's md5 isn't matched"
139
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=422\&reason=vardir.tar.xz_md5_not_matched &> /dev/null
140
+ exit 2
141
+ fi
142
+
143
+ Root_md5=`md5sum rootfs.tar.xz | awk -F' ' '{print $1}'`
144
+ Root_md5_download=`grep rootfs firmware.md5 | awk -F' ' '{print $1}'`
145
+
146
+ if test "${Root_md5}" != "${Root_md5_download}" ; then
147
+ echo "rootfs.tar.xz's md5 isn't matched"
148
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=423\&reason=rootfs.tar.xz_md5_not_matched &> /dev/null
149
+ exit 2
150
+ fi
151
+
152
+ UImage_md5=`md5sum uImage | awk -F' ' '{print $1}'`
153
+ UImage_md5_download=`grep uImage firmware.md5 | awk -F' ' '{print $1}'`
154
+
155
+ if test "${UImage_md5}" != "${UImage_md5_download}" ; then
156
+ echo "uImage's md5 isn't matched"
157
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=424\&reason=uImage_md5_not_matched &> /dev/null
158
+ exit 2
159
+ fi
160
+
161
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=13 &> /dev/null
162
+
163
+ echo "Validation passed. Start setup ..."
164
+ sleep 1
165
+
166
+ echo "Updating kernel ..."
167
+ sleep 1
168
+ cp -rf /root/uImage /boot/uboot/uImage
169
+ ret=$?
170
+ if [ ! $ret -eq 0 ]; then
171
+ echo "Updating uImage failed: #{ret}"
172
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=443\&reason=uImage_copy_failed &> /dev/null
173
+ exit 1
174
+ fi
175
+ echo "kernel updated success"
176
+
177
+ cat - <<'EOF' > /boot/uboot/update_rootfs.sh
178
+ #!/bin/bash
179
+
180
+ set -xe
181
+
182
+ DIR=`pwd`
183
+ MMC_DEV=/dev/mmcblk0
184
+ ROOTFS_PART=${MMC_DEV}p2
185
+ ROOTDIR_PART=${MMC_DEV}p5
186
+ VARDIR_PART=${MMC_DEV}p6
187
+
188
+ ROOTFS_PATH=/rootfs
189
+ ROOTDIR_PATH=/rootdir
190
+ VARDIR_PATH=/vardir
191
+
192
+ #ROOTFS_URL="http://192.168.8.80/rootfs-release.tar.xz"
193
+ #ROOTDIR_URL=
194
+ #VARDIR_URL=
195
+
196
+ mount_parts(){
197
+ ## make dir if missing
198
+ mkdir -p ${ROOTFS_PATH}
199
+ mkdir -p ${ROOTDIR_PATH} #not updating this at the moment.
200
+ mkdir -p ${VARDIR_PATH}
201
+
202
+ ## mount to correct dir
203
+ mount ${ROOTFS_PART} ${ROOTFS_PATH}
204
+ mount ${ROOTDIR_PART} ${ROOTDIR_PATH}
205
+ mount ${VARDIR_PART} ${VARDIR_PATH}
206
+ }
207
+
208
+ update_parts(){
209
+ ##get parts
210
+ if [ -f ${ROOTDIR_PATH}/rootfs.tar.xz ]; then
211
+ echo "Already dl'ed."
212
+ else
213
+ echo "No update packages, skipping."
214
+ # wget -O ${ROOTDIR_PATH}/rootfs.tar.xz ${ROOTFS_URL}
215
+ # wget -O ${ROOTDIR_PATH}/rootdir.tar.xz ${ROOTDIR_URL}
216
+ # wget -O ${ROOTDIR_PATH}/vardir.tar.xz ${VARDIR_URL}
217
+ fi
218
+
219
+ #flash parts
220
+ cd ${ROOTFS_PATH}
221
+ cp ${ROOTFS_PATH}/etc/network/interfaces /root/interfaces
222
+ rm -rf *
223
+ xzcat ${ROOTDIR_PATH}/rootfs.tar.xz | tar xv
224
+
225
+ #cd ${ROOTDIR_PATH}
226
+ #rm -rf *
227
+ #xzcat ${ROOTDIR_PATH}/rootdir.tar.xz | tar xv
228
+
229
+ cd ${VARDIR_PATH}
230
+ cp ${VARDIR_PATH}/lib/luna/luna_client.sqlite3 /root/ || true
231
+ rm -rf *
232
+ xzcat ${ROOTDIR_PATH}/vardir.tar.xz | tar xv
233
+ mv /root/luna_client.sqlite3 ${VARDIR_PATH}/lib/luna/ || true
234
+ # make sure to copy authorized_keys
235
+ mkdir -p ${ROOTDIR_PATH}/.ssh || true
236
+ cp -f ${ROOTFS_PATH}/root/.ssh/authorized_keys ${ROOTDIR_PATH}/.ssh/ || true
237
+ mv /root/interfaces ${ROOTFS_PATH}/etc/network/interfaces || true
238
+ }
239
+
240
+ cleaning(){
241
+ rm -rf ${ROOTDIR_PATH}/rootfs.tar.xz || true
242
+ rm -rf ${ROOTDIR_PATH}/rootdir.tar.xz || true
243
+ rm -rf ${ROOTDIR_PATH}/vardir.tar.xz || true
244
+ }
245
+
246
+ verify(){
247
+ sed -i "s/mmcblk0p3/mmcblk0p2/g" ${BOOTFS_PATH}/uEnv.txt
248
+ }
249
+
250
+ umount_parts(){
251
+ cd ${DIR}
252
+ umount ${ROOTFS_PART} || true
253
+ umount ${ROOTDIR_PART} || true
254
+ umount ${VARDIR_PART} || true
255
+ }
256
+
257
+
258
+ #do the job
259
+ umount_parts
260
+ mount_parts
261
+ update_parts
262
+ #verify
263
+ cleaning
264
+ umount_parts
265
+ EOF
266
+
267
+ chmod 770 /boot/uboot/update_rootfs.sh
268
+
269
+ sed -i "s/mmcblk0p2/mmcblk0p3/g" /boot/uboot/uEnv.txt
270
+ echo "Finished. Restarting device."
271
+
272
+ wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=20 &> /dev/null
273
+ reboot
@@ -0,0 +1,64 @@
1
+ module LunaScanner
2
+ class Util
3
+ class << self
4
+
5
+ def ip_valid?(ip)
6
+ ip_array = ip.to_s.split(".")
7
+ return false if ip_array.size != 4
8
+
9
+ return false if ip_array[3].to_i <= 0 || ip_array[3].to_i > 255
10
+
11
+ true
12
+ end
13
+
14
+ def begin_ip(ip)
15
+ ip_array = ip.to_s.split(".")
16
+ raise "IP Error." if ip_array.size != 4
17
+
18
+ "#{ip_array[0]}.#{ip_array[1]}.#{ip_array[2]}.1"
19
+ end
20
+
21
+ def end_ip(ip)
22
+ ip_array = ip.to_s.split(".")
23
+ raise "IP Error." if ip_array.size != 4
24
+
25
+ "#{ip_array[0]}.#{ip_array[1]}.#{ip_array[2]}.255"
26
+ end
27
+
28
+ def ip_range(begin_ip, end_ip)
29
+ start_ip_array = begin_ip.split(".")
30
+ end_ip_array = end_ip.split(".")
31
+ raise "IP not valid." if start_ip_array.size != 4 || end_ip_array.size != 4
32
+ raise "IP not valid." if start_ip_array[3].to_i > 255 || end_ip_array[3].to_i > 255
33
+ raise "Start ip and end ip must be in same range." if start_ip_array[0] != end_ip_array[0] || start_ip_array[1] != end_ip_array[1]
34
+ raise "IP range not valid" if start_ip_array[2].to_i > end_ip_array[2].to_i
35
+ raise "IP range not valid" if (start_ip_array[2].to_i == end_ip_array[2].to_i) && start_ip_array[3].to_i > end_ip_array[3].to_i
36
+
37
+ ip_array = []
38
+ if start_ip_array[2].to_i == end_ip_array[2].to_i # 192.168.1.1 ~ 192.168.1.10
39
+ (start_ip_array[3].to_i..end_ip_array[3].to_i).step do |i|
40
+ ip_array << start_ip_array[0] + "." + start_ip_array[1] + "." + start_ip_array[2] + ".#{i}"
41
+ end
42
+ else # 192.168.1.1 ~ 192.168.3.10
43
+ (start_ip_array[2].to_i..end_ip_array[2].to_i).step do |i|
44
+ if start_ip_array[2].to_i == i
45
+ (start_ip_array[3].to_i..255).step do |j|
46
+ ip_array << start_ip_array[0] + "." + start_ip_array[1] + "." + start_ip_array[2] + ".#{j}"
47
+ end
48
+ elsif end_ip_array[2].to_i == i
49
+ (1..end_ip_array[3].to_i).step do |j|
50
+ ip_array << start_ip_array[0] + "." + start_ip_array[1] + "." + end_ip_array[2] + ".#{j}"
51
+ end
52
+ else
53
+ (1..255).step do |j|
54
+ ip_array << start_ip_array[0] + "." + start_ip_array[1] + ".#{i}.#{j}"
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ ip_array
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,3 @@
1
+ module LunaScanner
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,98 @@
1
+ require "sinatra/base"
2
+
3
+ module LunaScanner
4
+ class Web < Sinatra::Base
5
+ $scan_hosts = Array.new
6
+
7
+ enable :inline_templates
8
+
9
+ not_found do
10
+ "Sir, I don't understand what you mean."
11
+ end
12
+
13
+ before do
14
+ @local_ip ||= LunaScanner.local_ip
15
+ end
16
+
17
+ get '/' do
18
+ @start_ip = Util.begin_ip @local_ip if params[:start_ip].to_s.length == 0
19
+ @end_ip = Util.end_ip @local_ip if params[:end_ip].to_s.length == 0
20
+ erb :index
21
+ end
22
+
23
+ post '/scan' do
24
+ redirect "/" if !Util.ip_valid?(params[:start_ip]) || !Util.ip_valid?(params[:end_ip])
25
+
26
+ @start_ip = params[:start_ip]
27
+ @end_ip = params[:end_ip]
28
+
29
+ @ip_range = Util.ip_range(params[:start_ip], params[:end_ip])
30
+
31
+ scanner = LunaScanner::Scanner.new(100, params[:start_ip], params[:end_ip])
32
+
33
+
34
+ 100.times do
35
+
36
+ end
37
+ erb :index
38
+ end
39
+
40
+ end
41
+ end
42
+
43
+ __END__
44
+
45
+ @@ layout
46
+ <html>
47
+ <head>
48
+ <title>Luna scanner</title>
49
+ <style type='text/css'>
50
+ .table td {
51
+ border:1px solid #BDBDBD;
52
+ }
53
+ </style>
54
+ </head>
55
+ <body>
56
+ <h1>Luna scanner</h1>
57
+ Local IP: <%= @local_ip %>
58
+ <%= yield %>
59
+ <footer></footer>
60
+ </body>
61
+ </html>
62
+
63
+ @@ index
64
+ <div id='scan_form'>
65
+ <form action='/scan' method='POST'>
66
+ From <input type='text' name='start_ip' value="<%= @start_ip %>" /> to <input type='text' name='end_ip' value="<%= @end_ip %>" />
67
+ <input type='submit' class='btn'/>
68
+ </form>
69
+ </div>
70
+
71
+ <div id='scan_result'>
72
+ <% if @ip_range && @ip_range.size > 0 %>
73
+ <table class='table'>
74
+ <thead>
75
+ <tr>
76
+ <th>Select</th>
77
+ <th>Sequence</th>
78
+ <th>IP</th>
79
+ <th>Status</th>
80
+ <th>Operation</th>
81
+ </tr>
82
+ </thead>
83
+ <tbody>
84
+ <% @ip_range.each_with_index do |ip, index| %>
85
+ <tr>
86
+ <td style='text-align:center'>
87
+ <input type='checkbox' />
88
+ </td>
89
+ <td style='text-align:center'><%= index + 1 %></td>
90
+ <td><%= ip %></td>
91
+ <td></td>
92
+ <td></td>
93
+ </tr>
94
+ <% end %>
95
+ </tbody>
96
+ </table>
97
+ <% end %>
98
+ </div>
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'luna_scanner/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "luna_scanner"
8
+ spec.version = LunaScanner::VERSION
9
+ spec.authors = ["qichunren"]
10
+ spec.email = ["whyruby@gmail.com"]
11
+ spec.description = %q{Discover luna-client devices in LAN}
12
+ spec.summary = %q{Discover luna-clinet devices in LAN, batch config them.}
13
+ spec.homepage = "https://github.com/qichunren/luna-scanner"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.bindir = 'bin'
22
+
23
+ spec.add_runtime_dependency "net-ssh", "~> 2.7.0"
24
+ spec.add_runtime_dependency "net-scp", "~> 1.1.2"
25
+ spec.add_runtime_dependency "sinatra", "~> 1.4.4"
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.3"
28
+ spec.add_development_dependency "rake"
29
+ end