![시스템화된 USER 서비스를 위한 Yocto 레시피](https://linux55.com/image/173991/%EC%8B%9C%EC%8A%A4%ED%85%9C%ED%99%94%EB%90%9C%20USER%20%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC%20%EC%9C%84%ED%95%9C%20Yocto%20%EB%A0%88%EC%8B%9C%ED%94%BC.png)
활성화된 시스템 사용자 서비스를 추가하기 위해 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