On Wed, Apr 21, 2021 at 7:43 AM Devendra Tewari <devendra.tew...@gmail.com> wrote: > > I created an image for Raspberry Pi Zero W from code at > https://github.com/tewarid/docker-meta-raspberrypi/tree/sstate, using Docker > for macOS, and on Ubuntu 20.04-LTS, and wrote it out to an SDCard using > bmaptool. Booted and checked that busybox symlinks in rootfs look all right. >
I think its not this particular patch per se. But similar patch which is in oe-core/master-next which is causing it https://git.openembedded.org/openembedded-core/commit/?h=master-next&id=11657970ff8ff89d1a9760b1c75974ba5d149ddd > Em 21 de abr. de 2021, à(s) 02:22, Khem Raj <raj.k...@gmail.com> escreveu: > > None of my images are bootable when this patch is applied, because > symlinks that busybox should provide arent created in the image. This > patch should be looked into a bit further, how was it tested ? > > On Mon, Apr 19, 2021 at 11:43 AM Devendra Tewari > <devendra.tew...@gmail.com> wrote: > > > > On 30 Mar 2021, at 08:55, Devendra Tewari <devendra.tew...@gmail.com> wrote: > > > I understand that parallel tasks can result in such issues, but would expect > some kind of dependency graph that would prevent them from happening. I wish > I had more time to understand the issue fully. > > Here’s the last version of my patch that still uses os.rename, and on error > uses shutil.move, with the reasoning explained in the commit message. There > are tons of os.rename in code elsewhere, and I’ve encountered similar issues > when doing incremental builds, but I’ll leave fixing them to those with more > time at hand. Cheers. > > > Here’s a patch that catches error with all os.rename in the code, and retries > with shutil.move when that happens. > > > > From aeba1f9728f69cdf2ce4ba285be86761d8024f9d Mon Sep 17 00:00:00 2001 > From: Devendra Tewari <devendra.tew...@gmail.com> > Date: Tue, 30 Mar 2021 08:27:40 -0300 > Subject: [PATCH] Use shutil.move when os.rename fails > > Incremental build in Docker fails with > > OSError: [Errno 18] Invalid cross-device link > > When source and destination are on different overlay filesystems. > > This change handles error with os.rename and retries with shutil.move. > The reason os.rename is still used is because shutil.move is too slow > for speed sensitive sections of code. > --- > meta/classes/sstate.bbclass | 22 ++++++++++++++++++---- > 1 file changed, 18 insertions(+), 4 deletions(-) > > diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass > index f579168162..301dfc27db 100644 > --- a/meta/classes/sstate.bbclass > +++ b/meta/classes/sstate.bbclass > @@ -384,6 +384,7 @@ def sstate_installpkg(ss, d): > def sstate_installpkgdir(ss, d): > import oe.path > import subprocess > + import shutil > > sstateinst = d.getVar("SSTATE_INSTDIR") > d.setVar('SSTATE_FIXMEDIR', ss['fixmedir']) > @@ -401,7 +402,10 @@ def sstate_installpkgdir(ss, d): > > for state in ss['dirs']: > prepdir(state[1]) > - os.rename(sstateinst + state[0], state[1]) > + try: > + os.rename(sstateinst + state[0], state[1]) > + except OSError: > + shutil.move(sstateinst + state[0], state[1]) > sstate_install(ss, d) > > for plain in ss['plaindirs']: > @@ -413,7 +417,10 @@ def sstate_installpkgdir(ss, d): > dest = plain > bb.utils.mkdirhier(src) > prepdir(dest) > - os.rename(src, dest) > + try: > + os.rename(src, dest) > + except OSError: > + shutil.move(src, dest) > > return True > > @@ -638,6 +645,7 @@ python sstate_hardcode_path () { > > def sstate_package(ss, d): > import oe.path > + import shutil > > tmpdir = d.getVar('TMPDIR') > > @@ -664,7 +672,10 @@ def sstate_package(ss, d): > continue > bb.error("sstate found an absolute path symlink %s pointing at > %s. Please replace this with a relative link." % (srcpath, link)) > bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], > sstatebuild + state[0])) > - os.rename(state[1], sstatebuild + state[0]) > + try: > + os.rename(state[1], sstatebuild + state[0]) > + except OSError: > + shutil.move(state[1], sstatebuild + state[0]) > > workdir = d.getVar('WORKDIR') > sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared") > @@ -674,7 +685,10 @@ def sstate_package(ss, d): > pdir = plain.replace(sharedworkdir, sstatebuild) > bb.utils.mkdirhier(plain) > bb.utils.mkdirhier(pdir) > - os.rename(plain, pdir) > + try: > + os.rename(plain, pdir) > + except OSError: > + shutil.move(plain, pdir) > > d.setVar('SSTATE_BUILDDIR', sstatebuild) > d.setVar('SSTATE_INSTDIR', sstatebuild) > -- > 2.29.2 > > > On 30 Mar 2021, at 08:10, Richard Purdie <richard.pur...@linuxfoundation.org> > wrote: > > On Mon, 2021-03-29 at 16:00 -0700, Andre McCurdy wrote: > > On Mon, Mar 29, 2021 at 3:45 PM Devendra Tewari > <devendra.tew...@gmail.com> wrote: > > > Thanks! My bad. The example I looked up in Python docs had a break and I just > realized it was a looping example. > > Here’s the updated patch (or should I submit it again via git send-email?) > > > It would be better to use shutil.move unconditionally in all cases, > rather than have a separate shutil.move code path which only gets > tested by people doing incremental builds in docker. > > > This is a speed sensitive section of code and shutil has traditionally proved > to be slow so I disagree with that, rename is very much preferred here where > we can. > > Cheers, > > Richard > > > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#150747): https://lists.openembedded.org/g/openembedded-core/message/150747 Mute This Topic: https://lists.openembedded.org/mt/81698791/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-