simplify scratch directory handling a bit

This commit is contained in:
michael.hudson@canonical.com 2026-02-19 13:58:48 +13:00
parent a2a166d93d
commit 081981e650
No known key found for this signature in database
GPG Key ID: 80E627A0AB757E23
5 changed files with 13 additions and 17 deletions

View File

@ -17,6 +17,7 @@ def make_boot_configurator_for_arch(
arch: str, arch: str,
logger: "Logger", logger: "Logger",
apt_state: "AptStateManager", apt_state: "AptStateManager",
workdir: pathlib.Path,
iso_root: pathlib.Path, iso_root: pathlib.Path,
) -> "BaseBootConfigurator": ) -> "BaseBootConfigurator":
"""Factory function to create boot configurator for a specific architecture.""" """Factory function to create boot configurator for a specific architecture."""
@ -24,23 +25,23 @@ def make_boot_configurator_for_arch(
case "amd64": case "amd64":
from .amd64 import AMD64BootConfigurator from .amd64 import AMD64BootConfigurator
return AMD64BootConfigurator(logger, apt_state, iso_root) return AMD64BootConfigurator(logger, apt_state, workdir, iso_root)
case "arm64": case "arm64":
from .arm64 import ARM64BootConfigurator from .arm64 import ARM64BootConfigurator
return ARM64BootConfigurator(logger, apt_state, iso_root) return ARM64BootConfigurator(logger, apt_state, workdir, iso_root)
case "ppc64el": case "ppc64el":
from .ppc64el import PPC64ELBootConfigurator from .ppc64el import PPC64ELBootConfigurator
return PPC64ELBootConfigurator(logger, apt_state, iso_root) return PPC64ELBootConfigurator(logger, apt_state, workdir, iso_root)
case "riscv64": case "riscv64":
from .riscv64 import RISCV64BootConfigurator from .riscv64 import RISCV64BootConfigurator
return RISCV64BootConfigurator(logger, apt_state, iso_root) return RISCV64BootConfigurator(logger, apt_state, workdir, iso_root)
case "s390x": case "s390x":
from .s390x import S390XBootConfigurator from .s390x import S390XBootConfigurator
return S390XBootConfigurator(logger, apt_state, iso_root) return S390XBootConfigurator(logger, apt_state, workdir, iso_root)
case _: case _:
raise ValueError(f"Unsupported architecture: {arch}") raise ValueError(f"Unsupported architecture: {arch}")

View File

@ -202,14 +202,13 @@ fi
def make_bootable( def make_bootable(
self, self,
workdir: pathlib.Path,
project: str, project: str,
capproject: str, capproject: str,
subarch: str, subarch: str,
hwe: bool, hwe: bool,
) -> None: ) -> None:
"""Make the ISO bootable, including generating loopback.cfg.""" """Make the ISO bootable, including generating loopback.cfg."""
super().make_bootable(workdir, project, capproject, subarch, hwe) super().make_bootable(project, capproject, subarch, hwe)
grub_cfg = self.iso_root.joinpath("boot", "grub", "grub.cfg") grub_cfg = self.iso_root.joinpath("boot", "grub", "grub.cfg")
grub_content = grub_cfg.read_text() grub_content = grub_cfg.read_text()
self.iso_root.joinpath("boot", "grub", "loopback.cfg").write_text( self.iso_root.joinpath("boot", "grub", "loopback.cfg").write_text(

View File

@ -33,15 +33,13 @@ class BaseBootConfigurator(ABC):
self, self,
logger: Logger, logger: Logger,
apt_state: AptStateManager, apt_state: AptStateManager,
workdir: pathlib.Path,
iso_root: pathlib.Path, iso_root: pathlib.Path,
) -> None: ) -> None:
self.logger = logger self.logger = logger
self.apt_state = apt_state self.apt_state = apt_state
self.iso_root = iso_root
def create_dirs(self, workdir):
self.scratch = workdir.joinpath("boot-stuff") self.scratch = workdir.joinpath("boot-stuff")
self.scratch.mkdir(exist_ok=True) self.iso_root = iso_root
def download_and_extract_package( def download_and_extract_package(
self, pkg_name: str, target_dir: pathlib.Path self, pkg_name: str, target_dir: pathlib.Path
@ -85,7 +83,6 @@ class BaseBootConfigurator(ABC):
def make_bootable( def make_bootable(
self, self,
workdir: pathlib.Path,
project: str, project: str,
capproject: str, capproject: str,
subarch: str, subarch: str,
@ -96,6 +93,6 @@ class BaseBootConfigurator(ABC):
self.humanproject = capproject.replace("-", " ") self.humanproject = capproject.replace("-", " ")
self.subarch = subarch self.subarch = subarch
self.hwe = hwe self.hwe = hwe
self.create_dirs(workdir) self.scratch.mkdir(exist_ok=True)
with self.logger.logged("configuring boot"): with self.logger.logged("configuring boot"):
self.extract_files() self.extract_files()

View File

@ -90,14 +90,13 @@ menuentry "{self.humanproject} with the HWE kernel" {{
def make_bootable( def make_bootable(
self, self,
workdir: pathlib.Path,
project: str, project: str,
capproject: str, capproject: str,
subarch: str, subarch: str,
hwe: bool, hwe: bool,
) -> None: ) -> None:
"""Make the ISO bootable by extracting files and generating GRUB config.""" """Make the ISO bootable by extracting files and generating GRUB config."""
super().make_bootable(workdir, project, capproject, subarch, hwe) super().make_bootable(project, capproject, subarch, hwe)
with self.logger.logged("generating grub config"): with self.logger.logged("generating grub config"):
content = self.generate_grub_config() content = self.generate_grub_config()
grub_dir = self.iso_root.joinpath("boot", "grub") grub_dir = self.iso_root.joinpath("boot", "grub")

View File

@ -298,10 +298,10 @@ class ISOBuilder:
self.arch, self.arch,
self.logger, self.logger,
self.apt_state, self.apt_state,
self.workdir,
self.iso_root, self.iso_root,
) )
configurator.make_bootable( configurator.make_bootable(
self.workdir,
project, project,
capproject, capproject,
subarch, subarch,
@ -341,9 +341,9 @@ class ISOBuilder:
self.arch, self.arch,
self.logger, self.logger,
self.apt_state, self.apt_state,
self.workdir,
self.iso_root, self.iso_root,
) )
configurator.create_dirs(self.workdir)
mkisofs_opts = configurator.mkisofs_opts() mkisofs_opts = configurator.mkisofs_opts()
cmd: list[str | pathlib.Path] = ["xorriso"] cmd: list[str | pathlib.Path] = ["xorriso"]
if self.arch == "riscv64": if self.arch == "riscv64":