2025-01-05 08:37:11 +00:00
|
|
|
|
import hashlib
|
|
|
|
|
import os
|
|
|
|
|
import subprocess
|
|
|
|
|
|
|
|
|
|
import requests
|
|
|
|
|
import typer
|
|
|
|
|
|
|
|
|
|
app = typer.Typer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def calculate_sha256(file_path):
|
|
|
|
|
sha256_hash = hashlib.sha256()
|
|
|
|
|
with open(file_path, "rb") as f:
|
|
|
|
|
for byte_block in iter(lambda: f.read(4096), b""):
|
|
|
|
|
sha256_hash.update(byte_block)
|
|
|
|
|
return sha256_hash.hexdigest()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run_bash_command(command):
|
|
|
|
|
result = subprocess.run(
|
|
|
|
|
command,
|
|
|
|
|
shell=True,
|
|
|
|
|
stdout=subprocess.PIPE,
|
|
|
|
|
stderr=subprocess.PIPE,
|
|
|
|
|
text=True,
|
|
|
|
|
)
|
|
|
|
|
if result.returncode != 0:
|
|
|
|
|
raise RuntimeError(f"Ошибка при выполнении команды: {result.stderr}")
|
|
|
|
|
return result.stdout.strip()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def download_file(url, dest_folder="downloads"):
|
|
|
|
|
os.makedirs(dest_folder, exist_ok=True)
|
|
|
|
|
local_filename = os.path.join(dest_folder, os.path.basename(url))
|
|
|
|
|
with requests.get(url, stream=True, timeout=3000) as r:
|
|
|
|
|
r.raise_for_status()
|
|
|
|
|
with open(local_filename, "wb") as f:
|
|
|
|
|
for chunk in r.iter_content(chunk_size=8192):
|
|
|
|
|
f.write(chunk)
|
|
|
|
|
return local_filename
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update_checksums(script_path):
|
|
|
|
|
# Выполняем bash-скрипт, чтобы получить массив sources
|
|
|
|
|
command = (
|
|
|
|
|
f"source {script_path} && printf '%s\\n' \"${{sources_amd64[@]}}\""
|
|
|
|
|
)
|
|
|
|
|
try:
|
|
|
|
|
sources_output = run_bash_command(command)
|
|
|
|
|
except RuntimeError as e:
|
|
|
|
|
print(f"Ошибка выполнения скрипта: {e}")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
sources = sources_output.splitlines()
|
|
|
|
|
if not sources:
|
|
|
|
|
print("Не удалось получить массив sources_amd64.")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
new_checksums = []
|
|
|
|
|
for source_url in sources:
|
|
|
|
|
print(f"Скачивание: {source_url}")
|
|
|
|
|
local_file = download_file(source_url)
|
|
|
|
|
checksum = calculate_sha256(local_file)
|
|
|
|
|
new_checksums.append(f"sha256:{checksum}")
|
|
|
|
|
os.remove(local_file)
|
|
|
|
|
|
|
|
|
|
new_checksums_block = " ".join(f"'{chk}'" for chk in new_checksums)
|
|
|
|
|
print(new_checksums_block)
|
|
|
|
|
|
|
|
|
|
|
2025-01-07 10:30:50 +00:00
|
|
|
|
@app.command(help="Get checksums for new sources")
|
2025-01-05 08:37:11 +00:00
|
|
|
|
def checksums():
|
|
|
|
|
update_checksums(f"{os.getcwd()}/alr.sh")
|