Implement app2sd migration script 20/108220/4 accepted/tizen/3.0/common/20170109.083953 accepted/tizen/3.0/ivi/20170106.095023 accepted/tizen/3.0/mobile/20170106.094843 accepted/tizen/3.0/tv/20170106.094923 accepted/tizen/3.0/wearable/20170106.094950 submit/tizen_3.0/20170105.051635
authorJunghyun Yeon <jungh.yeon@samsung.com>
Tue, 3 Jan 2017 10:54:52 +0000 (19:54 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Wed, 4 Jan 2017 09:31:26 +0000 (01:31 -0800)
Change-Id: If5d4838d515c392abc97d9097c6a71cfb27a76e3
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
CMakeLists.txt
data/701.app2sd.patch.sh.in [new file with mode: 0644]
packaging/pkgmgr-tool.spec

index 78edcbe309b0c9b05861cabd6e351793dfd0f15f..2895d64b26b95944c6dc0b7aa9235393b1b11fff 100644 (file)
@@ -79,3 +79,5 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/pkgmgr-clear-skel.sh.in pkgmgr-c
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkgmgr-clear-skel.sh DESTINATION /usr/share/fixed_multiuser/scripts/)
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/700.pkgmgr.patch.sh.in 700.pkgmgr.patch.sh @ONLY)
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/700.pkgmgr.patch.sh DESTINATION /usr/share/upgrade/scripts/)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/701.app2sd.patch.sh.in 701.app2sd.patch.sh @ONLY)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/701.app2sd.patch.sh DESTINATION /usr/share/upgrade/scripts/)
diff --git a/data/701.app2sd.patch.sh.in b/data/701.app2sd.patch.sh.in
new file mode 100644 (file)
index 0000000..4c1b948
--- /dev/null
@@ -0,0 +1,106 @@
+#!/bin/sh
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+source /etc/tizen-platform.conf
+DEFAULT_USER=$TZ_SYS_DEFAULT_USER
+
+APP2SD_DB_NAME=.app2sd.db
+APP2SD_DB_PATH=$TZ_SYS_DB/$APP2SD_DB_NAME
+DB_RESULT_FILE=/tmp/result.log
+OPT_MEDIA=$TZ_SYS_MEDIA
+
+TMP_MOUNTPOINT=/tmp/mountpoint
+MAP_DEVICE_PATH=/dev/mapper
+
+SMACK_PREFIX=User::Pkg::
+SMACK_POSTFIX=::RO
+
+function create_table(){
+       echo "CREATE TABLE IF NOT EXISTS app2sd_info (pkgid TEXT NOT NULL, password TEXT NOT NULL, filename TEXT NOT NULL, uid INTEGER, PRIMARY KEY(pkgid, uid));" |
+       sqlite3 $APP2SD_DB_PATH > $DB_RESULT_FILE
+}
+
+function drop_old_table(){
+       echo "DROP TABLE app2sd;" |
+       sqlite3 $APP2SD_DB_PATH > $DB_RESULT_FILE
+}
+
+function migrate_db_data(){
+       local userid=`id -u $DEFAULT_USER`
+       echo "INSERT INTO app2sd_info(pkgid, password, filename, uid) SELECT pkgid, password, '', '$userid' from app2sd;" |
+       sqlite3 $APP2SD_DB_PATH > $DB_RESULT_FILE
+}
+
+function change_label() {
+       local label=$1
+       local path=$2
+       chsmack -r -a $1 $2
+}
+
+function change_db_label() {
+       change_label System $APP2SD_DB_PATH
+}
+
+function migrate_file() {
+       local filename=$1
+       local filepath=$2
+       local cryptsetup=`/sbin/cryptsetup isLuks /opt/media/SDCardA1/app2sd/$filename;echo $?;`
+       local passwd=`echo "SELECT password from app2sd_info where pkgid='$1';" | sqlite3 $APP2SD_DB_PATH`
+
+       if [ $cryptsetup = 1 ]
+       then
+               /bin/echo $passwd | /sbin/cryptsetup -M plain -c aes-cbc-plain -h plain open /opt/media/SDCardA1/app2sd/$filename $filename
+               mkdir $TMP_MOUNTPOINT
+               mount $MAP_DEVICE_PATH/$filename $TMP_MOUNTPOINT
+
+               change_label $SMACK_PREFIX$filename$SMACK_POSTFIX $TMP_MOUNTPOINT/bin
+               change_label $SMACK_PREFIX$filename$SMACK_POSTFIX $TMP_MOUNTPOINT/lib
+               change_label $SMACK_PREFIX$filename$SMACK_POSTFIX $TMP_MOUNTPOINT/res
+               change_label $SMACK_PREFIX$filename$SMACK_POSTFIX $TMP_MOUNTPOINT/lost+found
+
+               umount $MAP_DEVICE_PATH/$filename
+               /sbin/cryptsetup luksClose $MAP_DEVICE_PATH/$filename
+       fi
+}
+
+function migrate_app2sd_file() {
+       #for each folder in /opt/media/
+       for FOLDER1 in `ls $OPT_MEDIA`
+       do
+               #skip it if it is not directory
+               if [ ! -d $OPT_MEDIA/$FOLDER1 ]
+               then
+                       continue
+               fi
+
+               for FOLDER2 in `ls $OPT_MEDIA/$FOLDER1`
+               do
+                       #if its name is not app2sd, skip
+                       if [ $FOLDER2 != 'app2sd' ]
+                       then
+                               continue
+                       fi
+
+                       for APP2SD_FILE in `ls $OPT_MEDIA/$FOLDER1/$FOLDER2`
+                       do
+                               #if it is not file, skip it
+                               if [ -d $OPT_MEDIA/$FOLDER1/$FODLER2/$APP2SD_FILE ]
+                               then
+                                       continue
+                               fi
+
+                               #call functions to check
+                               echo "migrate : $APP2SD_FILE $OPT_MEDIA/$FOLDER1/$FOLDER2"
+                               migrate_file $APP2SD_FILE $OPT_MEDIA/$FOLDER1/$FOLDER2
+                       done
+               done
+       done
+}
+
+#invoke functions
+echo "APP2SD migration"
+create_table
+migrate_db_data
+drop_old_table
+change_db_label
+migrate_app2sd_file
index 3d8fcedb915ea9322f1b3796a88c85a215c081a8..6e6582457bba8bca0285843ca08e32d79707093a 100644 (file)
@@ -88,6 +88,7 @@ fi
 %attr(0700,root,root) /etc/package-manager/pkgmgr-unzip-pkg.sh
 %attr(0700,root,root) /etc/package-manager/pkgmgr-create-delta.sh
 %attr(0700,root,root) /usr/share/upgrade/scripts/700.pkgmgr.patch.sh
+%attr(0700,root,root) /usr/share/upgrade/scripts/701.app2sd.patch.sh
 %attr(0700,root,root) %{_sysconfdir}/opt/upgrade/pkgmgr.patch.sh
 %attr(0700,root,root) /usr/share/fixed_multiuser/scripts/pkgmgr-clear-skel.sh
 /usr/share/license/%{name}