Fix upgrade script 33/144633/7
authorJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 17 Aug 2017 09:12:07 +0000 (18:12 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Wed, 30 Aug 2017 08:34:29 +0000 (17:34 +0900)
- Add updates directory to store actual upgrade script
- Previous upgrade scripts will determine current version and target version
  and execute proper upgrade script by right order
- Add codes for certificate migration to get dist root to determine privilege level
  because signature file has removed in previous platform for security purpose.
- Certificate values now will be inserted into cert db directly.
- Fix to not to remove shared/data and shared/cache

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

index f663436..9e507f8 100644 (file)
@@ -80,3 +80,7 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/700.pkgmgr.patch.sh.in 700.pkgmg
 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/)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30000.sh.in upgrade_to_30000.sh $ONLY)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30000.sh DESTINATION /etc/package-manager/updates/)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30001.sh.in upgrade_to_30001.sh $ONLY)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30001.sh DESTINATION /etc/package-manager/updates/)
index 7bf1c09..08eeb28 100644 (file)
 #!/bin/sh
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
 
 source /etc/tizen-platform.conf
 
 PARSER_DB_NAME=.pkgmgr_parser.db
-PARSER_BACKUP_DB_NAME=.pkgmgr_parser_backup.db
 PARSER_DB_PATH=$TZ_SYS_DB/$PARSER_DB_NAME
-PARSER_BACKUP_DB_PATH=$TZ_SYS_DB/$PARSER_BACKUP_DB_NAME
-DB_RESULT_FILE=/tmp/result.log
-
-OPT_USR_APPS=/opt/usr/apps
-
-#define owner user
-DEFAULT_USER=$TZ_SYS_DEFAULT_USER
-
-#define /opt/usr/home/owner
-DEFAULT_USER_HOME=$TZ_SYS_HOME/$DEFAULT_USER
-
-#define /opt/usr/home/owner/apps_rw
-DEFAULT_USER_APPS_RW=$DEFAULT_USER_HOME/apps_rw
-
-#define /opt/share/packages
-DEFAULT_PKG_MANIFEST_LOCATION=$TZ_SYS_RW_PACKAGES
-
-#define /opt/usr/globalapps
-DEFAULT_PKG_APP_LOCATION=$TZ_SYS_RW_APP
-
-
-DEFAULT_RO_OWNER_GROUP=tizenglobalapp:root
-DEFAULT_MANIFEST_SMACK_LABEL=System
-
-DEFAULT_RW_OWNER_GROUP=owner:users
-DEFAULT_RW_SMACK_LABEL=User::Pkg::
-DEFAULT_RO_SMACK_LABEL=User::Home
-
-TIZEN_MANIFEST=tizen-manifest.xml
-
-OWNER_SYSTEM_SHARE=owner:system_share
-TRUSTED_LABEL=User::Author::1
-
-RESTRICTION_DBPATH=/var/lib/package-manager
-RESTRICTION_DBNAME=restriction.db
-#----------------------------------
-# upgrade script for pkgmgr
-#----------------------------------
-
-function backup_db(){
-       echo "#backup previous DB"
-       mv $PARSER_DB_PATH $PARSER_BACKUP_DB_PATH
-}
-
-function create_restriction_db(){
-       echo "#create restriction db"
-       local restriction_db=$RESTRICTION_DBPATH/$RESTRICTION_DBNAME
-       mkdir -p $RESTRICTION_DBPATH
-       echo "PRAGMA journal_mode=WAL;
-               CREATE TABLE restriction (uid INTEGER NOT NULL, pkgid TEXT NOT NULL, mode INTEGER NOT NULL, UNIQUE(uid, pkgid));" |
-       sqlite3 $restriction_db
-}
-
-function remove_modified_manifest(){
-       echo "#remove modified manifest"
-       rm -rf $DEFAULT_PKG_MANIFEST_LOCATION/*
-}
-
-function remove_unregistered_pkg(){
-       #remove pkg folder which is not registered at pkg db
-       ls $OPT_USR_APPS/ | while read FOLDER
-       do
-               result=$(sqlite3 $PARSER_BACKUP_DB_PATH "SELECT COUNT(*) FROM package_info WHERE package='$FOLDER';")
-               if [ $result != "1" ]
-               then
-                       echo "delete unregistered package directory $OPT_USR_APPS/$FOLDER"
-                       rm -r $OPT_USR_APPS/$FOLDER
-               fi
-       done
-}
-
-function move_user_tpk_ro_files(){
-       #this copy will copy whole things include userdata
-       local package=$1
-       cp -af $OPT_USR_APPS/$package $DEFAULT_PKG_APP_LOCATION/
-       chown -R $DEFAULT_RO_OWNER_GROUP $DEFAULT_PKG_APP_LOCATION/$package
-       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/bin
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/lib
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/res
-       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package/shared
-
-}
-
-function move_user_tpk_rw_files(){
-       local package=$1
-       mkdir -m 751 $DEFAULT_USER_APPS_RW/$package
-       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
-       mkdir $DEFAULT_USER_APPS_RW/$package/shared
-       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
-
-       mv $DEFAULT_PKG_APP_LOCATION/$package/cache $DEFAULT_USER_APPS_RW/$package/
-       mv $DEFAULT_PKG_APP_LOCATION/$package/data $DEFAULT_USER_APPS_RW/$package/
-       chmod g+s $DEFAULT_USER_APPS_RW/$package/data
-       chmod 771 $DEFAULT_USER_APPS_RW/$package/data
-       mv $DEFAULT_PKG_APP_LOCATION/$package/shared/data $DEFAULT_USER_APPS_RW/$package/shared/
-       mv $DEFAULT_PKG_APP_LOCATION/$package/shared/trusted $DEFAULT_USER_APPS_RW/$package/shared/
-
-       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/cache
-       chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
-       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/shared
-       chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/shared/data
-
-       chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::SharedRO $DEFAULT_USER_APPS_RW/$package/shared/data
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
-
-       #remove shared/cache
-       echo "deleting $DEFAULT_PKG_APP_LOCATION/$package/shared/cache"
-       rm -rf $DEFAULT_PKG_APP_LOCATION/$package/shared/cache
-}
-
-function copy_user_tpk_manifest(){
-       local package=$1
-       cp $DEFAULT_PKG_APP_LOCATION/$1/$TIZEN_MANIFEST $DEFAULT_PKG_MANIFEST_LOCATION/$package.xml
-}
-
-function move_user_tpk_files(){
-       echo "#move user TPK's files"
-       echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type='tpk' COLLATE NOCASE;" |
-       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "processing user tpk $package..."
-               move_user_tpk_ro_files $package
-               move_user_tpk_rw_files $package
-               copy_user_tpk_manifest $package
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function move_user_wgt_ro_files(){
-       #this copy will copy whole things include userdata
-       local package=$1
-       cp -af --no-preserve=ownership $OPT_USR_APPS/$package $DEFAULT_PKG_APP_LOCATION/
-       chown -R $DEFAULT_RO_OWNER_GROUP $DEFAULT_PKG_APP_LOCATION/$package
-       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/bin
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/res
-       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package/shared
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_PKG_APP_LOCATION/$package/tmp
-}
-
-function move_user_wgt_rw_files(){
-       local package=$1
-       mkdir -m 751 $DEFAULT_USER_APPS_RW/$package
-       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
-
-       mkdir -m 751 $DEFAULT_USER_APPS_RW/$package/shared
-       mkdir -m 751 $DEFAULT_USER_APPS_RW/$package/cache
-
-       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
-
-       mv $DEFAULT_PKG_APP_LOCATION/$package/data $DEFAULT_USER_APPS_RW/$package/
-       mv $DEFAULT_PKG_APP_LOCATION/$package/shared/data $DEFAULT_USER_APPS_RW/$package/shared/
-       mv $DEFAULT_PKG_APP_LOCATION/$package/shared/trusted $DEFAULT_USER_APPS_RW/$package/shared/
-       chmod 751 $DEFAULT_USER_APPS_RW/$package/shared/trusted
-       chmod g+s $DEFAULT_USER_APPS_RW/$package/data
-       chmod 771 $DEFAULT_USER_APPS_RW/$package/data
-
-       chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
-       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/shared
-       chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/shared/data
-
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
-       chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
-       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::SharedRO $DEFAULT_USER_APPS_RW/$package/shared/data
-}
-
-
-function move_user_wgt_files(){
-       echo "#move user WGT's files"
-       echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type='wgt' COLLATE NOCASE;" |
-       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "processing user wgt $package..."
-               move_user_wgt_ro_files $package
-               move_user_wgt_rw_files $package
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-
-}
-
-function remove_previous_files(){
-       echo "#remove files from previous location"
-       echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE;" |
-       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
-       
-       while read package
-       do
-               rm -rf $OPT_USR_APPS/$package
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function initdb(){
-       echo "#pkg_initdb"
-       pkg_initdb --ro --partial-rw
-
-       mkdir -m 770 -p /opt/dbspace/user/5001
-       chmod 755 /opt/dbspace/user
-       chsmack -r -a User::Home /opt/dbspace/user
-       chown $OWNER_SYSTEM_SHARE /opt/dbspace/user/5001
-
-       pkg_initdb --uid 5001
-}
-
-function remove_files_for_deleted_packages(){
-       #delete userdata of packages which are removed in 3.0
-       echo "#delete userdata of removed packages"
-       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
-           SELECT package FROM backup.package_info WHERE package_readonly='true' COLLATE NOCASE AND
-           package NOT IN (SELECT package FROM package_info);" |
-       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "rm -r $OPT_USR_APPS/$package"
-               rm -r $OPT_USR_APPS/$package
-               done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function move_preload_pkg_userdata(){
-       echo "#move preload pkg's userdata"
-       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
-           SELECT package FROM backup.package_info WHERE package_readonly='true' COLLATE NOCASE AND
-           package IN (SELECT package FROM package_info);" |
-       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
-       while read package
-       do
-               echo "processing preload pkg $package..."
-               cp -af $OPT_USR_APPS/$package $DEFAULT_USER_APPS_RW/
-               chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
-               chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
-               chmod g+s $DEFAULT_USER_APPS_RW/$package/data
-               chmod 771 $DEFAULT_USER_APPS_RW/$package/data
-               rm -rf $OPT_USR_APPS/$package
-
-               rm -rf $DEFAULT_USER_APPS_RW/$package/shared/cache
-               rm -rf $DEFAULT_USER_APPS_RW/$package/shared/data
-
-               chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
-               chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
-               chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
-               if [ -d $DEFAULT_USER_APPS_RW/$package/shared/trusted ];
-               then
-                       chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
-               fi
-
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function disable_preload_pkg(){
-       echo "#disable preload rpm, tpk pkg"
-       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
-           SELECT package FROM backup.package_info WHERE package_readonly='true' COLLATE NOCASE AND package_type!='wgt' COLLATE NOCASE AND package_disable='true' COLLATE NOCASE AND
-           package IN (SELECT package FROM package_info);" |
-       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "disable preload pkg $package..."
-               tpk-backend -D $package --preload
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-
-       echo "#disable preload wgt pkg"
-       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
-           SELECT package FROM backup.package_info WHERE package_readonly='true' COLLATE NOCASE AND package_type='wgt' COLLATE NOCASE AND package_disable='true' COLLATE NOCASE AND
-           package IN (SELECT package FROM package_info);" |
-       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "disable preload wgt $package..."
-               wgt-backend -D $package --preload
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function disable_user_pkg(){
-       echo "#disable user pkg"
-       echo ".separator \" \"
-           ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
-           SELECT package, package_type FROM backup.package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type !='rpm' COLLATE NOCASE AND package_disable='true' COLLATE NOCASE AND
-           package IN (SELECT package FROM package_info);" |
-       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
-
-       while read package type
-       do
-               echo "disable user pkg $package..."
-               echo "$type-backend -D $package"
-               $type-backend -D $package
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function remove_backup_db(){
-       rm $PARSER_BACKUP_DB_PATH
-}
-
-function init_user_tpk_preload_rw_packages() {
-       echo "#init tpk preload rw packages"
-       echo ".separator \" \"
-           SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_preload='true' COLLATE NOCASE AND package_type='tpk';" |
-       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "init tpk preload rw package $package..."
-               tpk-backend -y $package --preload-rw
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function init_user_wgt_preload_rw_packages() {
-       echo "#init wgt preload rw packages"
-       echo ".separator \" \"
-           SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_preload='true' COLLATE NOCASE AND package_type='wgt';" |
-       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "init wgt preload rw package $package..."
-               wgt-backend -y $package --preload-rw
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function init_user_tpk_packages() {
-       echo "#init user tpk packages"
-       echo ".separator \" \"
-           SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_preload='false' COLLATE NOCASE AND package_type='tpk';" |
-       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "init user tpk package $package..."
-               tpk-backend -y $package
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function init_user_wgt_packages(){
-       echo "#init user wgt packages"
-       echo ".separator \" \"
-           SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type='wgt';" |
-       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
-
-       while read package
-       do
-               echo "init user wgt package $package..."
-               wgt-backend -y $package
-       done < $DB_RESULT_FILE
-       rm -f $DB_RESULT_FILE
-}
-
-function migrate_external_info(){
-       echo "#migrate external storage info"
-       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
-               UPDATE package_info set installed_storage='installed_external' WHERE package IN (SELECT package FROM backup.package_info WHERE installed_storage='installed_external' COLLATE NOCASE);" |
-       sqlite3 $PARSER_DB_PATH
-}
-
-backup_db
-
-create_restriction_db
-
-remove_modified_manifest
-remove_unregistered_pkg
-
-move_user_tpk_files
-move_user_wgt_files
-remove_previous_files
-
-initdb
-init_user_tpk_packages
-init_user_tpk_preload_rw_packages
-init_user_wgt_packages
-init_user_wgt_preload_rw_packages
-
-remove_files_for_deleted_packages
-move_preload_pkg_userdata
-
-disable_preload_pkg
-disable_user_pkg
-migrate_external_info
-
-remove_backup_db
+DB_VERSION_FILE_PATH="/etc/package-manager/pkg_db_version.txt"
+DB_VERSION_OLD="`\"sqlite3\" \"$PARSER_DB_PATH\" 'PRAGMA user_version;'`"
+DB_VERSION_QUERY="`grep 'PRAGMA user_version' $DB_VERSION_FILE_PATH`"
+DB_VERSION_TARGET="`echo \"$DB_VERSION_QUERY\" | sed -r 's/.* ([0-9]+).*/\1/'`"
+DB_VERSION_TIZEN24=1
+DB_VERSION_TIZEN30_DEFAULT=30000
+UPDATE_SCRIPT_LOCATION="/etc/package-manager/updates/"
+UPDATE_SCRIPT_PREFIX="upgrade_to_"
+
+#execute script from DB_VERSION_OLD to DB_VERSION_OLD+1 until DB_VERSION_OLD+1 reaches DB_VERSION_TARGET
+
+[ $DB_VERSION_OLD -eq $DB_VERSION_NEW ] && echo "Database is already up to date." && exit
+[ $DB_VERSION_OLD -gt $DB_VERSION_NEW ] && echo "Downgrading is not supported." && exit
+
+echo "Current version: $DB_VERSION_OLD, target version: $DB_VERSION_TARGET"
+
+#if old version is less than 1, upgrade to 30000, default version of tizen_3.0
+if [ $DB_VERSION_OLD -le $DB_VERSION_TIZEN24 ]; then
+       echo "Updating $PARSER_DB_PATH to $DB_VERSION_TIZEN30_DEFAULT"
+       exec "$UPDATE_SCRIPT_LOCATION/$UPDATE_SCRIPT_PREFIX$DB_VERSION_TIZEN30_DEFAULT.sh"
+       DB_VERSION_OLD=30000
+fi
+
+for i in `seq $((DB_VERSION_OLD+1)) $DB_VERSION_TARGET`
+do
+    echo "Updating $PARSER_DB_PATH to $i (target version is $DB_VERSION_TARGET)"
+    UPDATE_SCRIPT="$UPDATE_SCRIPT_LOCATION/$UPDATE_SCRIPT_PREFIX$i.sh"
+    [ ! -e "$UPDATE_SCRIPT" ] && echo "Can't find script $UPDATE_SCRIPT" && exit 1
+    exec $UPDATE_SCRIPT
+done
diff --git a/data/updates/upgrade_to_30000.sh.in b/data/updates/upgrade_to_30000.sh.in
new file mode 100644 (file)
index 0000000..f62ca77
--- /dev/null
@@ -0,0 +1,540 @@
+#!/bin/sh
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+source /etc/tizen-platform.conf
+
+CERT_DB_NAME=.pkgmgr_cert.db
+CERT_BACKUP_DB_NAME=.pkgmgr_cert_backup.db
+CERT_BACKUP_DB_PATH=$TZ_SYS_DB/$CERT_BACKUP_DB_NAME
+CERT_DB_PATH=$TZ_SYS_DB/$CERT_DB_NAME
+CERT_TEMP_FILEPATH=/tmp
+
+PARSER_DB_NAME=.pkgmgr_parser.db
+PARSER_BACKUP_DB_NAME=.pkgmgr_parser_backup.db
+PARSER_DB_PATH=$TZ_SYS_DB/$PARSER_DB_NAME
+PARSER_BACKUP_DB_PATH=$TZ_SYS_DB/$PARSER_BACKUP_DB_NAME
+DB_RESULT_FILE=/tmp/result.log
+
+OPT_USR_APPS=/opt/usr/apps
+
+#define owner user
+DEFAULT_USER=$TZ_SYS_DEFAULT_USER
+
+#define /opt/usr/home/owner
+DEFAULT_USER_HOME=$TZ_SYS_HOME/$DEFAULT_USER
+
+#define /opt/usr/home/owner/apps_rw
+DEFAULT_USER_APPS_RW=$DEFAULT_USER_HOME/apps_rw
+
+#define /opt/share/packages
+DEFAULT_PKG_MANIFEST_LOCATION=$TZ_SYS_RW_PACKAGES
+
+#define /opt/usr/globalapps
+DEFAULT_PKG_APP_LOCATION=$TZ_SYS_RW_APP
+
+
+DEFAULT_RO_OWNER_GROUP=tizenglobalapp:root
+DEFAULT_MANIFEST_SMACK_LABEL=System
+
+DEFAULT_RW_OWNER_GROUP=owner:users
+DEFAULT_RW_SMACK_LABEL=User::Pkg::
+DEFAULT_RO_SMACK_LABEL=User::Home
+
+TIZEN_MANIFEST=tizen-manifest.xml
+
+OWNER_SYSTEM_SHARE=owner:system_share
+TRUSTED_LABEL=User::Author::1
+
+RESTRICTION_DBPATH=/var/lib/package-manager
+RESTRICTION_DBNAME=restriction.db
+#----------------------------------
+# upgrade script for pkgmgr
+#----------------------------------
+
+function backup_db(){
+       echo "#backup previous DB"
+       mv $PARSER_DB_PATH $PARSER_BACKUP_DB_PATH
+       mv $CERT_DB_PATH $CERT_BACKUP_DB_PATH
+}
+
+function create_restriction_db(){
+       echo "#create restriction db"
+       local restriction_db=$RESTRICTION_DBPATH/$RESTRICTION_DBNAME
+       mkdir -p $RESTRICTION_DBPATH
+       echo "PRAGMA journal_mode=WAL;
+               CREATE TABLE restriction (uid INTEGER NOT NULL, pkgid TEXT NOT NULL, mode INTEGER NOT NULL, UNIQUE(uid, pkgid));" |
+       sqlite3 $restriction_db
+}
+
+function remove_modified_manifest(){
+       echo "#remove modified manifest"
+       rm -rf $DEFAULT_PKG_MANIFEST_LOCATION/*
+}
+
+function remove_unregistered_pkg(){
+       #remove pkg folder which is not registered at pkg db
+       ls $OPT_USR_APPS/ | while read FOLDER
+       do
+               result=$(sqlite3 $PARSER_BACKUP_DB_PATH "SELECT COUNT(*) FROM package_info WHERE package='$FOLDER';")
+               if [ $result != "1" ]
+               then
+                       echo "delete unregistered package directory $OPT_USR_APPS/$FOLDER"
+                       rm -r $OPT_USR_APPS/$FOLDER
+               fi
+       done
+}
+
+function move_user_tpk_ro_files(){
+       #this copy will copy whole things include userdata
+       local package=$1
+       cp -af $OPT_USR_APPS/$package $DEFAULT_PKG_APP_LOCATION/
+       chown -R $DEFAULT_RO_OWNER_GROUP $DEFAULT_PKG_APP_LOCATION/$package
+       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/bin
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/lib
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/res
+       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package/shared
+
+}
+
+function move_user_tpk_rw_files(){
+       local package=$1
+       mkdir -m 751 $DEFAULT_USER_APPS_RW/$package
+       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
+       mkdir $DEFAULT_USER_APPS_RW/$package/shared
+       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
+
+       mv $DEFAULT_PKG_APP_LOCATION/$package/cache $DEFAULT_USER_APPS_RW/$package/
+       mv $DEFAULT_PKG_APP_LOCATION/$package/data $DEFAULT_USER_APPS_RW/$package/
+       chmod g+s $DEFAULT_USER_APPS_RW/$package/data
+       chmod 771 $DEFAULT_USER_APPS_RW/$package/data
+       mv $DEFAULT_PKG_APP_LOCATION/$package/shared/data $DEFAULT_USER_APPS_RW/$package/shared/
+       mv $DEFAULT_PKG_APP_LOCATION/$package/shared/trusted $DEFAULT_USER_APPS_RW/$package/shared/
+
+       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/cache
+       chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
+       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/shared
+       chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/shared/data
+
+       chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::SharedRO $DEFAULT_USER_APPS_RW/$package/shared/data
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
+}
+
+function copy_user_tpk_manifest(){
+       local package=$1
+       cp $DEFAULT_PKG_APP_LOCATION/$1/$TIZEN_MANIFEST $DEFAULT_PKG_MANIFEST_LOCATION/$package.xml
+}
+
+function move_user_tpk_files(){
+       echo "#move user TPK's files"
+       echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type='tpk' COLLATE NOCASE;" |
+       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "processing user tpk $package..."
+               move_user_tpk_ro_files $package
+               move_user_tpk_rw_files $package
+               copy_user_tpk_manifest $package
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function move_user_wgt_ro_files(){
+       #this copy will copy whole things include userdata
+       local package=$1
+       cp -af --no-preserve=ownership $OPT_USR_APPS/$package $DEFAULT_PKG_APP_LOCATION/
+       chown -R $DEFAULT_RO_OWNER_GROUP $DEFAULT_PKG_APP_LOCATION/$package
+       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/bin
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/res
+       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package/shared
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_PKG_APP_LOCATION/$package/tmp
+}
+
+function move_user_wgt_rw_files(){
+       local package=$1
+       mkdir -m 751 $DEFAULT_USER_APPS_RW/$package
+       chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
+
+       mkdir -m 751 $DEFAULT_USER_APPS_RW/$package/shared
+       mkdir -m 751 $DEFAULT_USER_APPS_RW/$package/cache
+
+       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
+
+       mv $DEFAULT_PKG_APP_LOCATION/$package/data $DEFAULT_USER_APPS_RW/$package/
+       mv $DEFAULT_PKG_APP_LOCATION/$package/shared/data $DEFAULT_USER_APPS_RW/$package/shared/
+       mv $DEFAULT_PKG_APP_LOCATION/$package/shared/trusted $DEFAULT_USER_APPS_RW/$package/shared/
+       chmod 751 $DEFAULT_USER_APPS_RW/$package/shared/trusted
+       chmod g+s $DEFAULT_USER_APPS_RW/$package/data
+       chmod 771 $DEFAULT_USER_APPS_RW/$package/data
+
+       chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
+       chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/shared
+       chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/shared/data
+
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
+       chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
+       chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::SharedRO $DEFAULT_USER_APPS_RW/$package/shared/data
+}
+
+
+function move_user_wgt_files(){
+       echo "#move user WGT's files"
+       echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type='wgt' COLLATE NOCASE;" |
+       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "processing user wgt $package..."
+               move_user_wgt_ro_files $package
+               move_user_wgt_rw_files $package
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+
+}
+
+function remove_previous_files(){
+       echo "#remove files from previous location"
+       echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE;" |
+       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               rm -rf $OPT_USR_APPS/$package
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function initdb(){
+       echo "#pkg_initdb"
+       pkg_initdb --ro --partial-rw
+
+       mkdir -m 770 -p /opt/dbspace/user/5001
+       chmod 755 /opt/dbspace/user
+       chsmack -r -a User::Home /opt/dbspace/user
+       chown $OWNER_SYSTEM_SHARE /opt/dbspace/user/5001
+
+       pkg_initdb --uid 5001
+}
+
+function remove_files_for_deleted_packages(){
+       #delete userdata of packages which are removed in 3.0
+       echo "#delete userdata of removed packages"
+       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
+           SELECT package FROM backup.package_info WHERE package_readonly='true' COLLATE NOCASE AND
+           package NOT IN (SELECT package FROM package_info);" |
+       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "rm -r $OPT_USR_APPS/$package"
+               rm -r $OPT_USR_APPS/$package
+               done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function move_preload_pkg_userdata(){
+       echo "#move preload pkg's userdata"
+       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
+           SELECT package FROM backup.package_info WHERE package_readonly='true' COLLATE NOCASE AND
+           package IN (SELECT package FROM package_info);" |
+       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
+       while read package
+       do
+               echo "processing preload pkg $package..."
+               cp -af $OPT_USR_APPS/$package $DEFAULT_USER_APPS_RW/
+               chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
+               chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
+               chmod g+s $DEFAULT_USER_APPS_RW/$package/data
+               chmod 771 $DEFAULT_USER_APPS_RW/$package/data
+               rm -rf $OPT_USR_APPS/$package
+
+               chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
+               chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
+               chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
+               if [ -d $DEFAULT_USER_APPS_RW/$package/shared/trusted ];
+               then
+                       chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
+               fi
+
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function disable_preload_pkg(){
+       echo "#disable preload rpm, tpk pkg"
+       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
+           SELECT package FROM backup.package_info WHERE package_readonly='true' COLLATE NOCASE AND package_type!='wgt' COLLATE NOCASE AND package_disable='true' COLLATE NOCASE AND
+           package IN (SELECT package FROM package_info);" |
+       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "disable preload pkg $package..."
+               tpk-backend -D $package --preload
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+
+       echo "#disable preload wgt pkg"
+       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
+           SELECT package FROM backup.package_info WHERE package_readonly='true' COLLATE NOCASE AND package_type='wgt' COLLATE NOCASE AND package_disable='true' COLLATE NOCASE AND
+           package IN (SELECT package FROM package_info);" |
+       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "disable preload wgt $package..."
+               wgt-backend -D $package --preload
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function disable_user_pkg(){
+       echo "#disable user pkg"
+       echo ".separator \" \"
+           ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
+           SELECT package, package_type FROM backup.package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type !='rpm' COLLATE NOCASE AND package_disable='true' COLLATE NOCASE AND
+           package IN (SELECT package FROM package_info);" |
+       sqlite3 $PARSER_DB_PATH > $DB_RESULT_FILE
+
+       while read package type
+       do
+               echo "disable user pkg $package..."
+               echo "$type-backend -D $package"
+               $type-backend -D $package
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function remove_backup_db(){
+       rm $PARSER_BACKUP_DB_PATH
+       # TODO(jungh.yeon temp block)rm $CERT_BACKUP_DB_PATH
+}
+
+function init_user_tpk_preload_rw_packages() {
+       echo "#init tpk preload rw packages"
+       echo ".separator \" \"
+           SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_preload='true' COLLATE NOCASE AND package_type='tpk';" |
+       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "init tpk preload rw package $package..."
+               echo "SELECT cert_info FROM package_cert_index_info WHERE cert_id=(SELECT dist_root_cert FROM package_cert_info WHERE package='$package');" |
+               sqlite3 $CERT_BACKUP_DB_PATH > $CERT_TEMP_FILEPATH/$package.txt
+
+               tpk-backend -y $package --preload-rw
+               rm -f $CERT_TEMP_FILEPATH/$package.txt
+               migrate_cert_info $package
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function init_user_wgt_preload_rw_packages() {
+       echo "#init wgt preload rw packages"
+       echo ".separator \" \"
+           SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_preload='true' COLLATE NOCASE AND package_type='wgt';" |
+       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "init wgt preload rw package $package..."
+               wgt-backend -y $package --preload-rw
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function insert_cert_index_info() {
+       local cert_index=$1
+       if [ ! $cert_index ] || [ $cert_index -eq 0 ]; then
+               echo "given cert_index is null"
+               return
+       fi
+
+       local cert_value=`sqlite3 $CERT_BACKUP_DB_PATH "SELECT cert_info FROM package_cert_index_info WHERE cert_id=$cert_index"`
+       if [ ! $cert_value ]; then
+               echo "retrieved cert value with id [$cert_index] is null."
+               return
+       fi
+
+       sqlite3 $CERT_DB_PATH "INSERT OR REPLACE INTO package_cert_index_info(cert_info, cert_id, cert_ref_count)
+               VALUES('$cert_value',
+               (SELECT cert_id FROM package_cert_index_info WHERE cert_info='$cert_value'),
+               COALESCE(((SELECT cert_ref_count FROM package_cert_index_info WHERE cert_info='$cert_value')+1), 1))"
+}
+
+function insert_cert_info() {
+       local package=$1
+       local author_root_index=$2
+       local author_im_index=$3
+       local author_signer_index=$4
+       local dist_root_index=$5
+       local dist_im_index=$6
+       local dist_signer_index=$7
+       local dist2_root_index=$8
+       local dist2_im_index=$9
+       local dist2_signer_index=${10}
+
+       local dist_root_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+               SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+               (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist_root_index')"`
+       local dist_im_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+               SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+               (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist_im_index')"`
+       local dist_signer_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+               SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+               (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist_signer_index')"`
+
+       local dist2_root_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+               SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+               (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist2_root_index')"`
+       local dist2_im_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+               SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+               (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist2_im_index')"`
+       local dist2_signer_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+               SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+               (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist2_signer_index')"`
+
+       #update dist, dist2 value of package_cert_info determined by given pkg
+       local is_update_needed=""
+       local query="UPDATE package_cert_info SET "
+       if [ "$dist_root_value" != "" ]; then
+               is_update_needed="true"
+               query=$query"dist_root_cert='$dist_root_value'"
+       fi
+
+       if [ "$dist_im_value" != "" ]; then
+               is_update_needed="true"
+               query=$query", dist_im_cert='$dist_im_value'"
+       fi
+
+       if [ "$dist_signer_value" != "" ]; then
+               is_update_needed="true"
+               query=$query", dist_signer_cert='$dist_signer_value'"
+       fi
+
+       if [ "$dist2_root_value" != "" ]; then
+               is_update_needed="true"
+               query=$query"dist2_root_cert='$dist2_root_value'"
+       fi
+
+       if [ "$dist2_im_value" != "" ]; then
+               is_update_needed="true"
+               query=$query", dist2_im_cert='$dist2_im_value'"
+       fi
+
+       if [ "$dist2_signer_value" != "" ]; then
+               is_update_needed="true"
+               query=$query", dist2_signer_cert='$dist2_signer_value'"
+       fi
+
+       if [ "$is_update_needed" != "true" ]; then
+               echo "no update needed"
+               return
+       fi
+
+       query=$query" WHERE package='$package'"
+       echo "debugging query is [$query]"
+       sqlite3 $CERT_DB_PATH "$query"
+}
+
+function migrate_cert_info() {
+       local package=$1
+
+       #get certificate value from old cert db and insert into new cert db
+       echo ".separator \" \"
+               SELECT author_root_cert, author_im_cert, author_signer_cert, dist_root_cert, dist_im_cert, dist_signer_cert, dist2_root_cert, dist2_im_cert, dist2_signer_cert
+               FROM package_cert_info WHERE package='$package';" |
+       sqlite3 $CERT_BACKUP_DB_PATH > $CERT_TEMP_FILEPATH/$package.txt
+
+       while read author_root_cert author_im_cert author_signer_cert dist_root_cert dist_im_cert dist_signer_cert dist2_root_cert dist2_im_cert dist2_signer_cert
+       do
+               insert_cert_index_info $author_root_cert
+               insert_cert_index_info $author_im_cert
+               insert_cert_index_info $author_signer_cert
+               insert_cert_index_info $dist_root_cert
+               insert_cert_index_info $dist_im_cert
+               insert_cert_index_info $dist_signer_cert
+               insert_cert_index_info $dist2_root_cert
+               insert_cert_index_info $dist2_im_cert
+               insert_cert_index_info $dist2_signer_cert
+
+               insert_cert_info $package $author_root_cert $author_im_cert $author_signer_cert $dist_root_cert $dist_im_cert $dist_signer_cert $dist2_root_cert $dist2_im_cert $dist2_signer_cert
+       done < $CERT_TEMP_FILEPATH/$package.txt
+       rm -f $CERT_TEMP_FILEPATH/$package.txt
+}
+
+function init_user_tpk_packages() {
+       echo "#init user tpk packages"
+       echo ".separator \" \"
+           SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND
+           package_preload='false' COLLATE NOCASE AND package_type='tpk';" |
+       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "init user tpk package $package..."
+
+               echo "SELECT cert_info FROM package_cert_index_info WHERE cert_id=
+               (SELECT dist_root_cert FROM package_cert_info WHERE package='$package');" |
+               sqlite3 $CERT_BACKUP_DB_PATH > $CERT_TEMP_FILEPATH/$package.txt
+
+               tpk-backend -y $package
+               rm -f $CERT_TEMP_FILEPATH/$package.txt
+
+               migrate_cert_info $package
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function init_user_wgt_packages(){
+       echo "#init user wgt packages"
+       echo ".separator \" \"
+           SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type='wgt';" |
+       sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
+
+       while read package
+       do
+               echo "init user wgt package $package..."
+               wgt-backend -y $package
+       done < $DB_RESULT_FILE
+       rm -f $DB_RESULT_FILE
+}
+
+function migrate_external_info(){
+       echo "#migrate external storage info"
+       echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
+               UPDATE package_info set installed_storage='installed_external' WHERE package IN
+               (SELECT package FROM backup.package_info WHERE installed_storage='installed_external' COLLATE NOCASE);" |
+       sqlite3 $PARSER_DB_PATH
+}
+
+backup_db
+
+create_restriction_db
+
+remove_modified_manifest
+remove_unregistered_pkg
+
+move_user_tpk_files
+move_user_wgt_files
+remove_previous_files
+
+initdb
+init_user_tpk_packages
+init_user_tpk_preload_rw_packages
+init_user_wgt_packages
+init_user_wgt_preload_rw_packages
+
+remove_files_for_deleted_packages
+move_preload_pkg_userdata
+
+disable_preload_pkg
+disable_user_pkg
+migrate_external_info
+
+remove_backup_db
diff --git a/data/updates/upgrade_to_30001.sh.in b/data/updates/upgrade_to_30001.sh.in
new file mode 100644 (file)
index 0000000..092acdb
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/sh
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+source /etc/tizen-platform.conf
+
+PARSER_DB_NAME=.pkgmgr_parser.db
+PARSER_BACKUP_DB_NAME=.pkgmgr_parser_backup.db
+PARSER_DB_PATH=$TZ_SYS_DB/$PARSER_DB_NAME
+DB_RESULT_FILE=/tmp/result.log
+
+#define owner user
+DEFAULT_USER=$TZ_SYS_DEFAULT_USER
+
+#define /opt/usr/home/owner
+DEFAULT_USER_HOME=$TZ_SYS_HOME/$DEFAULT_USER
+
+echo "CREATE TABLE IF NOT EXISTS package_appdefined_privilege_info (\n" \
+       "  package TEXT NOT NULL,\n" \
+       "  privilege TEXT NOT NULL,\n" \
+       "  license TEXT,\n" \
+       "  type TEXT NOT NULL,\n" \
+       "  PRIMARY KEY(package, privilege, type)\n" \
+       "  FOREIGN KEY(package)\n" \
+       "  REFERENCES package_info(package) ON DELETE CASCADE);" | sqlite3 $PARSER_DB_PATH
+
+echo "CREATE TABLE IF NOT EXISTS package_update_info (\n" \
+       "  package TEXT NOT NULL,\n" \
+       "  update_version TEXT NOT NULL,\n" \
+       "  update_type TEXT NOT NULL DEFAULT 'none',\n" \
+       "  PRIMARY KEY(package)\n" \
+       "  FOREIGN KEY(package)\n" \
+       "  REFERENCES package_info(package) ON DELETE CASCADE); " | sqlite3 $PARSER_DB_PATH
+
+echo "DROP TABLE package_app_icon_section_info;" | sqlite3 $PARSER_DB_PATH
+echo "DROP TABLE package_app_image_info;" | sqlite3 $PARSER_DB_PATH
+echo "DROP TABLE package_app_app_permission;" | sqlite3 $PARSER_DB_PATH
+echo "DROP TABLE package_app_share_allowed;" | sqlite3 $PARSER_DB_PATH
+echo "DROP TABLE package_app_share_request;" | sqlite3 $PARSER_DB_PATH
+
+echo "PRAGMA user_version=30001;" | sqlite3 $PARSER_DB_PATH
index 09acd57..3759850 100644 (file)
@@ -72,6 +72,8 @@ update-mime-database %{_datadir}/mime
 %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) /etc/package-manager/updates/upgrade_to_30000.sh
+%attr(0700,root,root) /etc/package-manager/updates/upgrade_to_30001.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