Implement pkg db upgrade tool 27/83327/19 accepted/tizen/common/20160909.115110 accepted/tizen/ivi/20160909.122434 accepted/tizen/mobile/20160909.122340 accepted/tizen/tv/20160909.122357 accepted/tizen/wearable/20160909.122418 submit/tizen/20160909.054902 submit/tizen/20160909.060412
authorJunghyun Yeon <jungh.yeon@samsung.com>
Wed, 10 Aug 2016 07:03:58 +0000 (16:03 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Fri, 9 Sep 2016 01:32:36 +0000 (10:32 +0900)
Related changes
[app-installers] : https://review.tizen.org/gerrit/#/c/86789/
[tpk-backend] : https://review.tizen.org/gerrit/#/c/86846/
[wgt-backend] : https://review.tizen.org/gerrit/#/c/87472/

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

index b7a96db..0c33e87 100644 (file)
@@ -71,3 +71,5 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/pkgmgr-unzip-pkg.sh.in pkgmgr-un
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkgmgr-unzip-pkg.sh DESTINATION ${SYSCONF_INSTALL_DIR}/package-manager/)
 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/data/pkgmgr-create-delta.sh.in pkgmgr-create-delta.sh @ONLY)
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkgmgr-create-delta.sh DESTINATION ${SYSCONF_INSTALL_DIR}/package-manager/)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/300.pkgmgr.patch.sh.in 300.pkgmgr.patch.sh @ONLY)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/300.pkgmgr.patch.sh DESTINATION /usr/share/upgrade/scripts/)
diff --git a/data/300.pkgmgr.patch.sh.in b/data/300.pkgmgr.patch.sh.in
new file mode 100644 (file)
index 0000000..fd6067e
--- /dev/null
@@ -0,0 +1,101 @@
+#!/bin/sh
+#----------------------------------
+# upgrade script for pkgmgr
+#----------------------------------
+
+#backup previous db
+mv /opt/dbspace/.pkgmgr_parser.db /opt/dbspace/.pkgmgr_parser_backup.db
+
+#copy user app's manifest file and change owner, smack label
+sqlite3 /opt/dbspace/.pkgmgr_parser_backup.db "SELECT package FROM package_info WHERE package_preload='false' COLLATE NOCASE AND package_type='tpk'" |
+awk '{
+system("cp --no-preserve=ownership /opt/usr/apps/" $1 "/tizen-manifest.xml /opt/usr/home/owner/.applications/manifest/" $1 ".xml")
+system("chown owner:users /opt/usr/home/owner/.applications/manifest/" $1 ".xml")
+system("chsmack -a User::Home /opt/usr/home/owner/.applications/manifest/" $1 ".xml")
+system("rm /opt/share/packages/" $1 ".xml")
+}'
+
+#remove pkg folder which is not registered at pkg db
+rm -r /opt/usr/apps/media-server
+rm -r /opt/usr/apps/org.tizen.indicator_shm
+rm -r /opt/usr/apps/org.tizen.sound-player
+rm -r /opt/usr/apps/tmp
+
+#remove wgt app's xml at /opt/share/packages before pkg_initdb
+sqlite3 /opt/dbspace/.pkgmgr_parser_backup.db "SELECT package FROM package_info WHERE package_preload='false' COLLATE NOCASE AND package_type='wgt'" |
+awk '{system("rm /opt/share/packages/" $1 ".xml")}'
+
+pkg_initdb
+
+#delete userdata of packages which are removed from 3.0
+sqlite3 /opt/dbspace/.pkgmgr_parser.db "ATTACH DATABASE '/opt/dbspace/.pkgmgr_parser_backup.db' AS backup;
+SELECT package from backup.package_info WHERE package_preload='true' COLLATE NOCASE AND
+package NOT IN (SELECT package FROM package_info)" |
+awk '{ system("rm -r " "/opt/usr/apps/" $1)}'
+
+#move preload package's userdata
+sqlite3 /opt/dbspace/.pkgmgr_parser.db "ATTACH DATABASE '/opt/dbspace/.pkgmgr_parser_backup.db' AS backup;
+SELECT package from backup.package_info WHERE package IN (SELECT package FROM package_info)" |
+awk '{
+system("cp -r -f --no-preserve=ownership /opt/usr/apps/" $1 "/cache/ /opt/usr/home/owner/apps_rw/" $1)
+system("chown -R owner:users /opt/usr/home/owner/apps_rw/" $1 "/cache")
+system("chsmack -r -a User::Pkg::" $1 " /opt/usr/home/owner/apps_rw/" $1 "/cache")
+system("cp -r -f --no-preserve=ownership /opt/usr/apps/" $1 "/data/ /opt/usr/home/owner/apps_rw/" $1)
+system("chown -R owner:users /opt/usr/home/owner/apps_rw/" $1 "/data")
+system("chsmack -r -a User::Pkg::" $1 " /opt/usr/home/owner/apps_rw/" $1 "/data")
+system("cp -r -f --no-preserve=ownership /opt/usr/apps/" $1 "/shared/ /opt/usr/home/owner/apps_rw/" $1)
+system("chown -R owner:users /opt/usr/home/owner/apps_rw/" $1 "/shared")
+system("chsmack -r -a User::Home /opt/usr/home/owner/apps_rw/" $1 "/shared")
+system("chsmack -r -a User::Pkg::" $1 "::SharedRO /opt/usr/home/owner/apps_rw/" $1 "/shared/data")
+system("rm -r /opt/usr/apps/" $1)
+}'
+
+#check preload package which is disabled and enable it
+sqlite3 /opt/dbspace/.pkgmgr_parser.db "ATTACH DATABASE '/opt/dbspace/.pkgmgr_parser_backup.db' AS backup;
+SELECT package from backup.package_info WHERE package_preload='true' COLLATE NOCASE AND
+package_disable='true' COLLATE NOCASE AND
+package IN (SELECT package from package_info)" |
+awk '{ system("tpk-backend -D " $1 " --preload")}'
+
+#copy userdata for userapp
+sqlite3 /opt/dbspace/.pkgmgr_parser_backup.db "SELECT package FROM package_info WHERE package_preload='false' COLLATE NOCASE" |
+awk '{
+system("mv /opt/usr/apps/" $1 "/ /opt/usr/home/owner/apps_rw/")
+system("chown -R owner:users /opt/usr/home/owner/apps_rw/" $1)
+system("chsmack -r -a User::Home /opt/usr/home/owner/apps_rw/" $1)
+system("chsmack -r -a User::Pkg::" $1 " /opt/usr/home/owner/apps_rw/" $1 "/cache")
+system("chsmack -r -a User::Pkg::" $1 " /opt/usr/home/owner/apps_rw/" $1 "/data")
+system("chsmack -r -a User::Pkg::" $1 "::RO /opt/usr/home/owner/apps_rw/" $1 "/bin")
+system("chsmack -r -a User::Pkg::" $1 "::RO /opt/usr/home/owner/apps_rw/" $1 "/lib")
+system("chsmack -r -a User::Pkg::" $1 "::RO /opt/usr/home/owner/apps_rw/" $1 "/res")
+system("chsmack -r -a User::Pkg::" $1 "::SharedRO /opt/usr/home/owner/apps_rw/" $1 "/shared/data")
+system("chsmack -r -a User::Author::1 /opt/usr/home/owner/apps_rw/" $1 "/shared/trusted")
+}'
+
+#userdb init
+pkg_initdb --uid 5001
+
+#manifest direct install for user wgt apps
+sqlite3 /opt/dbspace/.pkgmgr_parser_backup.db "SELECT package FROM package_info WHERE package_preload='false' COLLATE NOCASE AND package_type='wgt'" |
+awk '{
+system("wgt-backend -y " $1 " -u 5001")
+system("mkdir /opt/usr/home/owner/apps_rw/" $1 "/cache")
+system("chown owner:users /opt/usr/home/owner/apps_rw/" $1 "/cache")
+system("chsmack -a User::Pkg::" $1 " /opt/usr/home/owner/apps_rw/" $1 "/cache")
+}'
+
+#disable user package
+sqlite3 /opt/dbspace/user/5001/.pkgmgr_parser.db "ATTACH DATABASE '/opt/dbspace/.pkgmgr_parser_backup.db' AS backup;
+SELECT package FROM backup.package_info WHERE package_preload='false' COLLATE NOCASE AND
+package_disable='true' COLLATE NOCASE AND package_type='tpk' AND
+package IN (select package from package_info)" |
+awk '{ system("tpk-backend -D " $1 " -u 5001")}'
+
+sqlite3 /opt/dbspace/user/5001/.pkgmgr_parser.db "ATTACH DATABASE '/opt/dbspace/.pkgmgr_parser_backup.db' AS backup;
+SELECT package FROM backup.package_info WHERE package_preload='false' COLLATE NOCASE AND
+package_disable='true' COLLATE NOCASE AND package_type='wgt' AND
+package IN (select package from package_info)" |
+awk '{ system("wgt-backend -D " $1 " -u 5001")}'
+
+#remove backups
+rm -r /opt/dbspace/.pkgmgr_parser_backup.db
index 7b9b010..60a8361 100644 (file)
@@ -78,6 +78,7 @@ fi
 %defattr(-,root,root,-)
 %dir %{_sysconfdir}/opt/upgrade
 %{_sysconfdir}/opt/upgrade/pkgmgr.patch.sh
+/usr/share/upgrade/scripts/300.pkgmgr.patch.sh
 %{_bindir}/pkgcmd
 %{_bindir}/pkg_getsize
 %{_bindir}/pkg_clearcache
@@ -88,4 +89,5 @@ fi
 %{_datadir}/mime/packages/mime.tpk.xml
 %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/300.pkgmgr.patch.sh
 /usr/share/license/%{name}