If in function do_install(), is "install" is invoked to install an executable file with different ownership then root:root then the ownership of this file is not reserved in the target. For example with the following simple example: do_install() { install -m 0744 -o daemon -g daemon hello ${D}${bindir}/hello } after untar rootfs tar ball into target we would expect "hello" to have user as "daemon" and group as "daemon" but "hello" will have "root" and "root" instead. This causes applications which require strict ownership can not start.
The fix is already in upstream 1a50cc5aeafff0d8ee6c4a41dd2770ecd31455f0 from https://github.com/openembedded/oe-core.git
* Config a simple project. * Modify do_install() in file "<build folder>/layers/local/recipes-sample/hello/hello_1.0.bb" to become: do_install() { install -d ${D}${bindir} install -m 0755 hello ${D}${bindir} install -m 0744 -o daemon -g daemon hello ${D}${bindir}/hello.1 } * Build project to finish * cd <build folder>/build/hello/ * rpm -qvpil deploy-rpms/core2_64/hello-1.0-r1.16.core2_64.rpm ... -rwxr--r-- 1 root root 4344 Jul 16 14:00 /usr/bin/hello.1 (we expect "hello.1" should have daemon:daemon ownership) * untar the tarball into target (please pass --numeric-owner to tar command as well) * ls /usr/bin/hello.1 doesn't show daemon:daemon ownership