diff --git a/rootfs.py b/rootfs.py index db3bed4..7048547 100755 --- a/rootfs.py +++ b/rootfs.py @@ -69,6 +69,8 @@ def main(): action="store_true") parser.add_argument("-r", "--repo", help="Path to prebuilt binary packages.", nargs=None) + parser.add_argument("--early-preseed", + help="Skip early stages of live-bootstrap.", nargs=None) # QEMU arguments parser.add_argument("-q", "--qemu", help="Use QEMU", @@ -126,7 +128,8 @@ def main(): tmpdir=args.tmpdir, external_sources=args.external_sources) system_b = SysB(arch=args.arch, preserve_tmp=args.preserve) system_a = SysA(arch=args.arch, preserve_tmp=args.preserve, - tmpdir=args.tmpdir, external_sources=args.external_sources, + early_preseed=args.early_preseed, tmpdir=args.tmpdir, + external_sources=args.external_sources, sysb_dir=system_b.sys_dir, sysc_dir=system_c.sys_dir) if args.tmpdir is not None: diff --git a/sysa.py b/sysa.py index 3f56667..35a83df 100755 --- a/sysa.py +++ b/sysa.py @@ -9,6 +9,7 @@ import os from distutils.dir_util import copy_tree import shutil +import tarfile from lib.sysgeneral import SysGeneral, stage0_arch_map @@ -18,10 +19,11 @@ class SysA(SysGeneral): Class responsible for preparing sources for System A. """ # pylint: disable=too-many-instance-attributes,too-many-arguments - def __init__(self, arch, preserve_tmp, external_sources, tmpdir, sysb_dir, sysc_dir): + def __init__(self, arch, preserve_tmp, external_sources, early_preseed, tmpdir, sysb_dir, sysc_dir): self.git_dir = os.path.dirname(os.path.join(__file__)) self.arch = arch self.preserve_tmp = preserve_tmp + self.early_preseed = early_preseed self.sys_dir = os.path.join(self.git_dir, 'sysa') if tmpdir is None: @@ -46,7 +48,15 @@ class SysA(SysGeneral): else: os.mkdir(self.tmp_dir) - self.stage0_posix() + if self.early_preseed: + # Extract tar containing preseed + with tarfile.open(self.early_preseed, "r") as seed: + seed.extractall(self.tmp_dir) + shutil.copy2(os.path.join(self.sys_dir, 'base-preseeded.kaem'), + os.path.join(self.tmp_dir, 'kaem.x86')) + else: + self.stage0_posix() + self.sysa() # sysb must be added to sysa as it is another initramfs stage diff --git a/sysa/after-preseeded.kaem b/sysa/after-preseeded.kaem new file mode 100755 index 0000000..8bccd53 --- /dev/null +++ b/sysa/after-preseeded.kaem @@ -0,0 +1,25 @@ +#!/bin/sh + +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# SPDX-FileCopyrightText: 2021 Paul Dersey +# SPDX-FileCopyrightText: 2020-2022 fosslinux +# SPDX-FileCopyrightText: 2022 Dor Askayo +# +# SPDX-License-Identifier: GPL-3.0-or-later + +set -ex + +# Set commonly used variables +sysa=/sysa +distfiles=/sysa/distfiles +prefix=/usr +bindir=${prefix}/bin +libdir=${libdir}/mes +incdir=${prefix}/include +srcdir=${prefix}/src +TMPDIR=/tmp # tmpdir is needed for patch to work +PATH=${bindir} + +cd ${sysa} + +exec bash run.sh diff --git a/sysa/base-preseeded.kaem b/sysa/base-preseeded.kaem new file mode 100644 index 0000000..6ff099d --- /dev/null +++ b/sysa/base-preseeded.kaem @@ -0,0 +1,7 @@ +#!/bin/sh + +# SPDX-FileCopyrightText: 2022 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + +/usr/bin/kaem -f /sysa/after-preseeded.kaem