--- /dev/null
+[Unit]
+Description=Clone partitions
+After=system-delayed-target-done.service
+ConditionKernelCommandLine=bootmode=normal
+
+[Service]
+Type=simple
+SmackProcessLabel=System
+ExecStart=/usr/bin/clone_partitions.sh
+RemainAfterExit=true
+Nice=19
+IOSchedulingClass=idle
+IOSchedulingPriority=7
+CPUQuota=90%
+CPUQuotaPeriodSec=100ms
+
+[Install]
+WantedBy=multi-user.target
--- /dev/null
+#!/bin/bash
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+set -o errexit
+trap 'echo "Aborting due to errexit on ${0##*/}:$LINENO. Exit code: $?" >&2' ERR
+set -o errtrace -e -o pipefail
+
+if [ ! -z "${UPGRADE_DEBUG}" ]; then
+ set -x
+fi
+
+if [ "$(device_board_get_partition_ab_cloned)" -eq "1" ]; then
+ echo "[Info] Partitions already cloned"
+ exit 0
+fi
+
+if /usr/libexec/upgrade-support/upgrade-prepare-partitions.sh; then
+ echo "[Info] Partitions have been cloned"
+ device_board_set_partition_ab_cloned
+else
+ echo "[Error] Partitions have not been cloned"
+fi
%define fota_dir /opt/usr/data/fota
mkdir -p %{buildroot}%{fota_dir}
mkdir -p %{buildroot}%{img_verifier_root_ca_dir}
+mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants
+install -m 644 clone_partitions/clone_partitions.service %{buildroot}%{_unitdir}
+ln -s ../clone_partitions.service %{buildroot}%{_unitdir}/multi-user.target.wants/
+install -m 775 clone_partitions/clone_partitions.sh %{buildroot}%{_bindir}
%post
%attr(775, root, system_fw) %{fota_dir}
%defattr(-,root,root,-)
%{_bindir}/delta.ua
+%{_bindir}/clone_partitions.sh
%{upgrade_scripts_dir}/upgrade-trigger.sh
%{upgrade_scripts_dir}/upgrade-partial.sh
%{upgrade_scripts_dir}/upgrade-prepare-partitions.sh
%{upgrade_scripts_dir}/upgrade-common.inc
%attr(700,-,-) %{tota_ua_list_dir}/40-tota-ua.list
+%attr(644, root, root) %{_unitdir}/clone_partitions.service
+%attr(644, root, root) %{_unitdir}/multi-user.target.wants/clone_partitions.service
# Image verifier
%{_sbindir}/img-verifier
FOTA_DIR="/opt/usr/data/fota"
-. "$FOTA_DIR"/upgrade-common.inc
+if [ -r "${FOTA_DIR}/upgrade-common.inc" ]; then
+ . "$FOTA_DIR"/upgrade-common.inc
+else
+ . /usr/libexec/upgrade-support/upgrade-common.inc
+fi
SCRIPT_NAME="upgrade-prepare-partitions.sh"
LOG_FILE="/tmp/upgrade-prepare-partitions.log"
# log msg [file]
#------------------------------------------------
-create_update_dirs() {
- # Check fota directory
- if [ ! -d "$FOTA_DIR" ]; then
- flog "[Info] Create fota dir..."
- /bin/mkdir -p "$FOTA_DIR"
- fi
-
- if [ ! -d "$STATUS_DIR" ]; then
- flog "[Info] Create status dir..."
- /bin/mkdir -p "$STATUS_DIR"
- fi
-}
-
check_optional_partition() {
partition_name="$1"
exit_code="$2"
check_ab_partition_scheme
check_used_block_device
-create_update_dirs
load_background_copy_list
background_copy