2 # A script to restore /bin/busybox and delete the symlinks made during
5 # Symbolic links to applets are only removed if they are
6 # 1) created by the installer script ("install-binary.sh")
7 # 2) not replaced by a binary (i.e. they are still a symbolic link)
8 # 3) pointing to a busybox binary
10 # By Dennis Groenen <tj.groenen@gmail.com>
14 INSTALLDIR="/opt/busybox-power"
15 EXECPWR="$INSTALLDIR/busybox.power"
16 DISTBIN="/bin/busybox.distrib"
21 INSTBINARY_SHA1=`sha1sum $EXECPWR | awk '{ print $1 }'`
22 if test -e $DISTBIN; then
23 ORIGBINARY_SHA1=`sha1sum $DISTBIN | awk '{ print $1 }'`; fi
25 # Load shared functions
26 source $INSTALLDIR/functions
28 # Check whether we can load the list of created symlinks during installation
29 CHECK_SYMLINKSFILE() {
30 if test ! -e $INSTALLDIR/busybox-power.symlinks; then
31 echo -e "Warning: cannot find the list of symlinks to be removed. No" \
32 "symlinks will be removed at all!\n" >> /tmp/busybox-power-error
36 # Check the (integrity) of our BusyBox backup
38 # Firstly, check whether the backup still exists
39 if test ! -e $DISTBIN; then
40 if test "$ENVIRONMENT" == "SDK"; then return; fi # SDK comes without BB
41 echo -e "Warning: the backup of the original BusyBox binary is missing!" \
42 "/bin/busybox will not be touched.\n" >> /tmp/busybox-power-error
46 # Secondly, check the integrity of the backup
47 if test -e $INSTALLDIR/busybox.distrib.sha1; then
48 if test "`cat $INSTALLDIR/busybox.distrib.sha1`" != "$ORIGBINARY_SHA1"; then
49 if test -e $INSTALLDIR/busybox.distrib.version; then
50 if test "`cat $INSTALLDIR/busybox.distrib.version`" == "`GETBBVERSION`"; then
51 # The backup has been changed whilst busybox hasn't been upgraded
52 echo -e "Warning: the backup of the original BusyBox binary has" \
53 "been modified since installing busybox-power (invalid SHA1" \
54 "checksum). Do not continue unless you're sure that $DISTBIN" \
55 "is not corrupted.\n" >> /tmp/busybox-power-error
58 echo -e "Warning: the backup of the original BusyBox binary has" \
59 "been modified since installing busybox-power (invalid SHA1" \
60 "checksum). We could not determine whether this is due to a BusyBox" \
61 "upgrade (e.g. by an (C)SSU update) or not. Do not continue unless" \
62 "either the latter is the case, or you're via other ways sure that" \
63 "$DISTBIN is not corrupted.\n" >> /tmp/busybox-power-error
67 echo -e "Warning: could not load the saved SHA1 checksum of the backup" \
68 "of the original BusyBox binary; the integrity of the backup of the" \
69 "original binary can not be guaranteed.\n" >> /tmp/busybox-power-error
73 # Check whether /bin/busybox has been modified after bb-power's installation
74 # This always happens on Harmattan when it receives a BusyBox upgrade;
75 # dpkg-divert is disallowed on that platform
76 CHECK_INSTALLEDBIN() {
77 if test "$INSTBINARY_SHA1" != "`sha1sum /bin/busybox | awk '{ print $1 }'`"; then
80 if test "$ENVIRONMENT" == "HARMATTAN"; then
81 if test -e $INSTALLDIR/busybox.distrib.version; then
82 if test "`cat $INSTALLDIR/busybox.distrib.version`" != "`GETBBVERSION`"; then
83 # Harmattan received a BusyBox upgrade, do not disturb the user by
84 # warning that /bin/busybox has been modified
88 echo -e "Warning: /bin/busybox has been modified since installing" \
89 "busybox-power (invalid SHA1 checksum). This can be the result of a" \
90 "BusyBox upgrade (e.g. by a Meego update). Your current" \
91 "/bin/busybox won't be touched. Our backup of the original BusyBox" \
92 "binary will be left at $DISTBIN.\n" >> /tmp/busybox-power-error
94 echo -e "Warning: /bin/busybox has been modified since installing" \
95 "busybox-power (invalid SHA1 checksum). Your current /bin/busybox" \
96 "won't be touched and the diversion of /bin/busybox to $DISTBIN" \
97 "will not be removed.\n" >> /tmp/busybox-power-error
102 # Display encountered errors
106 echo -e "\n\n-----------Attention!-----------"
107 cat /tmp/busybox-power-error
108 rm /tmp/busybox-power-error
109 echo "-> Please press [enter] to ignore the above errors/warnings."
110 echo " Hit [ctrl-c] to break"
114 echo "Click \"I Agree\" to ignore the above errors/warnings. Ask for" \
115 "help if you don't know what to do." >> /tmp/busybox-power-error
116 echo "Please confirm the text on the screen of your device"
117 maemo-confirm-text "Attention!" /tmp/busybox-power-error
119 rm /tmp/busybox-power-error
120 if test ! $res == 0; then exit 1; fi
123 echo "Click \"I Agree\" to ignore the above errors/warnings. Ask for" \
124 "help if you don't know what to do." >> /tmp/busybox-power-error
125 echo "Please confirm the text on the screen of your device"
126 # We're too privileged to call meego-confirm-text...
127 # Our source is com.nokia.maemo, whilst m-c-t is from an unknown source
128 /usr/bin/aegis-exec meego-confirm-text "Attention!" \
129 /tmp/busybox-power-error > /dev/null 2>&1
131 rm /tmp/busybox-power-error
132 if test ! $res == 0; then exit 1; fi
137 # Rollback procedure for Harmattan based devices
138 ROLLBACK_HARMATTAN() {
139 echo -e "\nWarning: an error has occured! Rolling back..."
140 $EXECPWR cp -af $TMPBINBAK /bin/busybox
141 $EXECPWR cp -a $TMPHASHBAK /var/lib/aegis/refhashlist
142 echo "End of roll-back"
146 # Uninstallation of the enhanced binary
148 if test $MODIFIEDBIN == 1; then
149 # /bin/busybox has been modified since installing busybox-power
150 # Leave both the file and the diversion in place
156 if test -e $DISTBIN; then
157 cp -af $DISTBIN /bin/busybox
158 if test -e /bin/busybox; then
160 elif test "$ENVIRONMENT" == "SDK"; then
161 # There was no /bin/busybox to begin with..
165 /usr/sbin/dpkg-divert --remove /bin/busybox
168 if ! test -e $DISTBIN; then return; fi
170 TMPHASHBAK=`$EXECPWR mktemp`
171 TMPBINBAK=`$EXECPWR mktemp`
172 ORIGINCHECK=`GETORIGINCHECK_STATUS`
174 # Useful information for Harmattan-based devices
175 ECHO_VERBOSE "refhashlist backup: $TMPHASHBAK"
176 ECHO_VERBOSE "busybox backup: $TMPBINBAK"
177 ECHO_VERBOSE "instbinary: $INSTBINARY_SHA1"
178 ECHO_VERBOSE "origbinary: $ORIGBINARY_SHA1"
179 ECHO_VERBOSE "device mode: $DEVICEMODE"
180 ECHO_VERBOSE "origincheck: $ORIGINCHECK"
182 if test $ORIGINCHECK -eq 1; then
183 SETORIGINCHECK_STATUS 0; fi
185 $EXECPWR cp -a /bin/busybox $TMPBINBAK || exit 1
186 $EXECPWR cp -a /var/lib/aegis/refhashlist $TMPHASHBAK || exit 1
187 $EXECPWR cp -af $DISTBIN /bin/busybox || ROLLBACK_HARMATTAN
188 $EXECPWR sed -i "s/$INSTBINARY_SHA1/$ORIGBINARY_SHA1/" /var/lib/aegis/refhashlist || ROLLBACK_HARMATTAN
189 /usr/bin/accli -c tcb-sign -F /var/lib/aegis/refhashlist < /var/lib/aegis/refhashlist || ROLLBACK_HARMATTAN
190 /usr/sbin/validator-init
192 if test $ORIGINCHECK -eq 1; then
193 SETORIGINCHECK_STATUS 1; fi
202 # Remove all symlinks that the installation script has made
204 # Load list of installed symlinks
205 touch $INSTALLDIR/busybox-power.symlinks
206 source $INSTALLDIR/busybox-power.symlinks
208 # Walk through all possible destinations
209 for DESTDIR in $DESTINATIONS; do
210 # Enable us to see all entries in $DESTINATIONS as variables
211 eval "APPLICATIONS=\$$DESTDIR"
212 # Set destination directory accordingly
228 ECHO_VERBOSE "\nRemoving symlinks in $DIR"
229 # Walk through all applications from the current destination
230 for APP in $APPLICATIONS; do
231 # The following code is executed for every application in the current
233 if test -h $DIR/$APP; then
234 # Good, this app is still a symbolic link ..
235 if test -n "`ls -l $DIR/$APP | grep busybox`"; then
236 ECHO_VERBOSE "Removing link: $DIR/$APP"
244 # Action to be performed after restoring original busybox
246 OLDFILES="busybox-power.symlinks
247 busybox.distrib.version
248 busybox.distrib.sha1"
250 for file in $OLDFILES; do
251 if test -e $INSTALLDIR/$file; then
256 # Clean up trap (from busybox-power <= 1.20.2power1)
257 # Should be removed by the old prerm, but may be left behind when that one
258 # fails and dpkg uses this one instead. Therefore, keep this cleanup
259 # included for a few busybox-power releases.
260 line="trap exit SIGHUP #by busybox-power"
261 if grep -F -q "$line" /etc/profile; then
262 sed "/$line/d" /etc/profile > /tmp/profile.sed
263 mv /tmp/profile.sed /etc/profile
268 ECHO_VERBOSE "busybox-power: verbose mode"
269 ECHO_VERBOSE " binary: $EXECPWR"
270 ECHO_VERBOSE " version string: `$EXECPWR | $EXECPWR head -n 1`"
271 CHECK_ENV && ECHO_VERBOSE " environment: $ENVIRONMENT"
274 if test "$ENVIRONMENT" != "SDK"; then
279 if test -e /tmp/busybox-power-error; then
280 # An error has occured during the checks