시스템화된 USER 서비스를 위한 Yocto 레시피

시스템화된 USER 서비스를 위한 Yocto 레시피

활성화된 시스템 사용자 서비스를 추가하기 위해 yocto 레시피를 만들려고 합니다.

문제는 서비스가 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"

어떻게 생각하나요?

감사해요!

답변1

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를 설정하기 때문에 해당 줄을 제거해야 할 수도 있습니다 .

답변2

그 대답이 여전히 당신과 관련이 있는지는 모르겠지만 어쨌든 여기에 넣고 싶었습니다.

귀하의 문제는 설치 단계와 패키지 설명서에서 발생한다고 생각합니다. 해당 폴더에 서비스를 설치하려고 시도하는 것을 볼 수 있지만 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"

나는 그것이 당신이나 다른 사람에게 도움이되기를 바랍니다 :)

답변3

systemd 사용자 서비스는 다음을 통해 Yocto에서 활성화할 수 있습니다:

inherit systemd

SRC_URI = "file://mediumlevel.service"

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

pkg_postinst:${PN}() {
    mkdir -p $D${sysconfdir}/systemd/user/default.target.wants
    ln -s ${systemd_user_unitdir}/mediumlevel.service $D${sysconfdir}/systemd/user/default.target.wants/mediumlevel.service
}

이 방법은 대상 장치에서 실행하는 것과 동일합니다.

systemctl --global enable mediumlevel.service

관련 정보