| | |
| |
|
| | import logging |
| | import os |
| | import hashlib |
| |
|
| | logger = logging.getLogger("verify-checksum-models") |
| |
|
| |
|
| | def sha256sum(file): |
| | block_size = 16 * 1024 * 1024 |
| | b = bytearray(block_size) |
| | file_hash = hashlib.sha256() |
| | mv = memoryview(b) |
| | with open(file, 'rb', buffering=0) as f: |
| | while True: |
| | n = f.readinto(mv) |
| | if not n: |
| | break |
| | file_hash.update(mv[:n]) |
| |
|
| | return file_hash.hexdigest() |
| |
|
| |
|
| | |
| | llama_path = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) |
| |
|
| | |
| | hash_list_file = os.path.join(llama_path, "SHA256SUMS") |
| |
|
| | |
| | if not os.path.exists(hash_list_file): |
| | logger.error(f"Hash list file not found: {hash_list_file}") |
| | exit(1) |
| |
|
| | |
| | with open(hash_list_file, "r") as f: |
| | hash_list = f.read().splitlines() |
| |
|
| | |
| | results = [] |
| |
|
| | |
| | for line in hash_list: |
| | |
| | hash_value, filename = line.split(" ") |
| |
|
| | |
| | file_path = os.path.join(llama_path, filename) |
| |
|
| | |
| | logger.info(f"Verifying the checksum of {file_path}") |
| |
|
| | |
| | if os.path.exists(file_path): |
| | |
| | file_hash = sha256sum(file_path) |
| |
|
| | |
| | if file_hash == hash_value: |
| | valid_checksum = "V" |
| | file_missing = "" |
| | else: |
| | valid_checksum = "" |
| | file_missing = "" |
| | else: |
| | valid_checksum = "" |
| | file_missing = "X" |
| |
|
| | |
| | results.append({ |
| | "filename": filename, |
| | "valid checksum": valid_checksum, |
| | "file missing": file_missing |
| | }) |
| |
|
| |
|
| | |
| | print("filename".ljust(40) + "valid checksum".center(20) + "file missing".center(20)) |
| | print("-" * 80) |
| |
|
| | |
| | for r in results: |
| | print(f"{r['filename']:40} {r['valid checksum']:^20} {r['file missing']:^20}") |
| |
|