add backup suite plugin.
[vuplus_dvbapp] / lib / python / Plugins / Extensions / BackupSuiteHDD / backupsuite.sh
1 ###############################################################################
2 #         FULL BACKUP UYILITY FOR ORIGINAL IMAGE FOR ALL VU+ MODELS           #
3 #        VU+ UNO, VU+ SOLO, VU+ SOLO2, VU+ DUO, VU+ ULTIMO, VU+ DUO2          #
4 #                   MAKES A FULLBACK-UP READY FOR FLASHING.                   #
5 #                                                                             #
6 #                   Pedro_Newbie (backupsuite@outlook.com)                    #
7 ###############################################################################
8 #
9 #!/bin/sh
10
11
12 ###################### DEFINE CLEAN-UP ROUTINE ################################
13 clean_up()
14 {
15 umount /tmp/bi/root > /dev/null 2>&1
16 rmdir /tmp/bi/root > /dev/null 2>&1
17 rmdir /tmp/bi > /dev/null 2>&1
18 rm -rf "$WORKDIR" > /dev/null 2>&1
19 }
20
21 ###################### BIG OOPS!, HOLY SH... (SHELL SCRIPT :-))################
22 big_fail()
23 {
24         clean_up
25         $SHOW "message15"               # Image creation FAILED!
26         exit 0
27 }
28 ##### I QUIT #####
29
30
31 ########################## DECLARATION OF VARIABLES ###########################
32 VERSION="Version 12.5 for VU+ Original Image 2.1 - 06-08-2013"
33 START=$(date +%s)
34 MEDIA="$1"
35 DATE=`date +%Y%m%d_%H%M`
36 IMAGEVERSION=`date +%Y%m%d`
37 MKFS=/usr/sbin/mkfs.ubifs
38 NANDDUMP=/usr/sbin/nanddump
39 UBINIZE=/usr/sbin/ubinize
40 WORKDIR="$MEDIA/bi"
41 TARGET="XX"
42 UBINIZE_ARGS="-m 2048 -p 128KiB"
43
44
45 ################### START THE LOGFILE /tmp/BackupSuite.log ####################
46 echo "Plugin version     = $VERSION" > /tmp/BackupSuite.log
47 echo "Back-up media      = $MEDIA" >> /tmp/BackupSuite.log
48 df -h "$MEDIA"  >> /tmp/BackupSuite.log
49 echo "Back-up date_time  = $DATE" >> /tmp/BackupSuite.log
50 echo "Working directory  = $WORKDIR" >> /tmp/BackupSuite.log
51
52 ######################### TESTING FOR UBIFS OR JFFS2 ##########################
53 if grep rootfs /proc/mounts | grep ubifs > /dev/null; then      
54         ROOTFSTYPE=ubifs
55 else
56         $SHOW "message01"                       #NO UBIFS, THEN JFFS2 BUT NOT SUPPORTED ANYMORE
57         big_fail
58 fi
59
60 ####### TESTING IF ALL THE TOOLS FOR THE BUILDING PROCESS ARE PRESENT #########
61 if [ ! -f $NANDDUMP ] ; then
62         echo -n "$NANDDUMP " ; $SHOW "message05"        # nanddump not found.
63         echo "NO NANDDUMP FOUND, ABORTING" >> /tmp/BackupSuite.log
64         big_fail
65 fi
66 if [ ! -f $MKFS ] ; then
67         echo -n "$MKFS " ; $SHOW "message05"            # mkfs.ubifs not found.
68         echo "NO MKFS.UBIFS FOUND, ABORTING" >> /tmp/BackupSuite.log
69         big_fail
70 fi
71 if [ ! -f $UBINIZE ] ; then
72         echo -n "$UBINIZE " ; $SHOW "message05"         # ubinize not found.
73         echo "NO UBINIZE FOUND, ABORTING" >> /tmp/BackupSuite.log
74         big_fail
75 fi
76
77 ########## TESTING WHICH BRAND AND MODEL SATELLITE RECEIVER IS USED ###########
78 if [ -f /proc/stb/info/vumodel ] ; then
79         MODEL=$( cat /proc/stb/info/vumodel )
80         MKUBIFS_ARGS="-m 2048 -e 126976 -c 4096 -F"
81         SHOWNAME="Vu+ $MODEL"
82         MAINDEST="$MEDIA/fullbackup_OI_2.1_$MODEL/$DATE/vuplus/$MODEL"
83         EXTRA="$MEDIA/vuplus"
84         echo "Destination        = $MAINDEST" >> /tmp/BackupSuite.log
85 ######################### NO SUPPORTED RECEIVER FOUND #########################
86 else
87         $SHOW "message01"               # No supported receiver found!
88         big_fail
89 fi
90
91 ############# START TO SHOW SOME INFORMATION ABOUT BRAND & MODEL ##############
92 echo
93 echo -n "$SHOWNAME " | tr  a-z A-Z      # Shows the receiver brand and model
94 $SHOW "message02"                                       # BACK-UP TOOL FOR MAKING A COMPLETE BACK-UP 
95 echo
96 echo "$VERSION"
97 echo "Pedro_Newbie (e-mail: backupsuite@outlook.com)"
98 echo
99 $SHOW "message03"       # Please be patient, ... will take about 5-7 minutes 
100 echo " "
101
102 #exit 0  #USE FOR DEBUGGING/TESTING
103
104
105 ##################### PREPARING THE BUILDING ENVIRONMENT ######################
106 rm -rf "$WORKDIR"               # GETTING RID OF THE OLD REMAINS IF ANY
107 echo "Remove directory   = $WORKDIR" >> /tmp/BackupSuite.log
108 mkdir -p "$WORKDIR"             # MAKING THE WORKING FOLDER WHERE EVERYTHING HAPPENS
109 echo "Recreate directory = $WORKDIR" >> /tmp/BackupSuite.log
110 mkdir -p /tmp/bi/root
111 echo "Create directory   = /tmp/bi/root" >> /tmp/BackupSuite.log
112 sync
113 mount --bind / /tmp/bi/root
114
115
116 ####################### START THE REAL BACK-UP PROCESS ########################
117 #------------------------------------------------------------------------------
118 ############################# MAKING UBINIZE.CFG ##############################
119 echo \[ubifs\] > "$WORKDIR/ubinize.cfg"
120 echo mode=ubi >> "$WORKDIR/ubinize.cfg"
121 echo image="$WORKDIR/root.ubi" >> "$WORKDIR/ubinize.cfg"
122 echo vol_id=0 >> "$WORKDIR/ubinize.cfg"
123 echo vol_type=dynamic >> "$WORKDIR/ubinize.cfg"
124 echo vol_name=rootfs >> "$WORKDIR/ubinize.cfg"
125 echo vol_flags=autoresize >> "$WORKDIR/ubinize.cfg"
126 echo " " >> /tmp/BackupSuite.log
127 echo "UBINIZE.CFG CREATED WITH THE CONTENT:"  >> /tmp/BackupSuite.log
128 cat "$WORKDIR/ubinize.cfg"  >> /tmp/BackupSuite.log
129 touch "$WORKDIR/root.ubi"
130 chmod 644 "$WORKDIR/root.ubi"
131 echo "--------------------------" >> /tmp/BackupSuite.log
132
133 #############################  MAKING ROOT.UBI(FS) ############################
134 $SHOW "message06a"                                              #Create: root.ubifs
135 echo "Start creating root.ubi"  >> /tmp/BackupSuite.log
136 $MKFS -r /tmp/bi/root -o "$WORKDIR/root.ubi" $MKUBIFS_ARGS
137 if [ -f "$WORKDIR/root.ubi" ] ; then
138         echo "ROOT.UBI MADE:" >> /tmp/BackupSuite.log
139         ls -e1 "$WORKDIR/root.ubi" >> /tmp/BackupSuite.log
140 else 
141         echo "$WORKDIR/root.ubi NOT FOUND"  >> /tmp/BackupSuite.log
142         big_fail
143 fi
144
145 echo "Start UBINIZING" >> /tmp/BackupSuite.log
146 $UBINIZE -o "$WORKDIR/root.ubifs" $UBINIZE_ARGS "$WORKDIR/ubinize.cfg" >/dev/null
147 chmod 644 "$WORKDIR/root.ubifs"
148 if [ -f "$WORKDIR/root.ubifs" ] ; then
149         echo "ROOT.UBIFS MADE:" >> /tmp/BackupSuite.log
150         ls -e1 "$WORKDIR/root.ubifs" >> /tmp/BackupSuite.log
151 else 
152         echo "$WORKDIR/root.ubifs NOT FOUND"  >> /tmp/BackupSuite.log
153         big_fail
154 fi
155
156 ############################## MAKING KERNELDUMP ##############################
157 echo "Start creating kerneldump" >> /tmp/BackupSuite.log
158 $SHOW "message07"                                                       # Create: kerneldump
159 if [ $MODEL = "solo2" ] || [ $MODEL = "duo2" ]; then
160         $NANDDUMP /dev/mtd2 -q > "$WORKDIR/vmlinux.gz"
161 else 
162         $NANDDUMP /dev/mtd1 -q > "$WORKDIR/vmlinux.gz"
163 fi
164 if [ -f "$WORKDIR/vmlinux.gz" ] ; then
165         echo "VMLINUX.GZ MADE:" >> /tmp/BackupSuite.log
166         ls -e1 "$WORKDIR/vmlinux.gz" >> /tmp/BackupSuite.log
167 else 
168         echo "$WORKDIR/vmlinux.gz NOT FOUND"  >> /tmp/BackupSuite.log
169         big_fail
170 fi
171 echo "--------------------------" >> /tmp/BackupSuite.log
172
173 ############ MOVING THE BACKUP TO THE RIGHT PLACE(S) ##########################
174 mkdir -p "$MAINDEST"
175 echo "Created directory  = $MAINDEST"  >> /tmp/BackupSuite.log
176 if [ $MODEL = "solo2" ] || [ $MODEL = "duo2" ]; then
177         mv "$WORKDIR/root.ubifs" "$MAINDEST/root_cfe_auto.bin"
178 else
179         mv "$WORKDIR/root.ubifs" "$MAINDEST/root_cfe_auto.jffs2"
180 fi
181 mv "$WORKDIR/vmlinux.gz" "$MAINDEST/kernel_cfe_auto.bin"
182 if [ $MODEL != "solo" -a $MODEL != "duo" ]; then
183         touch "$MAINDEST/reboot.update"  
184 fi
185 if [ -f "$MAINDEST/root_cfe_auto"* -a -f "$MAINDEST/kernel_cfe_auto.bin" ] ; then
186         echo " "  >> /tmp/BackupSuite.log
187         echo "BACK-UP MADE SUCCESSFULLY IN: $MAINDEST"  >> /tmp/BackupSuite.log
188         echo " "
189         $SHOW "message10" ; echo "$MAINDEST"    # USB Image created in: 
190         $SHOW "message23"               # "The content of the folder is:"
191         ls "$MAINDEST" -e1h | awk {'print $3 "\t" $7'}
192         ls -e1 "$MAINDEST" >> /tmp/BackupSuite.log
193         echo " "
194 else
195         big_fail
196 fi
197
198 #HERE NEW PART ABOUT NO FOLDER VUPLUS/MODEL WHEN MADE ON HARDDISK OR REPLACEMENT
199 if  [ $HARDDISK != 1 ]; then
200         mkdir -p "$EXTRA/$MODEL"
201         echo "Created directory  = $EXTRA/$MODEL" >> /tmp/BackupSuite.log
202         cp -r "$MAINDEST" "$EXTRA"                                              #copy the made back-up to images
203         $SHOW "message11" ; echo "$EXTRA/$MODEL"                # and there is made an extra copy in:
204 fi
205
206 echo " "
207 $SHOW "message12"               # directions for restoring the image for a vu+
208
209 #################### CHECKING FOR AN EXTRA BACKUP STORAGE #####################
210 if  [ $HARDDISK = 1 ]; then                                             # looking for a valid usb-stick
211         for candidate in /media/sd* /media/mmc* /media/usb* /media/*
212         do
213                 if [ -f "${candidate}/"*[Bb][Aa][Cc][Kk][Uu][Pp][Ss][Tt][Ii][Cc][Kk]* ]
214                 then
215                 TARGET="${candidate}"
216                 fi    
217         done
218         if [ "$TARGET" != "XX" ] ; then
219                 echo " "
220                 $SHOW "message17"       # Valid USB-flashdrive detected, making an extra copy
221                 echo " "
222                 TOTALSIZE="$(df -h "$TARGET" | tail -n 1 | awk {'print $2'})"
223                 FREESIZE="$(df -h "$TARGET" | tail -n 1 | awk {'print $4'})"
224                 $SHOW "message09" ; echo -n "$TARGET ($TOTALSIZE, " ; $SHOW "message16" ; echo "$FREESIZE)"
225                 rm -rf "$TARGET/vuplus/$MODEL"
226                 mkdir -p "$TARGET/vuplus/$MODEL"
227                 cp -r "$MAINDEST" "$TARGET/vuplus/"
228                 echo " " >> /tmp/BackupSuite.log
229                 echo "MADE AN EXTRA COPY IN: $TARGET" >> /tmp/BackupSuite.log
230                 df -h "$TARGET"  >> /tmp/BackupSuite.log
231                 sync
232                 $SHOW "message19"       # Backup finished and copied to your USB-flashdrive
233         fi
234 fi
235 ######################### END OF EXTRA BACKUP STORAGE #########################
236
237
238 ################## CLEANING UP AND REPORTING SOME STATISTICS ##################
239 clean_up
240 END=$(date +%s)
241 DIFF=$(( $END - $START ))
242 MINUTES=$(( $DIFF/60 ))
243 SECONDS=$(( $DIFF-(( 60*$MINUTES ))))
244 if [ $SECONDS -le  9 ] ; then 
245         SECONDS="0$SECONDS"
246 fi
247 $SHOW "message24"  ; echo -n "$MINUTES.$SECONDS " ; $SHOW "message25"
248 echo "BACKUP FINISHED IN $MINUTES.$SECONDS MINUTES" >> /tmp/BackupSuite.log
249 exit 
250 #-----------------------------------------------------------------------------