From cc87e4c8edd4d8f76dac051c05e3ccb7c5a97f80 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Fri, 12 Jul 2019 11:11:32 +0900 Subject: [PATCH] Add upgrade script for version 30005 This version will migrate shared/data directory Change-Id: I51b58c573edf64d9d71a339f7c59ce3ff3de41e6 Signed-off-by: Junghyun Yeon --- CMakeLists.txt | 2 + data/updates/upgrade_to_30005.sh.in | 165 ++++++++++++++++++++++++++++ packaging/pkgmgr-tool.spec | 1 + 3 files changed, 168 insertions(+) create mode 100644 data/updates/upgrade_to_30005.sh.in diff --git a/CMakeLists.txt b/CMakeLists.txt index f688adc..a9ab2a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 index 0000000..6226536 --- /dev/null +++ b/data/updates/upgrade_to_30005.sh.in @@ -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 diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index 2218e8e..ef9fe91 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -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 -- 2.34.1