apt-sync: add special arch support

Related to https://github.com/tuna/issues/issues/562
This commit is contained in:
ZenithalHourlyRate 2021-06-10 04:16:25 +08:00
parent 271f810c6a
commit d2a7af027b
No known key found for this signature in database
GPG Key ID: 1189C659F3D04C1C

View File

@ -25,6 +25,7 @@ OS_TEMPLATE = {
'debian-latest2': ["stretch", "buster"], 'debian-latest2': ["stretch", "buster"],
'debian-latest': ["buster"], 'debian-latest': ["buster"],
} }
ARCH_NO_PKGIDX = ['dep11', 'i18n']
MAX_RETRY=int(os.getenv('MAX_RETRY', '3')) MAX_RETRY=int(os.getenv('MAX_RETRY', '3'))
DOWNLOAD_TIMEOUT=int(os.getenv('DOWNLOAD_TIMEOUT', '1800')) DOWNLOAD_TIMEOUT=int(os.getenv('DOWNLOAD_TIMEOUT', '1800'))
REPO_SIZE_FILE = os.getenv('REPO_SIZE_FILE', '') REPO_SIZE_FILE = os.getenv('REPO_SIZE_FILE', '')
@ -125,7 +126,8 @@ def apt_mirror(base_url: str, dist: str, repo: str, arch: str, dest_base_dir: Pa
# load Package Index URLs from the Release file # load Package Index URLs from the Release file
release_file = dist_tmp_dir / "Release" release_file = dist_tmp_dir / "Release"
pkgidx_dir,pkgidx_tmp_dir = mkdir_with_dot_tmp(comp_dir / f"binary-{arch}") arch_dir = arch if arch in ARCH_NO_PKGIDX else f"binary-{arch}"
pkgidx_dir,pkgidx_tmp_dir = mkdir_with_dot_tmp(comp_dir / arch_dir)
with open(release_file, "r") as fd: with open(release_file, "r") as fd:
pkgidx_content=None pkgidx_content=None
cnt_start=False cnt_start=False
@ -135,7 +137,7 @@ def apt_mirror(base_url: str, dist: str, repo: str, arch: str, dest_base_dir: Pa
if len(fields) != 3 or len(fields[0]) != 64: # 64 is SHA-256 checksum length if len(fields) != 3 or len(fields[0]) != 64: # 64 is SHA-256 checksum length
break break
checksum, filesize, filename = tuple(fields) checksum, filesize, filename = tuple(fields)
if filename.startswith(f"{repo}/binary-{arch}/") or \ if filename.startswith(f"{repo}/{arch_dir}/") or \
filename.startswith(f"{repo}/Contents-{arch}") or \ filename.startswith(f"{repo}/Contents-{arch}") or \
filename.startswith(f"Contents-{arch}"): filename.startswith(f"Contents-{arch}"):
fn = Path(filename) fn = Path(filename)
@ -179,6 +181,26 @@ def apt_mirror(base_url: str, dist: str, repo: str, arch: str, dest_base_dir: Pa
if not cnt_start: if not cnt_start:
print("Cannot find SHA-256 checksum") print("Cannot find SHA-256 checksum")
return 1 return 1
def collect_tmp_dir():
try:
move_files_in(pkgidx_tmp_dir, pkgidx_dir)
move_files_in(comp_tmp_dir, comp_dir)
move_files_in(dist_tmp_dir, dist_dir)
pkgidx_tmp_dir.rmdir()
comp_tmp_dir.rmdir()
dist_tmp_dir.rmdir()
return 0
except:
traceback.print_exc()
return 1
if arch in ARCH_NO_PKGIDX:
if collect_tmp_dir() == 1:
return 1
print(f"Mirroring {base_url} {dist}, {repo}, {arch} done!")
return 0
if pkgidx_content is None: if pkgidx_content is None:
print("index is empty, failed") print("index is empty, failed")
if len(list(pkgidx_dir.glob('Packages*'))) == 0: if len(list(pkgidx_dir.glob('Packages*'))) == 0:
@ -236,18 +258,9 @@ def apt_mirror(base_url: str, dist: str, repo: str, arch: str, dest_base_dir: Pa
else: else:
print(f"Failed to download {dest_filename}") print(f"Failed to download {dest_filename}")
err = 1 err = 1
try:
move_files_in(pkgidx_tmp_dir, pkgidx_dir)
move_files_in(comp_tmp_dir, comp_dir)
move_files_in(dist_tmp_dir, dist_dir)
pkgidx_tmp_dir.rmdir() if collect_tmp_dir() == 1:
comp_tmp_dir.rmdir()
dist_tmp_dir.rmdir()
except:
traceback.print_exc()
return 1 return 1
print(f"Mirroring {base_url} {dist}, {repo}, {arch} done!") print(f"Mirroring {base_url} {dist}, {repo}, {arch} done!")
print(f"{deb_count} packages, {deb_size} bytes in total", flush=True) print(f"{deb_count} packages, {deb_size} bytes in total", flush=True)
return err return err