From 066773d6ae4f3b1e77fb09dcb58a9f9a11980a59 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Tue, 12 Feb 2019 16:49:41 +0900 Subject: [PATCH 01/16] Add missing upgrade script for version 30003 Add app_control_id column for package_app_app_control table. Change-Id: I3eefa5b4520d31976a94ecedec8d99744c3fdb09 Signed-off-by: Sangyoon Jang --- CMakeLists.txt | 2 ++ data/updates/upgrade_to_30003.sh.in | 27 +++++++++++++++++++++++++++ packaging/pkgmgr-tool.spec | 1 + 3 files changed, 30 insertions(+) create mode 100644 data/updates/upgrade_to_30003.sh.in diff --git a/CMakeLists.txt b/CMakeLists.txt index ac4eb77..d54965e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,3 +88,5 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30001.sh.in u INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30001.sh DESTINATION /etc/package-manager/updates/) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30002.sh.in upgrade_to_30002.sh $ONLY) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30002.sh DESTINATION /etc/package-manager/updates/) +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30003.sh.in upgrade_to_30003.sh $ONLY) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30003.sh DESTINATION /etc/package-manager/updates/) diff --git a/data/updates/upgrade_to_30003.sh.in b/data/updates/upgrade_to_30003.sh.in new file mode 100644 index 0000000..773ab43 --- /dev/null +++ b/data/updates/upgrade_to_30003.sh.in @@ -0,0 +1,27 @@ +#!/bin/sh +PATH=/bin:/usr/bin:/sbin:/usr/sbin + +source /etc/tizen-platform.conf + +PARSER_DB_NAME=.pkgmgr_parser.db +PARSER_DB_PATH=$TZ_SYS_DB/$PARSER_DB_NAME + +function migrate_parser_db() { + local dbpath=$1 + + echo -e "ALTER TABLE package_app_app_control ADD app_control_id TEXT NOT NULL DEFAULT 'no-name-app-control'" | sqlite3 $dbpath + + echo "PRAGMA user_version=30003;" | sqlite3 $dbpath +} + +function migrate_user_db() { + #get each user db path and call migrate_parser_db for each of it + + find $TZ_SYS_DB/user -name $PARSER_DB_NAME | while read DBPATH + do + migrate_parser_db $DBPATH + done +} + +migrate_parser_db $PARSER_DB_PATH +migrate_user_db diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index 619ce8d..ca78341 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -74,6 +74,7 @@ update-mime-database %{_datadir}/mime %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) /etc/package-manager/updates/upgrade_to_30002.sh +%attr(0700,root,root) /etc/package-manager/updates/upgrade_to_30003.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.7.4 From fddf5c776f25eeacf0cd0a34ebcba3d37f76f77d Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Wed, 16 Jan 2019 18:39:40 +0900 Subject: [PATCH 02/16] Add package dependency attribute to upgrade script Change-Id: Ic85f83896f6de645b572f884407f77e3099ecc04 Signed-off-by: Sangyoon Jang --- CMakeLists.txt | 2 ++ data/updates/upgrade_to_30004.sh.in | 34 ++++++++++++++++++++++++++++++++++ packaging/pkgmgr-tool.spec | 1 + 3 files changed, 37 insertions(+) create mode 100644 data/updates/upgrade_to_30004.sh.in diff --git a/CMakeLists.txt b/CMakeLists.txt index d54965e..f688adc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,3 +90,5 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30002.sh.in u INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/upgrade_to_30002.sh DESTINATION /etc/package-manager/updates/) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/data/updates/upgrade_to_30003.sh.in upgrade_to_30003.sh $ONLY) 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/) diff --git a/data/updates/upgrade_to_30004.sh.in b/data/updates/upgrade_to_30004.sh.in new file mode 100644 index 0000000..23509a3 --- /dev/null +++ b/data/updates/upgrade_to_30004.sh.in @@ -0,0 +1,34 @@ +#!/bin/sh +PATH=/bin:/usr/bin:/sbin:/usr/sbin + +source /etc/tizen-platform.conf + +PARSER_DB_NAME=.pkgmgr_parser.db +PARSER_DB_PATH=$TZ_SYS_DB/$PARSER_DB_NAME + +function migrate_parser_db() { + local dbpath=$1 + + echo -e "CREATE TABLE IF NOT EXISTS package_dependency_info (\n" \ + " package TEXT NOT NULL,\n" \ + " depends_on TEXT NOT NULL,\n" \ + " type TEXT NOT NULL,\n" \ + " required_version TEXT,\n" \ + " PRIMARY KEY(package, depends_on, type, required_version)\n" \ + " FOREIGN KEY(package)\n" \ + " REFERENCES package_info(package) ON DELETE CASCADE);" | sqlite3 $dbpath + + echo "PRAGMA user_version=30004;" | sqlite3 $dbpath +} + +function migrate_user_db() { + #get each user db path and call migrate_parser_db for each of it + + find $TZ_SYS_DB/user -name $PARSER_DB_NAME | while read DBPATH + do + migrate_parser_db $DBPATH + done +} + +migrate_parser_db $PARSER_DB_PATH +migrate_user_db diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index ca78341..c2cc48d 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -75,6 +75,7 @@ update-mime-database %{_datadir}/mime %attr(0700,root,root) /etc/package-manager/updates/upgrade_to_30001.sh %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) /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.7.4 From d548af7bc59450f6348fff8697e3ee4321292044 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Wed, 20 Feb 2019 17:24:42 +0900 Subject: [PATCH 03/16] Add codes to handle ReadonlyUpdateInstalled pkg - When readonlyupdateinstalled pkg version is higher than FOTA-updated pkg, pkg version should be preserved. Change-Id: I48e5718dca83db7e2777f51c6750f4d44478a37a Signed-off-by: Junghyun Yeon --- src/pkg_upgrade.c | 6 ++++++ src/pkg_upgrade.h | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pkg_upgrade.c b/src/pkg_upgrade.c index 566231b..e5d0782 100644 --- a/src/pkg_upgrade.c +++ b/src/pkg_upgrade.c @@ -377,6 +377,12 @@ static int __compare_pkgid(char *file_path, char *fota_pkgid, FREE_AND_NULL(version); FREE_AND_NULL(update); break; + } else if (compare == PMINFO_VERSION_OLD) { + ret = PKG_IS_OLD; + FREE_AND_NULL(pkgid); + FREE_AND_NULL(version); + FREE_AND_NULL(update); + break; } FREE_AND_NULL(pkgid); diff --git a/src/pkg_upgrade.h b/src/pkg_upgrade.h index 4f5a93f..de1e8de 100644 --- a/src/pkg_upgrade.h +++ b/src/pkg_upgrade.h @@ -92,7 +92,8 @@ typedef enum { PKG_IS_NOT_EXIST = 0, PKG_IS_SAME, PKG_IS_UPDATED, - PKG_IS_INSERTED + PKG_IS_INSERTED, + PKG_IS_OLD } COMPARE_RESULT; typedef enum { -- 2.7.4 From 9aaf14ed79f210b915af3cabd1f76165031dea79 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Mon, 18 Feb 2019 14:48:12 +0900 Subject: [PATCH 04/16] Add db schema to version 30004 Change-Id: I9ffe4bf630341f21c1fb319450096a4515789ea1 Signed-off-by: Junghyun Yeon --- data/updates/upgrade_to_30004.sh.in | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/data/updates/upgrade_to_30004.sh.in b/data/updates/upgrade_to_30004.sh.in index 23509a3..ec3ea57 100644 --- a/data/updates/upgrade_to_30004.sh.in +++ b/data/updates/upgrade_to_30004.sh.in @@ -18,6 +18,12 @@ function migrate_parser_db() { " FOREIGN KEY(package)\n" \ " REFERENCES package_info(package) ON DELETE CASCADE);" | sqlite3 $dbpath + echo -e "CREATE TABLE IF NOT EXISTS package_plugin_info (\n" \ + " pkgid TEXT NOT NULL,\n" \ + " appid TEXT,\n" \ + " plugin_type TEXT NOT NULL,\n", + " plugin_name TEXT NOT NULL)" | sqlite3 $dbpath + echo "PRAGMA user_version=30004;" | sqlite3 $dbpath } -- 2.7.4 From a00170218e764f6cd512c9dfa7740e42e044b4e5 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Tue, 12 Mar 2019 15:58:25 +0900 Subject: [PATCH 05/16] Fix db migration script Change-Id: I44b9153494d58bd7f2fe59c7b9fdafc51463373b Signed-off-by: Junghyun Yeon --- data/updates/upgrade_to_30004.sh.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/updates/upgrade_to_30004.sh.in b/data/updates/upgrade_to_30004.sh.in index ec3ea57..d1214e2 100644 --- a/data/updates/upgrade_to_30004.sh.in +++ b/data/updates/upgrade_to_30004.sh.in @@ -21,8 +21,8 @@ function migrate_parser_db() { echo -e "CREATE TABLE IF NOT EXISTS package_plugin_info (\n" \ " pkgid TEXT NOT NULL,\n" \ " appid TEXT,\n" \ - " plugin_type TEXT NOT NULL,\n", - " plugin_name TEXT NOT NULL)" | sqlite3 $dbpath + " plugin_type TEXT NOT NULL,\n" \ + " plugin_name TEXT NOT NULL);" | sqlite3 $dbpath echo "PRAGMA user_version=30004;" | sqlite3 $dbpath } -- 2.7.4 From ea47286cd235c93eb326c709efb4ff6247de9968 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Tue, 12 Mar 2019 14:21:39 +0900 Subject: [PATCH 06/16] Add db schema to version 30004 Added: - package_app_component_info table Change-Id: I863b8a0ace0ba93969b8475049c4561e1f1c1c2c Signed-off-by: Hwankyu Jhun --- data/updates/upgrade_to_30004.sh.in | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/data/updates/upgrade_to_30004.sh.in b/data/updates/upgrade_to_30004.sh.in index d1214e2..a66c406 100644 --- a/data/updates/upgrade_to_30004.sh.in +++ b/data/updates/upgrade_to_30004.sh.in @@ -24,6 +24,15 @@ function migrate_parser_db() { " plugin_type TEXT NOT NULL,\n" \ " plugin_name TEXT NOT NULL);" | sqlite3 $dbpath + echo -e "CREATE TABLE IF NOT EXISTS package_app_component_info (\n" \ + " app_id TEXT NOT NULL,\n" \ + " component_id TEXT NOT NULL,\n" \ + " type TEXT NOT NULL,\n" \ + " launch_mode TEXT NOT NULL,\n" \ + " PRIMARY KEY(app_id, component_id)\n" \ + " FOREIGN KEY(app_id)\n" \ + " REFERENCES package_app_info(app_id) ON DELETE CASCADE);" | sqlite3 $dbpath + echo "PRAGMA user_version=30004;" | sqlite3 $dbpath } -- 2.7.4 From 954c585fcee4c199772ddfded5e4f9a4b576f632 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Fri, 15 Mar 2019 12:05:43 +0900 Subject: [PATCH 07/16] Release version 0.5.0 Changes: - Add missing upgrade script for version 30003 - Add package dependency attribute to upgrade script - Add codes to handle ReadonlyUpdateInstalled pkg - Add db schema to version 30004 - Fix db migration script - Add db schema to version 30004 Change-Id: I60b2ea1a7aaa3fcca6f11193d040bc42ce846f62 Signed-off-by: Hwankyu Jhun --- packaging/pkgmgr-tool.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index c2cc48d..f675f7b 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -1,6 +1,6 @@ Name: pkgmgr-tool Summary: Packager Manager Tool package -Version: 0.4.17 +Version: 0.5.0 Release: 1 Group: Application Framework/Package Management License: Apache-2.0 -- 2.7.4 From 4ea6decbbb758db9b079305495624d52ec96cf05 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Tue, 26 Mar 2019 20:19:18 +0900 Subject: [PATCH 08/16] Change log for install_preload_pkg Current logs don't specify which directory is not exists. Change-Id: I256c9deb696d7685efcffd45330659132eb0d0d0 Signed-off-by: Junghyun Yeon --- src/install_preload_pkg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install_preload_pkg.c b/src/install_preload_pkg.c index 60662e5..51752ff 100644 --- a/src/install_preload_pkg.c +++ b/src/install_preload_pkg.c @@ -66,7 +66,7 @@ static int _install_preload_pkg(const char *backend, const char *directory, dir = opendir(directory); if (!dir) { if (errno == ENOENT) { - _D("The directory for preloaded pkgs doesn't exist"); + _D("Directory[%s] doesn't exist", directory); return 0; } else { _E("Failed to access [%s]: [%s]", directory, -- 2.7.4 From 04320cea431a195814c6bfe88ac76011283c78c1 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Thu, 28 Mar 2019 19:40:19 +0900 Subject: [PATCH 09/16] Replace exec into /bin/sh in upgrade script - exec replaces shell itself so sciprts will terminate when command terminates executed by exec. Change-Id: Ic6e650237bad77a835afa0bb240b9229ae7d842c Signed-off-by: Junghyun Yeon --- data/updates/update.sh.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/updates/update.sh.in b/data/updates/update.sh.in index 81cd697..7b91abf 100644 --- a/data/updates/update.sh.in +++ b/data/updates/update.sh.in @@ -22,7 +22,7 @@ echo "Pkgmgr database current version: $DB_VERSION_OLD, target version: $DB_VERS #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" + /bin/sh "$UPDATE_SCRIPT_LOCATION/$UPDATE_SCRIPT_PREFIX$DB_VERSION_TIZEN30_DEFAULT.sh" DB_VERSION_OLD=30000 fi @@ -31,5 +31,5 @@ do echo "Updating $PARSER_DB_PATH to $i (target version is $DB_VERSION_NEW)" 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 + /bin/sh $UPDATE_SCRIPT done -- 2.7.4 From f808d16b78b3cdfc581c1914b4de730b700c60d7 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 10 Apr 2019 15:29:09 +0900 Subject: [PATCH 10/16] Adjust 30004 upgrade script The component info table is removed. Change-Id: I82a411df1cdd09864034a9676f1f4bc30feae870 Signed-off-by: Hwankyu Jhun --- data/updates/upgrade_to_30004.sh.in | 9 --------- 1 file changed, 9 deletions(-) diff --git a/data/updates/upgrade_to_30004.sh.in b/data/updates/upgrade_to_30004.sh.in index a66c406..d1214e2 100644 --- a/data/updates/upgrade_to_30004.sh.in +++ b/data/updates/upgrade_to_30004.sh.in @@ -24,15 +24,6 @@ function migrate_parser_db() { " plugin_type TEXT NOT NULL,\n" \ " plugin_name TEXT NOT NULL);" | sqlite3 $dbpath - echo -e "CREATE TABLE IF NOT EXISTS package_app_component_info (\n" \ - " app_id TEXT NOT NULL,\n" \ - " component_id TEXT NOT NULL,\n" \ - " type TEXT NOT NULL,\n" \ - " launch_mode TEXT NOT NULL,\n" \ - " PRIMARY KEY(app_id, component_id)\n" \ - " FOREIGN KEY(app_id)\n" \ - " REFERENCES package_app_info(app_id) ON DELETE CASCADE);" | sqlite3 $dbpath - echo "PRAGMA user_version=30004;" | sqlite3 $dbpath } -- 2.7.4 From 4bd02343954f497298b3b4dbce9d9a87650dd97e Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Tue, 16 Apr 2019 17:56:55 +0900 Subject: [PATCH 11/16] Release version 0.5.1 Changes: - Change log for install_preload_pkg - Replace exec into /bin/sh in upgrade script - Adjust 30004 upgrade script Change-Id: I3205a272f7f81de7a5298ff6be1e7dbe0e9c544e Signed-off-by: Junghyun Yeon --- packaging/pkgmgr-tool.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index f675f7b..124b171 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -1,6 +1,6 @@ Name: pkgmgr-tool Summary: Packager Manager Tool package -Version: 0.5.0 +Version: 0.5.1 Release: 1 Group: Application Framework/Package Management License: Apache-2.0 -- 2.7.4 From ef9a2de519583b2056fe875fca7997f822a211af Mon Sep 17 00:00:00 2001 From: Ilho Kim Date: Thu, 18 Apr 2019 17:19:24 +0900 Subject: [PATCH 12/16] Add redefining PATH env Add in this files - pkgmgr.patch.sh.in - update.sh.in Change-Id: Ibce3a0e9f34d8c9558ee2a24ee7ac01220be8a41 Signed-off-by: Ilho Kim --- data/700.pkgmgr.patch.sh.in | 1 + data/updates/update.sh.in | 1 + 2 files changed, 2 insertions(+) diff --git a/data/700.pkgmgr.patch.sh.in b/data/700.pkgmgr.patch.sh.in index 0db3edb..ee0ee9f 100644 --- a/data/700.pkgmgr.patch.sh.in +++ b/data/700.pkgmgr.patch.sh.in @@ -1,4 +1,5 @@ #!/bin/sh +PATH="/usr/bin:/bin:/usr/sbin:/sbin" source /etc/tizen-platform.conf diff --git a/data/updates/update.sh.in b/data/updates/update.sh.in index 7b91abf..91849b7 100644 --- a/data/updates/update.sh.in +++ b/data/updates/update.sh.in @@ -1,4 +1,5 @@ #!/bin/sh +PATH="/usr/bin:/bin:/usr/sbin:/sbin" source /etc/tizen-platform.conf -- 2.7.4 From 8f228081936c599efd0234211c6e461e12584fcb Mon Sep 17 00:00:00 2001 From: Junghoon Park Date: Fri, 19 Apr 2019 11:29:00 +0900 Subject: [PATCH 13/16] Release version 0.5.2 Changes: - Add redefining PATH env Change-Id: I96fc67634510fb2602a9ccc077cacf2825ee3511 Signed-off-by: Junghoon Park --- packaging/pkgmgr-tool.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index 124b171..f51bfc1 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -1,6 +1,6 @@ Name: pkgmgr-tool Summary: Packager Manager Tool package -Version: 0.5.1 +Version: 0.5.2 Release: 1 Group: Application Framework/Package Management License: Apache-2.0 -- 2.7.4 From f2268b9e4993ee8b9688858bc0c744b2056a7322 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Wed, 5 Jun 2019 20:37:54 +0900 Subject: [PATCH 14/16] Add upgrade script for version 30005 Related changes: [pkgmgr-info] : https://review.tizen.org/gerrit/c/platform/core/appfw/pkgmgr-info/+/207513/ Change-Id: Ib36223113944f895b5eafc0455ba0a897378162a Signed-off-by: Junghyun Yeon --- CMakeLists.txt | 2 ++ data/updates/upgrade_to_30005.sh.in | 35 +++++++++++++++++++++++++++++++++++ packaging/pkgmgr-tool.spec | 1 + 3 files changed, 38 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..9814028 --- /dev/null +++ b/data/updates/upgrade_to_30005.sh.in @@ -0,0 +1,35 @@ +#!/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 +PARSER_DB_PATH=$TZ_SYS_DB/$PARSER_DB_NAME +CERT_DB_PATH=$TZ_SYS_DB/$CERT_DB_NAME + +function migrate_db() { + local dbpath=$1 + echo -e "PRAGMA journal_mode=WAL;" | sqlite3 $dbpath + echo "PRAGMA user_version=30005;" | sqlite3 $dbpath + + touch "$dbpath-shm" + chown app_fw:app_fw "$dbpath-shm" + chsmack -a User::Home "$dbpath-shm" + touch "$dbpath-wal" + chown app_fw:app_fw "$dbpath-wal" + chsmack -a User::Home "$dbpath-wal" +} + +function migrate_user_db() { + #get each user db path and call migrate_parser_db for each of it + + find $TZ_SYS_DB/user -name $PARSER_DB_NAME | while read DBPATH + do + migrate_db $DBPATH + done +} + +migrate_db $PARSER_DB_PATH +migrate_user_db +migrate_db $CERT_DB_PATH \ No newline at end of file diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index f51bfc1..d0e7c5d 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.7.4 From f8babfddf1d991465d6b9acbac17f46f34179f6f Mon Sep 17 00:00:00 2001 From: Ilho Kim Date: Thu, 23 May 2019 21:20:14 +0900 Subject: [PATCH 15/16] Handle preload-rw package deleted by user when OTA Create a file to store preload-rw-packages that has been installed, this file is used to identify whether the preload-rw-package currently installing is a new package or a deleted package by user Change-Id: If9436067b39db7e808b762fbb0db9624a07d751e Signed-off-by: Ilho Kim --- src/install_preload_pkg.c | 53 ++++++++++++ src/pkg_upgrade.c | 208 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 230 insertions(+), 31 deletions(-) diff --git a/src/install_preload_pkg.c b/src/install_preload_pkg.c index 51752ff..2218344 100644 --- a/src/install_preload_pkg.c +++ b/src/install_preload_pkg.c @@ -28,9 +28,13 @@ #include #include #include +#include #include +#include "package-manager.h" +#include "package-manager-types.h" + #define OWNER_ROOT 0 #define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER) #define BUFSZE 4096 @@ -53,6 +57,37 @@ #define WGT_DIR tzplatform_mkpath(TZ_SYS_RO_APP, ".preload-wgt") #define TPK_RW_DIR tzplatform_mkpath(TZ_SYS_RO_APP, ".preload-rw-tpk") #define WGT_RW_DIR tzplatform_mkpath(TZ_SYS_RO_APP, ".preload-rw-wgt") +#define ALL_PRELOAD_RW_PKG_LIST "/opt/usr/share/.all_preload_rw_list" + +static void __make_preload_rw_list(GList *pkg_list) +{ + FILE *file; + char pkg_info[BUFSZE]; + + if (pkg_list == NULL) + return; + + file = fopen(ALL_PRELOAD_RW_PKG_LIST, "a"); + if (file == NULL) { + _E("can not open [%s]: %s\n", ALL_PRELOAD_RW_PKG_LIST, + strerror(errno)); + return; + } + + for (; pkg_list != NULL; pkg_list = pkg_list->next) { + char *pkgid = pkg_list->data; + if (pkgid == NULL) { + _E("pkgid is null\n"); + continue; + } + + _D("Add [%s] to preload-rw list", pkgid); + snprintf(pkg_info, BUFSZE, "package=\"%s\":\n", pkgid); + fwrite(pkg_info, 1, strlen(pkg_info), file); + } + + fclose(file); +} static int _install_preload_pkg(const char *backend, const char *directory, bool readonly, bool skip_check_reference) @@ -62,6 +97,9 @@ static int _install_preload_pkg(const char *backend, const char *directory, int ret; char file_path[BUFSZE]; char err_buf[BUFSZE]; + GList *preload_rw_pkg_list = NULL; + package_manager_pkg_detail_info_t *pkg_info; + char *pkgid; dir = opendir(directory); if (!dir) { @@ -114,13 +152,28 @@ static int _install_preload_pkg(const char *backend, const char *directory, file_path, strerror_r(errno, err_buf, sizeof(err_buf))); closedir(dir); + g_list_free_full(preload_rw_pkg_list, free); return -1; } + } else { + // make the preload-rw list + pkg_info = pkgmgr_client_check_pkginfo_from_file(file_path); + if (pkg_info == NULL) { + _E("can not get pkg_info from [%s]\n", file_path); + continue; + } + + pkgid = strdup(pkg_info->pkgid); + preload_rw_pkg_list = g_list_append(preload_rw_pkg_list, pkgid); + pkgmgr_client_free_pkginfo(pkg_info); + pkg_info = NULL; } } closedir(dir); + __make_preload_rw_list(preload_rw_pkg_list); + g_list_free_full(preload_rw_pkg_list, free); return 0; } diff --git a/src/pkg_upgrade.c b/src/pkg_upgrade.c index e5d0782..4ecacee 100644 --- a/src/pkg_upgrade.c +++ b/src/pkg_upgrade.c @@ -56,6 +56,7 @@ ".preload_rw_pkg_list") #define DBPATH tzplatform_mkpath(TZ_SYS_DB, "/.pkgmgr_parser.db") #define OPT_ZIP_FILE "/usr/system/RestoreDir/opt.zip" +#define ALL_PRELOAD_RW_PKG_LIST "/opt/usr/share/.all_preload_rw_list" static char *unzip_path[BUF_SIZE] = { "opt/usr/globalapps", @@ -135,6 +136,47 @@ int remove_directory(const char *path) return ret; } +static void __iter_cb(gpointer key, gpointer value, gpointer user_data) +{ + + FILE *file; + char *pkgid; + char pkg_info[BUF_SIZE]; + + if (user_data == NULL || key == NULL) + return; + + file = user_data; + pkgid = key; + snprintf(pkg_info, BUF_SIZE, "package=\"%s\":\n", pkgid); + fwrite(pkg_info, 1, strlen(pkg_info), file); +} + +static void __make_preload_rw_list(GHashTable *preload_rw_table) +{ + if (preload_rw_table == NULL) { + _LOG("preload_rw_table is null\n"); + return; + } + FILE *file = NULL; + + char tmp_path[BUF_SIZE]; + snprintf(tmp_path, BUF_SIZE, "%s.tmp", ALL_PRELOAD_RW_PKG_LIST); + + rename(ALL_PRELOAD_RW_PKG_LIST, tmp_path); + + file = fopen(ALL_PRELOAD_RW_PKG_LIST, "w"); + if (file == NULL) { + _LOG("can not open [%s]: %s\n", + ALL_PRELOAD_RW_PKG_LIST, strerror(errno)); + return; + } + g_hash_table_foreach(preload_rw_table, __iter_cb, file); + fsync(fileno(file)); + fclose(file); + remove(tmp_path); +} + static int __is_dir(const char *dirname) { struct stat stFileInfo; @@ -404,6 +446,14 @@ static int __compare_pkgid(char *file_path, char *fota_pkgid, return ret; } +static bool __check_deleted_pkg(GHashTable *preload_rw_table, + const char *fota_pkgid) +{ + if (g_hash_table_contains(preload_rw_table, fota_pkgid)) + return true; + return false; +} + char *__manifest_to_package(const char *manifest) { char *package; @@ -814,7 +864,15 @@ static int __unzip_files(char *dest_path) return ret; } -static int __install_preload_rw(const char *pkgid, const char *pkgtype) +static int __insert_preload_rw_table(GHashTable *preload_rw_table, + const char *pkgid) +{ + g_hash_table_insert(preload_rw_table, strdup(pkgid), NULL); + return 0; +} + +static int __install_preload_rw(const char *pkgid, const char *pkgtype, + GHashTable *preload_rw_table) { if (pkgid == NULL || pkgtype == NULL) return -1; @@ -854,11 +912,15 @@ static int __install_preload_rw(const char *pkgid, const char *pkgtype) } } + ret = __insert_preload_rw_table(preload_rw_table, pkgid); + retvm_if(ret < 0, -1, "__insert_preload_rw_table fail\n"); + __send_args_to_backend(pkgid, pkgtype, PKG_NEED_PRELOADRW_INSTALL); return ret; } -static void __convert_preload_to_rw(const char *pkgid, const char *pkgtype) +static void __convert_preload_to_rw(const char *pkgid, const char *pkgtype, + GHashTable *preload_rw_table) { if (pkgid == NULL || pkgtype == NULL) return; @@ -873,7 +935,7 @@ static void __convert_preload_to_rw(const char *pkgid, const char *pkgtype) if (ret != 0) _LOG("Failed to remove directory[%s]\n", buf); - ret = __install_preload_rw(pkgid, pkgtype); + ret = __install_preload_rw(pkgid, pkgtype, preload_rw_table); if (ret != 0) { _LOG("Failed install preload rw pkg[%s]\n", pkgid); return; @@ -881,7 +943,7 @@ static void __convert_preload_to_rw(const char *pkgid, const char *pkgtype) } static int __find_deleted_pkgid_from_list(const char *source_file, - const char *target_file) + const char *target_file, GHashTable *preload_rw_table) { retvm_if(source_file == NULL, -1, "source_file is NULL.\n"); retvm_if(target_file == NULL, -1, "target_file is NULL.\n"); @@ -933,7 +995,9 @@ static int __find_deleted_pkgid_from_list(const char *source_file, if (!strncmp(update, "false", strlen("false"))) { if (is_preload_rw_pkg) { - __convert_preload_to_rw(pkgid, pkgtype); + __convert_preload_to_rw(pkgid, + pkgtype, + preload_rw_table); modified_pkg_cnt++; } else { __send_args_to_backend(pkgid, pkgtype, @@ -947,7 +1011,9 @@ static int __find_deleted_pkgid_from_list(const char *source_file, if (is_preload_rw_pkg) { __send_args_to_backend(pkgid, pkgtype, PKG_NEED_RWUNINSTALL); - __install_preload_rw(pkgid, pkgtype); + __install_preload_rw(pkgid, + pkgtype, + preload_rw_table); } } } @@ -996,7 +1062,7 @@ static int __get_pkgid_list_from_db_and_xml() return 0; } -static int __process_ro_fota() +static int __process_ro_fota(GHashTable *preload_rw_table) { int ret; long starttime; @@ -1010,7 +1076,7 @@ static int __process_ro_fota() /* find deleted pkgid */ ret = __find_deleted_pkgid_from_list(PKGID_LIST_FROM_DB_FILE, - PKGID_LIST_FROM_XML_FILE); + PKGID_LIST_FROM_XML_FILE, preload_rw_table); err_if(ret < 0, "__find_deleted_pkgid_from_list fail.\n"); /* find updated, inserted pkgid */ @@ -1030,7 +1096,7 @@ static int __process_ro_fota() return 0; } -static int __process_rw_fota() +static int __process_rw_fota(GHashTable *preload_rw_table) { FILE *fp = NULL; char buf[BUF_SIZE] = {0}; @@ -1046,6 +1112,7 @@ static int __process_rw_fota() long starttime; long endtime; struct timeval tv; + bool is_deleted_pkg; _LOG("=======================================================\n"); _LOG("RW preload package fota\n"); @@ -1077,6 +1144,7 @@ static int __process_rw_fota() if (ret != PMINFO_R_OK) { _LOG("can not compare pkg version[%s]\n", pkgid); pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + handle = NULL; FREE_AND_NULL(pkgid); FREE_AND_NULL(list_version); continue; @@ -1086,6 +1154,7 @@ static int __process_rw_fota() /* package version is not update on FOTA. */ _LOG("pkg is not updated\n"); pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + handle = NULL; gettimeofday(&tv, NULL); endtime = tv.tv_sec * 1000l + @@ -1093,6 +1162,14 @@ static int __process_rw_fota() total_time += (int)(endtime - starttime); _LOG("finish request [time : %d ms]\n", (int)(endtime - starttime)); + ret = __insert_preload_rw_table(preload_rw_table, pkgid); + if (ret < 0) { + _LOG("__insert_preload_rw_table fail\n"); + free(pkgid); + free(list_version); + fclose(fp); + return -1; + } FREE_AND_NULL(pkgid); FREE_AND_NULL(list_version); continue; @@ -1100,12 +1177,20 @@ static int __process_rw_fota() _LOG("pkg is updated, need to upgrade\n"); } else { + is_deleted_pkg = __check_deleted_pkg(preload_rw_table, pkgid); + if (is_deleted_pkg) { + _LOG("pkgid[%s] is deleted pkg\n", pkgid); + FREE_AND_NULL(pkgid); + continue; + } _LOG("pkgid[%s] is new\n", pkgid); } pkgtype = __getvalue(buf, TOKEN_TYPE_STR, 1); - __install_preload_rw(pkgid, pkgtype); - free(pkgtype); + __install_preload_rw(pkgid, pkgtype, preload_rw_table); + + FREE_AND_NULL(pkgid); + FREE_AND_NULL(pkgtype); if (handle) pkgmgrinfo_pkginfo_destroy_pkginfo(handle); @@ -1116,15 +1201,54 @@ static int __process_rw_fota() _LOG("finish request [time : %d ms]\n", (int)(endtime - starttime)); } + fclose(fp); - if (fp != NULL) - fclose(fp); + return 0; +} + +static int __check_tmp_all_preload_rw_pkg_list() +{ + char tmp_path[BUF_SIZE]; + snprintf(tmp_path, BUF_SIZE, "%s.tmp", ALL_PRELOAD_RW_PKG_LIST); + if (access(tmp_path, F_OK) == 0) { + if (rename(tmp_path, ALL_PRELOAD_RW_PKG_LIST)) { + _LOG("rename tmp all preload rw pkg list fail : %s\n", + strerror(errno)); + return -1; + } + } + return 0; +} + +static int __fill_preload_rw_table(GHashTable *preload_rw_table) +{ + FILE *fp; + char buf[BUF_SIZE]; + char *pkgid; + + fp = fopen(ALL_PRELOAD_RW_PKG_LIST, "r"); + retvm_if(fp == NULL, -1, "Fail get : %s\n", ALL_PRELOAD_RW_PKG_LIST); + + while (fgets(buf, BUF_SIZE, fp) != NULL) { + __str_trim(buf); + + pkgid = __getvalue(buf, TOKEN_PKGID_STR, 1); + if (pkgid == NULL) { + _LOG("pkgid is null\n"); + continue; + } + + __insert_preload_rw_table(preload_rw_table, pkgid); + FREE_AND_NULL(pkgid); + } + fclose(fp); return 0; } int main(int argc, char *argv[]) { + GHashTable *preload_rw_table; int ret = 0; /* check pkgmgr-fota dir, if it is not, then exit */ @@ -1141,26 +1265,48 @@ int main(int argc, char *argv[]) //__get_pkginfo_from_opt(); - if (argc == 1) { - ret = __process_ro_fota(); - retvm_if(ret < 0, EXIT_FAILURE, - "__process_ro_fota is failed.\n"); - ret = __process_rw_fota(); - retvm_if(ret < 0, EXIT_FAILURE, - "__process_rw_fota is failed.\n"); - return EXIT_SUCCESS; - } + ret = __check_tmp_all_preload_rw_pkg_list(); + retvm_if(ret < 0, -1, + "__check_tmp_all_preload_rw_pkg_list is failed.\n"); + + preload_rw_table = g_hash_table_new_full( + g_str_hash, g_str_equal, free, NULL); + ret = __fill_preload_rw_table(preload_rw_table); + retvm_if(ret < 0, -1, "__fill_preload_rw_table is failed.\n"); - if (strcmp(argv[1], "-rof") == 0) { - ret = __process_ro_fota(); - retvm_if(ret < 0, EXIT_FAILURE, - "__process_ro_fota is failed.\n"); - } else if (strcmp(argv[1], "-rwf") == 0) { - ret = __process_rw_fota(); - retvm_if(ret < 0, EXIT_FAILURE, - "__process_rw_fota is failed.\n"); + if (argc == 1) { + ret = __process_ro_fota(preload_rw_table); + if (ret < 0) { + g_hash_table_destroy(preload_rw_table); + _LOGE("__process_ro_fota is failed.\n"); + return EXIT_FAILURE; + } + ret = __process_rw_fota(preload_rw_table); + if (ret < 0) { + g_hash_table_destroy(preload_rw_table); + _LOGE("__process_ro_fota is failed.\n"); + return EXIT_FAILURE; + } } else { - fprintf(stderr, "not supported operand\n"); + if (strcmp(argv[1], "-rof") == 0) { + ret = __process_ro_fota(preload_rw_table); + if (ret < 0) { + g_hash_table_destroy(preload_rw_table); + _LOGE("__process_ro_fota is failed.\n"); + return EXIT_FAILURE; + } + } else if (strcmp(argv[1], "-rwf") == 0) { + ret = __process_rw_fota(preload_rw_table); + if (ret < 0) { + g_hash_table_destroy(preload_rw_table); + _LOGE("__process_ro_fota is failed.\n"); + return EXIT_FAILURE; + } + } else { + fprintf(stderr, "not supported operand\n"); + } } + __make_preload_rw_list(preload_rw_table); + g_hash_table_destroy(preload_rw_table); return EXIT_SUCCESS; } -- 2.7.4 From f2d40fa257d2bc31c765a7c35d657317feb74c0d Mon Sep 17 00:00:00 2001 From: Ilho Kim Date: Fri, 12 Jul 2019 15:46:24 +0900 Subject: [PATCH 16/16] Release version 0.5.3 Changes: - Add upgrade script for version 30005 - Handle preload-rw package deleted by user when OTA Change-Id: I334c72992de747623ea60cd31e4af09709fe9b0e Signed-off-by: Ilho Kim --- packaging/pkgmgr-tool.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/pkgmgr-tool.spec b/packaging/pkgmgr-tool.spec index d0e7c5d..af614e7 100644 --- a/packaging/pkgmgr-tool.spec +++ b/packaging/pkgmgr-tool.spec @@ -1,6 +1,6 @@ Name: pkgmgr-tool Summary: Packager Manager Tool package -Version: 0.5.2 +Version: 0.5.3 Release: 1 Group: Application Framework/Package Management License: Apache-2.0 -- 2.7.4