mirror of
https://github.com/fosslinux/live-bootstrap.git
synced 2026-03-25 04:26:31 +01:00
refactor(generator): enforce manifest-only distfile copy in kernel-bootstrap modes
This commit is contained in:
parent
95b25afdcd
commit
b1642d63bc
1 changed files with 24 additions and 13 deletions
|
|
@ -102,6 +102,20 @@ class Generator():
|
||||||
bootstrap_set = set(self.bootstrap_source_manifest)
|
bootstrap_set = set(self.bootstrap_source_manifest)
|
||||||
self.external_source_manifest = [entry for entry in full_manifest if entry not in bootstrap_set]
|
self.external_source_manifest = [entry for entry in full_manifest if entry not in bootstrap_set]
|
||||||
|
|
||||||
|
def _kernel_bootstrap_init_manifest(self):
|
||||||
|
"""
|
||||||
|
Return the exact manifest that is allowed inside init image.
|
||||||
|
"""
|
||||||
|
mode_to_manifest = {
|
||||||
|
"network_only": self.early_source_manifest, # up to get_network
|
||||||
|
"raw_external": self.bootstrap_source_manifest, # up to import_payload
|
||||||
|
"repo": self.bootstrap_source_manifest, # keep existing behavior
|
||||||
|
}
|
||||||
|
manifest = mode_to_manifest.get(self.kernel_bootstrap_mode)
|
||||||
|
if manifest is None:
|
||||||
|
raise ValueError(f"Unexpected kernel bootstrap mode: {self.kernel_bootstrap_mode}")
|
||||||
|
return manifest
|
||||||
|
|
||||||
def _copy_manifest_distfiles(self, out_dir, manifest):
|
def _copy_manifest_distfiles(self, out_dir, manifest):
|
||||||
os.makedirs(out_dir, exist_ok=True)
|
os.makedirs(out_dir, exist_ok=True)
|
||||||
for entry in manifest:
|
for entry in manifest:
|
||||||
|
|
@ -276,20 +290,17 @@ class Generator():
|
||||||
"""Copy in distfiles"""
|
"""Copy in distfiles"""
|
||||||
distfile_dir = os.path.join(self.external_dir, 'distfiles')
|
distfile_dir = os.path.join(self.external_dir, 'distfiles')
|
||||||
|
|
||||||
if self.kernel_bootstrap_mode == "raw_external":
|
if self.kernel_bootstrap_mode is not None:
|
||||||
self._copy_manifest_distfiles(distfile_dir, self.bootstrap_source_manifest)
|
# Kernel bootstrap always copies a bounded manifest, never full distfiles tree.
|
||||||
return
|
init_manifest = self._kernel_bootstrap_init_manifest()
|
||||||
|
self._copy_manifest_distfiles(distfile_dir, init_manifest)
|
||||||
if self.kernel_bootstrap_mode == "network_only":
|
|
||||||
self._copy_manifest_distfiles(distfile_dir, self.early_source_manifest)
|
|
||||||
return
|
|
||||||
|
|
||||||
if self.kernel_bootstrap_mode == "repo":
|
if self.kernel_bootstrap_mode == "repo":
|
||||||
# Repo mode needs early distfiles in init image and staged external disk.
|
# Repo mode also stages the same bounded set for the second ext3 disk.
|
||||||
init_distfile_dir = os.path.join(self.target_dir, 'external', 'distfiles')
|
staged_distfile_dir = os.path.join(os.path.dirname(self.target_dir),
|
||||||
self._copy_manifest_distfiles(init_distfile_dir, self.bootstrap_source_manifest)
|
'external', 'distfiles')
|
||||||
if init_distfile_dir != distfile_dir:
|
if staged_distfile_dir != distfile_dir:
|
||||||
self._copy_manifest_distfiles(distfile_dir, self.bootstrap_source_manifest)
|
self._copy_manifest_distfiles(staged_distfile_dir, init_manifest)
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.external_sources:
|
if self.external_sources:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue