This service is available only in Japanese-language.

デーモンをOS起動時に自動実行させたくない場合に記述するレシピの書き方

よろしくお願いいたします。

現在 yocto kirkstone 上にて raspberry pi cm4 のOSイメージを構築しております。その中で、OS起動時にある処理を行った後にmonit(これは例です)を起動したいという要望があったとします。

yocto warrior を使用していたときは、以下レシピ(monit-startup-cansel.bb)を作成し、core-image-base.bbappendを別途用意し、そこで「IMAGE_INSTALL:append = " monit"」「IMAGE_INSTALL:append = " monit-startup-cansel"」を記述して対処しました。
※initはsysVinitを選択しております。
--------
DESCRIPTION = "monit startup cansel"
SUMMARY = "Custom recipe : monit startup cancel"
SECTION = "PRIVATE"
LICENSE = "CLOSED"
PR = "r0"
LIC_FILES_CHKSUM = "file:///${COMMON_LICENSE_DIR}/eCos-2.0;md5=8c3ea41d02fa9c9253c692351e5940e7"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

inherit autotools update-rc.d

PACKAGES = "monit-startup-cansel"
RDEPENDS_${PN} = "initscripts monit"

FILES_${PN} += "${sysconfdir}/init.d/monit"
SRC_URI += ""

INITSCRIPT_PACKAGES = "monit-startup-cansel"
INITSCRIPT_NAME_monit-startup-cansel = "monit"
INITSCRIPT_PARAMS_monit-startup-cansel = "remove"

do_compile() {
:
}

pkg_postinst_ontarget_${PN}() {
:
}

do_install() {
install -d ${D}${sysconfdir}/init.d

bbnote "monit-startup-cansel.bb : do_install is complite."
}
--------

yocto kirkstone でも引き続き同じことをしたく、以下の対応レシピを用意しました(のちにautotoolsをinheritする必要はないなと思いましたのでここでは消してあります)。
--------
DESCRIPTION = "monit startup cansel"
SUMMARY = "Custom recipe : monit startup cancel"
SECTION = "PRIVATE"
LICENSE = "CLOSED"
PR = "r0"
LIC_FILES_CHKSUM = "file:///${COMMON_LICENSE_DIR}/eCos-2.0;md5=8c3ea41d02fa9c9253c692351e5940e7"

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

inherit update-rc.d

PACKAGES = "monit-startup-cansel"
RDEPENDS:${PN} = "initscripts monit"

FILES:${PN} += "${sysconfdir}/init.d/monit"
SRC_URI += ""

INITSCRIPT_PACKAGES = "monit-startup-cansel"
INITSCRIPT_NAME:${PN} = "monit"
INITSCRIPT_PARAMS:${PN} = "remove"

do_install() {
install -d ${D}${sysconfdir}/init.d

bbnote "monit-startup-cansel.bb : do_install is complite."
}
--------

すると、以下のエラーが発生し bitbake が失敗しました。
--------
WARNING: core-image-base-1.0-r0 do_rootfs: monit-startup-cansel.postinst returned 1, marking as unpacked only, configuration required on target.
ERROR: core-image-base-1.0-r0 do_rootfs: Postinstall scriptlets of ['monit-startup-cansel'] have failed. If the intention is to defer them to first boot,
then please place them into pkg_postinst_ontarget:${PN} ().
Deferring to first boot via 'exit 1' is no longer supported.
--------

エラー内容からしますと、インストールするべき内容物が何もないからだろうと判断しましたが、これではデーモンを自動実行しないようにするという目的が果たせません。
ちなみに、「INITSCRIPT_PARAMS:${PN} = "stop 1 2 3 4 5 ."」とアプローチを変えるとエラーが発生しませんでしたが自動実行されてしまい目的は達成できませんでした。
このような場合の対処法をご教示いただければと存じます。

※上で書いた「INITSCRIPT_PARAMS:${PN} = "stop 1 2 3 4 5 ."」は試しに実施してみただけで、この内容で自動実行させないようにする意図はありません。

構築の一貫性の確保の観点から、他のレシピで生成されるファイルに対する操作は行えない仕組みに変わってきています。
daemonとして動作するパッケージを生成するレシピに対するbbappendで変更されることをお勧めします。

上記、回答ありがとうございました。既存のレシピの追加措置として対応してみます。

以下の通り、meta-local/recipes-support/monit/monit_%.bbappend を用意しましたところ、OS初回起動時に抑止できました。
--------
pkg_postinst_ontarget:${PN} () {
cd /etc/init.d
update-rc.d -f monit remove

exit 0
}
--------

→これにより、/etc/ipk-postinsts に「00N-monit」(00Nは通番)ができまして、OS初回起動時にこれが実行され自動起動を防げました。
--------
Fri Mar 9 21:34:57 2018: Running postinst /etc/ipk-postinsts/003-monit...
Fri Mar 9 21:34:57 2018: System startup links for /etc/init.d/monit already exist.
Fri Mar 9 21:34:57 2018: update-rc.d: /etc/init.d/monit exists during rc.d purge (continuing)
Fri Mar 9 21:34:57 2018: Removing any system startup links for monit ...
Fri Mar 9 21:34:57 2018: /etc/rc0.d/K89monit
Fri Mar 9 21:34:57 2018: /etc/rc1.d/K89monit
Fri Mar 9 21:34:57 2018: /etc/rc2.d/S89monit
Fri Mar 9 21:34:57 2018: /etc/rc3.d/S89monit
Fri Mar 9 21:34:57 2018: /etc/rc4.d/S89monit
Fri Mar 9 21:34:57 2018: /etc/rc5.d/S89monit
Fri Mar 9 21:34:57 2018: /etc/rc6.d/K89monit
--------