From b17d490ea5b61ed935db52a280ec110886428fc9 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Tue, 3 Jan 2017 19:54:52 +0900 Subject: [PATCH] Implement app2sd migration script Change-Id: If5d4838d515c392abc97d9097c6a71cfb27a76e3 Signed-off-by: Junghyun Yeon --- CMakeLists.txt | 2 + data/701.app2sd.patch.sh.in | 106 ++++++++++++++++++++++++++++++++++++++++++++ packaging/pkgmgr-tool.spec | 1 + 3 files changed, 109 insertions(+) create mode 100644 data/701.app2sd.patch.sh.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 78edcbe..2895d64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 index 0000000..4c1b948 --- /dev/null +++ b/data/701.app2sd.patch.sh.in @@ -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 diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index 3d8fced..6e65824 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -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} -- 2.7.4