X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=debian%2Fbusybox-power.postinst;h=da84ce5739f60791e90aa3f354c7daae6f442b5a;hb=ca0b38fb885ccd1da866d62733ec758890963438;hp=74a2edb5a6afccf2b3ba0a3374b2a13d5e25d658;hpb=0557868f58d1391c867d57aa1c0da6fad4562e4b;p=busybox-power diff --git a/debian/busybox-power.postinst b/debian/busybox-power.postinst index 74a2edb..da84ce5 100644 --- a/debian/busybox-power.postinst +++ b/debian/busybox-power.postinst @@ -15,9 +15,10 @@ INSTALLDIR="/opt/busybox-power" EXECPWR="$INSTALLDIR/busybox.power" -DISTBIN="/bin/busybox.distrib" +DISTBIN="$INSTALLDIR/busybox.distrib" VERBOSE="0" +SYMLINK="1" INSTBINARY_SHA1=`$EXECPWR sha1sum $EXECPWR | $EXECPWR awk '{ print $1 }'` ORIGBINARY_SHA1=`$EXECPWR sha1sum /bin/busybox | $EXECPWR awk '{ print $1 }'` @@ -36,9 +37,8 @@ CHECK_APPLETSFILE() { # Check whether symlinks have been made before CHECK_SYMLINKSFILE() { if test -e $INSTALLDIR/busybox-power.symlinks; then - echo "error: symlinks already seem to be made?" - echo " this script is not supposed to be ran twice" - exit 1 + ECHO_VERBOSE "symlinks are already made, skipping creation" + SYMLINK="0" fi } @@ -57,10 +57,56 @@ BACKUP() { fi } +# 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 +} + # Overwrite the installed binary with the enhanced binary +# dpkg-divert is disallowed on Harmattan, do not use it there! INSTALL() { - /usr/sbin/dpkg-divert --local --divert $DISTBIN /bin/busybox - $EXECPWR cp -f $EXECPWR /bin/busybox + case $ENVIRONMENT in + SDK|DIABLO|FREMANTLE) + # Divert in postinst instead of preinst, we don't want to leave Maemo + # without /bin/busybox for a short period of time + /usr/sbin/dpkg-divert --package busybox-power --add \ + --divert $DISTBIN /bin/busybox + $EXECPWR cp -f $EXECPWR /bin/busybox + ;; + HARMATTAN) + 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 $EXECPWR /bin/busybox || ROLLBACK_HARMATTAN + $EXECPWR sed -i "s/$ORIGBINARY_SHA1/$INSTBINARY_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 + + $EXECPWR rm $TMPBINBAK + $EXECPWR rm $TMPHASHBAK + ;; + esac } # Create missing symlinks to the enhanced binary @@ -132,12 +178,14 @@ ECHO_VERBOSE " binary: $EXECPWR" ECHO_VERBOSE " version string: `$EXECPWR | $EXECPWR head -n 1`" CHECK_ENV && ECHO_VERBOSE " environment: $ENVIRONMENT" -CHECK_STANDALONE CHECK_APPLETSFILE CHECK_SYMLINKSFILE if test "$ENVIRONMENT" != "SDK"; then - CHECK_ROOT; fi + CHECK_ROOT +fi BACKUP INSTALL -SYMLINK +if test $SYMLINK == 1; then + SYMLINK +fi