diff --git a/lib/generator.py b/lib/generator.py index f6df890..9acd031 100755 --- a/lib/generator.py +++ b/lib/generator.py @@ -14,6 +14,7 @@ import shutil import tarfile import requests +# pylint: disable=too-many-instance-attributes class Generator(): """ Class responsible for generating the basic media to be consumed. @@ -22,25 +23,25 @@ class Generator(): git_dir = os.path.join(os.path.dirname(os.path.join(__file__)), '..') distfiles_dir = os.path.join(git_dir, 'distfiles') - # pylint: disable=too-many-arguments - def __init__(self, tmpdir, arch, external_sources, - early_preseed, repo_path): + def __init__(self, arch, external_sources, early_preseed, repo_path): self.arch = arch self.early_preseed = early_preseed self.external_sources = external_sources self.repo_path = repo_path - self.tmpdir = tmpdir - self.tmp_dir = tmpdir.path - self.external_dir = os.path.join(self.tmp_dir, 'external') self.source_manifest = self.get_source_manifest(not self.external_sources) + self.tmp_dir = None + self.external_dir = None - def prepare(self, using_kernel=False, kernel_bootstrap=False, target_size=0): + def prepare(self, tmpdir, using_kernel=False, kernel_bootstrap=False, target_size=0): """ Prepare basic media of live-bootstrap. /steps -- contains steps to be built / -- contains seed to allow steps to be built, containing custom scripts and stage0-posix """ + self.tmp_dir = tmpdir.path + self.external_dir = os.path.join(self.tmp_dir, 'external') + # We use ext3 here; ext4 actually has a variety of extensions that # have been added with varying levels of recency # Linux 4.9.10 does not support a bunch of them @@ -56,17 +57,17 @@ class Generator(): self.tmp_dir = init_path if self.repo_path or self.external_sources: - self.tmpdir.add_disk("external", filesystem="ext3") - self.tmpdir.mount_disk("external", "external") + tmpdir.add_disk("external", filesystem="ext3") + tmpdir.mount_disk("external", "external") else: self.external_dir = os.path.join(self.tmp_dir, 'external') elif using_kernel: self.tmp_dir = os.path.join(self.tmp_dir, 'disk') - self.tmpdir.add_disk("disk", + tmpdir.add_disk("disk", filesystem="ext3", size=(target_size + "M") if target_size else "16G", bootable=True) - self.tmpdir.mount_disk("disk", "disk") + tmpdir.mount_disk("disk", "disk") self.external_dir = os.path.join(self.tmp_dir, 'external') os.makedirs(self.external_dir, exist_ok=True) @@ -95,9 +96,9 @@ class Generator(): self.create_builder_hex0_disk_image(self.tmp_dir + '.img', target_size) if kernel_bootstrap and (self.external_sources or self.repo_path): - self.tmpdir.umount_disk('external') + tmpdir.umount_disk('external') elif using_kernel: - self.tmpdir.umount_disk('disk') + tmpdir.umount_disk('disk') def steps(self): """Copy in steps.""" diff --git a/rootfs.py b/rootfs.py index d202cb2..8641d02 100755 --- a/rootfs.py +++ b/rootfs.py @@ -162,8 +162,7 @@ def main(): if args.tmpfs: tmpdir.tmpfs(size=args.tmpfs_size) - generator = Generator(tmpdir=tmpdir, - arch=args.arch, + generator = Generator(arch=args.arch, external_sources=args.external_sources, repo_path=args.repo, early_preseed=args.early_preseed) @@ -181,7 +180,7 @@ print(shutil.which('chroot')) chroot_binary = run_as_root('python3', '-c', find_chroot, capture_output=True).stdout.decode().strip() - generator.prepare(using_kernel=False) + generator.prepare(tmpdir, using_kernel=False) arch = stage0_arch_map.get(args.arch, args.arch) init = os.path.join(os.sep, 'bootstrap-seeds', 'POSIX', arch, 'kaem-optional-seed') @@ -189,7 +188,7 @@ print(shutil.which('chroot')) elif args.bwrap: if not args.internal_ci or args.internal_ci == "pass1": - generator.prepare(using_kernel=False) + generator.prepare(tmpdir, using_kernel=False) arch = stage0_arch_map.get(args.arch, args.arch) init = os.path.join(os.sep, 'bootstrap-seeds', 'POSIX', arch, 'kaem-optional-seed') @@ -235,20 +234,20 @@ print(shutil.which('chroot')) elif args.bare_metal: if args.kernel: - generator.prepare(using_kernel=True, target_size=size) + generator.prepare(tmpdir, using_kernel=True, target_size=size) image_path = os.path.join(args.tmpdir, os.path.relpath(generator.tmp_dir, args.tmpdir)) print("Please:") print(f" 1. Take {image_path}/initramfs and your kernel, boot using this.") print(f" 2. Take {image_path}/disk.img and put this on a writable storage medium.") else: - generator.prepare(kernel_bootstrap=True, target_size=size) + generator.prepare(tmpdir, kernel_bootstrap=True, target_size=size) image_path = os.path.join(args.tmpdir, os.path.relpath(generator.tmp_dir, args.tmpdir)) print("Please:") print(f" 1. Take {image_path}.img and write it to a boot drive and then boot it.") else: if args.kernel: - generator.prepare(using_kernel=True, target_size=size) + generator.prepare(tmpdir, using_kernel=True, target_size=size) run(args.qemu_cmd, '-enable-kvm', @@ -262,7 +261,7 @@ print(shutil.which('chroot')) '-nographic', '-append', 'console=ttyS0 root=/dev/sda1 rootfstype=ext3 init=/init rw') else: - generator.prepare(kernel_bootstrap=True, target_size=size) + generator.prepare(tmpdir, kernel_bootstrap=True, target_size=size) arg_list = [ '-enable-kvm', '-m', str(args.qemu_ram) + 'M',