2017-09-02 2 views
0

私はyoctoを使って起動時に起動するカスタムのinitスクリプトを設定したいと思います。私はcorrect answer hereに従いました - これは私が望むのと同じです - そして私はpyroバージョンiドキュメントに記載されているようにlocal.confファイルでこれらの変数を設定起動時にyoctoを使ってinitcriptを実行する

DISTRO_FEATURES_append = "systemdに"

VIRTUAL-RUNTIME_init_manager = "systemdに"

DISTRO_FEATURES_BACKFILL_CONSIDERED = "はsysvinit"

VIRTUAL-RUNTIME_initscripts =「」

問題がinitscript.serviceの時にシステムを起動と呼ばれていないことであると私はスクリプトにもかかわらず、/ var/log/messagesにものを見つけることができませんし、サービスファイルが転送され、システムファイルが存在します。

私もyocto

pkg_postinst_keyfile() { #where keyfile is a recipe is added to IMAGE_INSTALL_append 
    if [ x"$D" = "x" ]; then 
     logger "key file is added" 
    else 
     exit 1 
    fi 
} 

、再度のinitの代わりとして使用するには、このオプションを試したレシピが実行されるにもかかわらず、私は声明ログに「キーファイルが追加され、」見つけることができないと、Aキーファイルは、レシピから期待どおりに画像に転送されます。

正しい答えについては何か間違っていますか?私はそれが良い参照してくださいが、私は問題がどこにわからない。そして、誰かが私にVinitを使って等価なことをしっかりとした例を与えることができたら?

ターゲットマシンは "qemux86-64"

レシピです

I持っているメタmylayerと呼ばれる層、その木がある:

のconf/layer.conf

recipes-core/mylayer-initscript /(上記のリンクに記載)

件の

レシピコア/画像/

のapt-画像 apt-image.bbは、私は、コア最小限とその内容

SUMMARY = "An image which add the support of using deb package management" 

inherit core-image 
include recipes­core/images/core­-image-­minimal.bb 

IMAGE_FEATURES += "package-management" 
IMAGE_INSTALL_append = "gnupg coreutils keyfile initscript" 

IMAGE_LINGUA = " " 

LICENSE = "MIT" 

IMAGE_ROOTFS_SIZE ?= "16192" 


PACKAGE_FEED_URIS = "http://<public ip here>/my-repo/yahia-repo/expiremental \" 
PACKAGE_FEED_BASE_PATHS = "deb" 
PACKAGE_FEED_ARCHS = "all" 

pkg_postinst_keyfile() { 
    if [ x"$D" = "x" ]; then 
     logger "key file is added" 
    else 
     exit 1 
    fi 
} 

のinitscriptレシピの上に構築された画像と、すべてのファイルがあります変更なしのリンクに記載されているものと同じです。

あなたはキーファイルレシピについて興味を持って、ここでは

# 
# The goal of this recipe is to move keyFile to target machine so it can be used as public key for 
# authoriztion of deb repo. 
# 
# Author: Yahia Farghaly 

SUMMARY = "Move keyFile example to /deb_key" 
SECTION = "examples" 
LICENSE = "MIT" 
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" 

SRC_URI = "file://keyFile \ 
      file://sources.list" 

#to inform yocto where to package the file 
FILES_${PN} += " /deb_key" 

S = "${WORKDIR}" 


do_install() { 
     install -d ${D}/deb_key 
     install -m 0755 keyFile ${D}/deb_key 
} 

されており、確かに、私はbitbakeのapt-画像

サービススクリプト

[Unit] 
Description=start initscript upon first boot 

[Service] 
Type=simple 
ExecStart=/bin/sh -c 'sleep 5 ; /usr/sbin/initscript.sh' 

initスクリプトを実行する場合。時間

#!/bin/sh 

logger "starting initscript" 

# do some work here. Mount rootfs as rw if needed. 

logger "initscript work done" 
echo "hi yahia" > /deb_key/hello 

私は、デフォルトまたはr-のみによってRWあるrootfsの結果yoctoのことを確認していませんか?

のinitscriptレシピ

SUMMARY = "Initial boot script" 
DESCRIPTION = "Script to do any first boot init, started as a systemd service which removes itself once finished" 
LICENSE = "CLOSED" 
PR = "r3" 

SRC_URI = " \ 
    file://initscript.sh \ 
    file://initscript.service \ 
" 

inherit allarch systemd 

NATIVE_SYSTEMD_SUPPORT = "1" 
SYSTEMD_PACKAGES = "${PN}" 
SYSTEMD_SERVICE_${PN} = "initscript.service" 

do_compile() { 
} 

do_install() { 
    install -d ${D}/${sbindir} 
    install -m 0755 ${WORKDIR}/initscript.sh ${D}/${sbindir} 

    install -d ${D}${systemd_unitdir}/system/ 
    install -m 0644 ${WORKDIR}/initscript.service ${D}${systemd_unitdir}/system 
} 
+0

レシピを共有できますか? – jku

+0

実際にサービスファイルをインストールするレシピ(問題がどこにあるか分かっていた)、またはサービスファイル自体は表示されませんでした。代わりの方法としては、postinstがイメージレシピで動作するかどうかはわかりません。通常postinst関数が使用するパッケージを生成するレシピで定義されています。 – jku

+0

@jku ok、私はそれらを入れます –

答えて

1

サービススクリプトを次のように変更して私のために動作します。

[Unit] 
Description=start initscript upon first boot 

[Service] 
Type=simple 
ExecStart=/bin/sh -c 'sleep 5 ; /usr/sbin/initscript.sh' 

[Install] 
WantedBy=multi-user.target 
関連する問題