2017-08-10 9 views
1

こんにちはこれはここに私のレイヤツリーを使用してsystemdにサービスを有効にしますyocto

├── conf 
│   └── layer.conf 
├── COPYING.MIT 
├── README 
└── recipes-hello 
    ├── helloworld 
    │   ├── helloworld-0.1 
    │   │   ├── helloworld.c 
    │   │   ├── helloworld.patch 
    │   │   └── newhelloworld.c 
    │   └── helloworld_0.1.bb 
    ├── message 
    │   ├── message-0.1 
    │   │   └── message.txt 
    │   └── message_0.1.bb 
    └── service 
     ├── service-0.1 
     │   ├── test_systemd.service 
     │   └── test_systemd.sh 
     └── service_0.1.bb 

あるtest_systemd.service私はservice_0.1.bb

を使用して達成しようとしていますtest_systemd.shを呼び出す必要があり、サービスファイルがあります
# This recipe performs the following tasks 
    # 1) Install .sh file in /home/root/ and .sh script creates a random text file 
    # 2) Install the .service file in systemd directory 
    # 3) Invoke the .sh script via .service file 
    inherit systemd 

SUMMARY = "Install and start a systemd service" 
SECTION = "examples" 
LICENSE = "MIT" 
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" 

#here we specify the source we want to build 
SRC_URI = "file://test_systemd.sh" 
SRC_URI += "file://test_systemd.service" 
#here we specify the source directory, where we can do all the building and expect sources to be placed 
S = "${WORKDIR}" 

SYSTEMD_SERVICE_${PN} = "test_systemd.service" 


#bitbake task 
#created a directory /home/root for target install the script 
do_install() { 
      install -d ${D}/home/root 
      install -m 0755 ${WORKDIR}/test_systemd.sh ${D}/home/root 

      install -d ${D}{systemd_system_unitdir} 
      install -m 0644 ${WORKDIR}/test_systemd.service ${D}{systemd_system_unitdir} 
} 

#Pack the path 
FILES_${PN} += "/home/root" 
FILES_${PN} += "/lib/systemd/system" 

REQUIRED_DISTRO_FEATURES= "systemd" 

問題は、私はシステムレシピをbitbakeしようとすると、bitbakeがtest_systemd.serviceが見つからないというエラーがスローされています。 以前の試みでRFSに両方のファイルをインストールすることができましたが、systemdの概念を含めると、私はそのようなファイルエラーはありません。理由は何でしょうか? エラーメッセージ

NOTE: Executing SetScene Tasks 
NOTE: Executing RunQueue Tasks 
ERROR: service-0.1-r0 do_package: SYSTEMD_SERVICE_service value test_systemd.service does not exist 
ERROR: service-0.1-r0 do_package: Function failed: systemd_populate_packages 
ERROR: Logfile of failure stored in: /home/guest/yocto_practice/poky/build-beaglebone/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/service/0.1-r0/temp/log.do_package.2860 
ERROR: Task (/home/guest/yocto_practice/meta-testlayer/recipes-hello/service/service_0.1.bb:do_package) failed with exit code '1' 
NOTE: Tasks Summary: Attempted 514 tasks of which 506 didn't need to be rerun and 1 failed. 

Summary: 1 task failed: 
    /home/guest/yocto_practice/meta-testlayer/recipes-hello/service/service_0.1.bb:do_package 
Summary: There were 2 ERROR messages shown, returning a non-zero exit code. 

また、これはにsystemdのためのBBレシピを書き込むための正しい方法であり、このbitbakeがエラーをスローすることなく、この

#Pack the path 
    FILES_${PN} += "/home/root" 
    FILES_${PN} += "/lib/systemd/system" 

を書くことの意義は何ですか。

答えて

3
SYSTEMD_SERVICE_${PN} += "file://test_systemd.service" 

これは次のようになります。(エラーとは無関係の)

SYSTEMD_SERVICE_${PN} = "test_systemd.service" 

その他の注意事項:/家に物事をインストール

  • はおそらく素晴らしいアイデアではありません(あなたが使用することができます例えば${libexecdir}
  • bbファイルにdo_install_append()がある理由はありません。 nはdo_install()
  • あなたのYoctoが最近のものである場合は、${systemd_system_unitdir}代わりの/lib/systemd/systemを使用すると、改造のための示唆について
+0

おかげで(以前のリリースで${systemd_unitdir}/system/作品)良いアイデアです。私はあなたに応じて変更を加えましたが、まだエラーが発生しています。質問を更新します – user7345878

+0

私はまだ同じエラーが発生します。なぜbitbakeが存在する場所でファイルを見つけることができなかったのか分かりません。 – user7345878

+2

あなたの現在のレシピは '$ {D} {systemd_system_unitdir}'を2回参照しています。それは '$ {D} $ {systemd_system_unitdir}'でなければなりません。それ以外の場合はここで動作します。 – jku

関連する問題