From: Mateusz Moscicki Date: Tue, 14 May 2024 15:00:15 +0000 (+0200) Subject: Change the way Online Upgrade works. X-Git-Tag: accepted/tizen/unified/20240611.122417^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=adce848a7af1d40de22dc435da83139f9ed2860a;p=platform%2Fcore%2Fsystem%2Fupgrade.git Change the way Online Upgrade works. The Online Upgrade runs old offline-upgrade, and after this the normal boot (without reboot) is performed. Change-Id: I84dd183daba33e8060ddf7df4f0b25358e2c0d46 --- diff --git a/packaging/upgrade.spec b/packaging/upgrade.spec index 9601b53..926f652 100644 --- a/packaging/upgrade.spec +++ b/packaging/upgrade.spec @@ -122,29 +122,28 @@ ln -s ../clone_partitions_recovery.service %{buildroot}%{_unitdir}/recovery.serv # rw-update mkdir -p %{buildroot}%{_unitdir}/system-update.target.wants +mkdir -p %{buildroot}%{_unitdir}/system-update.target.requires mkdir -p %{buildroot}%{_unitdir}/local-fs.target.wants mkdir -p %{buildroot}%{_unitdir}/delayed.target.wants -mkdir -p %{buildroot}%{_unitdir}/online-update-pre.target.requires +mkdir -p %{buildroot}%{_unitdir}/offline-update.target.requires mkdir -p %{buildroot}%{_unitdir}/online-update.target.requires mkdir -p %{buildroot}%{_unitdir}/online-update-failure.target.requires -mkdir -p %{buildroot}%{_unitdir}/online-update-success.service.requires +mkdir -p %{buildroot}%{_unitdir}/online-update-success.target.requires ln -s ../getty.target %{buildroot}%{_unitdir}/system-update.target.wants ln -s ../cynara.socket %{buildroot}%{_unitdir}/system-update.target.wants 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 ../system-update.service %{buildroot}%{_unitdir}/system-update.target.requires ln -s ../udev-trigger-dmbow@.service %{buildroot}%{_unitdir}/system-update.target.wants/udev-trigger-dmbow@user.service +ln -s ../udev-trigger-dmbow@.service %{buildroot}%{_unitdir}/system-update.target.wants/udev-trigger-dmbow@system-data.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 ../offline-update-post.service %{buildroot}%{_unitdir}/offline-update.target.requires +ln -s ../system-update.target %{buildroot}%{_unitdir}/offline-update.target.requires -ln -s ../default.target %{buildroot}%{_unitdir}/online-update.target.requires -ln -s ../online-update-pre.target %{buildroot}%{_unitdir}/online-update.target.requires -ln -s ../online-update-pre.service %{buildroot}%{_unitdir}/online-update-pre.target.requires +ln -s ../system-update.target %{buildroot}%{_unitdir}/online-update.target.requires ln -s ../online-update.service %{buildroot}%{_unitdir}/online-update.target.requires -ln -s ../udev-trigger-dmbow@.service %{buildroot}%{_unitdir}/online-update.target.requires/udev-trigger-dmbow@system-data.service -ln -s ../udev-trigger-dmbow@.service %{buildroot}%{_unitdir}/online-update.target.requires/udev-trigger-dmbow@user.service -ln -s ../online-update-verify.service %{buildroot}%{_unitdir}/online-update-success.service.requires -ln -s ../online-update-success.service %{buildroot}%{_unitdir}/delayed.target.wants +ln -s ../online-update-success.target %{buildroot}%{_unitdir}/delayed.target.wants +ln -s ../online-update-success.service %{buildroot}%{_unitdir}/online-update-success.target.requires ln -s ../online-update-failure.service %{buildroot}%{_unitdir}/online-update-failure.target.requires %posttrans engine @@ -189,45 +188,42 @@ fi # rw-upgrade %{_unitdir}/data-checkpoint.service %{_unitdir}/local-fs.target.wants/data-checkpoint.service -%{_unitdir}/offline-update.service +%{_unitdir}/system-update.service %{_unitdir}/system-update.target.wants/cynara.socket %{_unitdir}/system-update.target.wants/dbus.socket %{_unitdir}/system-update.target.wants/getty.target -%{_unitdir}/system-update.target.wants/offline-update.service +%{_unitdir}/system-update.target.requires/system-update.service %{_unitdir}/system-update.target.wants/udev-sdb-init.service %{_unitdir}/system-update.target.wants/udev-trigger-dmbow@user.service -%{_unitdir}/system-update.target.wants/update-post.service +%{_unitdir}/system-update.target.wants/udev-trigger-dmbow@system-data.service +%{_unitdir}/offline-update.target +%{_unitdir}/offline-update.target.requires/offline-update-post.service +%{_unitdir}/offline-update.target.requires/system-update.target %{_unitdir}/udev-sdb-init.service %{_unitdir}/udev-trigger-dmbow@.service -%{_unitdir}/update-post.service -%{_unitdir}/online-update-pre.target -%{_unitdir}/online-update-pre.target.requires/online-update-pre.service -%{_unitdir}/online-update-pre.service +%{_unitdir}/offline-update-post.service %{_unitdir}/online-update.target %{_unitdir}/online-update.target.requires/online-update.service -%{_unitdir}/online-update.target.requires/online-update-pre.target -%{_unitdir}/online-update.target.requires/default.target -%{_unitdir}/online-update.target.requires/udev-trigger-dmbow@system-data.service -%{_unitdir}/online-update.target.requires/udev-trigger-dmbow@user.service +%{_unitdir}/online-update.target.requires/system-update.target %{_unitdir}/online-update.service %{_unitdir}/online-update-failure.target %{_unitdir}/online-update-failure.target.requires/online-update-failure.service %{_unitdir}/online-update-failure.service %{_unitdir}/online-update-verify.service +%{_unitdir}/online-update-success.target %{_unitdir}/online-update-success.service -%{_unitdir}/online-update-success.service.requires/online-update-verify.service -%{_unitdir}/delayed.target.wants/online-update-success.service +%{_unitdir}/online-update-success.target.requires/online-update-success.service +%{_unitdir}/delayed.target.wants/online-update-success.target %{upgrade_scripts_dir}/99-sdb-switch.rules %{upgrade_scripts_dir}/install-sdb-rule.sh %{upgrade_scripts_dir}/record-version.sh %{upgrade_scripts_dir}/rw-update-macro.inc %{upgrade_scripts_dir}/update-checkpoint-create.sh -%{upgrade_scripts_dir}/update-finalize.sh +%{upgrade_scripts_dir}/offline-update-finalize.sh %{upgrade_scripts_dir}/update-init.sh -%{upgrade_scripts_dir}/update-post.sh +%{upgrade_scripts_dir}/offline-update-post.sh %{upgrade_scripts_dir}/update.sh %{upgrade_scripts_dir}/update-verify.sh -%{upgrade_scripts_dir}/online-update-pre.sh %{upgrade_scripts_dir}/online-update.sh %{upgrade_scripts_dir}/online-update-scripts-pre/ %{upgrade_scripts_dir}/online-update-scripts/ diff --git a/scripts/rw-upgrade/CMakeLists.txt b/scripts/rw-upgrade/CMakeLists.txt index f31fc22..4bae122 100644 --- a/scripts/rw-upgrade/CMakeLists.txt +++ b/scripts/rw-upgrade/CMakeLists.txt @@ -1,13 +1,11 @@ CONFIGURE_FILE(install-sdb-rule.sh.in install-sdb-rule.sh @ONLY) CONFIGURE_FILE(update-init.sh.in update-init.sh @ONLY) CONFIGURE_FILE(update.sh.in update.sh @ONLY) -CONFIGURE_FILE(update-finalize.sh.in update-finalize.sh @ONLY) +CONFIGURE_FILE(offline-update-finalize.sh.in offline-update-finalize.sh @ONLY) CONFIGURE_FILE(record-version.sh.in record-version.sh @ONLY) CONFIGURE_FILE(udev-sdb-init.service.in udev-sdb-init.service @ONLY) -CONFIGURE_FILE(offline-update.service.in offline-update.service @ONLY) +CONFIGURE_FILE(system-update.service.in system-update.service @ONLY) CONFIGURE_FILE(data-checkpoint.service.in data-checkpoint.service @ONLY) -CONFIGURE_FILE(online-update-pre.sh.in online-update-pre.sh @ONLY) -CONFIGURE_FILE(online-update-pre.service.in online-update-pre.service @ONLY) CONFIGURE_FILE(online-update.service.in online-update.service @ONLY) CONFIGURE_FILE(online-update.sh.in online-update.sh @ONLY) CONFIGURE_FILE(online-update-verify.service.in online-update-verify.service @ONLY) @@ -16,18 +14,18 @@ CONFIGURE_FILE(online-update-success.sh.in online-update-success.sh @ONLY) INSTALL(FILES udev-sdb-init.service - offline-update.service + system-update.service data-checkpoint.service - update-post.service + offline-update.target + offline-update-post.service udev-trigger-dmbow@.service - online-update-pre.target - online-update-pre.service online-update.target online-update.service online-update-failure.target online-update-failure.service online-update-verify.service online-update-success.service + online-update-success.target DESTINATION ${UNIT_DIR}) INSTALL(FILES @@ -41,10 +39,9 @@ INSTALL(FILES update-init.sh update.sh update-checkpoint-create.sh - update-post.sh - update-finalize.sh + offline-update-post.sh + offline-update-finalize.sh update-verify.sh - online-update-pre.sh online-update.sh online-update-verify.sh online-update-success.sh diff --git a/scripts/rw-upgrade/offline-update-finalize.sh.in b/scripts/rw-upgrade/offline-update-finalize.sh.in new file mode 100644 index 0000000..7b9e16e --- /dev/null +++ b/scripts/rw-upgrade/offline-update-finalize.sh.in @@ -0,0 +1,51 @@ +#!/bin/bash + +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) +CRITICAL_LOG() +{ + LOG="[$SCRIPT_NAME]$1" + dlogsend -k "$LOG" + if [ "$2" != "" ]; then + echo "$LOG" >> "$2" + fi + echo "$LOG" +} + +SET_UPGRADE_STATUS() +{ + ${HAL_SET_UPGRADE_STATUS} "$1" + if [ $? -eq 0 ]; then + CRITICAL_LOG "set_upgrade_status success: ${1}" + else + CRITICAL_LOG "set_upgrade_status failed: ${1}" + fi +} + +if [ -f $RW_MACRO ]; +then + source $RW_MACRO +else + ERROR "FAIL: Upgrade macro does not exist" + UPDATE_PREPARE_ERR=1 +fi + +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" + reboot -f fota + fi + + /usr/bin/device_board_clear_partition_ab_cloned + /usr/bin/device_board_set_boot_success + SET_UPGRADE_STATUS 100 + reboot -f +else + reboot -f fota +fi diff --git a/scripts/rw-upgrade/offline-update-post.service b/scripts/rw-upgrade/offline-update-post.service new file mode 100644 index 0000000..000ab09 --- /dev/null +++ b/scripts/rw-upgrade/offline-update-post.service @@ -0,0 +1,12 @@ +[Unit] +Description=RW Update finalization +DefaultDependencies=no +Wants=system-update.service +After=system-update.service +IgnoreOnIsolate=true + +[Service] +Type=oneshot +SmackProcessLabel=System +ExecStart=/usr/share/upgrade/offline-update-post.sh + diff --git a/scripts/rw-upgrade/offline-update-post.sh b/scripts/rw-upgrade/offline-update-post.sh new file mode 100644 index 0000000..d721519 --- /dev/null +++ b/scripts/rw-upgrade/offline-update-post.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +PATH=/bin:/usr/bin:/sbin:/usr/sbin + +if [[ $(> "$2" - fi - echo "$LOG" -} - -NOTIFY "----------------------------------------------------------------------" -NOTIFY "Remove deprecated ISU Packages" - -REMOVE_UNNECESSARY_ISU_PKGS - -get_version_info -DEBUG "Version OLD: ${OLD_VER}, NEW: ${NEW_VER}" - -for SCRIPT in $SCRIPTS_DIR/*; do - if ! $SHELL "$SCRIPT"; then - ERROR "Script $SCRIPT failed - update considered unsuccessful" - exit 1 - fi -done - -write_version_info - -if [ -e ${SDB_RULE} ]; then - rm ${SDB_RULE} -fi +systemctl isolate default.target diff --git a/scripts/rw-upgrade/online-update.target b/scripts/rw-upgrade/online-update.target index 6641d1b..c5bfe53 100644 --- a/scripts/rw-upgrade/online-update.target +++ b/scripts/rw-upgrade/online-update.target @@ -2,7 +2,7 @@ Description=System Update DefaultDependencies=no Before=multi-user.target -After=basic.target online-update-pre.target +After=basic.target Conflicts=shutdown.target OnFailure=online-update-failure.target OnFailureJobMode=replace-irreversibly diff --git a/scripts/rw-upgrade/system-update.service.in b/scripts/rw-upgrade/system-update.service.in new file mode 100644 index 0000000..b1d153d --- /dev/null +++ b/scripts/rw-upgrade/system-update.service.in @@ -0,0 +1,13 @@ +[Unit] +Description=System update script service +DefaultDependencies=no +Requires=sysinit.target +After=sysinit.target + +[Service] +Type=oneshot +SmackProcessLabel=System::Privileged +ExecStartPre=/bin/rm -f @UPGRADE_VAR_DIR@/log/system-rw-update.log +ExecStart=@UPGRADE_SCRIPTS_DIR@/update-init.sh +StandardOutput=file:@UPGRADE_VAR_DIR@/log/system-rw-update.log +StandardError=file:@UPGRADE_VAR_DIR@/log/system-rw-update.log diff --git a/scripts/rw-upgrade/update-finalize.sh.in b/scripts/rw-upgrade/update-finalize.sh.in deleted file mode 100644 index 7b9e16e..0000000 --- a/scripts/rw-upgrade/update-finalize.sh.in +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -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) -CRITICAL_LOG() -{ - LOG="[$SCRIPT_NAME]$1" - dlogsend -k "$LOG" - if [ "$2" != "" ]; then - echo "$LOG" >> "$2" - fi - echo "$LOG" -} - -SET_UPGRADE_STATUS() -{ - ${HAL_SET_UPGRADE_STATUS} "$1" - if [ $? -eq 0 ]; then - CRITICAL_LOG "set_upgrade_status success: ${1}" - else - CRITICAL_LOG "set_upgrade_status failed: ${1}" - fi -} - -if [ -f $RW_MACRO ]; -then - source $RW_MACRO -else - ERROR "FAIL: Upgrade macro does not exist" - UPDATE_PREPARE_ERR=1 -fi - -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" - reboot -f fota - fi - - /usr/bin/device_board_clear_partition_ab_cloned - /usr/bin/device_board_set_boot_success - SET_UPGRADE_STATUS 100 - reboot -f -else - reboot -f fota -fi diff --git a/scripts/rw-upgrade/update-post.service b/scripts/rw-upgrade/update-post.service deleted file mode 100644 index 67f958e..0000000 --- a/scripts/rw-upgrade/update-post.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=RW Update finalization -DefaultDependencies=no -Wants=offline-update.service -After=offline-update.service -IgnoreOnIsolate=true - -[Service] -Type=oneshot -SmackProcessLabel=System -ExecStart=/usr/share/upgrade/update-post.sh - diff --git a/scripts/rw-upgrade/update-post.sh b/scripts/rw-upgrade/update-post.sh deleted file mode 100644 index dd52044..0000000 --- a/scripts/rw-upgrade/update-post.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -PATH=/bin:/usr/bin:/sbin:/usr/sbin - -if [[ $(