Fix upgrade scripts 11/268911/3
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 5 Jan 2022 00:15:22 +0000 (09:15 +0900)
committerHwanKyu Jhun <h.jhun@samsung.com>
Wed, 5 Jan 2022 00:45:43 +0000 (00:45 +0000)
The 1_component_db_upgrade.sh script is added for upgrading the component db.
The 1_appsvc_db_upgrade.sh script is fixed to set the permissions to the appsvc db.

Change-Id: I7a66b0e5b3b660ddb12bfe84ecb5f289a2a7022c
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
packaging/aul.spec
parser/component/CMakeLists.txt
parser/component/script/501.component_upgrade.sh.in
parser/component/script/upgrade/1_component_db_upgrade.sh.in [new file with mode: 0755]
scripts/upgrade/1_appsvc_db_upgrade.sh.in

index 627af8e..4fb58be 100644 (file)
@@ -248,6 +248,7 @@ chmod +x %{_aulresdir}/tpk/install.sh
 %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/*
+%attr(0755,root,root) %{_sysconfdir}/aul/component/upgrade/scripts/*
 
 %files exec-checker-plugin
 %manifest %{name}-exec-checker-plugin.manifest
index 82c297f..597fe7b 100644 (file)
@@ -28,6 +28,8 @@ 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)
+CONFIGURE_FILE(script/upgrade/1_component_db_upgrade.sh.in
+  script/upgrade/1_component_db_upgrade.sh @ONLY)
 
 INSTALL(TARGETS ${TARGET_COMPONENT_PLUGIN_PARSER}
   DESTINATION ${SYSCONF_INSTALL_DIR}/package-manager/parserlib)
@@ -37,3 +39,5 @@ INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/script/14_component-add.post
   DESTINATION ${SYSCONF_INSTALL_DIR}/gumd/useradd.d)
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/script/501.component_upgrade.sh
   DESTINATION ${SHARE_INSTALL_PREFIX}/upgrade/scripts)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/script/upgrade/1_component_db_upgrade.sh
+  DESTINATION /etc/aul/component/upgrade/scripts)
index b636991..8a6c24b 100755 (executable)
@@ -1,66 +1,79 @@
 #!/bin/sh
+PATH="/usr/bin:/bin:/usr/sbin:/sbin"
 
-#------------------------------------------#
-# component db upgrade (4.0 -> 5.5)        #
-#------------------------------------------#
+DB_VERSION="@COMPONENT_DB_VERSION@"
 
-# Macro
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
+FILE_DB=".component.db"
+PATH_SYS_DB="/opt/dbspace/${FILE_DB}"
+PATH_USER_DB_DIR="/opt/dbspace/user"
+PATH_UPGRADE_SCRIPT_DIR="/etc/aul/component/upgrade/scripts"
+NAME_UPGRADE_SCRIPT="component_db_upgrade.sh"
+CURRENT_DB_VERSION=0
 
-GLOBAL_USER_DB=/opt/dbspace/.component.db
-DEFAULT_USER_DB=/opt/dbspace/user/5001/.component.db
+CompareDBVersion() {
+  PATH_DB=$1
+  CURRENT_DB_VERSION=`sqlite3 ${PATH_DB} 'PRAGMA user_version;'`
 
-# Create DB
-sqlite3 $GLOBAL_USER_DB << EOF
-PRAGMA journal_mode = PERSIST;
-PRAGMA user_version = @COMPONENT_DB_VERSION@;
+  echo "## Compare DB version"
+  echo " - Path: ${PATH_DB}"
+  echo " - Current DB version: ${CURRENT_DB_VERSION}"
 
-CREATE TABLE IF NOT EXISTS component_info (
-       package TEXT NOT NULL,
-       app_id TEXT NOT NULL,
-       component_id TEXT NOT NULL,
-       component_type TEXT NOT NULL,
-       component_launch_mode TEXT NOT NULL,
-       component_main TEXT NOT NULL,
-       component_icon_display NOT NULL,
-       component_taskmanage NOT NULL,
-       PRIMARY KEY (component_id)
-);
+  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]"
+}
 
-CREATE TABLE IF NOT EXISTS component_localized_info (
-       component_id TEXT NOT NULL,
-       component_locale TEXT NOT NULL DEFAULT 'No Locale',
-       component_label TEXT,
-       component_icon TEXT,
-       PRIMARY KEY (component_id, component_locale)
-       FOREIGN KEY (component_id)
-       REFERENCES component_info(component_id) ON DELETE CASCADE
-);
+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
 
-EOF
+    i=`expr ${i} + 1`
+  done
+  echo "## UpgradeDB Path[${PATH_DB}] Version[${VERSION}] [Done]"
+}
 
-# Create DB Path for default user
-mkdir -p /opt/dbspace/user/5001
-chmod 770 /opt/dbspace/user/5001
-chown owner:system_share /opt/dbspace/user/5001
-chsmack -a User::Home /opt/dbspace/user
-chsmack -a User::Home /opt/dbspace/user/5001
+CheckAndUpgradeDB() {
+  echo "### Check and upgrade DB"
 
-# Copy DB
-cp $GLOBAL_USER_DB $DEFAULT_USER_DB
+  CompareDBVersion ${PATH_SYS_DB}
+  RESULT=$?
+  if [ "${RESULT}" -eq 1 ]; then
+    VERSION=`expr ${CURRENT_DB_VERSION} + 1`
+    UpgradeDB ${PATH_SYS_DB} ${VERSION}
+  fi
 
-# Adjust Permission
-chmod 664 $GLOBAL_USER_DB
-chmod 664 $GLOBAL_USER_DB-journal
+  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]"
+}
 
-chown owner:users $GLOBAL_USER_DB
-chown owner:users $GLOBAL_USER_DB-journal
-
-chsmack -a User::Home $GLOBAL_USER_DB
-chsmack -a User::Home $GLOBAL_USER_DB-journal
-
-chmod 666 $DEFAULT_USER_DB
-chmod 666 $DEFAULT_USER_DB-journal
-
-chsmack -a User::Home $DEFAULT_USER_DB
-chsmack -a User::Home $DEFAULT_USER_DB-journal
+echo "#### Upgrade component db ####"
+CheckAndUpgradeDB
+echo "#### Upgrade component db [Done] ####"
diff --git a/parser/component/script/upgrade/1_component_db_upgrade.sh.in b/parser/component/script/upgrade/1_component_db_upgrade.sh.in
new file mode 100755 (executable)
index 0000000..5946178
--- /dev/null
@@ -0,0 +1,113 @@
+#!/bin/sh
+
+#------------------------------------------#
+# component db upgrade ver.1 (4.0 -> 5.5)  #
+#------------------------------------------#
+
+# 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() {
+sqlite3 ${PATH_NEW_DB} << EOF
+PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = @COMPONENT_DB_VERSION@;
+
+CREATE TABLE IF NOT EXISTS component_info (
+  package TEXT NOT NULL,
+  app_id TEXT NOT NULL,
+  component_id TEXT NOT NULL,
+  component_type TEXT NOT NULL,
+  component_launch_mode TEXT NOT NULL,
+  component_main TEXT NOT NULL,
+  component_icon_display NOT NULL,
+  component_taskmanage NOT NULL,
+  PRIMARY KEY (component_id)
+);
+
+CREATE TABLE IF NOT EXISTS component_localized_info (
+  component_id TEXT NOT NULL,
+  component_locale TEXT NOT NULL DEFAULT 'No Locale',
+  component_label TEXT,
+  component_icon TEXT,
+  PRIMARY KEY (component_id, component_locale)
+  FOREIGN KEY (component_id)
+  REFERENCES component_info(component_id) ON DELETE CASCADE
+);
+
+EOF
+}
+
+# Insert old data into new DB
+InsertComponentInfo() {
+  echo " - Insert component_info"
+  TABLE=`sqlite3 ${PATH_DB} 'SELECT package, app_id, component_id, component_type, component_launch_mode, component_main, component_icon_display, component_taskmanage  FROM component_info;'`
+  for ROW in ${TABLE}; do
+    IFS='|' read -ra VALUE <<< "${ROW}";
+    QUERY="INSERT INTO component_info(package, app_id, component_id, component_type, component_launch_mode, component_main, component_icon_display, component_taskmanage) VALUES('${VALUE[0]}', '${VALUE[1]}', '${VALUE[2]}', '${VALUE[3]}', '${VALUE[4]}', '${VALUE[5]}', '${VALUE[6]}', '${VALUE[7]}');"
+    echo " + Query: ${QUERY}"
+    sqlite3 ${PATH_NEW_DB} "${QUERY}"
+  done
+}
+
+InsertComponentLocalizedInfo() {
+  echo " - Insert component_localized_info"
+  TABLE=`sqlite3 ${PATH_DB} 'SELECT component_id, component_locale, component_label, component_icon  FROM component_localized_info;'`
+  for ROW in ${TABLE}; do
+    IFS='|' read -ra VALUE <<< "${ROW}";
+    QUERY="INSERT INTO component_localized_info(component_id, component_locale, component_label, component_icon) VALUES('${VALUE[0]}', '${VALUE[1]}', '${VALUE[2]}', '${VALUE[3]}');"
+    echo " + Query: ${QUERY}"
+    sqlite3 ${PATH_NEW_DB} "${QUERY}"
+  done
+}
+
+Upgrade() {
+  echo "### Upgrade"
+  CreateNewDB
+
+  InsertComponentInfo
+  InsertComponentLocalizedInfo
+
+  cp ${PATH_NEW_DB} ${PATH_DB}
+  cp ${PATH_NEW_DB}-journal ${PATH_DB}-journal
+
+  chown :system_share ${PATH_DB}
+  chown :system_share ${PATH_DB}-journal
+  chsmack -a User::Home ${PATH_DB}
+  chsmack -a User::Home ${PATH_DB}-journal
+  chmod 664 ${PATH_DB}
+  chmod 664 ${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 component db ####"
+Init
+Upgrade
+Fini
+echo "#### 1. Upgrade component db [Done] ####"
index 22789ae..2dba7d5 100755 (executable)
@@ -126,6 +126,13 @@ Upgrade() {
 
   cp ${PATH_NEW_DB} ${PATH_DB}
   cp ${PATH_NEW_DB}-journal ${PATH_DB}-journal
+
+  chown :system_share ${PATH_DB}
+  chown :system_share ${PATH_DB}-journal
+  chsmack -a User::Home ${PATH_DB}
+  chsmack -a User::Home ${PATH_DB}-journal
+  chmod 664 ${PATH_DB}
+  chmod 664 ${PATH_DB}-journal
 }
 
 Fini() {