use pycdlib to get iso label

This commit is contained in:
Louis Abel 2024-11-15 04:35:17 -07:00
parent df4bb47691
commit a4d6899601
Signed by untrusted user: label
GPG Key ID: 2A6975660E424560
4 changed files with 59 additions and 7 deletions

View File

@ -771,6 +771,7 @@ class IsoBuild:
if not os.path.exists(lorax_path): if not os.path.exists(lorax_path):
self.log.error(Color.FAIL + 'Lorax not found at all. This is considered fatal.') self.log.error(Color.FAIL + 'Lorax not found at all. This is considered fatal.')
# do we need to do a hard exit here?
raise SystemExit() raise SystemExit()
grafts = self._generate_graft_points( grafts = self._generate_graft_points(
@ -779,7 +780,12 @@ class IsoBuild:
self.iso_map['images'][y]['repos'], self.iso_map['images'][y]['repos'],
reposcan=reposcan reposcan=reposcan
) )
self._extra_iso_local_config(a, y, grafts, work_root, volname) try:
self._extra_iso_local_config(a, y, grafts, work_root)
except ValueError as exc:
self.log.error(Color.FAIL + f'An error occured while configuring extra ISO build {exc}')
self.log.error(Color.FAIL + f'Error: {exc}')
continue
if self.extra_iso_mode == 'local': if self.extra_iso_mode == 'local':
self._extra_iso_local_run(a, y, work_root) self._extra_iso_local_run(a, y, work_root)
@ -799,7 +805,7 @@ class IsoBuild:
self._extra_iso_podman_run(arches_to_build, images_to_build_podman, work_root) self._extra_iso_podman_run(arches_to_build, images_to_build_podman, work_root)
def _extra_iso_local_config(self, arch, image, grafts, work_root, volname): def _extra_iso_local_config(self, arch, image, grafts, work_root):
""" """
Local ISO build configuration - This generates the configuration for Local ISO build configuration - This generates the configuration for
both mock and podman entries both mock and podman entries
@ -839,12 +845,15 @@ class IsoBuild:
if self.updated_image: if self.updated_image:
datestamp = '-' + self.updated_image_date datestamp = '-' + self.updated_image_date
volid = f'{self.shortname}-{self.major_version}-{self.minor_version}{rclevel}-{arch}-{volname}' volid = Idents.get_vol_id(boot_iso)
isoname = f'{self.shortname}-{self.release}{rclevel}{datestamp}-{arch}-{image}.iso' isoname = f'{self.shortname}-{self.release}{rclevel}{datestamp}-{arch}-{image}.iso'
generic_isoname = f'{self.shortname}-{arch}-{image}.iso' generic_isoname = f'{self.shortname}-{arch}-{image}.iso'
latest_isoname = f'{self.shortname}-{self.major_version}-latest-{arch}-{image}.iso' latest_isoname = f'{self.shortname}-{self.major_version}-latest-{arch}-{image}.iso'
required_pkgs = self.iso_map['lorax']['required_pkgs'] required_pkgs = self.iso_map['lorax']['required_pkgs']
if not volid:
raise ValueError('Volume ID could not be determined')
lorax_pkg_cmd = '/usr/bin/dnf install {} -y {}'.format( lorax_pkg_cmd = '/usr/bin/dnf install {} -y {}'.format(
' '.join(required_pkgs), ' '.join(required_pkgs),
log_path_command log_path_command
@ -882,6 +891,8 @@ class IsoBuild:
'iso_level': self.iso_map['iso_level'], 'iso_level': self.iso_map['iso_level'],
} }
self.log.info(Color.INFO + f'boot.iso volume name: {volid}')
# Generate a xorriso compatible dialog # Generate a xorriso compatible dialog
with open(grafts) as xp: with open(grafts) as xp:
xorpoint = xp.read() xorpoint = xp.read()

View File

@ -13,6 +13,7 @@ import boto3
import xmltodict import xmltodict
import productmd.treeinfo import productmd.treeinfo
import productmd.composeinfo import productmd.composeinfo
import pycdlib
import empanadas import empanadas
import kobo.shortcuts import kobo.shortcuts
from empanadas.common import Color from empanadas.common import Color
@ -24,8 +25,13 @@ class ArchCheck:
archfile = { archfile = {
'x86_64': [ 'x86_64': [
'isolinux/vmlinuz', 'isolinux/vmlinuz',
'images/efiboot.img',
'images/eltorito.img',
'images/grub.conf', 'images/grub.conf',
'EFI/BOOT/BOOTX64.EFI' 'images/install.img',
'boot/grub2/grub.cfg',
'EFI/BOOT/BOOTX64.EFI',
'EFI/BOOT/grub.cfg'
], ],
'aarch64': [ 'aarch64': [
'EFI/BOOT/BOOTAA64.EFI' 'EFI/BOOT/BOOTAA64.EFI'
@ -1337,10 +1343,21 @@ class Idents:
return False return False
@staticmethod @staticmethod
def get_vol_id(opts): def get_vol_id(i):
""" """
Gets a volume ID Gets a volume ID of a given ISO
""" """
iso = pycdlib.PyCdlib()
try:
iso.open(i)
except pycdlib.pycdlibexception.PyCdlibInvalidISO as exc:
print(exc)
return False
pvd = iso.pvd
volume_id = pvd.volume_identifier.decode('UTF-8').strip()
iso.close()
return volume_id
class Syncs: class Syncs:
""" """

View File

@ -206,6 +206,17 @@ files = [
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
] ]
[[package]]
name = "file-magic"
version = "0.4.1"
description = "Python front end for libmagic(3)"
optional = false
python-versions = ">=2.7"
files = [
{file = "file-magic-0.4.1.tar.gz", hash = "sha256:a91d1483117f7ed48cd0238ad9be36b04824d57e9c38ea7523113989e81b9c53"},
{file = "file_magic-0.4.1-py3-none-any.whl", hash = "sha256:cb9496a1656baf75cadd771479f63b53081095e968d0be72b9b7a7ed538e4fb8"},
]
[[package]] [[package]]
name = "gitdb" name = "gitdb"
version = "4.0.11" version = "4.0.11"
@ -443,6 +454,17 @@ files = [
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
] ]
[[package]]
name = "pycdlib"
version = "1.14.0"
description = "Pure python ISO manipulation library"
optional = false
python-versions = "*"
files = [
{file = "pycdlib-1.14.0-py2.py3-none-any.whl", hash = "sha256:a905827335f0066af3fd416c5cf9b1f29dffaf4d0914b714555213d1809f38d4"},
{file = "pycdlib-1.14.0.tar.gz", hash = "sha256:8ec306b31d9c850f28c5fda52438d904edd1e8fcf862c5ffd756272efac9f422"},
]
[[package]] [[package]]
name = "pytest" name = "pytest"
version = "5.4.3" version = "5.4.3"
@ -695,4 +717,4 @@ type = ["pytest-mypy"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.9,<4" python-versions = ">=3.9,<4"
content-hash = "331e1b11d9e6285ee16d66f8658ca7df0d247054f27a9de1e560fd017d86bb73" content-hash = "60742cc3e07d8fe7b8bbe48db7be51cb2b5e09c194eedb0c4aef064f2d2c5eba"

View File

@ -18,6 +18,8 @@ requests = "^2.32.2"
kobo = "^0.37.0" kobo = "^0.37.0"
attrs = "^24.2.0" attrs = "^24.2.0"
GitPython = ">=3.1.30" GitPython = ">=3.1.30"
file-magic = ">=0.4.0"
pycdlib = ">=1.14.0"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
pytest = "~5" pytest = "~5"