[yocto] Badly formatted subpath for git SRC_URI deletes portions of hard drive.

Anders Darander anders at chargestorm.se
Thu Apr 16 06:11:44 PDT 2015


* Paul Eggleton <paul.eggleton at linux.intel.com> [150416 14:57]:

> Hi John,

> On Thursday 16 April 2015 11:52:48 John Ernberg wrote:
> > After restoring everything I re-created the recipe, this time I also
> > saved a copy of the recipe at a safe location.
> > At the end of the path given to subpath I had added a '/' as it was not
> > specified what the format of the path should be. I figured I would see
> > an error if the path was wrong, and technically I did.
> > Essentially the SRC_URI looked like this:
> > SRC_URI = "git://git@<server+repo>;protocol=ssh;subpath=path/"

> > Running the recipe resulted in do_fetch (or do_unpack) failing again and
> > complaining about missing files. This time the deletion was on a much
> > greater scale, it had deleted so much of my home-dir that my user
> > account was rendered entirely useless. The fastest way to recover this
> > time was re-installing the machine.

It's most likely a call to bb.utils.prunedir(destdir), with destdir
being set to '/'...

> Very sorry about this :(

Yeah, too bad...

> Looking at the code I can see at least two problems we need to fix relating to 
> this issue. It seems that having '/' either at the start or the end of the 
> value was unexpected and would trigger undesirable behaviour.

The issue with having '/' at the end ought to be solved by adding
.rstrip('/') like:
----------------------------
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index 44fc271..0fd9bee 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -246,7 +246,7 @@ class Git(FetchMethod):
         subdir = ud.parm.get("subpath", "")
         if subdir != "":
             readpathspec = ":%s" % (subdir)
-            def_destsuffix = "%s/" % os.path.basename(subdir)
+            def_destsuffix = "%s/" %
os.path.basename(subdir.rstrip('/'))
         else:
             readpathspec = ""
             def_destsuffix = "git/"
---------------------------

Probably, the first issue could be solved by replacing subdir with
subdir.strip('/') on the line above that.

Though I might be missing something...

I've only looked for a moment on the patch above, which at least seems
to create correct path's when inspecting the output.

Cheers,
Anders

-- 
Anders Darander
ChargeStorm AB / eStorm AB



More information about the yocto mailing list