簡體   English   中英

我應該如何在Yocto生成的rootfs上找到文件?

[英]How should I sed files on the Yocto-generated rootfs?

我想找到一種方法從.bbappend文件在Yocto生成的操作系統中的文件上運行sed腳本。 我的操作系統有一個只讀的rootfs,它似乎阻止了安裝后腳本的任何可能性。 具體來說,我需要對/etc/default/ssh進行這些更改(在啟動生成的操作系統后運行):

sed -i 's/var\/run/etc/' /etc/default/ssh 
sed -i 's/_readonly//' /etc/default/ssh

這是我為解決這些問題而創建的openssh_7.1p1.bbappend

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += " \
    file://ssh_host_dsa_key.pub  \
    file://ssh_host_rsa_key.pub  \
    ...
    "

do_install_append() {
    sed -i 's/var\/run/etc/' ${D}${sysconfdir}/default/ssh
    sed -i 's/_readonly//' ${D}${sysconfdir}/default/ssh

    # these lines work fine
    install -m 0755 ${WORKDIR}/ssh_host_dsa_key          ${D}/etc/ssh
    install -m 0755 ${WORKDIR}/ssh_host_dsa_key.pub      ${D}/etc/ssh
    ...
}
FILES_${PN} += "${sysconfdir}/default/ssh"

#these lines work
FILES_${PN} += "${sysconfdir}/ssh/ssh_host_dsa_key"
FILES_${PN} += "${sysconfdir}/ssh/ssh_host_dsa_key.pub"
...

執行do_install_append()期間BitBake失敗並出現此錯誤:

sed: can't read ${TMPDIR}/work/x86-poky-linux/openssh/image/etc/default/ssh: No such file or directory

(其中TMPDIR是我的實際tmp目錄)顯然這個文件不存在,因為MULTIMACH_TARGET_SYS在單獨的MULTIMACH_TARGET_SYS目錄(即x86-poky-linux )中創建了正確的副本。

這種事情是否可以在.bbappend文件(或其他一些分區方式)中完成? 我已經找到了一種在我的核心映像中使用ROOTFS_POSTPROCESS_COMMAND在.inc文件中ROOTFS_POSTPROCESS_COMMAND此操作的方法,但是這種方法導致組織結構不佳。

也許在.bbappend中將操作移動到安裝后功能適合您的情況?

pkg_postinst_${PN} () {
    #!/bin/sh
    if [ x"$D" = "x" ]; then
        sed -i 's/var\/run/etc/' /etc/default/ssh 
        sed -i 's/_readonly//' /etc/default/ssh
    else
        exit 1
    fi
}

上面的函數將導致sed操作在首次啟動時執行,而不是在構建期間執行。

在SRC_URI變量中包含您嘗試sed的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM