mirror of
https://github.com/ipxe/ipxe.git
synced 2026-05-04 12:01:25 +02:00
[cloud] Fix architecture detection for partitioned disk images
Allow the UEFI CPU architecture to be detected for the partitioned
disk images generated by genfsimg as of commit 2c84b68 ("[build] Use a
partition table in generated USB disk images").
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
07887332cf
commit
304904dbb6
@ -10,6 +10,7 @@ import io
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import tempfile
|
||||
import time
|
||||
from uuid import uuid4
|
||||
import zipfile
|
||||
@ -105,13 +106,19 @@ Image = namedtuple('Image', ['path', 'family', 'name', 'arch', 'mode'])
|
||||
|
||||
def image(filename, basefamily, basename):
|
||||
"""Construct image description"""
|
||||
with tempfile.NamedTemporaryFile(mode='w+t') as mtoolsrc:
|
||||
mtoolsrc.writelines([
|
||||
'drive D:', f'file="{filename}"',
|
||||
'drive P:', f'file="{filename}"', 'partition=4',
|
||||
])
|
||||
mtoolsrc.flush()
|
||||
mdir = subprocess.run(['mdir', '-b', 'D:/EFI/BOOT', 'P:/EFI/BOOT'],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
check=False, env={'MTOOLSRC': mtoolsrc.name})
|
||||
mapping = {
|
||||
b'BOOTX64.EFI': 'x86_64',
|
||||
b'BOOTAA64.EFI': 'arm64',
|
||||
}
|
||||
mdir = subprocess.run(['mdir', '-b', '-i', filename, '::/EFI/BOOT'],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
check=False)
|
||||
uefi = [v for k, v in mapping.items() if k in mdir.stdout]
|
||||
suffix = ('-uefi-%s' % uefi[0].replace('_', '-') if len(uefi) == 1 else
|
||||
'-uefi-multi' if uefi else '')
|
||||
|
||||
@ -8,6 +8,7 @@ from hashlib import sha256
|
||||
from itertools import count
|
||||
import os.path
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
import boto3
|
||||
|
||||
@ -17,8 +18,15 @@ EMPTY_CHECKSUM = b64encode(sha256(b'\0' * BLOCKSIZE).digest()).decode()
|
||||
|
||||
def detect_architecture(image):
|
||||
"""Detect CPU architecture"""
|
||||
mdir = subprocess.run(['mdir', '-b', '-i', image, '::/EFI/BOOT'],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
with tempfile.NamedTemporaryFile(mode='w+t') as mtoolsrc:
|
||||
mtoolsrc.writelines([
|
||||
'drive D:', f'file="{image}"',
|
||||
'drive P:', f'file="{image}"', 'partition=4',
|
||||
])
|
||||
mtoolsrc.flush()
|
||||
mdir = subprocess.run(['mdir', '-b', 'D:/EFI/BOOT', 'P:/EFI/BOOT'],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
check=False, env={'MTOOLSRC': mtoolsrc.name})
|
||||
if any(b'BOOTAA64.EFI' in x for x in mdir.stdout.splitlines()):
|
||||
return 'arm64'
|
||||
return 'x86_64'
|
||||
|
||||
@ -6,6 +6,7 @@ from datetime import date
|
||||
import io
|
||||
import subprocess
|
||||
import tarfile
|
||||
import tempfile
|
||||
from uuid import uuid4
|
||||
|
||||
from google.cloud import compute
|
||||
@ -58,9 +59,15 @@ def upload_blob(bucket, image):
|
||||
|
||||
def detect_uefi(image):
|
||||
"""Identify UEFI CPU architecture(s)"""
|
||||
mdir = subprocess.run(['mdir', '-b', '-i', image, '::/EFI/BOOT'],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
check=False)
|
||||
with tempfile.NamedTemporaryFile(mode='w+t') as mtoolsrc:
|
||||
mtoolsrc.writelines([
|
||||
'drive D:', f'file="{image}"',
|
||||
'drive P:', f'file="{image}"', 'partition=4',
|
||||
])
|
||||
mtoolsrc.flush()
|
||||
mdir = subprocess.run(['mdir', '-b', 'D:/EFI/BOOT', 'P:/EFI/BOOT'],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
check=False, env={'MTOOLSRC': mtoolsrc.name})
|
||||
mapping = {
|
||||
b'BOOTX64.EFI': 'x86_64',
|
||||
b'BOOTAA64.EFI': 'arm64',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user