有効なシステムユーザーサービスを追加するためにyoctレシピを作成しようとしています。
問題は、サービスが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