Add data-checkpoint.service to local-fs.target.wants
authorMateusz Moscicki <m.moscicki2@partner.samsung.com>
Fri, 16 Feb 2024 13:46:00 +0000 (14:46 +0100)
committerChanwoo Choi <cw00.choi@samsung.com>
Fri, 26 Apr 2024 05:52:08 +0000 (14:52 +0900)
When the system starts in FOTA mode, data checkpoint of system-data and
user partitions must be created so that data can be resotred in case of
upgrade (data migration) failure.

Change-Id: I5deffff111bd6527295a963b9904a087a649c23c

packaging/upgrade.spec
scripts/rw-upgrade/CMakeLists.txt
scripts/rw-upgrade/data-checkpoint.service.in
scripts/rw-upgrade/data-checkpoint.target [deleted file]
scripts/rw-upgrade/rw-update-macro.inc
scripts/rw-upgrade/update-checkpoint-create.sh
scripts/rw-upgrade/update-finalize.sh.in
scripts/rw-upgrade/update-verify.sh [new file with mode: 0644]

index d8ff70a..a28a103 100644 (file)
@@ -110,7 +110,7 @@ ln -s ../clone_partitions_recovery.service %{buildroot}%{_unitdir}/recovery.serv
 
 # rw-update
 mkdir -p %{buildroot}%{_unitdir}/system-update.target.wants
-mkdir -p %{buildroot}%{_unitdir}/data-checkpoint.target.wants
+mkdir -p %{buildroot}%{_unitdir}/local-fs.target.wants
 mkdir -p %{buildroot}%{_unitdir}/delayed.target.wants
 ln -s ../getty.target %{buildroot}%{_unitdir}/system-update.target.wants
 ln -s ../cynara.socket %{buildroot}%{_unitdir}/system-update.target.wants
@@ -118,8 +118,7 @@ ln -s ../dbus.socket %{buildroot}%{_unitdir}/system-update.target.wants
 ln -s ../udev-sdb-init.service %{buildroot}%{_unitdir}/system-update.target.wants
 ln -s ../offline-update.service %{buildroot}%{_unitdir}/system-update.target.wants
 ln -s ../udev-trigger-dmbow@.service %{buildroot}%{_unitdir}/system-update.target.wants/udev-trigger-dmbow@user.service
-ln -s ../data-checkpoint.target %{buildroot}%{_unitdir}/system-update.target.wants
-ln -s ../data-checkpoint.service %{buildroot}%{_unitdir}/data-checkpoint.target.wants/data-checkpoint.service
+ln -s ../data-checkpoint.service %{buildroot}%{_unitdir}/local-fs.target.wants/data-checkpoint.service
 ln -s ../update-post.service %{buildroot}%{_unitdir}/system-update.target.wants
 ln -s ../update-finalize.service %{buildroot}%{_unitdir}/delayed.target.wants
 
@@ -164,12 +163,10 @@ fi
 %attr(755,root,root) %{img_verifier_root_ca_dir}
 # rw-upgrade
 %{_unitdir}/data-checkpoint.service
-%{_unitdir}/data-checkpoint.target
-%{_unitdir}/data-checkpoint.target.wants/data-checkpoint.service
+%{_unitdir}/local-fs.target.wants/data-checkpoint.service
 %{_unitdir}/delayed.target.wants/update-finalize.service
 %{_unitdir}/offline-update.service
 %{_unitdir}/system-update.target.wants/cynara.socket
-%{_unitdir}/system-update.target.wants/data-checkpoint.target
 %{_unitdir}/system-update.target.wants/dbus.socket
 %{_unitdir}/system-update.target.wants/getty.target
 %{_unitdir}/system-update.target.wants/offline-update.service
@@ -189,6 +186,7 @@ fi
 %{upgrade_scripts_dir}/update-init.sh
 %{upgrade_scripts_dir}/update-post.sh
 %{upgrade_scripts_dir}/update.sh
+%{upgrade_scripts_dir}/update-verify.sh
 
 %files -n parse-dynparts
 %manifest upgrade.manifest
@@ -198,4 +196,4 @@ fi
 %files -n resize-dynparts
 %manifest upgrade.manifest
 %license LICENSE.Apache-2.0
-%{_bindir}/resize-dynparts
\ No newline at end of file
+%{_bindir}/resize-dynparts
index 48dddc8..b27a295 100644 (file)
@@ -11,7 +11,6 @@ INSTALL(FILES
        udev-sdb-init.service
        offline-update.service
        data-checkpoint.service
-       data-checkpoint.target
        update-post.service
        update-finalize.service
        udev-trigger-dmbow@.service
@@ -30,5 +29,6 @@ INSTALL(FILES
        update-checkpoint-create.sh
        update-post.sh
        update-finalize.sh
+       update-verify.sh
        DESTINATION ${UPGRADE_SCRIPTS_DIR}
        PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
index ed5d32f..2f373fc 100644 (file)
@@ -1,9 +1,9 @@
 [Unit]
 Description=Data checkpoint
 DefaultDependencies=no
+ConditionKernelCommandLine=bootmode=fota
 Before=systemd-journald.service opt.mount opt-usr.mount mnt-inform.mount
 
-
 [Service]
 Type=oneshot
 ExecStart=@UPGRADE_SCRIPTS_DIR@/update-checkpoint-create.sh
diff --git a/scripts/rw-upgrade/data-checkpoint.target b/scripts/rw-upgrade/data-checkpoint.target
deleted file mode 100644 (file)
index b4694c5..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-[Unit]
-Description=Data checkpoint
-DefaultDependencies=no
-Conflicts=shutdown.target
-Before=local-fs-pre.target
-OnFailure=emergency.target
-OnFailureJobMode=replace-irreversibly
index 70a5c2d..9fc58a1 100644 (file)
@@ -266,8 +266,10 @@ COMMIT_CHANGES()
        if ! COMMIT_PARTITION system-data; then
                return 1
        fi
-       if ! COMMIT_PARTITION user; then
-               return 1
+       if [ -e "/usr/lib/systemd/system/opt-usr.mount" ]; then 
+               if ! COMMIT_PARTITION user; then
+                       return 1
+               fi
        fi
 
        return 0
index 525f1a4..fb456fc 100644 (file)
@@ -25,9 +25,10 @@ exit_handler() {
 }
 
 get_partition_id() {
-        PART_ROOTFS=$("$BLKID" --match-token PARTLABEL=rootfs -o device -l || "$BLKID" --match-token LABEL=rootfs -o device -l)
         PART_SYSTEM_DATA=$("$BLKID" --match-token PARTLABEL=system-data -o device -l || "$BLKID" --match-token LABEL=system-data -o device -l)
-        PART_USER=$("$BLKID" --match-token PARTLABEL=user -o device -l || "$BLKID" --match-token LABEL=user -o device -l)
+        if [ -e "/usr/lib/systemd/system/opt-usr.mount" ]; then
+                PART_USER=$("$BLKID" --match-token PARTLABEL=user -o device -l || "$BLKID" --match-token LABEL=user -o device -l)
+        fi
         if [[ ! $(</proc/cmdline) =~ partition_ab= ]]; then
                 PART_HAL=$("$BLKID" --match-token PARTLABEL=hal -o device -l || "$BLKID" --match-token LABEL=hal -o device -l)
         else
index 6d1a137..7b9e16e 100644 (file)
@@ -3,7 +3,7 @@
 PATH=/bin:/usr/bin:/sbin:/usr/sbin
 
 RW_MACRO=@UPGRADE_SCRIPTS_DIR@/rw-update-macro.inc
-
+UPDATE_VERIFY_SCRIPT=@UPGRADE_SCRIPTS_DIR@/update-verify.sh
 HAL_SET_UPGRADE_STATUS=/usr/bin/device_board_set_upgrade_status
 
 SCRIPT_NAME=$(basename $0)
@@ -35,10 +35,7 @@ else
        UPDATE_PREPARE_ERR=1
 fi
 
-# TOOD: check if system is stable
-UPDATE_SUCCESS=1
-
-if [ -z ${UPDATE_PREPARE_ERR+x} ] && [ "${UPDATE_SUCCESS}" == "1" ]; then
+if [ -z ${UPDATE_PREPARE_ERR+x} ] && "$UPDATE_VERIFY_SCRIPT"; then
        /usr/bin/device_board_clear_boot_mode
        if ! COMMIT_CHANGES; then
                ERROR "FAIL: Commit changes error"
diff --git a/scripts/rw-upgrade/update-verify.sh b/scripts/rw-upgrade/update-verify.sh
new file mode 100644 (file)
index 0000000..472aa2c
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+exit 0