2021-04-06 00:12:02 +01:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
"""System A"""
|
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
2022-05-23 15:02:33 +01:00
|
|
|
# SPDX-FileCopyrightText: 2022 Dor Askayo <dor.askayo@gmail.com>
|
2021-04-06 00:12:02 +01:00
|
|
|
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
|
2021-05-18 12:37:21 +01:00
|
|
|
# SPDX-FileCopyrightText: 2021 Melg Eight <public.melg8@gmail.com>
|
2022-04-24 04:59:17 +01:00
|
|
|
# SPDX-FileCopyrightText: 2021-22 fosslinux <fosslinux@aussies.space>
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
import os
|
|
|
|
from distutils.dir_util import copy_tree
|
|
|
|
import shutil
|
|
|
|
|
2021-10-20 21:11:48 +01:00
|
|
|
from lib.sysgeneral import SysGeneral, stage0_arch_map
|
2021-04-06 00:12:02 +01:00
|
|
|
|
2021-08-05 13:16:19 +01:00
|
|
|
# pylint: disable=consider-using-with
|
2021-07-06 01:52:10 +01:00
|
|
|
class SysA(SysGeneral):
|
2021-04-06 00:12:02 +01:00
|
|
|
"""
|
|
|
|
Class responsible for preparing sources for System A.
|
|
|
|
"""
|
2021-08-05 13:16:19 +01:00
|
|
|
# pylint: disable=too-many-instance-attributes,too-many-arguments
|
2022-05-23 06:56:18 +01:00
|
|
|
def __init__(self, arch, preserve_tmp, external_sources, tmpdir, sysb_dir, sysc_dir):
|
2021-04-06 00:12:02 +01:00
|
|
|
self.git_dir = os.path.dirname(os.path.join(__file__))
|
|
|
|
self.arch = arch
|
|
|
|
self.preserve_tmp = preserve_tmp
|
|
|
|
|
2021-07-06 01:52:10 +01:00
|
|
|
self.sys_dir = os.path.join(self.git_dir, 'sysa')
|
2021-04-06 00:12:02 +01:00
|
|
|
if tmpdir is None:
|
2022-04-13 00:08:29 +01:00
|
|
|
self.tmp_dir = os.path.join(self.git_dir, 'tmp')
|
2021-04-06 00:12:02 +01:00
|
|
|
else:
|
2021-07-06 01:52:10 +01:00
|
|
|
self.tmp_dir = os.path.join(tmpdir, 'sysa')
|
2022-04-07 00:09:45 +01:00
|
|
|
self.sysa_dir = os.path.join(self.tmp_dir, 'sysa')
|
|
|
|
self.base_dir = self.sysa_dir
|
2022-04-24 04:59:17 +01:00
|
|
|
self.cache_dir = os.path.join(self.sys_dir, 'distfiles')
|
|
|
|
self.sysb_dir = sysb_dir
|
2022-05-22 01:03:21 +01:00
|
|
|
self.sysc_dir = sysc_dir
|
2022-05-23 06:56:18 +01:00
|
|
|
self.external_sources = external_sources
|
2021-04-06 00:12:02 +01:00
|
|
|
|
2022-05-22 01:03:21 +01:00
|
|
|
def prepare(self, mount_tmpfs, create_initramfs, repo_path):
|
2021-04-06 00:12:02 +01:00
|
|
|
"""
|
2021-05-06 02:14:11 +01:00
|
|
|
Prepare directory structure for System A.
|
2022-05-23 15:02:33 +01:00
|
|
|
We create an empty tmp directory, unpack stage0-posix.
|
2022-04-07 00:09:45 +01:00
|
|
|
Rest of the files are unpacked into more structured directory /sysa
|
2021-04-06 00:12:02 +01:00
|
|
|
"""
|
2022-05-23 15:02:33 +01:00
|
|
|
if mount_tmpfs:
|
|
|
|
self.mount_tmpfs()
|
|
|
|
else:
|
|
|
|
os.mkdir(self.tmp_dir)
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
self.stage0_posix()
|
2022-04-07 00:09:45 +01:00
|
|
|
self.sysa()
|
2021-04-06 00:12:02 +01:00
|
|
|
|
2021-07-06 01:52:10 +01:00
|
|
|
# sysb must be added to sysa as it is another initramfs stage
|
|
|
|
self.sysb()
|
|
|
|
|
2022-05-23 06:56:18 +01:00
|
|
|
self.sysc(create_initramfs)
|
2022-05-23 14:09:45 +01:00
|
|
|
|
2022-05-28 22:59:42 +01:00
|
|
|
if repo_path:
|
|
|
|
repo_dir = os.path.join(self.tmp_dir, 'usr', 'src', 'repo-preseeded')
|
|
|
|
shutil.copytree(repo_path, repo_dir)
|
|
|
|
|
2022-05-23 14:09:45 +01:00
|
|
|
if create_initramfs:
|
2022-05-23 14:04:13 +01:00
|
|
|
self.make_initramfs()
|
2021-10-10 16:01:50 +01:00
|
|
|
|
2022-04-13 00:08:29 +01:00
|
|
|
def sysa(self):
|
2022-04-24 04:59:17 +01:00
|
|
|
"""Copy in sysa files for sysa."""
|
2022-04-13 00:08:29 +01:00
|
|
|
self.get_packages()
|
2022-04-24 04:59:17 +01:00
|
|
|
|
2022-04-13 00:08:29 +01:00
|
|
|
shutil.copytree(self.sys_dir, os.path.join(self.tmp_dir, 'sysa'),
|
2022-05-22 01:03:21 +01:00
|
|
|
ignore=shutil.ignore_patterns('tmp'))
|
2022-04-13 00:08:29 +01:00
|
|
|
|
2021-07-06 01:52:10 +01:00
|
|
|
def sysb(self):
|
|
|
|
"""Copy in sysb files for sysb."""
|
2022-04-24 04:59:17 +01:00
|
|
|
shutil.copytree(self.sysb_dir, os.path.join(self.tmp_dir, 'sysb'),
|
2022-05-22 01:03:21 +01:00
|
|
|
ignore=shutil.ignore_patterns('tmp'))
|
2021-07-06 01:52:10 +01:00
|
|
|
|
2022-05-23 06:56:18 +01:00
|
|
|
def sysc(self, create_initramfs):
|
2021-10-10 16:01:50 +01:00
|
|
|
"""Copy in sysc files for sysc."""
|
2022-05-23 06:56:18 +01:00
|
|
|
if create_initramfs:
|
|
|
|
ignore = shutil.ignore_patterns('tmp', 'distfiles')
|
|
|
|
else:
|
|
|
|
ignore = shutil.ignore_patterns('tmp')
|
2022-05-22 01:03:21 +01:00
|
|
|
shutil.copytree(self.sysc_dir, os.path.join(self.tmp_dir, 'sysc'),
|
2022-05-23 06:56:18 +01:00
|
|
|
ignore=ignore)
|
2021-10-10 16:01:50 +01:00
|
|
|
|
2021-04-06 00:12:02 +01:00
|
|
|
def stage0_posix(self):
|
2021-06-10 18:01:47 +01:00
|
|
|
"""Copy in all of the stage0-posix"""
|
2021-07-06 01:52:10 +01:00
|
|
|
stage0_posix_base_dir = os.path.join(self.sys_dir, 'stage0-posix', 'src')
|
2021-10-08 19:29:16 +01:00
|
|
|
copy_tree(stage0_posix_base_dir, self.tmp_dir)
|
|
|
|
|
2021-10-20 21:11:48 +01:00
|
|
|
arch = stage0_arch_map.get(self.arch, self.arch)
|
2021-10-08 19:29:16 +01:00
|
|
|
kaem_optional_seed = os.path.join(self.sys_dir, 'stage0-posix', 'src', 'bootstrap-seeds',
|
2021-10-20 21:11:48 +01:00
|
|
|
'POSIX', arch, 'kaem-optional-seed')
|
2021-04-06 00:12:02 +01:00
|
|
|
shutil.copy2(kaem_optional_seed, os.path.join(self.tmp_dir, 'init'))
|
|
|
|
|
2021-06-10 18:01:47 +01:00
|
|
|
# stage0-posix hook to continue running live-bootstrap
|
2021-12-28 11:51:15 +00:00
|
|
|
shutil.copy2(os.path.join(self.sys_dir, 'after.kaem'),
|
2021-06-10 18:01:47 +01:00
|
|
|
os.path.join(self.tmp_dir, 'after.kaem'))
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
# pylint: disable=line-too-long,too-many-statements
|
|
|
|
def get_packages(self):
|
|
|
|
"""Prepare remaining sources"""
|
2022-05-21 19:08:29 +01:00
|
|
|
# mes-0.24 snapshot
|
|
|
|
self.get_file(["http://git.savannah.gnu.org/cgit/mes.git/snapshot/mes-aa5f1533e1736a89e60d2c34c2a0ab3b01f8d037.tar.gz",
|
|
|
|
"https://download.savannah.gnu.org/releases/nyacc/nyacc-1.00.2.tar.gz"],
|
|
|
|
output=["mes-0.24.tar.gz", "nyacc-1.00.2.tar.gz"])
|
2021-06-11 22:39:50 +01:00
|
|
|
|
2021-06-20 22:23:51 +01:00
|
|
|
# tcc 0.9.26 patched by janneke
|
|
|
|
self.get_file("https://lilypond.org/janneke/tcc/tcc-0.9.26-1136-g5bba73cc.tar.gz", output="tcc-0.9.26.tar.gz")
|
|
|
|
|
2022-05-13 22:46:56 +01:00
|
|
|
# make 3.80
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/make/make-3.80.tar.gz")
|
|
|
|
|
2022-05-14 19:40:52 +01:00
|
|
|
# gzip 1.2.4
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/gzip/gzip-1.2.4.tar.gz")
|
|
|
|
|
2022-05-14 12:42:03 +01:00
|
|
|
# tar 1.12
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/tar/tar-1.12.tar.gz")
|
|
|
|
|
2021-04-06 00:12:02 +01:00
|
|
|
# sed 4.0.9
|
2021-06-20 23:58:04 +01:00
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/sed/sed-4.0.9.tar.gz")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
# patch 2.5.9
|
2021-10-08 19:29:16 +01:00
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/patch/patch-2.5.9.tar.gz")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
# bzip2 1.0.8
|
2021-06-20 23:58:04 +01:00
|
|
|
self.get_file("https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
2021-04-15 01:45:06 +01:00
|
|
|
# tcc 0.9.27
|
2021-06-20 23:58:04 +01:00
|
|
|
self.get_file("https://download.savannah.gnu.org/releases/tinycc/tcc-0.9.27.tar.bz2")
|
2021-04-15 01:45:06 +01:00
|
|
|
|
2021-04-06 00:12:02 +01:00
|
|
|
# coreutils 5.0
|
2021-06-20 23:58:04 +01:00
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/coreutils/coreutils-5.0.tar.bz2")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
# heirloom-devtools
|
|
|
|
self.get_file("http://downloads.sourceforge.net/project/heirloom/heirloom-devtools/070527/heirloom-devtools-070527.tar.bz2")
|
|
|
|
|
|
|
|
# bash 2.05b
|
2021-10-08 19:29:16 +01:00
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/bash/bash-2.05b.tar.gz")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
# flex 2.5.11
|
|
|
|
self.get_file("http://download.nust.na/pub2/openpkg1/sources/DST/flex/flex-2.5.11.tar.gz")
|
|
|
|
|
|
|
|
# musl 1.1.24
|
|
|
|
self.get_file("https://musl.libc.org/releases/musl-1.1.24.tar.gz")
|
|
|
|
|
|
|
|
# m4 1.4.7
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/m4/m4-1.4.7.tar.gz")
|
|
|
|
|
|
|
|
# flex 2.6.4
|
|
|
|
self.get_file("https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz")
|
|
|
|
|
|
|
|
# bison 3.4.1
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/bison/bison-3.4.1.tar.gz")
|
|
|
|
|
|
|
|
# grep 2.4
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/grep/grep-2.4.tar.gz")
|
|
|
|
|
|
|
|
# diffutils 2.7
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/diffutils/diffutils-2.7.tar.gz")
|
|
|
|
|
|
|
|
# coreutils 6.10
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/coreutils/coreutils-6.10.tar.gz")
|
|
|
|
|
|
|
|
# gawk 3.0.4
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/gawk/gawk-3.0.4.tar.gz")
|
|
|
|
|
|
|
|
# perl 5.000
|
|
|
|
self.get_file("https://github.com/Perl/perl5/archive/perl-5.000.tar.gz")
|
|
|
|
|
|
|
|
# perl 5.003
|
|
|
|
self.get_file("https://github.com/Perl/perl5/archive/perl-5.003.tar.gz")
|
|
|
|
|
|
|
|
# perl 5.004_05
|
2022-01-14 05:23:36 +00:00
|
|
|
self.get_file("https://www.cpan.org/src/5.0/perl5.004_05.tar.gz",
|
|
|
|
output="perl5.004-05.tar.gz")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
# perl 5.005_03
|
2022-01-14 05:23:36 +00:00
|
|
|
self.get_file("https://www.cpan.org/src/5.0/perl5.005_03.tar.gz",
|
|
|
|
output="perl5.005-03.tar.gz")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
# perl 5.6.2
|
|
|
|
self.get_file("https://www.cpan.org/src/5.0/perl-5.6.2.tar.gz")
|
|
|
|
|
|
|
|
# autoconf 2.52
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.52.tar.bz2")
|
|
|
|
|
|
|
|
# automake 1.6.3
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.6.3.tar.bz2")
|
|
|
|
|
|
|
|
# automake 1.4-p6
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.4-p6.tar.gz")
|
|
|
|
|
|
|
|
# autoconf 2.13
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.13.tar.gz")
|
|
|
|
|
|
|
|
# autoconf 2.12
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.12.tar.gz")
|
|
|
|
|
|
|
|
# libtool 1.4
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/libtool/libtool-1.4.tar.gz")
|
|
|
|
|
|
|
|
# binutils 2.14
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/binutils/binutils-2.14.tar.bz2")
|
|
|
|
|
|
|
|
# autoconf 2.53
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.53.tar.bz2")
|
|
|
|
|
|
|
|
# automake 1.7
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.7.tar.bz2")
|
|
|
|
|
|
|
|
# autoconf 2.54
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.54.tar.bz2")
|
|
|
|
|
|
|
|
# autoconf 2.55
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.55.tar.bz2")
|
|
|
|
|
|
|
|
# automake 1.7.8
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.7.8.tar.bz2")
|
|
|
|
|
|
|
|
# autoconf 2.57
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.57.tar.bz2")
|
|
|
|
|
|
|
|
# autoconf 2.59
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.59.tar.bz2")
|
|
|
|
|
|
|
|
# automake 1.8.5
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.8.5.tar.bz2")
|
|
|
|
|
|
|
|
# help2man 1.36.4
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/help2man/help2man-1.36.4.tar.gz")
|
|
|
|
|
|
|
|
# autoconf 2.61
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.61.tar.bz2")
|
|
|
|
|
|
|
|
# automake 1.9.6
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.9.6.tar.bz2")
|
|
|
|
|
|
|
|
# findutils 4.2.33
|
|
|
|
self.get_file(["https://mirrors.kernel.org/gnu/findutils/findutils-4.2.33.tar.gz",
|
|
|
|
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-8e128e.tar.gz"])
|
|
|
|
|
|
|
|
# libtool 2.2.4
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/libtool/libtool-2.2.4.tar.bz2")
|
|
|
|
|
|
|
|
# automake 1.10.3
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.10.3.tar.bz2")
|
|
|
|
|
2021-06-30 18:43:33 +01:00
|
|
|
# autoconf 2.64
|
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.64.tar.bz2")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
|
|
|
# gcc 4.0.4
|
2021-07-26 06:25:15 +01:00
|
|
|
self.get_file(["https://mirrors.kernel.org/gnu/gcc/gcc-4.0.4/gcc-core-4.0.4.tar.bz2",
|
|
|
|
"https://mirrors.kernel.org/gnu/automake/automake-1.16.3.tar.gz"],
|
|
|
|
output=["gcc-4.0.4.tar.bz2", "automake-1.16.3.tar.gz"])
|
2021-04-06 00:12:02 +01:00
|
|
|
|
2021-06-10 11:26:46 +01:00
|
|
|
# linux api headers 5.10.41
|
|
|
|
self.get_file("https://mirrors.kernel.org/pub/linux/kernel/v5.x/linux-5.10.41.tar.gz",
|
|
|
|
output="linux-headers-5.10.41.tar.gz")
|
|
|
|
|
2022-05-12 00:41:17 +01:00
|
|
|
# musl 1.2.3
|
|
|
|
self.get_file("https://musl.libc.org/releases/musl-1.2.3.tar.gz")
|
2021-04-06 00:12:02 +01:00
|
|
|
|
2021-06-22 11:11:23 +01:00
|
|
|
# util-linux 2.19.1
|
|
|
|
self.get_file("https://mirrors.kernel.org/pub/linux/utils/util-linux/v2.19/util-linux-2.19.1.tar.gz")
|
|
|
|
|
2022-05-22 00:56:18 +01:00
|
|
|
# curl 7.83.0
|
|
|
|
self.get_file("https://curl.se/download/curl-7.83.0.tar.bz2")
|
|
|
|
|
|
|
|
# e2fsprogs 1.45.7
|
|
|
|
self.get_file(["https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.45.7/e2fsprogs-1.45.7.tar.gz",
|
|
|
|
"https://www.unicode.org/Public/11.0.0/ucd/CaseFolding.txt",
|
|
|
|
"https://www.unicode.org/Public/11.0.0/ucd/DerivedAge.txt",
|
|
|
|
"https://www.unicode.org/Public/11.0.0/ucd/extracted/DerivedCombiningClass.txt",
|
|
|
|
"https://www.unicode.org/Public/11.0.0/ucd/DerivedCoreProperties.txt",
|
|
|
|
"https://www.unicode.org/Public/11.0.0/ucd/NormalizationCorrections.txt",
|
|
|
|
"https://www.unicode.org/Public/11.0.0/ucd/NormalizationTest.txt",
|
|
|
|
"https://www.unicode.org/Public/11.0.0/ucd/UnicodeData.txt"])
|
|
|
|
|
2022-05-22 13:09:03 +01:00
|
|
|
# dhcpcd 9.4.1
|
|
|
|
self.get_file("https://roy.marples.name/git/dhcpcd/snapshot/dhcpcd-9.4.1.tar.gz")
|
|
|
|
|
2021-06-10 11:27:45 +01:00
|
|
|
# kexec-tools 2.0.22
|
|
|
|
self.get_file("https://github.com/horms/kexec-tools/archive/refs/tags/v2.0.22.tar.gz",
|
|
|
|
output="kexec-tools-2.0.22.tar.gz")
|
|
|
|
|
2021-07-06 01:52:10 +01:00
|
|
|
# kbd 1.15
|
|
|
|
self.get_file("https://mirrors.edge.kernel.org/pub/linux/utils/kbd/kbd-1.15.tar.gz")
|
|
|
|
|
2021-08-04 03:45:39 +01:00
|
|
|
# make 3.82
|
2021-10-08 19:29:16 +01:00
|
|
|
self.get_file("https://mirrors.kernel.org/gnu/make/make-3.82.tar.gz")
|
2021-08-04 03:45:39 +01:00
|
|
|
|
2022-06-19 23:57:32 +01:00
|
|
|
# linux kernel 4.9.10
|
2021-08-04 03:56:07 +01:00
|
|
|
self.get_file(["https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.10.tar.gz",
|
2021-10-12 00:43:58 +01:00
|
|
|
"https://linux-libre.fsfla.org/pub/linux-libre/releases/old/gen6/4.9.10-gnu/deblob-4.9"])
|