| |
|
| |
|
| | 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}")
|
| |
|