Add appsvc db upgrade script 00/265400/5
authorHwankyu Jhun <h.jhun@samsung.com>
Mon, 18 Oct 2021 07:34:14 +0000 (16:34 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 19 Oct 2021 01:02:02 +0000 (10:02 +0900)
To upgrade database files properly, the user version is added to database files.
From Tizen 6.5, the schema of the appsvc was changed. The invalid foreign key
was removed. The 1_appsvc_db_upgrade.sh file is for upgrading the appsvc db file.

Adds:
 - 501.appsvc_db_upgrade.sh
 - 1_appsvc_db_upgrade.sh

Change-Id: I173929f757799d9e7bc25361a37b4a6e3847b9fd
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
CMakeLists.txt
data/appsvc_db.sql.in [moved from data/appsvc_db.sql with 95% similarity]
packaging/aul.spec
parser/component/CMakeLists.txt
parser/component/data/component_db.sql.in [moved from parser/component/data/component_db.sql with 93% similarity]
parser/component/script/14_component-add.post.in [moved from parser/component/script/14_component-add.post with 97% similarity]
parser/component/script/501.component_upgrade.sh.in [moved from parser/component/script/501.component_upgrade.sh with 97% similarity]
scripts/501.appsvc_db_upgrade.sh.in [new file with mode: 0755]
scripts/upgrade/1_appsvc_db_upgrade.sh.in [new file with mode: 0755]
tool/recovery/appsvc_db_recovery.c
tool/recovery/component_db_recovery.c

index bc0e00a..4bc441d 100644 (file)
@@ -10,6 +10,9 @@ SET(EXEC_PREFIX "\${prefix}")
 
 ADD_DEFINITIONS("-DSHARE_PREFIX=\"${SHARE_INSTALL_PREFIX}/aul\"")
 
+ADD_DEFINITIONS("-DAPPSVC_DB_VERSION=\"${APPSVC_DB_VERSION}\"")
+ADD_DEFINITIONS("-DCOMPONENT_DB_VERSION=\"${COMPONENT_DB_VERSION}\"")
+
 ## Compile flags
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-zdefs -fvisibility=hidden -g -Wall -Werror -fpic ")
 SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
@@ -116,7 +119,14 @@ INSTALL(TARGETS ${TARGET_AUL} DESTINATION ${LIB_INSTALL_DIR} COMPONENT RuntimeLi
 # pkgconfig file
 CONFIGURE_FILE(aul.pc.in aul.pc @ONLY)
 CONFIGURE_FILE(feature/preexec_list.txt.in feature/preexec_list.txt @ONLY)
-
+CONFIGURE_FILE(data/appsvc_db.sql.in data/appsvc_db.sql @ONLY)
+CONFIGURE_FILE(scripts/501.appsvc_db_upgrade.sh.in scripts/501.appsvc_db_upgrade.sh @ONLY)
+CONFIGURE_FILE(scripts/upgrade/1_appsvc_db_upgrade.sh.in scripts/upgrade/1_appsvc_db_upgrade.sh @ONLY)
+
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/501.appsvc_db_upgrade.sh
+  DESTINATION /usr/share/upgrade/scripts)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/upgrade/1_appsvc_db_upgrade.sh
+  DESTINATION /etc/aul/upgrade/scripts)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/aul.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/feature/preexec_list.txt DESTINATION ${SHARE_INSTALL_PREFIX}/aul )
 INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/miregex DESTINATION ${SHARE_INSTALL_PREFIX}/aul )
similarity index 95%
rename from data/appsvc_db.sql
rename to data/appsvc_db.sql.in
index d7dbbc9..55713c4 100755 (executable)
@@ -1,4 +1,5 @@
 PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = @APPSVC_DB_VERSION@;
 
 CREATE TABLE IF NOT EXISTS appsvc (
         operation TEXT,
index f569be2..fb1b658 100644 (file)
@@ -111,6 +111,8 @@ Application Utility Library (devel)
 %endif
 
 %define _aulresdir /opt/usr/home/owner/share/aul/res
+%define appsvc_db_version 1
+%define component_db_version 1
 
 %prep
 %setup -q
@@ -140,6 +142,8 @@ MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
        -DMAJORVER=${MAJORVER} \
        -D_TIZEN_FEATURE_PRELINK:BOOL=${_TIZEN_FEATURE_PRELINK} \
        -DAUL_RES_DIR=%{_aulresdir} \
+       -DAPPSVC_DB_VERSION=%{appsvc_db_version} \
+       -DCOMPONENT_DB_VERSION=%{component_db_version} \
        .
 
 %__make %{?_smp_mflags}
@@ -242,6 +246,8 @@ chmod +x %{_aulresdir}/tpk/install.sh
 
 %attr(0755,root,root) %{_sysconfdir}/gumd/useradd.d/*
 %attr(0755,root,root) %{_datadir}/upgrade/scripts/501.component_upgrade.sh
+%attr(0755,root,root) %{_datadir}/upgrade/scripts/501.appsvc_db_upgrade.sh
+%attr(0755,root,root) %{_sysconfdir}/aul/upgrade/scripts/*
 
 %files exec-checker-plugin
 %manifest %{name}-exec-checker-plugin.manifest
index 2f93677..82c297f 100644 (file)
@@ -23,6 +23,12 @@ APPLY_PKG_CONFIG(${TARGET_COMPONENT_PLUGIN_PARSER} PUBLIC
   SQLITE3_DEPS
 )
 
+CONFIGURE_FILE(data/component_db.sql.in data/component_db.sql @ONLY)
+CONFIGURE_FILE(script/14_component-add.post.in
+  script/14_component-add.post @ONLY)
+CONFIGURE_FILE(script/501.component_upgrade.sh.in
+  script/501.component_upgrade.sh @ONLY)
+
 INSTALL(TARGETS ${TARGET_COMPONENT_PLUGIN_PARSER}
   DESTINATION ${SYSCONF_INSTALL_DIR}/package-manager/parserlib)
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/component.info
similarity index 93%
rename from parser/component/data/component_db.sql
rename to parser/component/data/component_db.sql.in
index 8dfa36a..4b83645 100644 (file)
@@ -1,4 +1,5 @@
 PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = @COMPONENT_DB_VERSION@;
 
 CREATE TABLE IF NOT EXISTS component_info (
        package TEXT NOT NULL,
similarity index 97%
rename from parser/component/script/14_component-add.post
rename to parser/component/script/14_component-add.post.in
index 236bc55..b71d6d2 100755 (executable)
@@ -16,6 +16,7 @@ chown $TZ_USER_NAME:system_share /opt/dbspace/user/$2
 # Create DB
 sqlite3 /opt/dbspace/user/$2/.component.db << EOF
 PRAGMA journal_mode = PERSIST;
+PAAGMA user_version = @COMPONENT_DB_VERSION@;
 
 CREATE TABLE IF NOT EXISTS component_info (
        package TEXT NOT NULL,
@@ -13,6 +13,7 @@ DEFAULT_USER_DB=/opt/dbspace/user/5001/.component.db
 # Create DB
 sqlite3 $GLOBAL_USER_DB << EOF
 PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = @COMPONENT_DB_VERSION@;
 
 CREATE TABLE IF NOT EXISTS component_info (
        package TEXT NOT NULL,
diff --git a/scripts/501.appsvc_db_upgrade.sh.in b/scripts/501.appsvc_db_upgrade.sh.in
new file mode 100755 (executable)
index 0000000..63ad671
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/sh
+PATH="/usr/bin:/bin:/usr/sbin:/sbin"
+
+DB_VERSION="@APPSVC_DB_VERSION@"
+
+FILE_DB=".appsvc.db"
+PATH_SYS_DB="/opt/dbspace/${FILE_DB}"
+PATH_USER_DB_DIR="/opt/dbspace/user"
+PATH_UPGRADE_SCRIPT_DIR="/etc/aul/upgrade/scripts"
+NAME_UPGRADE_SCRIPT="appsvc_db_upgrade.sh"
+CURRENT_DB_VERSION=0
+
+CompareDBVersion() {
+  PATH_DB=$1
+  CURRENT_DB_VERSION=`sqlite3 ${PATH_DB} 'PRAGMA user_version;'`
+
+  echo "## Compare DB version"
+  echo " - Path: ${PATH_DB}"
+  echo " - Current DB version: ${CURRENT_DB_VERSION}"
+
+  if [ "${DB_VERSION}" -eq "${CURRENT_DB_VERSION}" ]; then
+    echo " - DB version[${DB_VERSION}] is equal to current DB version[${CURRENT_DB_VERSION}]"
+    return 0
+  elif [ "${DB_VERSION}" -gt "${CURRENT_DB_VERSION}" ]; then
+    echo " - DB version[${DB_VERSION}] is greater than current DB version[${CURRENT_DB_VERSION}]"
+    return 1
+  else
+    echo " - DB version[${DB_VERSION}] is less than current DB version[${CURRENT_DB_VERSION}]"
+    return 0
+  fi
+  echo "## Compare DB version [Done]"
+}
+
+UpgradeDB() {
+  PATH_DB=$1
+  VERSION=$2
+  echo "## UpgradeDB Path[${PATH_DB}] Version[${VERSION}]"
+  i=${VERSION}
+  while [ ${i} -le ${DB_VERSION} ]; do
+    FILE_SCRIPT="${i}_${NAME_UPGRADE_SCRIPT}"
+    PATH_SCRIPT="${PATH_UPGRADE_SCRIPT_DIR}/${FILE_SCRIPT}"
+    if [ -e "${PATH_SCRIPT}" ]; then
+      echo " - Script: ${PATH_SCRIPT}"
+      ${PATH_SCRIPT} ${PATH_DB}
+    fi
+
+    i=`expr ${i} + 1`
+  done
+  echo "## UpgradeDB Path[${PATH_DB}] Version[${VERSION}] [Done]"
+}
+
+CheckAndUpgradeDB() {
+  echo "### Check and upgrade DB"
+
+  CompareDBVersion ${PATH_SYS_DB}
+  RESULT=$?
+  if [ "${RESULT}" -eq 1 ]; then
+    VERSION=`expr ${CURRENT_DB_VERSION} + 1`
+    UpgradeDB ${PATH_SYS_DB} ${VERSION}
+  fi
+
+  for DIR in ${PATH_USER_DB_DIR}/*; do
+    echo " - Directory: ${DIR}"
+    if [ -d "${DIR}" ]; then
+      PATH_DB="${DIR}/${FILE_DB}"
+      CompareDBVersion ${PATH_DB}
+      RESULT=$?
+      if [ "${RESULT}" -eq 1 ]; then
+        VERSION=`expr ${CURRENT_DB_VERSION} + 1`
+        UpgradeDB ${PATH_DB} ${VERSION}
+      fi
+    fi
+  done
+  echo "### Check and upgrade DB [Done]"
+}
+
+echo "#### Upgrade appsvc db ####"
+CheckAndUpgradeDB
+echo "#### Upgrade appsvc db [Done] ####"
diff --git a/scripts/upgrade/1_appsvc_db_upgrade.sh.in b/scripts/upgrade/1_appsvc_db_upgrade.sh.in
new file mode 100755 (executable)
index 0000000..22789ae
--- /dev/null
@@ -0,0 +1,144 @@
+#!/bin/sh
+
+#------------------------------------------#
+# appsvc db upgrade ver.1                  #
+#------------------------------------------#
+
+# Macro
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+PATH_DB="$1"
+PATH_NEW_DB="${PATH_DB}.new"
+PATH_BACKUP_DB="${PATH_DB}.bak"
+
+Init() {
+  echo "### Initialize"
+  cp ${PATH_DB} ${PATH_BACKUP_DB}
+  cp ${PATH_DB}-journal ${PATH_BACKUP_DB}-journal
+
+  if [ -e "${PATH_NEW_DB}" ]; then
+    rm ${PATH_NEW_DB}
+  fi
+
+  if [  -e "${PATH_NEW_DB}-journal" ]; then
+    rm ${PATH_NEW_DB}-journal
+  fi
+}
+
+# Create new DB
+CreateNewDB() {
+  echo " - Create new DB: ${PATH_NEW_DB}"
+
+sqlite3 ${PATH_NEW_DB} << EOF
+PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = 1;
+
+CREATE TABLE IF NOT EXISTS appsvc (
+  operation TEXT,
+  mime_type TEXT DEFAULT 'NULL',
+  uri TEXT DEFAULT 'NULL',
+  pkg_name TEXT,
+  PRIMARY KEY (operation,mime_type,uri)
+);
+
+CREATE TABLE IF NOT EXISTS alias_info (
+  alias_appid TEXT NOT NULL,
+  appid TEXT NOT NULL,
+  enable TEXT NOT NULL DEFAULT 'true',
+  PRIMARY KEY (alias_appid)
+);
+
+CREATE TABLE IF NOT EXISTS alias_info_for_uid (
+  appid TEXT NOT NULL,
+  uid INTEGER NOT NULL,
+  is_enabled TEXT NOT NULL DEFAULT 'false',
+  PRIMARY KEY (appid, uid)
+);
+
+CREATE TRIGGER IF NOT EXISTS update_alias_info_for_uid
+  AFTER UPDATE ON alias_info_for_uid
+  BEGIN
+    DELETE FROM alias_info_for_uid
+    WHERE is_enabled='true';
+  END;
+
+CREATE TABLE IF NOT EXISTS allowed_info (
+  appid TEXT NOT NULL,
+  allowed_appid TEXT NOT NULL,
+  PRIMARY KEY (appid, allowed_appid)
+);
+EOF
+}
+
+# Insert old data into new DB
+InsertAppsvc() {
+  echo " - Insert appsvc"
+  TABLE=`sqlite3 ${PATH_DB} 'SELECT operation, mime_type, uri, pkg_name FROM appsvc;'`
+  for ROW in ${TABLE}; do
+    IFS='|' read -ra VALUE <<< "${ROW}";
+    QUERY="INSERT INTO appsvc(operation, mime_type, uri, pkg_name) VALUES('${VALUE[0]}', '${VALUE[1]}', '${VALUE[2]}', '${VALUE[3]}');"
+    echo " + Query: ${QUERY}"
+    sqlite3 ${PATH_NEW_DB} "${QUERY}"
+  done
+}
+
+InsertAliasInfo() {
+  echo " - Insert alias_info"
+  TABLE=`sqlite3 ${PATH_DB} 'SELECT alias_appid, appid, enable FROM alias_info;'`
+  for ROW in ${TABLE}; do
+    IFS='|' read -ra VALUE <<< "${ROW}";
+    QUERY="INSERT INTO alias_info(alias_appid, appid, enable) VALUES('${VALUE[0]}', '${VALUE[1]}', '${VALUE[2]}');"
+    echo " + Query: ${QUERY}"
+    sqlite3 ${PATH_NEW_DB} "${QUERY}"
+  done
+}
+
+InsertAliasInfoForUid() {
+  echo " - Insert alias_info_for_uid"
+  TABLE=`sqlite3 ${PATH_DB} 'SELECT appid, uid, is_enabled FROM alias_info_for_uid;'`
+  for ROW in ${TABLE}; do
+    IFS='|' read -ra VALUE <<< "${ROW}";
+    QUERY="INSERT INTO alias_info_for_uid(appid, uid, is_enabled) VALUES('${VALUE[0]}', '${VALUE[1]}', '${VALUE[2]}');"
+    echo " + Query: ${QUERY}"
+    sqlite3 ${PATH_NEW_DB} "${QUERY}"
+  done
+}
+
+InsertAllowedInfo() {
+  echo " - Insert allowed_info"
+  TABLE=`sqlite3 ${PATH_DB} 'SELECT appid, allowed_appid FROM allowed_info;'`
+  for ROW in ${TABLE}; do
+    IFS='|' read -ra VALUE <<< "${ROW}";
+    QUERY="INSERT INTO allowed_info(appid, allowed_appid) VALUES('${VALUE[0]}', '${VALUE[1]}');"
+    echo " + Query: ${QUERY}"
+    sqlite3 ${PATH_NEW_DB} "${QUERY}"
+  done
+}
+
+Upgrade() {
+  echo "### Upgrade"
+  CreateNewDB
+
+  InsertAppsvc
+  InsertAliasInfo
+  InsertAliasInfoForUid
+  InsertAllowedInfo
+
+  cp ${PATH_NEW_DB} ${PATH_DB}
+  cp ${PATH_NEW_DB}-journal ${PATH_DB}-journal
+}
+
+Fini() {
+  echo "### Finish"
+  rm ${PATH_NEW_DB}
+  rm ${PATH_NEW_DB}-journal
+
+  rm ${PATH_BACKUP_DB}
+  rm ${PATH_BACKUP_DB}-journal
+}
+
+echo "#### 1. Upgrade appsvc db ####"
+Init
+Upgrade
+Fini
+echo "#### 1. Upgrade appsvc db [Done] ####"
index 20cd07c..481111d 100644 (file)
@@ -26,6 +26,7 @@
 
 #define QUERY_CREATE_APPSVC                                                    \
         "PRAGMA journal_mode = PERSIST;\n"                                     \
+        "PRAGMA user_version = " APPSVC_DB_VERSION ";\n"                       \
         "CREATE TABLE IF NOT EXISTS appsvc (\n"                                \
         "  operation TEXT,\n"                                                  \
         "  mime_type TEXT DEFAULT 'NULL',\n"                                   \
index 69dbe42..da63aec 100644 (file)
@@ -26,6 +26,7 @@
 
 #define QUERY_CREATE_COMPONENT                                                 \
         "PRAGMA journal_mode = PERSIST;\n"                                     \
+        "PRAGMA user_version = " COMPONENT_DB_VERSION ";\n"                    \
         "CREATE TABLE IF NOT EXISTS component_info (\n"                        \
         "  package TEXT NOT NULL,\n"                                           \
         "  app_id TEXT NOT NULL,\n"                                            \