From defe648007b9d985925febbbe2a0237d269d21f6 Mon Sep 17 00:00:00 2001
From: Thierry Escande <thierry.escande@huawei.com>
Date: Wed, 10 Aug 2022 01:55:38 +0200
Subject: [PATCH] openharmony-standard-3.0: Add pre-init systemd service

This oneshot service creates the folder architecture needed by the
OpenHarmony services and components.

All other OpenHarmony services will be started after this one.

These folders are intended to be created by their own systemd service
units, but since they are not all in place yet, this service acts as a
generic placeholder in the meantime.

The service also change /dev/binder file mode to 0666.

Signed-off-by: Thierry Escande <thierry.escande@huawei.com>
---
 .../openharmony/files/openharmony-preinit     | 84 +++++++++++++++++++
 .../files/openharmony-preinit.service         |  9 ++
 .../files/openharmony-preinit.service.license |  3 +
 .../openharmony/openharmony-standard_3.0.bb   | 20 ++++-
 4 files changed, 115 insertions(+), 1 deletion(-)
 create mode 100644 recipes-openharmony/openharmony/files/openharmony-preinit
 create mode 100644 recipes-openharmony/openharmony/files/openharmony-preinit.service
 create mode 100644 recipes-openharmony/openharmony/files/openharmony-preinit.service.license

diff --git a/recipes-openharmony/openharmony/files/openharmony-preinit b/recipes-openharmony/openharmony/files/openharmony-preinit
new file mode 100644
index 00000000..9501a150
--- /dev/null
+++ b/recipes-openharmony/openharmony/files/openharmony-preinit
@@ -0,0 +1,84 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+#!/bin/sh
+
+mkdir -p /data/backup
+mkdir -p /data/bootchart
+mkdir -p /data/cache
+mkdir -p /data/cache/backup
+mkdir -p /data/cache/backup_stage
+mkdir -p /data/cache/recovery
+mkdir -p /data/data/.pulse_dir
+mkdir -p /data/dhcp
+mkdir -p /data/drm
+mkdir -p /data/local/tmp
+mkdir -p /data/local/traces
+mkdir -p /data/lost
+mkdir -p /data/mediadrm
+mkdir -p /data/media/obb
+mkdir -p /data/misc/apns
+mkdir -p /data/misc/audioserver
+mkdir -p /data/misc/bluedroid
+mkdir -p /data/misc/bluetooth/logs
+mkdir -p /data/misc/boottrace
+mkdir -p /data/misc/cameraserver
+mkdir -p /data/misc/carrierid
+mkdir -p /data/misc_ce
+mkdir -p /data/misc_de
+mkdir -p /data/misc/dhcp
+mkdir -p /data/misc/ethernet
+mkdir -p /data/misc/gatekeeper
+mkdir -p /data/misc/gcov
+mkdir -p /data/misc/keychain
+mkdir -p /data/misc/keystore
+mkdir -p /data/misc/media
+mkdir -p /data/misc/net
+mkdir -p /data/misc/network_watchlist
+mkdir -p /data/misc/perfprofd
+mkdir -p /data/misc/profiles/cur
+mkdir -p /data/misc/profiles/ref
+mkdir -p /data/misc/profman
+mkdir -p /data/misc/radio
+mkdir -p /data/misc/recovery/proc
+mkdir -p /data/misc/shared_relro
+mkdir -p /data/misc/sms
+mkdir -p /data/misc/systemkeys
+mkdir -p /data/misc/textclassifier
+mkdir -p /data/misc/trace
+mkdir -p /data/misc/update_engine
+mkdir -p /data/misc/update_engine_log
+mkdir -p /data/misc/user
+mkdir -p /data/misc/vold
+mkdir -p /data/misc/vpn
+mkdir -p /data/misc/wifi/sockets
+mkdir -p /data/misc/wifi/wpa_supplicant
+mkdir -p /data/misc/wmtrace
+mkdir -p /data/misc/zoneinfo
+mkdir -p /data/nfc/param
+mkdir -p /data/ota
+mkdir -p /data/ota_package
+mkdir -p /data/preloads
+mkdir -p /data/resourcefoundation.xml
+mkdir -p /data/ss
+mkdir -p /data/system_ce
+mkdir -p /data/system_de
+mkdir -p /data/system/dropbox
+mkdir -p /data/system/heapdump
+mkdir -p /data/system/users
+mkdir -p /data/user
+mkdir -p /data/user_de
+mkdir -p /data/vendor_ce
+mkdir -p /data/vendor_de
+mkdir -p /data/vendor/hardware
+mkdir -p /data/weston
+mkdir -p /usr/lib/dri
+
+# /dev/binder needs to be rw for all users
+chmod 666 /dev/binder
+
+# /dev/dri/card0 needs to be rw for all users
+if [ -c /dev/dri/card0 ]; then
+	chmod 666 /dev/dri/card0
+fi
diff --git a/recipes-openharmony/openharmony/files/openharmony-preinit.service b/recipes-openharmony/openharmony/files/openharmony-preinit.service
new file mode 100644
index 00000000..873db0da
--- /dev/null
+++ b/recipes-openharmony/openharmony/files/openharmony-preinit.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=OpenHarmony pre-init setup
+
+[Service]
+Type=oneshot
+ExecStart=/bin/sh /usr/sbin/openharmony-preinit
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-openharmony/openharmony/files/openharmony-preinit.service.license b/recipes-openharmony/openharmony/files/openharmony-preinit.service.license
new file mode 100644
index 00000000..98a0b3f4
--- /dev/null
+++ b/recipes-openharmony/openharmony/files/openharmony-preinit.service.license
@@ -0,0 +1,3 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
diff --git a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
index 6f6bece3..e66ae548 100644
--- a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
+++ b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
@@ -347,6 +347,24 @@ copy_subsystem_config_json_file() {
 inherit systemd
 SYSTEMD_AUTO_ENABLE = "enable"
 
+# OpenHarmony pre-init package and its systemd service
+# Used to create folders needed by OH services and components
+PACKAGES =+ "${PN}-openharmony-preinit"
+SYSTEMD_PACKAGES = "${PN}-openharmony-preinit"
+SYSTEMD_SERVICE:${PN}-openharmony-preinit = "openharmony-preinit.service"
+FILES:${PN}-openharmony-preinit = " \
+    ${libdir}/openharmony-preinit \
+"
+SRC_URI += "file://openharmony-preinit file://openharmony-preinit.service"
+do_install:append() {
+    install -d ${D}/${sbindir}
+    install -m 755 ${WORKDIR}/openharmony-preinit ${D}/${sbindir}
+
+    install -d ${D}/${systemd_unitdir}/system
+    install -m 644 ${WORKDIR}/openharmony-preinit.service ${D}${systemd_unitdir}/system/
+}
+RDEPENDS:${PN} += "${PN}-openharmony-preinit"
+
 # //utils/native component
 PACKAGES =+ "${PN}-libutilsecurec ${PN}-libutils"
 FILES:${PN}-libutilsecurec = "${libdir}/libutilsecurec*${SOLIBS}"
@@ -370,7 +388,7 @@ RDEPENDS:${PN}-ptest += "${PN}-libutils-ptest"
 
 # //base/hiviewdfx/hilog component
 PACKAGES =+ "${PN}-hilog"
-SYSTEMD_PACKAGES = "${PN}-hilog"
+SYSTEMD_PACKAGES += "${PN}-hilog"
 SYSTEMD_SERVICE:${PN}-hilog = "hilogd.service"
 SRC_URI += "file://hilogd.service"
 do_install:append() {
-- 
GitLab