[yocto] preserving file owners in do_package

Paul Eggleton paul.eggleton at linux.intel.com
Tue Oct 15 14:54:34 PDT 2013


On Tuesday 15 October 2013 17:18:35 Paul Eggleton wrote:
> On Tuesday 15 October 2013 18:12:42 Davide Soldan wrote:
> > In data martedì 15 ottobre 2013 11:38:21, Paul Eggleton ha scritto:
> > > On Tuesday 15 October 2013 12:02:20 Davide Soldan wrote:
> > > > in my recipe I want to change owner and permission of a file, so I
> > > > wrote:
> > > > 
> > > > do_install() {
> > > > 
> > > >         ls -la ${D}/opt/user
> > > >         chown -R user ${D}/opt/user
> > > >         chgrp -R user ${D}/opt/user
> > > >         ls -la ${D}/opt/user
> > > >         chmod 754 ${D}/opt/user/user.sh
> > > >         ls -la ${D}/opt/user
> > > > 
> > > > }
> > > > 
> > > > the output of ls commands is:
> > > > 
> > > > drwxr-xr-x 8 root root   4096 Oct 15 11:13 .
> > > > drwxr-xr-x 3 root root   4096 Oct 15 11:13 ..
> > > > -rw-r--r-- 1 *root root*  55753 Aug  2 08:48 user.sh
> > > > 
> > > > drwxr-xr-x 8 user user   4096 Oct 15 11:13 .
> > > > drwxr-xr-x 3 root     root       4096 Oct 15 11:13 ..
> > > > -rw-r--r-- 1 *user user*  55753 Aug  2 08:48 user.sh
> > > > 
> > > > drwxr-xr-x 8 user user   4096 Oct 15 11:13 .
> > > > drwxr-xr-x 3 root     root       4096 Oct 15 11:13 ..
> > > > *-rwxr-xr--* 1 user user  55753 Aug  2 08:48 user.sh
> > > > 
> > > > So the change of owner and permission works fine in do_install phase.
> > > > Opening the final rootfs tarball, however, the file user.sh has still
> > > > 754
> > > > permission but root as owner...so do_package doesn't preserve owner
> > > > change
> > > > done in do_install? Or maybe I'm doing something wrong in changing
> > > > file
> > > > owner? Any ideas? Thanks to all!
> > > 
> > > Does your recipe create the specified user via useradd.bbclass?
> > 
> > I solved with a postinstall script (that run at boot):
> > 
> > pkg_postinst_${PN}() {
> > 
> >         #!/bin/sh -e
> >         if [ x"$D" = "x" ]; then
> >         
> >           chown -R user /opt/user
> >           chgrp -R user /opt/user
> >         
> >         else
> >         
> >           exit 1
> >         
> >         fi
> > 
> > }
> 
> This shouldn't be necessary though. I honestly can't tell you why it doesn't
> work as specified. I think it might be worth filing a bug for this.

Actually, thinking about it I don't think this is expected to work. Typically, 
recipes that need a specific user to exist use useradd.bbclass themselves 
rather than depending upon another recipe that does it. However, if you do 
need to do it in a separate recipe (e.g. because multiple recipes use the same 
user account), just adding the other recipe to DEPENDS does not guarantee that 
it will be around at runtime - the actual package generated by the other 
recipe (usually the same name) would need to be added to RDEPENDS_${PN}. 
Additionally, if you do this, you should be able to have your postinstall 
script run at all times; it should not need to be guarded to run only on the 
target (although https://bugzilla.yoctoproject.org/show_bug.cgi?id=5318 may 
interfere with this if you are using ipk or deb.)

Cheers,
Paul

-- 

Paul Eggleton
Intel Open Source Technology Centre



More information about the yocto mailing list