diff --git a/recipes-openharmony/openharmony/files/faultloggerd.service b/recipes-openharmony/openharmony/files/faultloggerd.service index 72d744930ee2d3fb939d61682195741c8cd39853..a551c1418fe48ee86efc00bad7d2d08ae252ad1b 100644 --- a/recipes-openharmony/openharmony/files/faultloggerd.service +++ b/recipes-openharmony/openharmony/files/faultloggerd.service @@ -2,9 +2,17 @@ Description=OpenHarmony FaultLogger daemon [Service] -Type=oneshot -ExecStart=/bin/echo "OpenHarmony FaultLogger Service" -RemainAfterExit=yes +Type=notify +# UserType::OVERSEAS_COMMERCIAL +ExecStartPre=setparam ro.logsystem.usertype 6 +ExecStartPre=!install -o root -g system -m 0755 -d /run/openharmony/faultlogger +ExecStartPre=!install -o system -g log -m 0770 -d /data/log +ExecStartPre=!install -o system -g system -m 0770 -d /data/log/faultlog +ExecStartPre=!install -o system -g system -m 0770 -d /data/log/faultlog/temp +User=root +Group=system +SupplementaryGroups=log +ExecStart=/usr/bin/faultloggerd [Install] WantedBy=multi-user.target diff --git a/recipes-openharmony/openharmony/files/openharmony-preinit b/recipes-openharmony/openharmony/files/openharmony-preinit index 4455f06596dbada1997c23ca52d049f8624924d5..865742416c06a41e4d17b52f0483e2825c01295a 100644 --- a/recipes-openharmony/openharmony/files/openharmony-preinit +++ b/recipes-openharmony/openharmony/files/openharmony-preinit @@ -136,12 +136,6 @@ fi #sa_main /system/profile/dps_service.xml & # SA: 1401 180 3502 #sleep "$STARTUP_CMD_SLEEP" -if systemctl -q is-enabled faultloggerd.service; then - echo >/dev/console "Starting OpenHarmony faultlogger service" - setparam ro.logsystem.usertype 6 # UserType::OVERSEAS_COMMERCIAL - /system/bin/faultloggerd & -fi - # trigger: boot? # "name" : "hdcd", # "path" : ["/system/bin/hdcd"], diff --git a/recipes-openharmony/openharmony/openharmony-standard-3.0/faultloggerd-sd-notify.patch b/recipes-openharmony/openharmony/openharmony-standard-3.0/faultloggerd-sd-notify.patch new file mode 100644 index 0000000000000000000000000000000000000000..b64288b3d2a369a8f43bcb53665f2b1a4b766af9 --- /dev/null +++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/faultloggerd-sd-notify.patch @@ -0,0 +1,58 @@ +# SPDX-FileCopyrightText: Huawei Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +Patch for //base/hiviewdfx/faultloggerd of OpenHarmony 3.0 codebase + +This adds sd_notify(3) ready notification to faultlogger service for better +integration with systemd. + +Signed-off-by: Esben Haabendal <esben@geanix.com> +Upstream-Status: Pending + +diff --git a/services/fault_logger_daemon.cpp b/services/fault_logger_daemon.cpp +index ed7794cfbfc7..e0b35c44a48c 100644 +--- a/services/fault_logger_daemon.cpp ++++ b/services/fault_logger_daemon.cpp +@@ -32,6 +32,8 @@ + #include <hilog/log.h> + #include <securec.h> + ++#include <systemd/sd-daemon.h> ++ + #include "fault_logger_daemon.h" + #include "faultloggerd_client.h" + +@@ -44,11 +46,7 @@ constexpr int32_t MAX_CONNECTION = 4; + constexpr int32_t REQUEST_BUF_SIZE = 1024; + constexpr int32_t MSG_BUF_SIZE = 256; + constexpr int32_t SYSTEM_UID = 1000; +-#if defined(USE_MUSL) +-static const char FAULTLOGGERD_SOCK_PATH[] = "/dev/unix/socket/faultloggerd.server"; +-#else +-static const char FAULTLOGGERD_SOCK_PATH[] = "/dev/socket/faultloggerd.server"; +-#endif ++static const char FAULTLOGGERD_SOCK_PATH[] = "/run/openharmony/faultlogger/server"; + static const char FAULTLOGGERD_BASE_PATH[] = "/data/log/faultlog/temp/"; + + static std::string GetRequestTypeName(int32_t type) +@@ -254,6 +252,7 @@ int32_t StartServer(int argc, char *argv[]) + return -1; + } + ++ sd_notify(0, "READY=1"); + struct sockaddr_un clientAddr; + socklen_t clientAddrSize = sizeof(clientAddr); + int connectionFd = -1; +diff --git a/services/BUILD.gn b/services/BUILD.gn +index f48777a7cdbf..847e3cf79510 100644 +--- a/services/BUILD.gn ++++ b/services/BUILD.gn +@@ -63,6 +63,7 @@ ohos_executable("faultloggerd") { + "$faultloggerd_path/interfaces/innerkits/faultloggerd_client:libfaultloggerd", + "//utils/native/base:utils", + ] ++ libs = [ "systemd" ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] diff --git a/recipes-openharmony/openharmony/openharmony-standard-3.0/faultloggerd-socket-path.patch b/recipes-openharmony/openharmony/openharmony-standard-3.0/faultloggerd-socket-path.patch new file mode 100644 index 0000000000000000000000000000000000000000..84726e40c23f1ed51883fa09d135fa334e3f2296 --- /dev/null +++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/faultloggerd-socket-path.patch @@ -0,0 +1,32 @@ +# SPDX-FileCopyrightText: Huawei Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +Patch for //base/hiviewdfx/faultloggerd of OpenHarmony 3.0 codebase + +Configure faultloggerd service to place Unix socket in /run instead of /dev (where +they obviously does not belong). + +Having a dedicated directory for this makes it easier to handle permissions in a +safe way. + +Signed-off-by: Esben Haabendal <esben@geanix.com> +Upstream-Status: Inappropriate [configuration] + +diff --git a/interfaces/innerkits/faultloggerd_client/faultloggerd_client.cpp b/interfaces/innerkits/faultloggerd_client/faultloggerd_client.cpp +index 704ae9c0cbd7..4456eb29b87c 100644 +--- a/interfaces/innerkits/faultloggerd_client/faultloggerd_client.cpp ++++ b/interfaces/innerkits/faultloggerd_client/faultloggerd_client.cpp +@@ -31,11 +31,7 @@ + + namespace { + static const int32_t SOCKET_BUFFER_SIZE = 256; +-#if defined(USE_MUSL) +-static const char FAULTLOGGERD_SOCK_PATH[] = "/dev/unix/socket/faultloggerd.server"; +-#else +-static const char FAULTLOGGERD_SOCK_PATH[] = "/dev/socket/faultloggerd.server"; +-#endif ++static const char FAULTLOGGERD_SOCK_PATH[] = "/run/openharmony/faultlogger/server"; + } + + static int ReadFileDescriptorFromSocket(int socket) diff --git a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb index 2ec718c1bf52894f4b2d2587ce70a4349f3e56e5..363ceb808c36071cc98ee8979e3750c73f1ef695 100644 --- a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb +++ b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb @@ -82,6 +82,8 @@ SRC_URI += "file://installs-sd-notify.patch;patchdir=${S}/foundation/appexecfwk/ SRC_URI += "file://deviceauth-sd-notify.patch;patchdir=${S}/base/security/deviceauth" SRC_URI += "file://base_hiviewdfx_hiview-libfaultlogger-static.patch;patchdir=${S}/base/hiviewdfx/hiview" +SRC_URI += "file://faultloggerd-socket-path.patch;patchdir=${S}/base/hiviewdfx/faultloggerd" +SRC_URI += "file://faultloggerd-sd-notify.patch;patchdir=${S}/base/hiviewdfx/faultloggerd" # Patch to allow /system/profile and /system/usr to be symlinks to /usr/lib/openharmony SRC_URI += "file://foundation_distributedschedule_safwk-slash-system-symlink.patch;patchdir=${S}/foundation/distributedschedule/safwk" @@ -1623,7 +1625,7 @@ FILES:${PN}-faultlogger = " \ ${libdir}/libfaultloggerd*${SOLIBS} \ ${libdir}/libdfx_signalhandler*${SOLIBS} \ " -RDEPENDS:${PN}-faultlogger += "musl libcxx" +RDEPENDS:${PN}-faultlogger += "musl libcxx libsystemd" RDEPENDS:${PN}-faultlogger += "${PN}-libutils ${PN}-hilog" RDEPENDS:${PN} += "${PN}-faultlogger"