Systemd

用於 systemd USER 服務的 Yocto 配方

  • February 2, 2021

我正在嘗試創建一個 yocto 配方以添加一個以啟用 systemd 使用者服務。

問題是,由於該服務安裝在 systemd/user 中,使用 bitbake 我收到此錯誤:

錯誤:mediumlevel-service-1.0-r0 do_package:SYSTEMD_SERVICE_mediumlevel-service 值 mediumlevel.service 不存在

我的食譜是:

SUMMARY = "Launch mediumlevel at boot"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

inherit systemd

SRC_URI = "file://mediumlevel.service \
"

S = "${WORKDIR}"

SYSTEMD_SERVICE_${PN} = "mediumlevel.service"

do_install() {
       install -d ${D}${systemd_user_unitdir}
       install -m 0644 ${WORKDIR}/mediumlevel.service ${D}${systemd_user_unitdir}
}

FILES_${PN} += "/usr/lib/systemd/user"

REQUESTED_DISTRO_FEATURES = "systemd"

你怎麼看?

謝謝!

systemd.bbclass 只關心系統服務而不是使用者服務。

我想你必須做這樣的事情:

刪除 SYSTEMD_SERVICE_${PN} 變數

FILES_${PN} += "${systemd_user_unitdir}"

pkg_postinst_${PN} () {
   #!/bin/sh -e
   OPTS=""
   if [ -n "$D" ]; then
       OPTS="--root=$D"
   fi
   systemctl ${OPTS} --user enable mediumlevel.service
}

也許您甚至需要刪除該inherit systemd行,因為該類設置了 pkg_postinst。

我不知道答案是否仍然與您相關,但無論如何我還是想把它放在這裡。

我相信您的問題來自安裝步驟和軟體包的文件。我可以看到您嘗試在文件夾上安裝該服務,但這似乎不適用於 Yocto。您需要提供文件名和文件夾。在 FILE_${PN} 上也是如此。這個食譜應該更好用:

SUMMARY = "Launch mediumlevel at boot"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

inherit systemd

SRC_URI = "file://mediumlevel.service \
"

S = "${WORKDIR}"

SYSTEMD_SERVICE_${PN} = "mediumlevel.service"

do_install() {
       install -d ${D}${systemd_user_unitdir}
       install -m 0644 ${WORKDIR}/mediumlevel.service ${D}${systemd_user_unitdir}/mediumlevel.service
}

FILES_${PN} += "${systemd_user_unitdir}/mediumlevel.service"

REQUESTED_DISTRO_FEATURES = "systems"

我希望它可以幫助你或其他人:)

引用自:https://unix.stackexchange.com/questions/589032