From: Junghyun Yeon Date: Wed, 10 Aug 2016 07:03:58 +0000 (+0900) Subject: Implement pkg db upgrade tool X-Git-Tag: accepted/tizen/common/20160909.115110^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5107bddf03b25c1732ae1747a5ef6104062332d0;p=platform%2Fcore%2Fappfw%2Fpkgmgr-tool.git Implement pkg db upgrade tool 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 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index b7a96db..0c33e87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 index 0000000..fd6067e --- /dev/null +++ b/data/300.pkgmgr.patch.sh.in @@ -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 diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index 7b9b010..60a8361 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -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}