# 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
# 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/
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)
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
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
--- /dev/null
+#!/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
--- /dev/null
+[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
+
--- /dev/null
+#!/bin/bash
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+if [[ $(</proc/cmdline) =~ partition_ab= ]]
+then
+ # Finalize upgrade right after RW-Upgrade
+ #
+ # It's possible to start upgraded system and check if there are any errors
+ # there. This allows doing checking at later point of time, potentially
+ # catching more errors from new system (eg. some apps failing to start
+ # after upgrade). Current approach is to commit data after upgrade scripts
+ # succeeds, which simply means that system is guaranted to be upgraded even
+ # if some of the apps would fail.
+ /usr/share/upgrade/offline-update-finalize.sh
+ # systemctl isolate default.target
+else
+ reboot -f
+fi
+
+++ /dev/null
-[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
--- /dev/null
+[Unit]
+Description=Offline System Update
+DefaultDependencies=no
+Before=multi-user.target
+After=basic.target
+Conflicts=shutdown.target
Type=oneshot
SmackProcessLabel=System::Privileged
ExecStartPre=-/bin/device_board_set_upgrade_status -1
-ExecStart=/usr/sbin/reboot -f
+ExecStart=/usr/sbin/reboot -f fota
StandardOutput=tty
StandardError=tty
RemainAfterExit=yes
+++ /dev/null
-[Unit]
-Description=System update script service
-DefaultDependencies=no
-Conflicts=shutdown.target
-Requires=data-checkpoint.service
-After=data-checkpoint.service
-Before=online-update-pre.target
-
-[Service]
-Type=oneshot
-SmackProcessLabel=System::Privileged
-ExecStartPre=/bin/rm -f @UPGRADE_VAR_DIR@/log/system-rw-update.log
-ExecStart=@UPGRADE_SCRIPTS_DIR@/online-update-pre.sh
-StandardOutput=tty
-StandardError=tty
-RemainAfterExit=yes
-
+++ /dev/null
-#!/bin/bash
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
-
-COLOR_ERROR='\033[01;31m'
-RW_MACRO=@UPGRADE_SCRIPTS_DIR@/rw-update-macro.inc
-SCRIPTS_DIR="@UPGRADE_SCRIPTS_DIR@/online-update-scripts-pre"
-SHELL=/bin/bash
-
-source $RW_MACRO
-
-shopt -s nullglob
-
-ERROR()
-{
- LOG_TEXT=$1
- echo -e "${COLOR_ERROR}${LOG_TEXT}${COLOR_RESET}"
-}
-
-# Restore rpm db
-rm -rf /var/lib/rpm/*
-restore_backup_file -f /opt/var/lib/rpm
-
-# Permission Update for shared directories
-/etc/gumd/useradd.d/91_user-dbspace-permissions.post owner
-
-for SCRIPT in $SCRIPTS_DIR/*; do
- if ! $SHELL "$SCRIPT"; then
- ERROR "Script $SCRIPT failed - update considered unsuccessful"
- exit 1
- fi
-done
-
+++ /dev/null
-[Unit]
-Description=System Update - before starting the system
-DefaultDependencies=no
-Before=sysinit.target sockets.target
-After=local-fs.target
-Conflicts=shutdown.target
-OnFailure=online-update-failure.target
-OnFailureJobMode=replace-irreversibly
[Unit]
Description=Finalize OS update
DefaultDependencies=no
+Before=online-update-success.target
After=system-delayed-target-done.service online-update-verify.service
+Requires=online-update-verify.service
Conflicts=shutdown.target online-update-failure.target reboot.target
ConditionKernelCommandLine=bootmode=fota
--- /dev/null
+[Unit]
+Description=Online Update: Success
+DefaultDependencies=no
+ConditionKernelCommandLine=bootmode=fota
[Unit]
Description=System update script service
DefaultDependencies=no
-After=basic.target
-Before=online-update.target
+After=basic.target online-update.target system-update.service
[Service]
Type=oneshot
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
-COLOR_ERROR='\033[01;31m'
-COLOR_DEBUG='\033[01;34m'
-COLOR_NOTIFY='\033[01;33m'
-COLOR_RESET='\033[00;00m'
-RW_MACRO=@UPGRADE_SCRIPTS_DIR@/rw-update-macro.inc
-SCRIPTS_DIR="@UPGRADE_SCRIPTS_DIR@/online-update-scripts"
-UPDATE_DATA_DIR=/opt/data/update
-SDB_RULE=${UPDATE_DATA_DIR}/99-sdb-switch.rules
-source $RW_MACRO
-
-shopt -s nullglob
-
-SCRIPT_NAME=$(basename $0)
-
-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}"
-}
-
-CRITICAL_LOG()
-{
- LOG="[$SCRIPT_NAME]$1"
- dlogsend -k "$LOG"
- if [ "$2" != "" ]; then
- echo "$LOG" >> "$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
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
--- /dev/null
+[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
+++ /dev/null
-#!/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
+++ /dev/null
-[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
-
+++ /dev/null
-#!/bin/bash
-
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
-
-if [[ $(</proc/cmdline) =~ partition_ab= ]]
-then
- # Finalize upgrade right after RW-Upgrade
- #
- # It's possible to start upgraded system and check if there are any errors
- # there. This allows doing checking at later point of time, potentially
- # catching more errors from new system (eg. some apps failing to start
- # after upgrade). Current approach is to commit data after upgrade scripts
- # succeeds, which simply means that system is guaranted to be upgraded even
- # if some of the apps would fail.
- /usr/share/upgrade/update-finalize.sh
- # systemctl isolate default.target
-else
- reboot -f
-fi
-
if [ $? -ne 0 ]; then
ERROR "[FAIL] ${UPSCRIPT}"
UPDATE_PROGRESS_ERR=1
+ break
else
DEBUG "[DONE] ${UPSCRIPT}"
fi
REMOVE_UNNECESSARY_ISU_PKGS
write_version_info
+fi
- if [ ${UPDATE_PROGRESS_ERR} = "1" ]
- then
- NOTIFY "SUCCESS: Upgrade finished, but some scripts are failed"
- SET_UPDATE_RESULT ${UPI_RW_UPDATE_ERROR_FAIL}
- else
- NOTIFY "SUCCESS: Upgrade successfully finished"
- SET_UPDATE_RESULT ${UPI_RW_UPDATE_ERROR_NONE}
- fi
+if [ ${UPDATE_PREPARE_ERR} = "1" ] || [ ${UPDATE_PROGRESS_ERR} = "1" ]; then
+ ERROR "[FAIL] System RW Update error"
+ # TODO: Probably it is better to create separate and common
+ # system-update-failure.target to replace online-update-failure.target
+ # and for offline-update to perform the same function as for
+ # online-update
+ reboot -f fota
fi
if [ -e ${SDB_RULE} ]; then
rm ${STATUS_FILE}
COMMIT_CHANGES
fi
-#Reboot by update-post.service
+#Reboot by offline-update-post.service