diff options
| author | Rudolf J Streif <rudolf.streif@ibeeto.com> | 2024-06-06 13:17:00 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2024-06-07 13:45:43 +0100 |
| commit | d0b02cf8015d6a2146a8d5e5275ef4fbb0f116d0 (patch) | |
| tree | c340fcbc3e36069c5ddc27d93f8c78a837de5db7 | |
| parent | fd250d236ae8aae38d51e8cb0d41b45602ec1b4a (diff) | |
| download | poky-d0b02cf8015d6a2146a8d5e5275ef4fbb0f116d0.tar.gz | |
bitbake: fetch2/wget: Canonicalize DL_DIR paths for wget2 compatibility
Some distributions (namely Fedora Core 40) have started replacing
wget with wget2. There are some changes to wget2 that make it
incompatible with wget:
1. ftp/ftps is not supported anymore
2. progress 'dot' is not yet supported
3. Relative paths in -P and -O are not correctly dealt with
Item 1: Is already dealt with since Scarthgap by only adding the
option --passive-ftp when the URL specifies ftp/sftp. While that
won't help if ftp/sftp is actually required it at least does
not break http/https downloads.
Item 2: While not supported it at least does not break the operation.
Item 3: If there are relative path components in -P or -O then wget2
only deals with them correctly if there is one, and only one, relative
path component at the beginning of the path:
-P ./downloads works
-P ../downloads works
-P ../../downloads does not work
-P ./../downloads does not work
-P /home/user/downloads/../downloads does not work
In cases where there are more than one relative path component at
the beginning of the path and/or one or more reltaive path
component somewhere in the middle or end of the path, wget2 aborts
with the message Internal error: Unexpected relative path: '<path>')
Such can happen if DL_DIR includes relative path components e.g.
DL_DIR = "${TOPDIR}/../../downloads".
This patch canonicalizes DL_DIR before it is passed to wget.
(Bitbake rev: 3e4208952b086adc510e78c1c5f9cf4550d79dc9)
Signed-off-by: Rudolf J Streif <rudolf.streif@ibeeto.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | bitbake/lib/bb/fetch2/wget.py | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/bitbake/lib/bb/fetch2/wget.py b/bitbake/lib/bb/fetch2/wget.py index d76b1d0d38..2e92117634 100644 --- a/bitbake/lib/bb/fetch2/wget.py +++ b/bitbake/lib/bb/fetch2/wget.py | |||
| @@ -108,7 +108,8 @@ class Wget(FetchMethod): | |||
| 108 | 108 | ||
| 109 | fetchcmd = self.basecmd | 109 | fetchcmd = self.basecmd |
| 110 | 110 | ||
| 111 | localpath = os.path.join(d.getVar("DL_DIR"), ud.localfile) + ".tmp" | 111 | dldir = os.path.realpath(d.getVar("DL_DIR")) |
| 112 | localpath = os.path.join(dldir, ud.localfile) + ".tmp" | ||
| 112 | bb.utils.mkdirhier(os.path.dirname(localpath)) | 113 | bb.utils.mkdirhier(os.path.dirname(localpath)) |
| 113 | fetchcmd += " -O %s" % shlex.quote(localpath) | 114 | fetchcmd += " -O %s" % shlex.quote(localpath) |
| 114 | 115 | ||
| @@ -128,9 +129,9 @@ class Wget(FetchMethod): | |||
| 128 | uri = ud.url.split(";")[0] | 129 | uri = ud.url.split(";")[0] |
| 129 | if os.path.exists(ud.localpath): | 130 | if os.path.exists(ud.localpath): |
| 130 | # file exists, but we didnt complete it.. trying again.. | 131 | # file exists, but we didnt complete it.. trying again.. |
| 131 | fetchcmd += d.expand(" -c -P ${DL_DIR} '%s'" % uri) | 132 | fetchcmd += " -c -P " + dldir + " '" + uri + "'" |
| 132 | else: | 133 | else: |
| 133 | fetchcmd += d.expand(" -P ${DL_DIR} '%s'" % uri) | 134 | fetchcmd += " -P " + dldir + " '" + uri + "'" |
| 134 | 135 | ||
| 135 | self._runwget(ud, d, fetchcmd, False) | 136 | self._runwget(ud, d, fetchcmd, False) |
| 136 | 137 | ||
