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)
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/
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}
%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
--- /dev/null
+[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
+
#!/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() {
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
+}
--- /dev/null
+#!/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
-#!/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'
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"
/bin/sync
NOTIFY "----------------------------------------------------------------------"
-COMMIT_CHANGES
+if [[ ! $(</proc/cmdline) =~ partition_ab= ]]
+then
+ rm ${STATUS_FILE}
+ COMMIT_CHANGES
+fi
#Reboot by update-finalize.service