X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=debian%2Fbusybox-power.prerm;h=a0d4ea18e79dea8733927588e208f30a1edd8554;hb=a0c5fb1815310c6b931164d37db84e9efe9c5aa1;hp=e7314d599864518b40b464bfc767e4e28dcd1a0c;hpb=f401fb3a2c91b74e43c214667750941ae95e89be;p=busybox-power diff --git a/debian/busybox-power.prerm b/debian/busybox-power.prerm index e7314d5..a0d4ea1 100644 --- a/debian/busybox-power.prerm +++ b/debian/busybox-power.prerm @@ -50,17 +50,17 @@ CHECK_BACKUP() { if test "`cat $INSTALLDIR/busybox.distrib.version`" == "`GETBBVERSION`"; then # The backup has been changed whilst busybox hasn't been upgraded echo -e "Warning: the backup of the original BusyBox binary has" \ - "been modified since installing busybox-power (invalid SHA1" \ - "checksum). Do not continue unless you're sure that $DISTBIN" \ - "is not corrupted.\n" >> /tmp/busybox-power-error + "been modified since installing busybox-power. Do not continue" \ + "unless you're sure that $DISTBIN is not corrupted.\n" \ + >> /tmp/busybox-power-error fi else echo -e "Warning: the backup of the original BusyBox binary has" \ - "been modified since installing busybox-power (invalid SHA1" \ - "checksum). We could not determine whether this is due to a BusyBox" \ - "upgrade (e.g. by an (C)SSU update) or not. Do not continue unless" \ - "either the latter is the case, or you're via other ways sure that" \ - "$DISTBIN is not corrupted.\n" >> /tmp/busybox-power-error + "been modified since installing busybox-power. We could not" \ + "determine whether this is due to a BusyBox upgrade (e.g. by an" \ + "(C)SSU update) or not. Do not continue unless either the latter is" \ + "the case, or you're via other ways sure that $DISTBIN is not" \ + "corrupted.\n" >> /tmp/busybox-power-error fi fi else @@ -71,13 +71,32 @@ CHECK_BACKUP() { } # Check whether /bin/busybox has been modified after bb-power's installation +# This always happens on Harmattan when it receives a BusyBox upgrade; +# dpkg-divert is disallowed on that platform CHECK_INSTALLEDBIN() { if test "$INSTBINARY_SHA1" != "`sha1sum /bin/busybox | awk '{ print $1 }'`"; then - echo -e "Warning: /bin/busybox has been modified since installing" \ - "busybox-power (invalid SHA1 checksum). Your current /bin/busybox" \ - "won't be touched and the diversion of /bin/busybox to $DISTBIN will" \ - "not be removed. \n" >> /tmp/busybox-power-error MODIFIEDBIN="1" + + if test "$ENVIRONMENT" == "HARMATTAN"; then + if test -e $INSTALLDIR/busybox.distrib.version; then + if test "`cat $INSTALLDIR/busybox.distrib.version`" != "`GETBBVERSION`"; then + # Harmattan received a BusyBox upgrade, do not disturb the user by + # warning that /bin/busybox has been modified + return + fi + fi + echo -e "Warning: /bin/busybox does not match busybox-power's binary" \ + "This can be the result of a BusyBox upgrade (e.g. by a MeeGo" \ + "update), an unsuccessful busybox-power installation, or a manual" \ + "replacement of it. Your current /bin/busybox won't be touched. Our" \ + "backup of the original BusyBox binary will be left at $DISTBIN.\n" \ + >> /tmp/busybox-power-error + else + echo -e "Warning: /bin/busybox does not match busybox-power's binary." \ + "Your current /bin/busybox won't be touched and the diversion of" \ + "/bin/busybox to $DISTBIN will not be removed.\n" \ + >> /tmp/busybox-power-error + fi fi } @@ -92,7 +111,7 @@ DISPLAY_ERRORS() { echo " Hit [ctrl-c] to break" read ;; - FREMANTLE) + DIABLO|FREMANTLE) echo "Click \"I Agree\" to ignore the above errors/warnings. Ask for" \ "help if you don't know what to do." >> /tmp/busybox-power-error echo "Please confirm the text on the screen of your device" @@ -101,25 +120,84 @@ DISPLAY_ERRORS() { rm /tmp/busybox-power-error if test ! $res == 0; then exit 1; fi ;; + HARMATTAN) + echo "Click \"I Agree\" to ignore the above errors/warnings. Ask for" \ + "help if you don't know what to do." >> /tmp/busybox-power-error + echo "Please confirm the text on the screen of your device" + # We're too privileged to call meego-confirm-text... + # Our source is com.nokia.maemo, whilst m-c-t is from an unknown source + /usr/bin/aegis-exec meego-confirm-text "Attention!" \ + /tmp/busybox-power-error > /dev/null 2>&1 + res=$? + rm /tmp/busybox-power-error + if test ! $res == 0; then exit 1; fi + ;; esac } +# Rollback procedure for Harmattan based devices +ROLLBACK_HARMATTAN() { + echo -e "\nWarning: an error has occured! Rolling back..." + $EXECPWR cp -af $TMPBINBAK /bin/busybox + $EXECPWR cp -a $TMPHASHBAK /var/lib/aegis/refhashlist + echo "End of roll-back" + exit 1 +} + # Uninstallation of the enhanced binary UNINSTALL() { if test $MODIFIEDBIN == 1; then # /bin/busybox has been modified since installing busybox-power # Leave both the file and the diversion in place return - elif test -e $DISTBIN; then - cp -af $DISTBIN /bin/busybox - if test -e /bin/busybox; then - rm $DISTBIN; fi - elif test "$ENVIRONMENT" == "SDK"; then - # There was no /bin/busybox to begin with.. - rm /bin/busybox fi - /usr/sbin/dpkg-divert --remove /bin/busybox + case $ENVIRONMENT in + SDK|DIABLO|FREMANTLE) + if test -e $DISTBIN; then + cp -af $DISTBIN /bin/busybox + if test -e /bin/busybox; then + rm $DISTBIN; fi + elif test "$ENVIRONMENT" == "SDK"; then + # There was no /bin/busybox to begin with.. + rm /bin/busybox + fi + + /usr/sbin/dpkg-divert --remove /bin/busybox + ;; + HARMATTAN) + if ! test -e $DISTBIN; then return; fi + + TMPHASHBAK=`$EXECPWR mktemp` + TMPBINBAK=`$EXECPWR mktemp` + ORIGINCHECK=`GETORIGINCHECK_STATUS` + + # Useful information for Harmattan-based devices + ECHO_VERBOSE "refhashlist backup: $TMPHASHBAK" + ECHO_VERBOSE "busybox backup: $TMPBINBAK" + ECHO_VERBOSE "instbinary: $INSTBINARY_SHA1" + ECHO_VERBOSE "origbinary: $ORIGBINARY_SHA1" + ECHO_VERBOSE "device mode: $DEVICEMODE" + ECHO_VERBOSE "origincheck: $ORIGINCHECK" + + if test $ORIGINCHECK -eq 1; then + SETORIGINCHECK_STATUS 0; fi + + $EXECPWR cp -a /bin/busybox $TMPBINBAK || exit 1 + $EXECPWR cp -a /var/lib/aegis/refhashlist $TMPHASHBAK || exit 1 + $EXECPWR cp -af $DISTBIN /bin/busybox || ROLLBACK_HARMATTAN + $EXECPWR sed -i "s/$INSTBINARY_SHA1/$ORIGBINARY_SHA1/" /var/lib/aegis/refhashlist || ROLLBACK_HARMATTAN + /usr/bin/accli -c tcb-sign -F /var/lib/aegis/refhashlist < /var/lib/aegis/refhashlist || ROLLBACK_HARMATTAN + /usr/sbin/validator-init + + if test $ORIGINCHECK -eq 1; then + SETORIGINCHECK_STATUS 1; fi + + rm $TMPBINBAK + rm $TMPHASHBAK + rm $DISTBIN + ;; + esac } # Remove all symlinks that the installation script has made