我有一个 bitbake 配方,可以构建一个简单的 C hello world 应用程序,并将生成的应用程序二进制文件安装到 rootfs。
SRC_URI = "file://hello.c"
S = "${WORKDIR}"
do_compile() {
${CC} hello.c ${LDFLAGS} -o hello
}
do_install() {
install -d ${D}/opt/project
install -m 0755 hello ${D}/opt/project/hello
}
FILES:${PN} += "/opt/project/*"
我还想对安装到 rootfs 的
hello
二进制文件进行签名,并将该签名也添加到 rootfs 中。
我尝试按如下方式扩展食谱:
SRC_URI = "file://hello.c"
DEPENDS += "openssl-native"
S = "${WORKDIR}"
do_compile() {
${CC} hello.c ${LDFLAGS} -o hello
}
do_sign_application() {
openssl dgst -sha256 -sign ${PATH_TO_PRIVATE_KEY}/${PRIVATE_KEY_NAME}.pem -passin file:${PATH_TO_PRIVATE_KEY_PWD_FILE}/${PRIVATE_KEY_PWD_FILE_NAME} -out ${B}/hello.sig ${B}/hello
}
do_install() {
install -d ${D}/opt/project
install -m 0755 hello ${D}/opt/project/hello
install -m 0400 hello.sig ${D}/opt/project/hello.sig
}
addtask sign_application after do_compile before do_install
FILES:${PN} += "/opt/project/*"
这确实对
do_compile
创建的二进制文件进行了签名,并将生成的签名文件安装到 rootfs 中。但是,do_compile
阶段创建的二进制文件与部署到 rootfs 的二进制文件不同,因此当我检查目标上的签名时,它会失败。似乎在打包阶段发生了一些剥离和其他事情,从而更改了应用程序二进制文件。
如何创建签名并使用正确的应用程序二进制文件(部署到 rootfs 的二进制文件)安装它?
这是我想出的解决方案。应用程序配方在打包后部署其二进制文件,然后一个单独的配方处理签名的创建和安装。
project-app.bb
的食谱:
SRC_URI = "file://hello.c"
S = "${WORKDIR}"
inherit deploy
do_compile() {
${CC} hello.c ${LDFLAGS} -o hello
}
do_install() {
install -d ${D}/opt/project
install -m 0755 hello ${D}/opt/project/hello
}
do_deploy() {
# Deploy the application for project-hello-sig to generate signature.
install -d ${DEPLOYDIR}
install -m 0755 ${S}/package/opt/project/hello ${DEPLOYDIR}/hello
}
addtask deploy after do_package
FILES:${PN} += "/opt/project/*"
project-app-sig.bb
的食谱:
DEPENDS = "openssl-native"
do_configure[depends] += "project-hello:do_deploy"
do_sign_application() {
openssl dgst -sha256 -sign ${PATH_TO_PRIVATE_KEY}/${PRIVATE_KEY_NAME}.pem -passin file:${PATH_TO_PRIVATE_KEY_PWD_FILE}/${PRIVATE_KEY_PWD_FILE_NAME} -out ${B}/hello.sig ${DEPLOY_DIR_IMAGE}/hello
}
do_install() {
install -d ${D}/opt/project
install -m 0400 ${B}/hello.sig ${D}/opt/project/hello.sig
}
addtask sign_application after do_configure before do_install
FILES:${PN} += "/opt/project/*"