mirror of
https://github.com/fosslinux/live-bootstrap.git
synced 2026-03-24 20:16:32 +01:00
fix(generator): enforce stage-bounded distfile sets before curl/import and stage repo minimally
This commit is contained in:
parent
b1642d63bc
commit
d1b466c047
1 changed files with 19 additions and 17 deletions
|
|
@ -37,14 +37,19 @@ class Generator():
|
||||||
self.repo_path = repo_path
|
self.repo_path = repo_path
|
||||||
self.mirrors = mirrors
|
self.mirrors = mirrors
|
||||||
self.build_guix_also = build_guix_also
|
self.build_guix_also = build_guix_also
|
||||||
self.source_manifest = self.get_source_manifest(
|
self.pre_network_source_manifest = self.get_source_manifest(
|
||||||
stop_before_improve=("get_network" if not self.external_sources else None),
|
|
||||||
build_guix_also=self.build_guix_also
|
|
||||||
)
|
|
||||||
self.early_source_manifest = self.get_source_manifest(
|
|
||||||
stop_before_improve="get_network",
|
stop_before_improve="get_network",
|
||||||
build_guix_also=self.build_guix_also
|
build_guix_also=False,
|
||||||
)
|
)
|
||||||
|
self.pre_import_source_manifest = self.get_source_manifest(
|
||||||
|
stop_before_improve="import_payload",
|
||||||
|
build_guix_also=False,
|
||||||
|
)
|
||||||
|
# Only raw-external mode needs full upfront availability for container generation.
|
||||||
|
if self.external_sources and not self.repo_path:
|
||||||
|
self.source_manifest = self.get_source_manifest(build_guix_also=self.build_guix_also)
|
||||||
|
else:
|
||||||
|
self.source_manifest = self.pre_network_source_manifest
|
||||||
self.bootstrap_source_manifest = self.source_manifest
|
self.bootstrap_source_manifest = self.source_manifest
|
||||||
self.external_source_manifest = []
|
self.external_source_manifest = []
|
||||||
self.external_image = None
|
self.external_image = None
|
||||||
|
|
@ -81,7 +86,7 @@ class Generator():
|
||||||
# Network-only mode keeps pre-network distfiles inside init image.
|
# Network-only mode keeps pre-network distfiles inside init image.
|
||||||
self.external_dir = os.path.join(self.target_dir, 'external')
|
self.external_dir = os.path.join(self.target_dir, 'external')
|
||||||
self.kernel_bootstrap_mode = "network_only"
|
self.kernel_bootstrap_mode = "network_only"
|
||||||
self.bootstrap_source_manifest = self.early_source_manifest
|
self.bootstrap_source_manifest = self.pre_network_source_manifest
|
||||||
self.external_source_manifest = []
|
self.external_source_manifest = []
|
||||||
|
|
||||||
def _prepare_kernel_bootstrap_external_manifests(self):
|
def _prepare_kernel_bootstrap_external_manifests(self):
|
||||||
|
|
@ -91,10 +96,7 @@ class Generator():
|
||||||
# Keep the early builder image small: include only sources needed
|
# Keep the early builder image small: include only sources needed
|
||||||
# before improve: import_payload runs, so external.img is the primary
|
# before improve: import_payload runs, so external.img is the primary
|
||||||
# carrier for the remaining distfiles.
|
# carrier for the remaining distfiles.
|
||||||
self.bootstrap_source_manifest = self.get_source_manifest(
|
self.bootstrap_source_manifest = self.pre_import_source_manifest
|
||||||
stop_before_improve="import_payload",
|
|
||||||
build_guix_also=False
|
|
||||||
)
|
|
||||||
|
|
||||||
full_manifest = self.get_source_manifest(build_guix_also=self.build_guix_also)
|
full_manifest = self.get_source_manifest(build_guix_also=self.build_guix_also)
|
||||||
if self.bootstrap_source_manifest == full_manifest:
|
if self.bootstrap_source_manifest == full_manifest:
|
||||||
|
|
@ -107,9 +109,9 @@ class Generator():
|
||||||
Return the exact manifest that is allowed inside init image.
|
Return the exact manifest that is allowed inside init image.
|
||||||
"""
|
"""
|
||||||
mode_to_manifest = {
|
mode_to_manifest = {
|
||||||
"network_only": self.early_source_manifest, # up to get_network
|
"network_only": self.pre_network_source_manifest, # up to get_network
|
||||||
"raw_external": self.bootstrap_source_manifest, # up to import_payload
|
"raw_external": self.bootstrap_source_manifest, # up to import_payload
|
||||||
"repo": self.bootstrap_source_manifest, # keep existing behavior
|
"repo": self.pre_network_source_manifest, # up to get_network
|
||||||
}
|
}
|
||||||
manifest = mode_to_manifest.get(self.kernel_bootstrap_mode)
|
manifest = mode_to_manifest.get(self.kernel_bootstrap_mode)
|
||||||
if manifest is None:
|
if manifest is None:
|
||||||
|
|
@ -293,13 +295,13 @@ class Generator():
|
||||||
if self.kernel_bootstrap_mode is not None:
|
if self.kernel_bootstrap_mode is not None:
|
||||||
# Kernel bootstrap always copies a bounded manifest, never full distfiles tree.
|
# Kernel bootstrap always copies a bounded manifest, never full distfiles tree.
|
||||||
init_manifest = self._kernel_bootstrap_init_manifest()
|
init_manifest = self._kernel_bootstrap_init_manifest()
|
||||||
self._copy_manifest_distfiles(distfile_dir, init_manifest)
|
init_distfile_dir = os.path.join(self.target_dir, 'external', 'distfiles')
|
||||||
|
self._copy_manifest_distfiles(init_distfile_dir, init_manifest)
|
||||||
|
|
||||||
if self.kernel_bootstrap_mode == "repo":
|
if self.kernel_bootstrap_mode == "repo":
|
||||||
# Repo mode also stages the same bounded set for the second ext3 disk.
|
# Repo mode also stages the same bounded set for the second ext3 disk.
|
||||||
staged_distfile_dir = os.path.join(os.path.dirname(self.target_dir),
|
staged_distfile_dir = distfile_dir
|
||||||
'external', 'distfiles')
|
if staged_distfile_dir != init_distfile_dir:
|
||||||
if staged_distfile_dir != distfile_dir:
|
|
||||||
self._copy_manifest_distfiles(staged_distfile_dir, init_manifest)
|
self._copy_manifest_distfiles(staged_distfile_dir, init_manifest)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue