From a9b178501cf87720ea98b9db50265c95169dd6c6 Mon Sep 17 00:00:00 2001
From: Zygmunt Krynicki <zygmunt.krynicki@huawei.com>
Date: Tue, 19 Oct 2021 21:01:18 +0000
Subject: [PATCH] rauc: ensure RAUC state directory exists

RAUC uses a state file `status.raucs`. In the Oniro images this file is
prescribed to be in `/run/mount/sysdata/common/`. Exploratory testing
has found that RAUC cannot create the leading directory automatically
and fails to handle an update transaction.

Resolve this by adding a systemd configuration override file which
creates the directory using ExecStartPre=

Closes: https://git.ostc-eu.org/distro/oniro/-/issues/158
Signed-off-by: Zygmunt Krynicki <zygmunt.krynicki@huawei.com>
---
 .../recipes-core/rauc/files/rauc-state-dir.conf    |  8 ++++++++
 meta-oniro-core/recipes-core/rauc/rauc_%.bbappend  | 14 ++++++++++++++
 2 files changed, 22 insertions(+)
 create mode 100644 meta-oniro-core/recipes-core/rauc/files/rauc-state-dir.conf

diff --git a/meta-oniro-core/recipes-core/rauc/files/rauc-state-dir.conf b/meta-oniro-core/recipes-core/rauc/files/rauc-state-dir.conf
new file mode 100644
index 00000000..06345150
--- /dev/null
+++ b/meta-oniro-core/recipes-core/rauc/files/rauc-state-dir.conf
@@ -0,0 +1,8 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Create directory where RAUC stores the status file. This must be
+# synchronized with the system.conf file installed into /etc/rauc/system.conf.
+[Service]
+ExecStartPre=/bin/mkdir -p /run/mount/sysdata/common
diff --git a/meta-oniro-core/recipes-core/rauc/rauc_%.bbappend b/meta-oniro-core/recipes-core/rauc/rauc_%.bbappend
index b7ebcbd1..b5e60bf1 100644
--- a/meta-oniro-core/recipes-core/rauc/rauc_%.bbappend
+++ b/meta-oniro-core/recipes-core/rauc/rauc_%.bbappend
@@ -43,3 +43,17 @@ do_install_append() {
         bbwarn "The image is using a known, insecure test key for verifying RAUC bundles. Do not use this in production systems."
     fi
 }
+
+# Install Oniro specific override for RAUC state directory.
+
+SRC_URI_append = " \
+  file://rauc-state-dir.conf \
+  "
+
+FILES_${PN}-service += "\
+	${systemd_unitdir}/system/rauc.service.d/*.conf \
+	"
+
+do_install_append() {
+    install -D -m 644 ${WORKDIR}/rauc-state-dir.conf --target-directory=${D}${systemd_unitdir}/system/rauc.service.d/
+}
-- 
GitLab