divert busybox binary to /opt/busybox-power/
[busybox-power] / debian / busybox-power.postinst
index 74a2edb..da84ce5 100644 (file)
 
 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