Add logic to warn if tar compression format is unknown, or not supported by WSL1 (#12466)
Blue committed
Jan 15, 2025 at 12:44 UTC
f007ede7ad0684080e2dc9a97a1296b88f95e9fd
1 file changed
+14
-1
distributions/validate-modern.py
+14
-1
@@ -18,6 +18,8 @@ MAGIC = magic.Magic()
18
X64_ELF_MAGIC = re.compile('^ELF 64-bit.* x86-64, version 1')
19
ARM64_ELF_MAGIC = re.compile('^ELF 64-bit.* ARM aarch64, version 1')
20
21
+KNOWN_TAR_FORMATS = {'^XZ compressed data.*': False, '^gzip compressed data.*': True}
22
+
23
DISCOURAGED_SYSTEM_UNITS = ['systemd-resolved.service',
24
'systemd-networkd.service',
25
'systemd-tmpfiles-setup.service',
@@ -406,6 +408,7 @@ def read_url(flavor: str, name: str, url: dict, elf_magic):
408
if not url['Url'].endswith('.wsl'):
409
warning(flavor, name, f'Url does not point to a .wsl file: {url["Url"]}')
410
411
+ tar_format = None
412
if url['Url'].startswith('file://'):
413
with open(url['Url'].replace('file:///', '').replace('file://', ''), 'rb') as fd:
414
while True:
@@ -415,6 +418,9 @@ def read_url(flavor: str, name: str, url: dict, elf_magic):
418
419
hash.update(e)
420
421
+ if tar_format is None:
422
+ tar_format = MAGIC.from_buffer(e)
423
+
424
fd.seek(0, 0)
425
read_tar(flavor, name, fd, elf_magic)
426
else:
@@ -426,6 +432,9 @@ def read_url(flavor: str, name: str, url: dict, elf_magic):
432
file.write(e)
433
hash.update(e)
434
435
+ if tar_format is None:
436
+ tar_format = MAGIC.from_buffer(e)
437
+
438
file.seek(0, 0)
439
read_tar(flavor, name, file, elf_magic)
440
@@ -443,7 +452,11 @@ def read_url(flavor: str, name: str, url: dict, elf_magic):
452
else:
453
click.secho(f'Hash for {url["Url"]} matches ({expected_sha})', fg='green')
454
446
-
455
+ known_format = next((value for key, value in KNOWN_TAR_FORMATS.items() if re.match(key, tar_format)), None)
456
+ if known_format is None:
457
+ error(flavor, name, f'Unknown tar format: {tar_format}')
458
+ elif not known_format:
459
+ warning(flavor, name, f'Tar format not supported by WSL1: {tar_format}')
460
461
def error(flavor: str, distribution: str, message: str):
462
global errors