Add upgrade script for version 30005 55/209855/9
authorJunghyun Yeon <jungh.yeon@samsung.com>
Fri, 12 Jul 2019 02:11:32 +0000 (11:11 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Fri, 22 Nov 2019 08:32:47 +0000 (17:32 +0900)
This version will migrate shared/data directory

Change-Id: I51b58c573edf64d9d71a339f7c59ce3ff3de41e6
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
CMakeLists.txt
data/updates/upgrade_to_30005.sh.in [new file with mode: 0644]
packaging/pkgmgr-tool.spec

index f688adc..a9ab2a8 100644 (file)
@@ -92,3 +92,5 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30003.sh.in u
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30003.sh DESTINATION /etc/package-manager/updates/)
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30004.sh.in upgrade_to_30004.sh $ONLY)
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30004.sh DESTINATION /etc/package-manager/updates/)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30005.sh.in upgrade_to_30005.sh $ONLY)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30005.sh DESTINATION /etc/package-manager/updates/)
diff --git a/data/updates/upgrade_to_30005.sh.in b/data/updates/upgrade_to_30005.sh.in
new file mode 100644 (file)
index 0000000..6226536
--- /dev/null
@@ -0,0 +1,165 @@
+#!/bin/sh
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+source /etc/tizen-platform.conf
+
+PARSER_DB_NAME=.pkgmgr_parser.db
+CERT_DB_NAME=.pkgmgr_cert.db
+GLOBAL_PARSER_DB_PATH=$TZ_SYS_DB/$PARSER_DB_NAME
+GLOBAL_CERT_DB_PATH=$TZ_SYS_DB/$CERT_DB_NAME
+
+SKEL_PATH=$TZ_SYS_ETC/skel/apps_rw
+SHARED_DIR=.shared
+SHARED_TMP_DIR=.shared_tmp
+APPS_RW=apps_rw
+VER_30=3.0
+
+DB_RESULT_FILE=/tmp/result.log
+SHAREDDATA_PRIV=http://tizen.org/privilege/appdir.shareddata
+
+USER_HOME_LABEL=User::Home
+USER_APP_SHARED_LABEL=User::App::Shared
+
+function migrate_global_certdb() {
+       echo "PRAGMA user_version=30005;" | sqlite3 $GLOBAL_CERT_DB_PATH
+}
+
+function create_dir() {
+       local target_dir=$1
+       local label=$2
+
+       echo "#create_dir $target_dir with label $label"
+       mkdir $target_dir
+       chsmack -t -a $label $target_dir
+}
+
+function migrate_shared_dir() {
+       local package=$1
+
+       ls $TZ_SYS_HOME | while read USERNAME
+       do
+               echo "#create shared directory for package $package, for user $USERNAME"
+               create_dir $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_DIR/$package $USER_HOME_LABEL
+               chmod 755 $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_DIR/$package
+               chown $USERNAME:users $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_DIR/$package
+
+               create_dir $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_TMP_DIR/$package $USER_HOME_LABEL
+               chmod 755 $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_TMP_DIR/$package
+               chown $USERNAME:users $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_TMP_DIR/$package
+
+               mv $TZ_SYS_HOME/$USERNAME/$APPS_RW/$package/shared/data $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_DIR/$package/
+               chsmack -a $USER_APP_SHARED_LABEL $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_DIR/$package/data
+
+               cd $TZ_SYS_HOME/$USERNAME/$APPS_RW/$package/shared/
+               ln -s ../../$SHARED_DIR/$package/data data
+       done
+
+}
+
+function create_skel() {
+       local package=$1
+
+       echo "#create skel for package $1"
+
+       create_dir $SKEL_PATH/$SHARED_DIR/$package $USER_HOME_LABEL
+       chown root:users $SKEL_PATH/$SHARED_DIR/$package
+
+       create_dir $SKEL_PATH/$SHARED_TMP_DIR/$package $USER_HOME_LABEL
+       chown root:users $SKEL_PATH/$SHARED_TMP_DIR/$package
+
+       create_dir $SKEL_PATH/$SHARED_DIR/$package/data $USER_APP_SHARED_LABEL
+       chown root:system_share $SKEL_PATH/$SHARED_DIR/$package/data
+       chmod 4775 $SKEL_PATH/$SHARED_DIR/$package/data
+
+       cd $SKEL_PATH/$package/shared/
+       rmdir data
+       ln -s ../../$SHARED_DIR/$package/data data
+}
+
+function migrate_global_pkg_shareddata() {
+       # for each pkg in global db,
+       # check whether pkg has shareddata privilege or version is less than 3.0
+       echo "#migrate global pkg shareddata"
+       echo "SELECT DISTINCT pi.package from package_info AS pi LEFT OUTER JOIN package_privilege_info AS ppi ON pi.package=ppi.package
+                               WHERE pi.package_api_version < $VER_30 OR ppi.privilege='$SHAREDDATA_PRIV';" | sqlite3 $GLOBAL_PARSER_DB_PATH > $DB_RESULT_FILE
+       while read package
+       do
+               create_skel $package
+               migrate_shared_dir $package
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+       echo "PRAGMA user_version=30005;" | sqlite3 $GLOBAL_PARSER_DB_PATH
+}
+
+function migrate_skel_shared_dir() {
+       create_dir $SKEL_PATH/$SHARED_DIR $USER_HOME_LABEL
+       chmod 755 $SKEL_PATH/$SHARED_DIR
+
+       create_dir $SKEL_PATH/$SHARED_TMP_DIR $USER_HOME_LABEL
+       chmod 755 $SKEL_PATH/$SHARED_TMP_DIR
+}
+
+function create_user_shared_dir() {
+       echo "#create user shared dir"
+       ls $TZ_SYS_HOME | while read USERNAME
+       do
+               echo "#create shared directory for $USERNAME"
+               create_dir $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_DIR $USER_HOME_LABEL
+               chmod 755 $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_DIR
+               chown $USERNAME:users $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_DIR
+
+               create_dir $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_TMP_DIR $USER_HOME_LABEL
+               chmod 755 $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_TMP_DIR
+               chown $USERNAME:users $TZ_SYS_HOME/$USERNAME/$APPS_RW/$SHARED_TMP_DIR
+       done
+}
+
+function migrate_user_pkg() {
+       local pkg_path=$1
+       local package=$2
+
+       local prefix=`readlink -m "$pkg_path/../../../"`
+       local user_path=`readlink -m "$pkg_path/../../"`
+       local user_name=${user_path#$prefix/}
+
+       local root_shared_path=`readlink -m "$pkg_path/../"`
+       create_dir $root_shared_path/$SHARED_DIR/$package $USER_HOME_LABEL
+       chmod 755 $root_shared_path/$SHARED_DIR/$package
+       chown $user_name:users $root_shared_path/$SHARED_DIR/$package
+
+       mv $pkg_path/shared/data $root_shared_path/$SHARED_DIR/$package/
+       cd $pkg_path/shared/
+       ln -s ../../$SHARED_DIR/$package/data data
+
+       create_dir $root_shared_path/$SHARED_TMP_DIR/$package $USER_HOME_LABEL
+       chmod 755 $root_shared_path/$SHARED_TMP_DIR/$package
+       chown $user_name:users $root_shared_path/$SHARED_TMP_DIR/$package
+}
+
+function migrate_user_pkg_shareddata() {
+       echo "#migrate user pkg shareddata"
+       ls $TZ_SYS_DB/user | while read USERID
+       do
+               echo "SELECT DISTINCT pi.package from package_info AS pi LEFT OUTER JOIN package_privilege_info AS ppi ON pi.package=ppi.package
+                               WHERE pi.package_api_version < $VER_30 OR ppi.privilege='$SHAREDDATA_PRIV';" | sqlite3 $TZ_SYS_DB/user/$USERID/$PARSER_DB_NAME > $DB_RESULT_FILE
+               while read package
+               do
+                       local pkg_path=`sqlite3 $TZ_SYS_DB/user/$USERID/$PARSER_DB_NAME "SELECT root_path FROM package_info WHERE package=$package"`
+                       migrate_user_pkg $pkg_path $package
+               done < $DB_RESULT_FILE
+               rm -f $DB_RESULT_FILE
+
+               echo "PRAGMA user_version=30005;" | sqlite3 $TZ_SYS_DB/user/$USERID/$PARSER_DB_NAME
+       done
+}
+
+rm -f $DB_RESULT_FILE
+
+migrate_skel_shared_dir
+create_user_shared_dir
+
+migrate_global_pkg_shareddata
+
+migrate_user_pkg_shareddata
+
+migrate_global_certdb
index 2218e8e..ef9fe91 100644 (file)
@@ -76,6 +76,7 @@ update-mime-database %{_datadir}/mime
 %attr(0700,root,root) /etc/package-manager/updates/upgrade_to_30002.sh
 %attr(0700,root,root) /etc/package-manager/updates/upgrade_to_30003.sh
 %attr(0700,root,root) /etc/package-manager/updates/upgrade_to_30004.sh
+%attr(0700,root,root) /etc/package-manager/updates/upgrade_to_30005.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