diff options
author | Holger Freyther <zecke@selfish.org> | 2007-03-31 20:32:03 +0000 |
---|---|---|
committer | Holger Freyther <zecke@selfish.org> | 2007-03-31 20:32:03 +0000 |
commit | a5fc13e03263e302768839a756ef0b98e2fa7fe3 (patch) | |
tree | 67c2f7caf7f405c147e99adb655b140915386338 | |
parent | a678d46d460a13d7d74f8b17be46018613f51ee6 (diff) | |
parent | 8e2d1b42f56902f87817efed2a8df169d31014a4 (diff) |
merge of 'b3e68096a01405d0ca9422a644f8b5d2c2a6e54c'
and 'f8de7adfcce2320064828f2c28f14f0e0e4298f4'
-rw-r--r-- | classes/base.bbclass | 92 | ||||
-rw-r--r-- | conf/checksums.ini | 3 |
2 files changed, 95 insertions, 0 deletions
diff --git a/classes/base.bbclass b/classes/base.bbclass index 53139e19fa..880295fc30 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -10,6 +10,64 @@ def base_path_join(a, *p): path += '/' + b return path +# for MD5/SHA handling +def base_chk_load_parser(config_path): + import ConfigParser, os, bb + parser = ConfigParser.ConfigParser() + if not len(parser.read(config_path)) == 1: + bb.note("Can not open the '%s' ini file" % config_path) + raise Exception("Can not open the '%s'" % config_path) + + return parser + +def base_chk_file(parser, pn, pv, src_uri, localpath): + import os, bb + # Try PN-PV-SRC_URI first and then try PN-SRC_URI + # we rely on the get method to create errors + pn_pv_src = "%s-%s-%s" % (pn,pv,src_uri) + pn_src = "%s-%s" % (pn,src_uri) + if parser.has_section(pn_pv_src): + md5 = parser.get(pn_pv_src, "md5") + sha256 = parser.get(pn_pv_src, "sha256") + elif parser.has_section(pn_src): + md5 = parser.get(pn_src, "md5") + sha256 = parser.get(pn_src, "sha256") + else: + return False + #raise Exception("Can not find a section for '%s' '%s' and '%s'" % (pn,pv,src_uri)) + + # md5 and sha256 should be valid now + if not os.path.exists(localpath): + bb.note("The locapath does not exist '%s'" % localpath) + raise Exception("The path does not exist '%s'" % localpath) + + + # call md5(sum) and shasum + try: + md5pipe = os.popen('md5sum ' + localpath) + md5data = (md5pipe.readline().split() or [ "" ])[0] + md5pipe.close() + except OSError: + raise Exception("Executing md5sum failed") + + try: + shapipe = os.popen('shasum -a256 -p ' + localpath) + shadata = (shapipe.readline().split() or [ "" ])[0] + shapipe.close() + except OSError: + raise Exception("Executing shasum failed") + + if not md5 == md5data: + bb.note("The MD5Sums did not match. Wanted: '%s' and Got: '%s'" % (md5,md5data)) + raise Exception("MD5 Sums do not match. Wanted: '%s' Got: '%s'" % (md5, md5data)) + + if not sha256 == shadata: + bb.note("The SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (sha256,shadata)) + raise Exception("SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (sha256, shadata)) + + return True + + def base_dep_prepend(d): import bb; # @@ -402,6 +460,40 @@ python base_do_fetch() { except bb.fetch.FetchError: (type, value, traceback) = sys.exc_info() raise bb.build.FuncFailed("Fetch failed: %s" % value) + except bb.fetch.MD5SumError: + (type, value, traceback) = sys.exc_info() + raise bb.build.FuncFailed("MD5 failed: %s" % value) + except: + (type, value, traceback) = sys.exc_info() + raise bb.build.FuncFailed("Unknown fetch Error: %s" % value) + + + # Verify the SHA and MD5 sums we have in OE and check what do + # in + check_sum = bb.which(bb.data.getVar('BBPATH', d, True), "conf/checksums.ini") + if not check_sum: + bb.note("No conf/checksums.ini found, not checking checksums") + return + + try: + parser = base_chk_load_parser(check_sum) + except: + bb.note("Creating the CheckSum parser failed") + return + + pv = bb.data.getVar('PV', d, True) + pn = bb.data.getVar('PN', d, True) + + # Check each URI + for url in src_uri.split(): + localpath = bb.fetch.localpath(url,localdata) + (type,host,path,_,_,_) = bb.decodeurl(url) + uri = "%s://%s%s" % (type,host,path) + try: + if not base_chk_file(parser, pn, pv,uri, localpath): + bb.note("%s-%s-%s has no section, not checking URI" % (pn,pv,uri)) + except Exception: + raise bb.build.FuncFailed("Checksum of '%s' failed" % uri) } addtask fetchall after do_fetch diff --git a/conf/checksums.ini b/conf/checksums.ini new file mode 100644 index 0000000000..81b92ad069 --- /dev/null +++ b/conf/checksums.ini @@ -0,0 +1,3 @@ +[file-native-4.20-ftp://ftp.astron.com/pub/file/file-4.20.tar.gz] +md5=402bdb26356791bd5d277099adacc006 +sha256=c0810fb3ddb6cb73c9ff045965e542af6e3eaa7f2995b3037181766d26d5e6e7 |