Add update-finalize.service 92/266092/2 accepted/tizen/unified/20211123.143838 submit/tizen/20211116.140204 submit/tizen/20211119.125959
authorMateusz Moscicki <m.moscicki2@partner.samsung.com>
Thu, 4 Nov 2021 16:23:24 +0000 (17:23 +0100)
committerMateusz Moscicki <m.moscicki2@partner.samsung.com>
Tue, 9 Nov 2021 17:14:04 +0000 (18:14 +0100)
The service is started when RW Update is executed and default.target is
reached. It is used to verify that the system has booted correctly.

Change-Id: I5c046255d62fd943b63e111e3c999ce8bd45122a

CMakeLists.txt
packaging/system-rw-update.spec
units/update-finalize.service [new file with mode: 0644]
upgrade/rw-update-macro.inc
upgrade/update-finalize.sh.in [new file with mode: 0755]
upgrade/update.sh.in

index 5481ce413ac52ad946a2982cb8fe113889069d8b..93e159139c380811688a8f2caaa29a1cc46772ab 100755 (executable)
@@ -4,6 +4,7 @@ PROJECT(rw-updater C)
 CONFIGURE_FILE(upgrade/install-sdb-rule.sh.in  upgrade/install-sdb-rule.sh  @ONLY)
 CONFIGURE_FILE(upgrade/update-init.sh.in       upgrade/update-init.sh       @ONLY)
 CONFIGURE_FILE(upgrade/update.sh.in            upgrade/update.sh            @ONLY)
+CONFIGURE_FILE(upgrade/update-finalize.sh.in   upgrade/update-finalize.sh   @ONLY)
 CONFIGURE_FILE(upgrade/record-version.sh.in    upgrade/record-version.sh    @ONLY)
 CONFIGURE_FILE(units/udev-sdb-init.service.in  units/udev-sdb-init.service  @ONLY)
 CONFIGURE_FILE(units/offline-update.service.in units/offline-update.service @ONLY)
index 4ede81a85dd406281fb4419c8b50c01dfcdb977c..06d78fc55d5353a6d7f04c8e98c490f4339423dc 100644 (file)
@@ -45,6 +45,7 @@ cp upgrade/update-init.sh %{buildroot}%{upgrade_dir}
 cp upgrade/update.sh %{buildroot}%{upgrade_dir}
 cp upgrade/update-checkpoint-create.sh %{buildroot}%{upgrade_dir}
 cp upgrade/update-post.sh %{buildroot}%{upgrade_dir}
+cp upgrade/update-finalize.sh %{buildroot}%{upgrade_dir}
 mkdir -p %{buildroot}%{_unitdir}/system-update.target.wants
 install -m 644 units/offline-update.service %{buildroot}%{_unitdir}
 ln -s ../offline-update.service %{buildroot}%{_unitdir}/system-update.target.wants/
@@ -71,6 +72,11 @@ ln -s ../data-checkpoint.service %{buildroot}%{_unitdir}/data-checkpoint.target.
 install -m 644 units/update-post.service %{buildroot}%{_unitdir}
 ln -s ../update-post.service %{buildroot}%{_unitdir}/system-update.target.wants
 
+# Update finalize
+mkdir -p %{buildroot}%{_unitdir}/delayed.target.wants
+install -m 644 units/update-finalize.service %{buildroot}%{_unitdir}
+ln -s ../update-finalize.service %{buildroot}%{_unitdir}/delayed.target.wants
+
 %clean
 rm -rf %{buildroot}
 
@@ -88,9 +94,11 @@ fi
 %TZ_SYS_UPGRADE/*
 %{_unitdir}/offline-update.service
 %{_unitdir}/update-post.service
+%{_unitdir}/update-finalize.service
 %{_unitdir}/system-update.target.wants
 %{_unitdir}/udev-sdb-init.service
 %{_unitdir}/udev-trigger-dmbow@.service
 %{_unitdir}/data-checkpoint.target
 %{_unitdir}/data-checkpoint.service
 %{_unitdir}/data-checkpoint.target.wants/data-checkpoint.service
+%{_unitdir}/delayed.target.wants/update-finalize.service
diff --git a/units/update-finalize.service b/units/update-finalize.service
new file mode 100644 (file)
index 0000000..a98ce54
--- /dev/null
@@ -0,0 +1,15 @@
+[Unit]
+Description=Finalize OS update
+DefaultDependencies=no
+#Requisite=update-post.service default.target
+#After=update-post.service default.target system-delayed-target-done.service
+#IgnoreOnIsolate=true
+After=system-delayed-target-done.service
+ConditionKernelCommandLine=bootmode=fota
+
+[Service]
+Type=oneshot
+SmackProcessLabel=System::Privileged
+ExecStart=/usr/share/upgrade/update-finalize.sh
+RemainAfterExit=true
+
index 2bd932f02fd35305dd9731077fd43a5665f95a0a..27ab6e8bac8f0faca9884116b70b85eda9677975 100644 (file)
@@ -1,8 +1,31 @@
 #!/bin/sh
 
+STAT="/usr/bin/stat"
 OLD_VER=
 NEW_VER=
 OLD_VER_INFO="/opt/etc/version"
+COLOR_ERROR='\033[01;31m'
+COLOR_DEBUG='\033[01;34m'
+COLOR_NOTIFY='\033[01;33m'
+COLOR_RESET='\033[00;00m'
+
+DEBUG()
+{
+        LOG_TEXT=$1
+        echo -e "${COLOR_DEBUG}${LOG_TEXT}${COLOR_RESET}"
+}
+
+ERROR()
+{
+        LOG_TEXT=$1
+        echo -e "${COLOR_ERROR}${LOG_TEXT}${COLOR_RESET}"
+}
+
+NOTIFY()
+{
+        LOG_TEXT=$1
+        echo -e "${COLOR_NOTIFY}${LOG_TEXT}${COLOR_RESET}"
+}
 
 # Convert version to 4 digits
 convert_version() {
@@ -128,3 +151,75 @@ restore_backup_file() {
                done
        fi
 }
+
+COMMIT_BOW_PARTITION()
+{
+       LABEL=${1}
+
+       BOWDEV_PATH=/dev/mapper/bowdev_${LABEL}
+       DM_NUMBER=$(($("${STAT}" -c "0x%T" $(readlink -f ${BOWDEV_PATH}))))
+       echo 2 > /sys/block/dm-${DM_NUMBER}/bow/state
+       NOTIFY "Changes on partition ${LABEL} commited (dm-bow)"
+}
+
+COMMIT_F2FS_PARTITION()
+{
+       LABEL=${1}
+       PART_DEVICE=${2}
+
+       mount -o remount,checkpoint=enable "${PART_DEVICE}"
+       NOTIFY "Changes on partition ${LABEL} commited (f2fs)"
+}
+
+DELETE_BTRFS_PARTITION() {
+       PART="$1"
+       MNT_POINT="$("$FINDMNT" "$PART" -o TARGET)"
+       if [ "$MNT_POINT" = "" ]; then
+               ERROR "Unable to find btrfs mountpoint for: $PART"
+               return
+       fi
+       NOTIFY "Deleting btrfs snapshot"
+       umount "${MNT_POINT}"
+       mount -o subvolid=5,rw "${PART}" "${MNT_POINT}"
+       btrfs subvolume delete "$MNT_POINT"/fota/RO_update
+       rm -rf "$MNT_POINT/fota/RO_update"
+       umount "${MOUNT_POINT}"
+       mount -o rw "${PART}" "${MNT_POINT}"
+}
+
+
+COMMIT_BTRFS_PARTITION()
+{
+       LABEL=${1}
+       PART_SYSTEM_DATA=$(blkid --match-token PARTLABEL="${LABEL}" -o device || blkid --match-token LABEL="${LABEL}" -o device)
+       DELETE_BTRFS_PARTITION "${PART_SYSTEM_DATA}"
+       NOTIFY "Changes on partition ${LABEL} commited (btrfs)"
+}
+
+COMMIT_PARTITION()
+{
+       LABEL=${1}
+
+       PART_DEVICE=$(blkid --match-token PARTLABEL="${LABEL}" -o device || blkid --match-token LABEL="${LABEL}" -o device)
+       if [ -z "${PART_DEVICE}" ]; then
+               NOTIFY "WARNING: Partition ${LABEL} not found"
+               return
+       fi
+
+       TYPE=$(blkid ${PART_DEVICE} -o value -s TYPE | tail -n 1)
+       if [ "${TYPE}" = "ext4" ]; then
+               COMMIT_BOW_PARTITION "${LABEL}"
+       elif [ "${TYPE}" = "f2fs" ]; then
+               COMMIT_F2FS_PARTITION "${LABEL}" ${PART_DEVICE}
+       elif [ "${TYPE}" = "btrfs" ]; then
+               COMMIT_BTRFS_PARTITION "${LABEL}"
+       else
+               ERROR "ERROR: Cannot commit ${LABEL}: Unsupported filesystem ${TYPE}"
+       fi
+}
+
+COMMIT_CHANGES()
+{
+       COMMIT_PARTITION system-data
+       COMMIT_PARTITION user
+}
diff --git a/upgrade/update-finalize.sh.in b/upgrade/update-finalize.sh.in
new file mode 100755 (executable)
index 0000000..f80af43
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+UPDATE_SCRIPT_DIR=@TZ_SYS_UPGRADE_SCRIPTS@
+UPDATE_DATA_DIR=/opt/data/update
+SDB_RULE=${UPDATE_DATA_DIR}/99-sdb-switch.rules
+
+RW_MACRO=@TZ_SYS_UPGRADE@/rw-update-macro.inc
+
+if [ -f $RW_MACRO ];
+then
+       source $RW_MACRO
+else
+       ERROR "FAIL: Upgrade macro does not exist"
+       UPDATE_PREPARE_ERR=1
+fi
+
+if true; then
+       COMMIT_CHANGES
+fi
+
+touch /tmp/set_BOOTING_OK
+touch /tmp/booting_change_bootmode
index df178c11d31d9dcdc9afca8047ca8d125157a030..0d23538651cad97ebf46bf45883d81d99f66cd2f 100755 (executable)
@@ -1,9 +1,8 @@
-#!/bin/sh
+#!/bin/bash
 #
 # System RW Update Script
 #
 STATUS_FILE="/opt/data/update/RW.STATUS"
-STAT="/usr/bin/stat"
 COLOR_ERROR='\033[01;31m'
 COLOR_DEBUG='\033[01;34m'
 COLOR_NOTIFY='\033[01;33m'
@@ -68,79 +67,6 @@ SET_UPDATE_RESULT()
        echo "$1" > ${UPDATE_RESULT_FILE}
 }
 
-COMMIT_BOW_PARTITION()
-{
-       LABEL=${1}
-
-       BOWDEV_PATH=/dev/mapper/bowdev_${LABEL}
-       DM_NUMBER=$(($("${STAT}" -c "0x%T" $(readlink -f ${BOWDEV_PATH}))))
-       echo 2 > /sys/block/dm-${DM_NUMBER}/bow/state
-       NOTIFY "Changes on partition ${LABEL} commited (dm-bow)"
-}
-
-COMMIT_F2FS_PARTITION()
-{
-       LABEL=${1}
-       PART_DEVICE=${2}
-
-       mount -o remount,checkpoint=enable "${PART_DEVICE}"
-       NOTIFY "Changes on partition ${LABEL} commited (f2fs)"
-}
-
-DELETE_BTRFS_PARTITION() {
-       PART="$1"
-       MNT_POINT="$("$FINDMNT" "$PART" -o TARGET)"
-       if [ "$MNT_POINT" = "" ]; then
-               ERROR "Unable to find btrfs mountpoint for: $PART"
-               return
-       fi
-       NOTIFY "Deleting btrfs snapshot"
-       umount "${MNT_POINT}"
-       mount -o subvolid=5,rw "${PART}" "${MNT_POINT}"
-       btrfs subvolume delete "$MNT_POINT"/fota/RO_update
-       rm -rf "$MNT_POINT/fota/RO_update"
-       umount "${MOUNT_POINT}"
-       mount -o rw "${PART}" "${MNT_POINT}"
-}
-
-
-COMMIT_BTRFS_PARTITION()
-{
-       LABEL=${1}
-       PART_SYSTEM_DATA=$(blkid --match-token PARTLABEL="${LABEL}" -o device || blkid --match-token LABEL="${LABEL}" -o device)
-       DELETE_BTRFS_PARTITION "${PART_SYSTEM_DATA}"
-       NOTIFY "Changes on partition ${LABEL} commited (btrfs)"
-}
-
-COMMIT_PARTITION()
-{
-       LABEL=${1}
-
-       PART_DEVICE=$(blkid --match-token PARTLABEL="${LABEL}" -o device || blkid --match-token LABEL="${LABEL}" -o device)
-       if [ -z "${PART_DEVICE}" ]; then
-               NOTIFY "WARNING: Partition ${LABEL} not found"
-               return
-       fi
-
-       TYPE=$(blkid ${PART_DEVICE} -o value -s TYPE | tail -n 1)
-       if [ "${TYPE}" = "ext4" ]; then
-               COMMIT_BOW_PARTITION "${LABEL}"
-       elif [ "${TYPE}" = "f2fs" ]; then
-               COMMIT_F2FS_PARTITION "${LABEL}" ${PART_DEVICE}
-       elif [ "${TYPE}" = "btrfs" ]; then
-               COMMIT_BTRFS_PARTITION "${LABEL}"
-       else
-               ERROR "ERROR: Cannot commit ${LABEL}: Unsupported filesystem ${TYPE}"
-       fi
-}
-
-COMMIT_CHANGES()
-{
-       rm ${STATUS_FILE}
-       COMMIT_PARTITION system-data
-       COMMIT_PARTITION user
-}
-
 NOTIFY "----------------------------------------------------------------------"
 NOTIFY "System RW update: rw update started"
 
@@ -209,5 +135,9 @@ rm /opt/.do_rw_update
 /bin/sync
 NOTIFY "----------------------------------------------------------------------"
 
-COMMIT_CHANGES
+if [[ ! $(</proc/cmdline) =~ partition_ab= ]]
+then
+       rm ${STATUS_FILE}
+       COMMIT_CHANGES
+fi
 #Reboot by update-finalize.service