Add partition cloning 30/273830/6 submit/tizen/20220422.113153
authorMateusz Moscicki <m.moscicki2@partner.samsung.com>
Thu, 14 Apr 2022 08:16:44 +0000 (10:16 +0200)
committerMateusz Mościcki <m.moscicki2@partner.samsung.com>
Thu, 21 Apr 2022 07:12:29 +0000 (07:12 +0000)
When the system boots correctly after the upgrade, we clone the
partitions listed in /hal/etc/upgrade/background_copy.list so that we can
boot from the other slot if nececssary.

Change-Id: I977688e1a159e3504bfe9422bda4103d3f2867a1

clone_partitions/clone_partitions.service [new file with mode: 0644]
clone_partitions/clone_partitions.sh [new file with mode: 0644]
packaging/tota-ua.spec
scripts/upgrade-prepare-partitions.sh

diff --git a/clone_partitions/clone_partitions.service b/clone_partitions/clone_partitions.service
new file mode 100644 (file)
index 0000000..6e89d6e
--- /dev/null
@@ -0,0 +1,18 @@
+[Unit]
+Description=Clone partitions
+After=system-delayed-target-done.service
+ConditionKernelCommandLine=bootmode=normal
+
+[Service]
+Type=simple
+SmackProcessLabel=System
+ExecStart=/usr/bin/clone_partitions.sh
+RemainAfterExit=true
+Nice=19
+IOSchedulingClass=idle
+IOSchedulingPriority=7
+CPUQuota=90%
+CPUQuotaPeriodSec=100ms
+
+[Install]
+WantedBy=multi-user.target
diff --git a/clone_partitions/clone_partitions.sh b/clone_partitions/clone_partitions.sh
new file mode 100644 (file)
index 0000000..939324f
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/bash
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+set -o errexit
+trap 'echo "Aborting due to errexit on ${0##*/}:$LINENO. Exit code: $?" >&2' ERR
+set -o errtrace -e -o pipefail
+
+if [ ! -z "${UPGRADE_DEBUG}" ]; then
+       set -x
+fi
+
+if [ "$(device_board_get_partition_ab_cloned)" -eq "1" ]; then
+       echo "[Info] Partitions already cloned"
+       exit 0
+fi
+
+if /usr/libexec/upgrade-support/upgrade-prepare-partitions.sh; then
+       echo "[Info] Partitions have been cloned"
+       device_board_set_partition_ab_cloned
+else
+       echo "[Error] Partitions have not been cloned"
+fi
index d5795086e4ea220b195e91de89cfffb7c6242bc9..1137a240d19cf0efa5154df9b9ec26f433a239b5 100755 (executable)
@@ -60,6 +60,10 @@ install -m 755 scripts/*.sh scripts/*.inc %{buildroot}%{upgrade_scripts_dir}
 %define fota_dir /opt/usr/data/fota
 mkdir -p %{buildroot}%{fota_dir}
 mkdir -p %{buildroot}%{img_verifier_root_ca_dir}
+mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants
+install -m 644 clone_partitions/clone_partitions.service %{buildroot}%{_unitdir}
+ln -s ../clone_partitions.service %{buildroot}%{_unitdir}/multi-user.target.wants/
+install -m 775 clone_partitions/clone_partitions.sh %{buildroot}%{_bindir}
 
 %post
 
@@ -72,6 +76,7 @@ mkdir -p %{buildroot}%{img_verifier_root_ca_dir}
 %attr(775, root, system_fw) %{fota_dir}
 %defattr(-,root,root,-)
 %{_bindir}/delta.ua
+%{_bindir}/clone_partitions.sh
 %{upgrade_scripts_dir}/upgrade-trigger.sh
 %{upgrade_scripts_dir}/upgrade-partial.sh
 %{upgrade_scripts_dir}/upgrade-prepare-partitions.sh
@@ -81,6 +86,8 @@ mkdir -p %{buildroot}%{img_verifier_root_ca_dir}
 %{upgrade_scripts_dir}/upgrade-common.inc
 
 %attr(700,-,-) %{tota_ua_list_dir}/40-tota-ua.list
+%attr(644, root, root) %{_unitdir}/clone_partitions.service
+%attr(644, root, root) %{_unitdir}/multi-user.target.wants/clone_partitions.service
 
 # Image verifier
 %{_sbindir}/img-verifier
index be47f44ac68a58680524046174c271af409c25cc..0ccb149358c37155f773a1a3924a078d8d6c4717 100755 (executable)
@@ -11,7 +11,11 @@ PATH=/bin:/usr/bin:/sbin:/usr/sbin
 
 FOTA_DIR="/opt/usr/data/fota"
 
-. "$FOTA_DIR"/upgrade-common.inc
+if [ -r "${FOTA_DIR}/upgrade-common.inc" ]; then
+       . "$FOTA_DIR"/upgrade-common.inc
+else
+       . /usr/libexec/upgrade-support/upgrade-common.inc
+fi
 
 SCRIPT_NAME="upgrade-prepare-partitions.sh"
 LOG_FILE="/tmp/upgrade-prepare-partitions.log"
@@ -19,19 +23,6 @@ LOG_FILE="/tmp/upgrade-prepare-partitions.log"
 #       log msg [file]
 #------------------------------------------------
 
-create_update_dirs() {
-       # Check fota directory
-       if [ ! -d "$FOTA_DIR" ]; then
-               flog "[Info] Create fota dir..."
-               /bin/mkdir -p "$FOTA_DIR"
-       fi
-
-       if [ ! -d "$STATUS_DIR" ]; then
-               flog "[Info] Create status dir..."
-               /bin/mkdir -p "$STATUS_DIR"
-       fi
-}
-
 check_optional_partition() {
        partition_name="$1"
        exit_code="$2"
@@ -46,6 +37,5 @@ check_optional_partition() {
 
 check_ab_partition_scheme
 check_used_block_device
-create_update_dirs
 load_background_copy_list
 background_copy