Compare commits

...

50 Commits

Author SHA1 Message Date
Andrius Štikonas 43df581f68
Merge pull request #383 from fosslinux/ca-certificates-3.95
Update ca-certificates to 3.95
2024-01-01 20:09:51 +00:00
fosslinux fbb3e97149 Update ca-certificates to 3.95 2023-12-29 12:14:27 +11:00
fosslinux b59170519f
Merge pull request #371 from eduardosm/sysabc-refs
Update `parts.rst` to remove remaining references to sysa/sysb/sysc
2023-12-28 22:27:51 +00:00
fosslinux c1a1ef64e7
Merge pull request #378 from Googulator/message-fix
Fix "Bootstrapping" message being printed too late in bwrap runs
2023-12-28 22:26:36 +00:00
fosslinux 813ec9498a
Merge pull request #380 from eduardosm/patch-1
Change "tmp/" to "target/" in .gitignore
2023-12-28 22:25:51 +00:00
Eduardo Sánchez Muñoz c42dd53634 Update `parts.rst` to remove remaining references to sysa/sysb/sysc 2023-12-28 20:04:37 +01:00
Eduardo Sánchez Muñoz 18919e03f4
Change "tmp/" to "target/" in .gitignore 2023-12-28 12:57:06 +01:00
Gábor Stefanik bb067d2856 Fix "Bootstrapping" message being printed too late in bwrap runs
This should be printed at the beginning, but instead is only shown
at the end, due to output buffering - force an explicit flush.
2023-12-28 07:25:35 +01:00
fosslinux 9afe93298c
Merge pull request #373 from eduardosm/avoid-double-slash
Avoid double slash (`//`) in generated scripts
2023-12-27 23:10:54 +00:00
fosslinux f4c1b488d6
Merge pull request #372 from Googulator/automake-fix
Fix intermittent failure to build automake-1.15.1 in bwrap (#365)
2023-12-27 22:59:48 +00:00
fosslinux 51fe3f9991
Merge pull request #368 from Googulator/always-preserve
Rename tmpdir to target and always preserve it, dropping --preserve
2023-12-27 22:59:23 +00:00
fosslinux ca0e701ee8
Merge pull request #360 from eduardosm/fixes
Avoid deleting sources that will be needed in future builds and fix updating checksums with `--update-checksums`
2023-12-27 22:59:11 +00:00
Eduardo Sánchez Muñoz 45b635ef97 Do update checksums when building with `--update-checksums` 2023-12-27 12:36:46 +01:00
Eduardo Sánchez Muñoz 9042539165 Avoid deleting sources that will be needed in future builds 2023-12-27 12:36:46 +01:00
Eduardo Sánchez Muñoz fc6aee0c5f Avoid double slash (`//`) in generated scripts
e.g., put `bash /steps/1.sh` instead of `bash /steps//1.sh`
2023-12-27 12:32:55 +01:00
Gábor Stefanik c8837203c8 Fix intermittent failure to build automake-1.15.1 in bwrap (#365) 2023-12-27 08:06:51 +01:00
Gábor Stefanik 81e3123262 Rename tmpdir to target and always preserve it, dropping --preserve
There is nothing temporary about our "tmpdir" - its sole purpose is to
contain the final product of the bootstrap process. Thus, removing it
at the end of bootstrap amounts to doing the entire process for nothing.

To remedy this, --tmpdir is renamed --target, keeping the -t short form,
and defaulting to "target" instead of "tmp" to make its purpose clearer.
The --preserve option is removed, as the target is now always preserved.
2023-12-26 16:34:04 +01:00
fosslinux 9179f4bd01 Binutils 2.41 fix gprofng in pass2
A fix i forgot to include in the original PR
2023-12-26 22:50:18 +11:00
fosslinux 81790a3271
Merge pull request #361 from Googulator/fix-bwrap
Fix bubblewrap support & CI workflows after simplify
2023-12-26 05:22:30 +00:00
Gábor Stefanik fe9cb1222f Change pass2 -> pass3 transition to the same mechanism as pass1 -> pass2
Fixes pass3 prematurely reporting success and quitting, having built nothing.
2023-12-26 13:01:24 +11:00
Gábor Stefanik f67c7d1144 Tolerate externals/distfiles already existing (needed for CI) 2023-12-26 13:01:24 +11:00
Gábor Stefanik 896c618bd1 Re-copy distfiles on generator.reuse() 2023-12-26 13:01:24 +11:00
Gábor Stefanik 30fb367e7a Simplify bwrap setup code and support more than 3 passes 2023-12-26 13:01:24 +11:00
Gábor Stefanik 63c0a52067 Fix external & distfiles directory paths for CI 2023-12-26 13:01:24 +11:00
Gábor Stefanik 591959924f Re-acquire missing sources before each CI pass 2023-12-26 13:01:24 +11:00
Gábor Stefanik 2c6ac94974 Replace --clearenv with env - to support older bwrap
This makes bwrap work on Debian 10.
2023-12-26 13:01:24 +11:00
Gábor Stefanik 97f31072ce Add license information to break.sh
Not that it's exactly copyrightable, being just "exit 0", but linter complains about it.
2023-12-26 13:01:24 +11:00
Gábor Stefanik 2823e16325 Update CI workflows to match changes from simplify 2023-12-26 13:01:24 +11:00
Gábor Stefanik e9787b55c8 Add breakpoints between passes for INTERNAL_CI
These are implemented as dummy jumps with a script that just exits
with success. Since this script will be sourced, rather than called,
this causes the bootstrap process to exit at that point.
The breakpoints are conditional on INTERNAL_CI (we check for "pass1"
because that's the only pass when script-generator runs, but the
resulting effect is that each pass only bootstraps its own part of
the manifest).
2023-12-26 13:01:24 +11:00
Gábor Stefanik f66f9efa2c Update bwrap bootstrap code to match the simplify refactor 2023-12-26 13:01:24 +11:00
Gábor Stefanik 1481ad0d20 Do not try to create /dev nodes under chroot/bwrap 2023-12-26 13:01:24 +11:00
Gábor Stefanik 9ed4ae9a59 Support reusing existing directory for multipass bootstrapping 2023-12-26 13:01:24 +11:00
fosslinux 3fd101e70a
Merge pull request #359 from fosslinux/binutils-2.41
Update binutils to 2.41
2023-12-26 01:53:39 +00:00
fosslinux 6905852107
Merge pull request #354 from Googulator/script-fixes
Python script fixes and improvements
2023-12-26 00:59:34 +00:00
fosslinux 7d0e1c0e75
Merge pull request #366 from Googulator/reproducible-linux
Fix non-reproducible Linux kernel build due to timestamps
2023-12-26 00:22:32 +00:00
Gábor Stefanik 47711cfea9 Fix non-reproducible Linux kernel build due to timestamps
Linux's KBUILD doesn't follow SOURCE_DATE_EPOCH, but rather it
uses its own variable, KBUILD_BUILD_TIMESTAMP.

While we are at it, also update kexec-linux's checksum, which
didn't match either. (This one was reproducible, it was just
out of date.)
2023-12-25 10:16:17 +01:00
Gábor Stefanik 529ea4cae1 Explain significance of build-bash and improve-network directives 2023-12-22 13:12:40 +01:00
Gábor Stefanik ab9455f918 Fix warnings in existing code revealed by newer pylint 2023-12-22 13:08:23 +01:00
Gábor Stefanik be1333ee8b Make tmpdir a method parameter of prepare()
Fixes pylint errors.
2023-12-22 13:08:20 +01:00
Gábor Stefanik b45e1f81ae Fix failure with --external-sources 2023-12-22 13:07:45 +01:00
Gábor Stefanik 32dc4c702b More verbose error message on HTTP errors 2023-12-22 13:07:45 +01:00
Gábor Stefanik 55d3c36e09 Move kernel-bootstrap source image out of the directory it's generated from
This way, an incomplete version of the image itself won't get included
in srcfs anymore.
2023-12-22 13:07:45 +01:00
Gábor Stefanik 3305f2a41b Use manifest to deduce pre-network sources list
No need to maintain a separate pre-network-sources file anymore,
the list is instead derived from the bootstrap manifest via the
source manifest.
2023-12-22 13:07:04 +01:00
Gábor Stefanik a68ae62f9e Download distfiles only when needed, based on manifest
Unless --external-sources is given, only download distfiles that
need to be included in srcfs. The rest will be downloaded anyway
by the bootstrap system once it gets network access.

To accomplish this, instead of searching steps for sources files,
we now parse steps/manifest. As a side effect, source_manifest.py
now outputs source files in the order they appear in the manifest.
2023-12-22 13:07:04 +01:00
Gábor Stefanik 8d193df823 Fix printed image paths for bare-metal bootstrap 2023-12-22 13:06:59 +01:00
Gábor Stefanik faad907fba Fix source_manifest.py in light of the recent refactor
There's no sysa or sysc anymore.
2023-12-22 13:06:19 +01:00
Gábor Stefanik c188185ad4 Remove residual references to sysa/sysb/sysc from rootfs.py 2023-12-22 13:06:19 +01:00
Gábor Stefanik b4d9c5e7cb Disk creation improvements
* Support specifying the size of the target disk image for qemu
* For bare metal, only pad the image to the next megabyte
* Use truncate() to extend images, instead of writing zeros (faster)
* Return None from get_disk() with nonexistent name
* Leave 1MiB on non-boot disks, or 1GiB on boot disks, unpartitioned
  (for proper 4K alignment and to help preserve the srcfs or boot
  partition creation)
* Fix qemu invocation when an external.img is not used
* Make -qr work with kernel bootstrap (will need kexec-fiwix fix)
2023-12-22 13:06:19 +01:00
Gábor Stefanik dc62d8242c Create external.img only when needed 2023-12-22 12:10:09 +01:00
fosslinux 191c013e23 Update binutils to 2.41 2023-12-21 11:03:15 +11:00
33 changed files with 467 additions and 456 deletions

View File

@ -12,8 +12,8 @@ on:
- master
jobs:
sysa:
name: Run sysa under bubblewrap
pass1:
name: Run up to Linux build under bubblewrap
runs-on: ubuntu-latest
steps:
- name: Install bubblewrap
@ -30,9 +30,8 @@ jobs:
uses: actions/cache/restore@v3
with:
path: |
sysa/distfiles
sysc/distfiles
key: cache-${{ hashFiles('sys*/*/sources') }}
distfiles
key: cache-${{ hashFiles('steps/*/sources') }}
- name: Get sources
if: steps.cache.outputs.cache-hit != 'true'
run: ./download-distfiles.sh
@ -41,28 +40,27 @@ jobs:
uses: actions/cache/save@v3
with:
path: |
sysa/distfiles
sysc/distfiles
key: cache-${{ hashFiles('sys*/*/sources') }}
distfiles
key: cache-${{ hashFiles('steps/*/sources') }}
- name: Run bootstrap
run: ./rootfs.py --bwrap --external-sources --build-kernels --preserve --cores 2 --internal-ci pass1
run: ./rootfs.py --bwrap --external-sources --build-kernels --cores 2 --internal-ci pass1
- name: Archive created packages
if: failure() # archive failed builds progress
uses: actions/upload-artifact@v3
with:
name: packages
path: tmp/sysa/usr/src/repo/**
- name: Tar sysc_image
run: tar -cf sysc_image.tar tmp/sysa/sysc_image/
- name: Archive sysc_image
path: target/external/repo/**
- name: Tar pass1 image
run: tar -cf pass1_image.tar target
- name: Archive pass1_image
uses: actions/upload-artifact@v3
with:
name: internal_sysc_image
path: sysc_image.tar
name: internal_pass1_image
path: pass1_image.tar
sysc1:
name: Run sysc (part 1) under bubblewrap
needs: sysa
pass2:
name: Run up to Python bootstrap under bubblewrap
needs: pass1
runs-on: ubuntu-latest
steps:
- name: Install bubblewrap
@ -74,24 +72,48 @@ jobs:
# There is a strange bug(?) in nongnu, when you clone a git repository
# against a commit != HEAD with depth=1, it errors out.
fetch-depth: 0
- name: Get sysc_image
- name: Get pass1_image
uses: actions/download-artifact@v3
with:
name: internal_sysc_image
- name: Extract sysc_image
run: tar -xf sysc_image.tar
name: internal_pass1_image
- name: Extract pass1_image
run: tar -xf pass1_image.tar
- name: Query cache for sources
id: cache
uses: actions/cache/restore@v3
with:
path: |
distfiles
key: cache-${{ hashFiles('steps/*/sources') }}
- name: Get sources
if: steps.cache.outputs.cache-hit != 'true'
run: ./download-distfiles.sh
- name: Cache sources
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: |
distfiles
key: cache-${{ hashFiles('steps/*/sources') }}
- name: Run bootstrap
run: ./rootfs.py --bwrap --external-sources --build-kernels --preserve --cores 2 --internal-ci pass2
run: ./rootfs.py --bwrap --external-sources --build-kernels --cores 2 --internal-ci pass2
- name: Archive created packages
if: always() # archive failed builds progress
if: failure() # archive failed builds progress
uses: actions/upload-artifact@v3
with:
name: internal_packages_sysc1
path: tmp/sysa/sysc_image/usr/src/repo/**
name: internal_packages_pass2
path: target/external/repo/**
- name: Tar pass2 image
run: tar -cf pass2_image.tar target
- name: Archive pass2_image
uses: actions/upload-artifact@v3
with:
name: internal_pass2_image
path: pass2_image.tar
sysc2:
name: Run sysc (part 2) under bubblewrap
needs: sysc1
pass3:
name: Run remaining builds under bubblewrap
needs: pass2
runs-on: ubuntu-latest
steps:
- name: Install bubblewrap
@ -103,23 +125,34 @@ jobs:
# There is a strange bug(?) in nongnu, when you clone a git repository
# against a commit != HEAD with depth=1, it errors out.
fetch-depth: 0
- name: Get sysc_image
- name: Get pass2_image
uses: actions/download-artifact@v3
with:
name: internal_sysc_image
- name: Extract sysc_image
run: tar -xf sysc_image.tar
# By doing this, all packages that have already been compiled will come from the preseed.
- name: Get packages repo progress
uses: actions/download-artifact@v3
name: internal_pass2_image
- name: Extract pass2_image
run: tar -xf pass2_image.tar
- name: Query cache for sources
id: cache
uses: actions/cache/restore@v3
with:
name: internal_packages_sysc1
path: tmp/sysa/sysc_image/usr/src/repo-preseeded/
path: |
distfiles
key: cache-${{ hashFiles('steps/*/sources') }}
- name: Get sources
if: steps.cache.outputs.cache-hit != 'true'
run: ./download-distfiles.sh
- name: Cache sources
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: |
distfiles
key: cache-${{ hashFiles('steps/*/sources') }}
- name: Run bootstrap
run: ./rootfs.py --bwrap --external-sources --build-kernels --preserve --cores 2 --internal-ci pass3
run: ./rootfs.py --bwrap --external-sources --build-kernels --cores 2 --internal-ci pass3
- name: Archive created packages
if: always() # archive failed builds
if: always() # archive both failed and successful builds
uses: actions/upload-artifact@v3
with:
name: packages
path: tmp/sysa/sysc_image/usr/src/repo/**
path: target/external/repo/**

View File

@ -21,7 +21,7 @@ jobs:
- name: Install pylint
run: sudo pip3 install pylint
- name: pylint
run: pylint rootfs.py lib/utils.py lib/generator.py lib/tmpdir.py --disable=duplicate-code
run: pylint rootfs.py lib/utils.py lib/generator.py lib/target.py --disable=duplicate-code
shellcheck:
name: Lint shell files

2
.gitignore vendored
View File

@ -3,7 +3,7 @@
#
# SPDX-License-Identifier: MIT
tmp/
target/
kernel
distfiles/
__pycache__

View File

@ -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,24 +23,33 @@ 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.target_dir = None
self.external_dir = None
def prepare(self, using_kernel=False, kernel_bootstrap=False):
def reuse(self, target):
"""
Reuse a previously prepared bwrap environment for further stages.
"""
self.target_dir = target.path
self.external_dir = os.path.join(self.target_dir, 'external')
self.distfiles()
def prepare(self, target, 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.target_dir = target.path
self.external_dir = os.path.join(self.target_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
@ -49,30 +59,33 @@ class Generator():
# argument matrix ... or we could just use ext3 instead which
# is effectively universally the same
if kernel_bootstrap:
init_path = os.path.join(self.tmp_dir, 'init')
init_path = os.path.join(self.target_dir, 'init')
os.mkdir(init_path)
self.tmp_dir = init_path
self.target_dir = init_path
if self.repo_path or self.external_sources:
self.tmpdir.add_disk("external", filesystem="ext3")
self.tmpdir.mount_disk("external", "external")
target.add_disk("external", filesystem="ext3")
target.mount_disk("external", "external")
else:
self.tmpdir.add_disk("external", tabletype="none")
self.external_dir = os.path.join(self.target_dir, 'external')
elif using_kernel:
self.tmp_dir = os.path.join(self.tmp_dir, 'disk')
self.tmpdir.add_disk("disk", filesystem="ext3")
self.tmpdir.mount_disk("disk", "disk")
self.external_dir = os.path.join(self.tmp_dir, 'external')
self.target_dir = os.path.join(self.target_dir, 'disk')
target.add_disk("disk",
filesystem="ext3",
size=(target_size + "M") if target_size else "16G",
bootable=True)
target.mount_disk("disk", "disk")
self.external_dir = os.path.join(self.target_dir, 'external')
os.makedirs(self.external_dir, exist_ok=True)
if self.early_preseed:
# Extract tar containing preseed
with tarfile.open(self.early_preseed, "r") as seed:
seed.extractall(self.tmp_dir)
seed.extractall(self.target_dir)
shutil.copy2(os.path.join(self.git_dir, 'seed', 'preseeded.kaem'),
os.path.join(self.tmp_dir, 'kaem.x86'))
os.path.join(self.target_dir, 'kaem.x86'))
else:
self.stage0_posix()
self.seed()
@ -88,44 +101,44 @@ class Generator():
shutil.copytree(self.repo_path, repo_dir)
if kernel_bootstrap:
self.create_builder_hex0_disk_image(os.path.join(self.tmp_dir, 'disk.img'))
self.create_builder_hex0_disk_image(self.target_dir + '.img', target_size)
if kernel_bootstrap and (self.external_sources or self.repo_path):
self.tmpdir.umount_disk('external')
target.umount_disk('external')
elif using_kernel:
self.tmpdir.umount_disk('disk')
target.umount_disk('disk')
def steps(self):
"""Copy in steps."""
source_manifest = self.get_source_manifest()
self.get_packages(source_manifest)
self.get_packages()
shutil.copytree(os.path.join(self.git_dir, 'steps'), os.path.join(self.tmp_dir, 'steps'))
shutil.copytree(os.path.join(self.git_dir, 'steps'), os.path.join(self.target_dir, 'steps'))
def stage0_posix(self):
"""Copy in all of the stage0-posix"""
stage0_posix_base_dir = os.path.join(self.git_dir, 'seed', 'stage0-posix')
for f in os.listdir(stage0_posix_base_dir):
orig = os.path.join(stage0_posix_base_dir, f)
to = os.path.join(self.tmp_dir, f)
for entry in os.listdir(stage0_posix_base_dir):
orig = os.path.join(stage0_posix_base_dir, entry)
target = os.path.join(self.target_dir, entry)
if os.path.isfile(orig):
shutil.copy2(orig, to)
shutil.copy2(orig, target)
else:
shutil.copytree(orig, to)
shutil.copytree(orig, target)
arch = stage0_arch_map.get(self.arch, self.arch)
kaem_optional_seed = os.path.join(self.git_dir, 'seed', 'stage0-posix', 'bootstrap-seeds',
'POSIX', arch, 'kaem-optional-seed')
shutil.copy2(kaem_optional_seed, os.path.join(self.tmp_dir, 'init'))
shutil.copy2(kaem_optional_seed, os.path.join(self.target_dir, 'init'))
def seed(self):
"""Copy in extra seed files"""
seed_dir = os.path.join(self.git_dir, 'seed')
for f in os.listdir(seed_dir):
if os.path.isfile(os.path.join(seed_dir, f)):
shutil.copy2(os.path.join(seed_dir, f), os.path.join(self.tmp_dir, f))
for entry in os.listdir(seed_dir):
if os.path.isfile(os.path.join(seed_dir, entry)):
shutil.copy2(os.path.join(seed_dir, entry), os.path.join(self.target_dir, entry))
def add_fiwix_files(self, file_list_path, dirpath):
@staticmethod
def add_fiwix_files(file_list_path, dirpath):
"""Add files to the list to populate Fiwix file system"""
for root, _, filepaths in os.walk(dirpath):
if 'stage0-posix' in root:
@ -136,14 +149,14 @@ class Generator():
def create_fiwix_file_list(self):
"""Create a list of files to populate Fiwix file system"""
file_list_path = os.path.join(self.tmp_dir, 'steps', 'lwext4-1.0.0-lb1',
file_list_path = os.path.join(self.target_dir, 'steps', 'lwext4-1.0.0-lb1',
'files', 'fiwix-file-list.txt')
shutil.copyfile(os.path.join(self.tmp_dir, 'steps', 'lwext4-1.0.0-lb1',
shutil.copyfile(os.path.join(self.target_dir, 'steps', 'lwext4-1.0.0-lb1',
'files', 'early-artifacts-needed-after-fiwix.txt'),
file_list_path)
save_cwd = os.getcwd()
os.chdir(self.tmp_dir)
os.chdir(self.target_dir)
self.add_fiwix_files(file_list_path, 'steps')
self.add_fiwix_files(file_list_path, 'distfiles')
os.chdir(save_cwd)
@ -151,24 +164,21 @@ class Generator():
def distfiles(self):
"""Copy in distfiles"""
def copy_no_network_distfiles(out):
# Note that no network == no disk for kernel bootstrap mode
pre_src_path = os.path.join(self.git_dir, 'steps', 'pre-network-sources')
with open(pre_src_path, 'r', encoding="utf-8") as source_list:
for file in source_list.readlines():
file = file.strip()
shutil.copy2(os.path.join(self.distfiles_dir, file),
os.path.join(out, file))
# Note that "no disk" implies "no network" for kernel bootstrap mode
for file in self.source_manifest:
file = file[3].strip()
shutil.copy2(os.path.join(self.distfiles_dir, file),
os.path.join(out, file))
early_distfile_dir = os.path.join(self.tmp_dir, 'external', 'distfiles')
early_distfile_dir = os.path.join(self.target_dir, 'external', 'distfiles')
main_distfile_dir = os.path.join(self.external_dir, 'distfiles')
if early_distfile_dir != main_distfile_dir:
os.makedirs(early_distfile_dir)
os.makedirs(early_distfile_dir, exist_ok=True)
copy_no_network_distfiles(early_distfile_dir)
if self.external_sources:
os.mkdir(main_distfile_dir)
shutil.copytree(self.distfiles_dir, main_distfile_dir)
shutil.copytree(self.distfiles_dir, main_distfile_dir, dirs_exist_ok=True)
else:
os.mkdir(main_distfile_dir)
copy_no_network_distfiles(main_distfile_dir)
@ -207,7 +217,7 @@ class Generator():
"""Append srcfs file system to disk image"""
save_cwd = os.getcwd()
os.chdir(self.tmp_dir)
os.chdir(self.target_dir)
self.output_tree(image_file, '.')
# Add commands to kick off stage0-posix
@ -224,7 +234,7 @@ class Generator():
os.chdir(save_cwd)
def create_builder_hex0_disk_image(self, image_file_name):
def create_builder_hex0_disk_image(self, image_file_name, size):
"""Create builder-hex0 disk image"""
shutil.copyfile(os.path.join('seed', 'stage0-posix', 'bootstrap-seeds',
'NATIVE', 'x86', 'builder-hex0-x86-stage1.img'),
@ -252,13 +262,13 @@ class Generator():
image_file.write(b'\0' * round_up)
current_size += round_up
# fill file with zeros up to desired size, one megabyte at a time
with open(image_file_name, 'ab') as image_file:
while current_size < 16384 * megabyte:
image_file.write(b'\0' * megabyte)
current_size += megabyte
# extend file up to desired size
if current_size < size * megabyte:
with open(image_file_name, 'ab') as image_file:
image_file.truncate(size * megabyte)
def check_file(self, file_name, expected_hash):
@staticmethod
def check_file(file_name, expected_hash):
"""Check hash of downloaded source file."""
with open(file_name, "rb") as downloaded_file:
downloaded_content = downloaded_file.read() # read entire file as bytes
@ -271,7 +281,8 @@ actual: {readable_hash}\n\
When in doubt, try deleting the file in question -- it will be downloaded again when running \
this script the next time")
def download_file(self, url, directory, file_name):
@staticmethod
def download_file(url, directory, file_name):
"""
Download a single source archive.
"""
@ -293,45 +304,53 @@ this script the next time")
with open(abs_file_name, 'wb') as target_file:
target_file.write(response.raw.read())
else:
raise requests.HTTPError("Download failed.")
raise requests.HTTPError("Download failed: HTTP " +
response.status_code + " " + response.reason)
return abs_file_name
def get_packages(self, source_manifest):
def get_packages(self):
"""Prepare remaining sources"""
for line in source_manifest.split("\n"):
line = line.strip().split(" ")
for line in self.source_manifest:
path = self.download_file(line[2], line[1], line[3])
self.check_file(path, line[0])
@classmethod
def get_source_manifest(cls):
def get_source_manifest(cls, pre_network=False):
"""
Generate a source manifest for the system.
"""
manifest_lines = []
entries = []
directory = os.path.relpath(cls.distfiles_dir, cls.git_dir)
# Find all source files
steps_dir = os.path.join(cls.git_dir, 'steps')
for file in os.listdir(steps_dir):
if os.path.isdir(os.path.join(steps_dir, file)):
sourcef = os.path.join(steps_dir, file, "sources")
with open(os.path.join(steps_dir, 'manifest'), 'r', encoding="utf_8") as file:
for line in file:
if pre_network and line.strip().startswith("improve: ") and "network" in line:
break
if not line.strip().startswith("build: "):
continue
step = line.split(" ")[1].split("#")[0].strip()
sourcef = os.path.join(steps_dir, step, "sources")
if os.path.exists(sourcef):
# Read sources from the source file
with open(sourcef, "r", encoding="utf_8") as sources:
for line in sources.readlines():
line = line.strip().split(" ")
for source in sources.readlines():
source = source.strip().split(" ")
if len(line) > 2:
file_name = line[2]
if len(source) > 2:
file_name = source[2]
else:
# Automatically determine file name based on URL.
file_name = os.path.basename(line[0])
file_name = os.path.basename(source[0])
manifest_lines.append(f"{line[1]} {directory} {line[0]} {file_name}")
entry = (source[1], directory, source[0], file_name)
if entry not in entries:
entries.append(entry)
return "\n".join(manifest_lines)
return entries
stage0_arch_map = {
"amd64": "AMD64",

View File

@ -4,34 +4,32 @@
# SPDX-License-Identifier: GPL-3.0-or-later
"""
Contains a class that represents a tmpdir
Contains a class that represents a target directory
"""
import enum
import getpass
import os
import shutil
from lib.utils import mount, umount, create_disk, run_as_root
class TmpType(enum.Enum):
"""Different types of tmpdirs we can have"""
class TargetType(enum.Enum):
"""Different types of target dirs we can have"""
NONE = 0
TMPFS = 1
class Tmpdir:
class Target:
"""
Represents a tmpdir
Represents a target directory
"""
_disks = {}
_disk_filesystems = {}
_mountpoints = {}
def __init__(self, preserve, path="tmp"):
def __init__(self, path="target"):
self.path = os.path.abspath(path)
self.preserve = preserve
self._type = TmpType.NONE
self._type = TargetType.NONE
if not os.path.exists(self.path):
os.mkdir(self.path)
@ -41,29 +39,32 @@ class Tmpdir:
print(f"Unmounting {path}")
umount(path)
if not self.preserve:
for disk in self._disks.values():
print(f"Detaching {disk}")
run_as_root("losetup", "-d", disk)
if self._type == TmpType.TMPFS:
print(f"Unmounting tmpdir from {self.path}")
umount(self.path)
print(f"Removing {self.path}")
shutil.rmtree(self.path, ignore_errors=True)
for disk in self._disks.values():
print(f"Detaching {disk}")
run_as_root("losetup", "-d", disk)
def tmpfs(self, size="8G"):
"""Mount a tmpfs"""
print(f"Mounting tmpfs on {self.path}")
mount("tmpfs", self.path, "tmpfs", f"size={size}")
self._type = TmpType.TMPFS
self._type = TargetType.TMPFS
# pylint: disable=too-many-arguments
def add_disk(self, name, size="16G", filesystem="ext4", tabletype="msdos", mkfs_args=None):
def add_disk(self,
name,
size="16G",
filesystem="ext4",
tabletype="msdos",
bootable=False,
mkfs_args=None):
"""Add a disk"""
disk_path = os.path.join(self.path, f"{name}.img")
self._disks[name] = create_disk(disk_path, tabletype, filesystem, size, mkfs_args=mkfs_args)
self._disks[name] = create_disk(disk_path,
tabletype,
filesystem,
size,
bootable,
mkfs_args)
self._disk_filesystems[name] = filesystem
# Allow executing user to access it
run_as_root("chown", getpass.getuser(), self._disks[name])
@ -87,4 +88,4 @@ class Tmpdir:
def get_disk(self, name):
"""Get the path to a device of a disk"""
return self._disks[name]
return self._disks.get(name)

View File

@ -31,7 +31,8 @@ def run_as_root(*args, **kwargs):
return run("sudo", *args, **kwargs)
return run(*args, **kwargs)
def create_disk(image, disk_type, fs_type, size, mkfs_args=None):
# pylint: disable=too-many-arguments
def create_disk(image, disk_type, fs_type, size, bootable=False, mkfs_args=None):
"""Create a disk image, with a filesystem on it"""
if mkfs_args is None:
mkfs_args = []
@ -42,7 +43,7 @@ def create_disk(image, disk_type, fs_type, size, mkfs_args=None):
# Create the partition
if disk_type != "none":
run_as_root('parted', '--script', image, 'mklabel', disk_type, 'mkpart',
'primary', fs_type, '0%', '100%')
'primary', fs_type, '1GiB' if bootable else '1MiB', '100%')
run_as_root('partprobe', loop_dev)
run_as_root('mkfs.' + fs_type, loop_dev + "p1", *mkfs_args)
return loop_dev

View File

@ -747,7 +747,7 @@ kexec-linux
===========
If the kernel bootstrap option is enabled then a C program ``kexec-linux`` is compiled.
This can be used to launch a Linux kernel from Fiwix.
This can be used to launch a Linux kernel from Fiwix (when not using ``--kernel``).
kexec-tools 2.0.22
==================
@ -755,7 +755,8 @@ kexec-tools 2.0.22
``kexec`` is a utility for the Linux kernel that allows the re-execution of the
Linux kernel without a manual restart from within a running system. It is a
kind of soft-restart. It is only built for non-chroot mode, as we only use it
in non-chroot mode. It is used to go into sysb/sysc.
in non-chroot mode. It is used to boot the Linux kernel that will be built next
from the current Linux kernel (when using ``--kernel``).
Linux kernel 4.9.10
===================
@ -767,7 +768,7 @@ However, the docs are also wrong, as the latest of the 4.9.x series does not
work with our version of binutils. However, a much earlier 4.9.10 does
(selected arbitrarily, could go newer but did not test), with a small amount
of patching. This is also modern enough for most hardware and to cause few
problems with software built in sysc. Secondly, the linux-libre scripts are used
problems with software built afterwards. Secondly, the linux-libre scripts are used
to deblob the kernel. Every other pregenerated file is appended with ``_shipped``
so we use a ``find`` command to remove those, which are automatically regenerated.
The kernel config was originally taken from Void Linux, and was then modified
@ -778,11 +779,18 @@ subsequent systems, and we do not have ``modprobe``.
We then kexec to use the new Linux kernel, using ``kexec-tools`` for a Linux
kernel and ``kexec-linux`` for Fiwix.
musl 1.2.4
==========
At this point, it is guaranteed that we are running on Linux with thread support,
so we rebuild musl with thread support.
curl 7.88.1
===========
``curl`` is used to download files using various protocols including HTTP and HTTPS.
However, this first build does not support encrypted HTTPS yet.
However, this first build does not support encrypted HTTPS yet. ``curl`` requires
Linux and musl with thread support, which are now available.
bash 5.2.15
===========
@ -792,16 +800,6 @@ and is built with GNU readline support so it can be used as a fully-featured
interactive shell. ``autoconf-2.69`` is used to regenerate the configure
script and ``bison`` is used to recreate some included generated files.
curl 7.83.0
===========
``curl`` is built in sysc because Linux must be running with support for threads
(which is not the case if kernel bootstrapping is being used). curl requires
musl with thread support, which was built at the end of sysa.
``curl`` is built first in sysc so the rest of the packages can be downloaded.
Note that the tar file for curl itself was copied over from sysa because
curl is not yet available to download it.
xz 5.4.1
========

151
rootfs.py
View File

@ -15,10 +15,9 @@ you can run bootstap inside chroot.
import argparse
import os
import shutil
from lib.utils import run, run_as_root
from lib.tmpdir import Tmpdir
from lib.target import Target
from lib.generator import Generator, stage0_arch_map
def create_configuration_file(args):
@ -30,16 +29,15 @@ def create_configuration_file(args):
with open(config_path, "w", encoding="utf_8") as config:
config.write(f"FORCE_TIMESTAMPS={args.force_timestamps}\n")
config.write(f"CHROOT={args.chroot or args.bwrap}\n")
config.write(f"CHROOT_ONLY_SYSA={args.bwrap}\n")
config.write(f"UPDATE_CHECKSUMS={args.update_checksums}\n")
config.write(f"JOBS={args.cores}\n")
config.write(f"INTERNAL_CI={args.internal_ci}\n")
config.write(f"INTERNAL_CI={args.internal_ci or False}\n")
config.write(f"BARE_METAL={args.bare_metal}\n")
if (args.bare_metal or args.qemu) and not args.kernel:
if args.repo or args.external_sources:
config.write("DISK=sdb1\n")
else:
config.write("DISK=sdb\n")
config.write("DISK=sda\n")
config.write("KERNEL_BOOTSTRAP=True\n")
else:
config.write("DISK=sda1\n")
@ -60,11 +58,9 @@ def main():
action="store_true")
parser.add_argument("-bw", "--bwrap", help="Run inside a bwrap sandbox",
action="store_true")
parser.add_argument("-p", "--preserve", help="Do not remove temporary dir",
action="store_true")
parser.add_argument("-t", "--tmpdir", help="Temporary directory",
default="tmp")
parser.add_argument("--tmpfs", help="Use a tmpfs on tmpdir",
parser.add_argument("-t", "--target", help="Target directory",
default="target")
parser.add_argument("--tmpfs", help="Use a tmpfs on target",
action="store_true")
parser.add_argument("--tmpfs-size", help="Size of the tmpfs",
default="8G")
@ -98,7 +94,9 @@ def main():
default="qemu-system-x86_64")
parser.add_argument("-qr", "--qemu-ram", help="Memory (in megabytes) allocated to QEMU VM",
default=4096)
parser.add_argument("-qk", "--kernel", help="Custom sysa kernel to use")
parser.add_argument("-qs", "--target-size", help="Size of the target image (for QEMU only)",
default="16G")
parser.add_argument("-qk", "--kernel", help="Custom early kernel to use")
parser.add_argument("-b", "--bare-metal", help="Build images for bare metal",
action="store_true")
@ -128,7 +126,7 @@ def main():
if args.arch != "x86":
print("Only x86 is supported at the moment, other arches are for development only.")
# Tmp validation
# Tmpfs validation
if args.bwrap and args.tmpfs:
raise ValueError("tmpfs cannot be used with bwrap.")
@ -136,33 +134,41 @@ def main():
if int(args.cores) < 1:
raise ValueError("Must use one or more cores.")
# Target image size validation
if args.qemu:
if int(str(args.target_size).rstrip('gGmM')) < 1:
raise ValueError("Please specify a positive target size for qemu.")
args.target_size = (int(str(args.target_size).rstrip('gGmM')) *
(1024 if str(args.target_size).lower().endswith('g') else 1))
else:
args.target_size = 0
# bootstrap.cfg
try:
os.remove(os.path.join('sysa', 'bootstrap.cfg'))
os.remove(os.path.join('steps', 'bootstrap.cfg'))
except FileNotFoundError:
pass
if not args.no_create_config:
create_configuration_file(args)
else:
with open(os.path.join('sysa', 'bootstrap.cfg'), 'a', encoding='UTF-8'):
with open(os.path.join('steps', 'bootstrap.cfg'), 'a', encoding='UTF-8'):
pass
# tmpdir
tmpdir = Tmpdir(path=args.tmpdir, preserve=args.preserve)
# target
target = Target(path=args.target)
if args.tmpfs:
tmpdir.tmpfs(size=args.tmpfs_size)
target.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)
bootstrap(args, generator, tmpdir)
bootstrap(args, generator, target, args.target_size)
def bootstrap(args, generator, tmpdir):
def bootstrap(args, generator, target, size):
"""Kick off bootstrap process."""
print(f"Bootstrapping {args.arch} -- SysA")
print(f"Bootstrapping {args.arch}", flush=True)
if args.chroot:
find_chroot = """
import shutil
@ -171,95 +177,88 @@ 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(target, 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')
run_as_root('env', '-i', 'PATH=/bin', chroot_binary, generator.tmp_dir, init)
run_as_root('env', '-i', 'PATH=/bin', chroot_binary, generator.target_dir, init)
elif args.bwrap:
init = '/init'
if not args.internal_ci or args.internal_ci == "pass1":
generator.prepare(using_kernel=False)
generator.prepare(target, 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')
run('bwrap', '--unshare-user',
'--uid', '0',
'--gid', '0',
'--unshare-net',
'--clearenv',
'--setenv', 'PATH', '/usr/bin',
'--bind', generator.tmp_dir, '/',
'--dir', '/dev',
'--dev-bind', '/dev/null', '/dev/null',
'--dev-bind', '/dev/zero', '/dev/zero',
'--dev-bind', '/dev/random', '/dev/random',
'--dev-bind', '/dev/urandom', '/dev/urandom',
'--dev-bind', '/dev/ptmx', '/dev/ptmx',
'--dev-bind', '/dev/tty', '/dev/tty',
init)
else:
generator.reuse(target)
if not args.internal_ci or args.internal_ci == "pass2" or args.internal_ci == "pass3":
shutil.copy2(os.path.join('sysa', 'bootstrap.cfg'),
os.path.join('tmp', 'sysa', 'sysc_image', 'usr', 'src', 'bootstrap.cfg'))
run('bwrap', '--unshare-user',
'--uid', '0',
'--gid', '0',
'--unshare-net' if args.external_sources else None,
'--clearenv',
'--setenv', 'PATH', '/usr/bin',
'--bind', generator.tmp_dir + "/sysc_image", '/',
'--dir', '/dev',
'--dev-bind', '/dev/null', '/dev/null',
'--dev-bind', '/dev/zero', '/dev/zero',
'--dev-bind', '/dev/random', '/dev/random',
'--dev-bind', '/dev/urandom', '/dev/urandom',
'--dev-bind', '/dev/ptmx', '/dev/ptmx',
'--dev-bind', '/dev/tty', '/dev/tty',
'--tmpfs', '/dev/shm',
'--proc', '/proc',
'--bind', '/sys', '/sys',
'--tmpfs', '/tmp',
'/init')
run('env', '-i', 'bwrap', '--unshare-user',
'--uid', '0',
'--gid', '0',
'--unshare-net' if args.external_sources else None,
'--setenv', 'PATH', '/usr/bin',
'--bind', generator.target_dir, '/',
'--dir', '/dev',
'--dev-bind', '/dev/null', '/dev/null',
'--dev-bind', '/dev/zero', '/dev/zero',
'--dev-bind', '/dev/random', '/dev/random',
'--dev-bind', '/dev/urandom', '/dev/urandom',
'--dev-bind', '/dev/ptmx', '/dev/ptmx',
'--dev-bind', '/dev/tty', '/dev/tty',
'--tmpfs', '/dev/shm',
'--proc', '/proc',
'--bind', '/sys', '/sys',
'--tmpfs', '/tmp',
init)
elif args.bare_metal:
if args.kernel:
generator.prepare(using_kernel=True)
generator.prepare(target, using_kernel=True, target_size=size)
path = os.path.join(args.target, os.path.relpath(generator.target_dir, args.target))
print("Please:")
print(" 1. Take tmp/initramfs and your kernel, boot using this.")
print(" 2. Take tmp/disk.img and put this on a writable storage medium.")
print(f" 1. Take {path}/initramfs and your kernel, boot using this.")
print(f" 2. Take {path}/disk.img and put this on a writable storage medium.")
else:
generator.prepare(kernel_bootstrap=True)
generator.prepare(target, kernel_bootstrap=True, target_size=size)
path = os.path.join(args.target, os.path.relpath(generator.target_dir, args.target))
print("Please:")
print(" 1. Take tmp/disk.img and write it to a boot drive and then boot it.")
print(f" 1. Take {path}.img and write it to a boot drive and then boot it.")
else:
if args.kernel:
generator.prepare(using_kernel=True)
generator.prepare(target, using_kernel=True, target_size=size)
run(args.qemu_cmd,
'-enable-kvm',
'-m', str(args.qemu_ram) + 'M',
'-smp', str(args.cores),
'-no-reboot',
'-drive', 'file=' + tmpdir.get_disk("disk") + ',format=raw',
'-drive', 'file=' + tmpdir.get_disk("external") + ',format=raw',
'-drive', 'file=' + target.get_disk("disk") + ',format=raw',
'-drive', 'file=' + target.get_disk("external") + ',format=raw',
'-nic', 'user,ipv6=off,model=e1000',
'-kernel', args.kernel,
'-nographic',
'-append', 'console=ttyS0 root=/dev/sda1 rootfstype=ext3 init=/init rw')
else:
generator.prepare(kernel_bootstrap=True)
run(args.qemu_cmd,
generator.prepare(target, kernel_bootstrap=True, target_size=size)
arg_list = [
'-enable-kvm',
'-m', "4G",
'-m', str(args.qemu_ram) + 'M',
'-smp', str(args.cores),
'-no-reboot',
'-drive', 'file=' + os.path.join(generator.tmp_dir, 'disk.img') + ',format=raw',
'-drive', 'file=' + tmpdir.get_disk("external") + ',format=raw',
'-drive', 'file=' + generator.target_dir + '.img' + ',format=raw'
]
if target.get_disk("external") is not None:
arg_list += [
'-drive', 'file=' + target.get_disk("external") + ',format=raw',
]
arg_list += [
'-machine', 'kernel-irqchip=split',
'-nic', 'user,ipv6=off,model=e1000',
'-nographic')
'-nographic'
]
run(args.qemu_cmd, *arg_list)
if __name__ == "__main__":
main()

View File

@ -461,8 +461,10 @@ void output_call_script(FILE *out, char *type, char *name, int using_bash, int s
fputs("kaem --file ", out);
}
fputs("/steps/", out);
fputs(type, out);
fputs("/", out);
if (strlen(type) != 0) {
fputs(type, out);
fputs("/", out);
}
fputs(name, out);
fputs(".sh\n", out);
}

View File

@ -9,27 +9,11 @@ for the bootstrapping process.
import argparse
from sysa import SysA
from sysc import SysC
from lib.generator import Generator
def main():
"""Generate a source manifest for a system"""
parser = argparse.ArgumentParser()
parser.add_argument("-s", "--system",
help="Generate source manifest for the specified systems",
choices=["sysa", "sysc"],
nargs="+",
action="extend",
required=True)
args = parser.parse_args()
if "sysa" in args.system:
print(SysA.get_source_manifest())
if "sysc" in args.system:
print(SysC.get_source_manifest())
print('\n'.join(map(' '.join, Generator.get_source_manifest())))
if __name__ == "__main__":
main()

View File

@ -9,10 +9,10 @@ d5fcce4baea5e11f983a7e4b7148545ab6720bb4e010898c73387f6711be67f4 autoconf-2.64_
298dcf17a439adb306237b308e3c4ed3d376cb863ae0f0f08bfdf1f3199a548b autoconf-2.69_0.tar.bz2
8c2401edf1c68910005bbcb8b8e84727a46f7d9643d2ad1267bd0259078dadc4 autoconf-2.71_0.tar.bz2
6ff691e3ddd4f3d1796d28b07a2a96691dbd9801844c99ccbe660da59dabd74b autoconf-archive-2021.02.19_0.tar.bz2
56cb475253b1175f09d69bc81a5b1d954f486c9b97b1a0ae3217e63d18f64573 autogen-5.18.16_0.tar.bz2
9b52663ad7c591520805b96c519c4a291d8a9a960a907341c5b78cd631ebb344 autogen-5.18.16_0.tar.bz2
02a426e82a52d4a2cd7e73fe3dc5a2c58b3ed100f24a92c57e42511fd86e247c automake-1.10.3_0.tar.bz2
34925adeaa2876a5e068adeb17b71fe7c7105244c3cb5439d33f7406310674da automake-1.11.2_0.tar.bz2
a7bd12bd0c639783ce1c0e9f640cf004a87460bbda8154bc550c5e6884457b48 automake-1.15.1_0.tar.bz2
7e36e9e4b3957c95b6de8ff475c9b37aa007e2f9735b01c0eaf14b711fdd112f automake-1.15.1_0.tar.bz2
57100612d902537b72ee2fd3dfecc903f2ea3959f1a480af87c6a1ef9a9d7c03 automake-1.16.3_0.tar.bz2
1c7e09ac08f156960420fca1f6e8560c1855bf01b001a0648b56153d6ceb9c28 automake-1.6.3_0.tar.bz2
444131776779d1f27628088a817bfb8c9aa85f4b036b934794a71e484ec9bd70 automake-1.6.3_1.tar.bz2
@ -23,15 +23,15 @@ c5807850a377e4bb9aa4121d9781d145bdd80327626a9419630a75ce2c8d9c71 automake-1.9.6
f8a55bf656f950ee3c5cea48af03f552166f6db9926b78c78843f3cc52a6e22d bash-5.2.15_0.tar.bz2
ebc631ee8e9382650005984ec5f3910492ccb6fb2656b4c0af0f4afc16998906 bc-1.07.1_0.tar.bz2
28b38078f88d77ebfa8ad1a514a5724fe11581bdbfc72b79f087fa24986ac9cb binutils-2.30_0.tar.bz2
6eb26a856e1eb79a1b3f6d76e42138bf1b868fc5f229c3a1e22d3eb68dfb88ba binutils-2.38_0.tar.bz2
57e339eb76a5a0f4b7298d0071f83354911dda928f4aa54e47a21ebc9c8390a7 binutils-2.38_1.tar.bz2
da658346866061324b92a6b734561257acfdb981783ad5794d67a0cd56e14e58 binutils-2.41_0.tar.bz2
026447a32ab08a8a5150bab82a2f150af4a2ed90c47cfde631e1460eaed019aa binutils-2.41_1.tar.bz2
f0bb18831983493b82fde53917e8d16c6a380761ac5e71e14769a82193fee788 bison-2.3_0.tar.bz2
7018edd13a1dd5ba35fdc8be49af91b28901aad3080fdeebdb98b79f8a90d7ed bison-3.4.1_0.tar.bz2
41c9a95b11cf183524927f52f9f7e97a479e0261c0551f6a4c22690b931243db bison-3.4.1_1.tar.bz2
4a291da4dc1d2a49eeff6bd6017d0d91f804d0a8a2b701de9ed5c53cf5061fe4 bison-3.4.1_2.tar.bz2
6d5e4debdec03aee096dbcefcad878fb5c6a069f895ee7ade878d9eeb97fb83e bison-3.4.2_0.tar.bz2
e196396a3073992ca4d8ce1606831e3a6e06fd22753f89b778eec01eed549a92 bzip2-1.0.8_0.tar.bz2
c511d571d24675a141258e0e198c5ed1bcfd4889ddd736ff8e25c0d97b44e2cf ca-certificates-3.88.1_0.tar.bz2
543214998317d764595d3dd247a1fb2e0803ad77978b8474bd24d64c161b9530 ca-certificates-3.95_0.tar.bz2
692ec3f83fdd94a3687c764e6246f608e4600bc8f9fec953a0b23617ad24d08d coreutils-5.0_0.tar.bz2
09092e187588c5d33c023ac41671b367aef9f7ee967d2c7c03430b33cc03f251 coreutils-6.10_0.tar.bz2
f49900486ae7f0c8107d729b71ede155ee44544cdf8d562b50fbea4095bd05b2 coreutils-8.32_0.tar.bz2
@ -49,20 +49,20 @@ b3a8d59229289ca5a1de6a24c9c828d2847144f6662e0d5b7f41e7ff6e57abaa flex-2.5.33_0.
408131b1c033a5f8a6845997b049784be0b466cec107a71270e5a04dae2c1e6c flex-2.6.4_0.tar.bz2
5ff7fbe16b55563719b108260bd6a34ebabab0465d758ca98cba522932532e45 gawk-3.0.4_0.tar.bz2
6de1c1380026ef9948387e665610185b6014f47a80453177a6c81898c95cbbd3 gc-8.0.4_0.tar.bz2
872eabeff12a0b1b9dc2bd146f2c1e493597281795548377ff1ec5f6a1853e88 gcc-10.4.0_0.tar.bz2
4f50d8f5e1f123a8e6d34dff1d5892f79d250f2fb5d7fa2a94cff1f2e8f9649c gcc-13.1.0_0.tar.bz2
c99d080cf17ac3f75cbae67095cb76220a92d96d877c92c896a7f05c9c94e92d gcc-10.4.0_0.tar.bz2
e0c9e7f4f0cd0d5027f2a38eb262f883133c31ac9ec93ee6afa5abc028096bc0 gcc-13.1.0_0.tar.bz2
526c3710b5067bd2fc869371541d7e71dcff1cffcba7ddecabedc33967e19e2c gcc-4.0.4_0.tar.bz2
c1bf792e90df13bf7a24d3f8ce3939fd96ff61b8117e4dcef75605974f3fcf25 gcc-4.0.4_1.tar.bz2
7ac087bf006188154c28401d0c875ede56076c19d41bc54ffa0d7cc18ce40800 gcc-4.7.4_0.tar.bz2
dc67fc1b132fa3945349efe74c5b2197bd0b6babf4d29d2deddd04f09d9af680 gettext-0.21_0.tar.bz2
309282ba840f80b5e10897b1221f3ff3329b9e05b982c788d03652f411974524 gmp-6.2.1_0.tar.bz2
f5917ffad5dd282d5ea17e791b470455c328ea0ebc845ed5ec80937a8d0eb933 gperf-3.1_0.tar.bz2
62edfa633f64202b2d29199d11d56a897654a441c7ae39a4d59ca5fe75199f61 gperf-3.1_0.tar.bz2
67d706423e079a9cd764fd9607027d296c0ff2380c1104006a2230a299eb2c1d grep-2.4_0.tar.bz2
0939a34d58ff31e2c234f6f47f964633ceae4839de49ce368ad027c016850d58 grep-3.7_0.tar.bz2
9dacbb0d2a12585079ba2527af5bb165337aa6fe68fa42b93842abe3b8d46ef6 guile-3.0.9_0.tar.bz2
8e612afb9a439aa8bf5db0fc2589eec890a6017690412d5c8e88a5838730b42c grep-3.7_0.tar.bz2
e2a85aad6d51e52c9a30afeed058f95172fde1215f77243549274672990f6237 guile-3.0.9_0.tar.bz2
8d2015b87337abbf287f7a39ee4cf53514120b5d3e90a93fe7d533dcc43f14fa help2man-1.36.4_0.tar.bz2
f650c3b24de6edd49cd662c9e9ce11f7b0b5ea6df66d561b46a032b08fc34faa kbd-1.15_0.tar.bz2
3e3bc64af937c351be2538bb89de99f36ffc240721c32fcc84a76769e235ed66 kexec-linux-1.0.0_0.tar.bz2
50a0f881161c68fe7c9ec6836b11a905b0d54e08e99b2476e8d1f5ac3212769e kexec-linux-1.0.0_0.tar.bz2
1be7bf0319635b8bd22fd3c1a5a88ea267730a9a2e3cfff37473a5fea0779efb kexec-tools-2.0.22_0.tar.bz2
453c10220178f097e1ab26fac6dffbee63b61890cdb8d7d24dcd6acad6ad08a3 libarchive-3.5.2_0.tar.bz2
36550df491767bb24d2ccab304ce70a3b4956e7c0c0e0c343d922fd57cdafbdd libatomic_ops-7.6.10_0.tar.bz2
@ -70,7 +70,7 @@ b39826742e236890f3562cdf19492e7ef4224b271f3e75ddeab1f07982b03ebe libffi-3.3_0.t
daae709e98d2df2190d1d13b4e86f7f3fe90fa7a975282fe0bb03289b6539f29 libtool-2.2.4_0.tar.bz2
6cefa575362149620f8008a32c8af54f0198a18bc6ab910bd3cead196c1507d7 libtool-2.4.7_0.tar.bz2
503007bbcddcf4e49d26514c59b4c9501f8b42f0c994a59dfdc388b1ae6b7900 libunistring-0.9.10_0.tar.bz2
e10734d700e3ab870374d3f37f6e6cb394d6ba7e2da6f4e70bb324e834b0ad7f linux-4.9.10_0.tar.bz2
fd2264a08cbeeb28f3e2580cba174376a154c77b0ef6cbf67b55fd13c0987f52 linux-4.9.10_0.tar.bz2
d15c922973c15a8206e09020e8cfe6a78f7e93614de212f2b37ff80163799c6c linux-headers-4.9.10_0.tar.bz2
3864f2c66516fc4f5086f626f4da2b2a7635e21babca86ba478f866920868e2b m4-1.4.7_0.tar.bz2
e69554b0a77b419ddd5d0a0e418ba4005ecd0f6784c92a6928a0270bd929a098 make-3.82_0.tar.bz2
@ -82,7 +82,7 @@ e69554b0a77b419ddd5d0a0e418ba4005ecd0f6784c92a6928a0270bd929a098 make-3.82_0.ta
b79e0f8a39ba8880d43aa27551b72915655c62af39125e1f4ac8f8e69e71aaca musl-1.1.24_2.tar.bz2
81f79a0faf58e105c5f12d9f538d3ea7578a3b361e633ab8f47324ec23ec9de6 musl-1.2.4_0.tar.bz2
6dc5e763b747b66f72692c6820d7f46b7f4cf2e2fe05229a1d01c03919c1c936 musl-1.2.4_1.tar.bz2
107548dd69ff4d5dfceb5891eed8a237cc6a22fd65915b44c838be1eba07668b musl-1.2.4_2.tar.bz2
820203286127e7c22cee9f1b3cff664431f10d14c3f22f00b3e771fd849fd449 musl-1.2.4_2.tar.bz2
c490016e49bbf77e7f63071f7aa60e8290a0c67f017846def1c3f65bd10d5712 openssl-1.1.1l_0.tar.bz2
71864d042cdc564b65eab21360902c714e9b43f80a19689c5600589529b267e7 patch-2.7.6_0.tar.bz2
914a7abf36a64723b6e9f9b0b6ccd19c8e544fa798896a2bb1151dc341890c22 perl-5.000_0.tar.bz2
@ -93,19 +93,19 @@ b86fc586d72a6d204d0b9017afe17aa2439529e13f43befc56648b78de17c8f8 perl5.004-05_0
fdccd3ba27a44d2149f159040414a04b39bfc72673ba36f50051b61199cc425c perl-5.32.1_0.tar.bz2
9fa8850897248d77d554caa2b3d52e7890308cbf28750ffc24c09f498aee563c perl-5.6.2_0.tar.bz2
1b9d4260edf7b2241d10e4c4ad17d0f90047bd4bf42f2487a7133902529e9dfe pkg-config-0.29.2_0.tar.bz2
d4a263a4039b8d18ab95b5a7188a5c8b0defdf17d1cf899bf23a597be2df0658 python-2.0.1_0.tar.bz2
95ecbf909a8781d77e9b89e6ff3dc39e3ed702aebdec8b0a491df2dd4af8c780 python-2.0.1_1.tar.bz2
14b20bd76f6dfab0cc19141fd8d39c2841227b3876e5d107b1b57b05a51a83aa python-2.3.7_0.tar.bz2
5395d185003b22c607eb55a5b9f1adca5bbe178e7c774faabe758d0499936397 python-2.3.7_1.tar.bz2
374fc8c2577d681b7aa2670000fcc2450e2b50eb1cc8d739994ece69f83f4155 python-2.5.6_0.tar.bz2
e1321250c6421515f982a89ee4ceb8a8b7d2ecc3e192c7c7ede58e98f2bc75de python-3.11.1_0.tar.bz2
8f096d93f799a6575bae06a578625b92a888c25ed6b4d296173fc20fcadb003a python-3.1.5_0.tar.bz2
fb123d00e591452a6f077aaa8aa22ab8693e665ffa95e185a2bf79883d3d4684 python-3.1.5_1.tar.bz2
a9b73271407427f749406e1d3eabd51f627fd0fbe92332b792eeff1b9bfc44a5 python-3.3.7_0.tar.bz2
f95ce9de6002c47d82c41804e943a7079614fe7bc669fba15fe4552f9f08a7e3 python-3.4.10_0.tar.bz2
18bf5480d894d65bb11cad9d8591410e8a3b399f6eef3568d45144c363cd7d43 python-3.8.16_0.tar.bz2
1e882c3206f9d1de2a9be8b5c6ae4cc65e80a4de607bd521058577bf4169c0e9 python-2.0.1_0.tar.bz2
aba9710341db75b78c7bc1eb4ef45b9496e23f7a356128af6c2b116ee0f3f31a python-2.0.1_1.tar.bz2
d497c9b614194b941620bb5c5111fc72eca8cafd7d4f476eacb24fb7f909b614 python-2.3.7_0.tar.bz2
8a977205933431c2a4207f647cb683b570dfdb0146e21abf5fab3f8426e1356b python-2.3.7_1.tar.bz2
34e5083ed3e72da5aa5950acebf9e95464089d693e3d6a047a2b69b6103f5ca9 python-2.5.6_0.tar.bz2
52ffb1ea6f2b893a6fd26f930c8ff63f78ddcc31ac3ec9c2ddade555205aa1ef python-3.11.1_0.tar.bz2
3508248f299b73c50e3607c4c294d40face05170476a5026b0821aed69025863 python-3.1.5_0.tar.bz2
12b1ffc7ec98ba8f807160b93ba69a694d5395567c3bcac1e49e8f8d1d50de43 python-3.1.5_1.tar.bz2
60b93253a2078f849f81e7e1ed6233e30702f03b1893640eee95671d814f5514 python-3.3.7_0.tar.bz2
da7c8ec579dd225c0d8bee63d95aeeb27ac2d5a60d4eefe298508cbf86bf506c python-3.4.10_0.tar.bz2
0be505f63205b4bc1b1421896c610468ad1a2194bbc4c9abf58f61685c2023d1 python-3.8.16_0.tar.bz2
6081832f1fc258df7dd927986821991b49fa78a71b76f4b37b5c34a8ebc9bc86 sed-4.0.9_0.tar.bz2
e58d8ec46c5b31175de9598bf0da214b88ccbd4cca7a787f3d048c44edaf3ceb sed-4.8_0.tar.bz2
e8daec00b2c2de7b18efbec057dc9290eed06668806c6f5a48914d4a5cd95eb4 sed-4.8_0.tar.bz2
912d8f344104f1322255d6210c7c7e1371413ab530b2c6796e6aa565c74bf647 tar-1.34_0.tar.bz2
d5d0df210248a385ae255cc5651369108e9a71fa8668821a6b1ed30a8d7364a1 tcc-0.9.27_0.tar.bz2
79276f54bc57933b6002e5511e6d8d88e22159dcf1cbbc9da763c38691a2c628 tcc-0.9.27_1.tar.bz2
@ -113,6 +113,6 @@ d5d0df210248a385ae255cc5651369108e9a71fa8668821a6b1ed30a8d7364a1 tcc-0.9.27_0.t
2b503cd31d3326ac1ed0eb9f506ac93c93770da51164e152a812cd248961069c tcc-0.9.27_3.tar.bz2
50ebaa1d8fcc4a03a43d431eb71e2f435cc8712ae47d400564df3716037d553a texinfo-6.7_0.tar.bz2
229d9189adac10ad2a2c76fc147a4c317fc5b34026cef1c47edc9159aee480da util-linux-2.19.1_0.tar.bz2
5a1fdd2b42080f3b4808ceb1bf80a95873e614a25524545e6803b7d9f1fd5605 which-2.21_0.tar.bz2
ecdb7ffeb9256f6a9760be70969fe5dea9cde6a538cc88595281fe44340e98a1 which-2.21_0.tar.bz2
3fade2079cc91f2c5624ff7247220059caee82e7de493332103d7a78155400b2 xz-5.4.1_0.tar.bz2
ca8ec9876a7334f5f87e1159e0efe343b8b497ffb0dea8b548223035ecd67f9e zlib-1.2.13_0.tar.bz2

View File

@ -12,17 +12,17 @@ src_prepare() {
sed -i '/doc\/Makefile.inc/d' Makefile.am
sed -i '/t\/Makefile.inc/d' Makefile.am
AUTOCONF=autoconf-2.69 AUTOM4TE=autom4te-2.69 ./bootstrap
AUTOCONF="autoconf-2.69 -f" AUTOM4TE=autom4te-2.69 ./bootstrap
rm doc/automake-history.info doc/automake.info*
}
src_configure() {
AUTORECONF=autoreconf-2.69 AUTOM4TE=autom4te-2.69 AUTOHEADER=autoheader-2.69 AUTOCONF=autoconf-2.69 ./configure --prefix="${PREFIX}"
AUTORECONF=autoreconf-2.69 AUTOM4TE=autom4te-2.69 AUTOHEADER=autoheader-2.69 AUTOCONF="autoconf-2.69 -f" ./configure --prefix="${PREFIX}"
}
src_compile() {
AUTORECONF=autoreconf-2.69 AUTOM4TE=autom4te-2.69 AUTOHEADER=autoheader-2.69 AUTOCONF=autoconf-2.69 make -j1 MAKEINFO=true
AUTORECONF=autoreconf-2.69 AUTOM4TE=autom4te-2.69 AUTOHEADER=autoheader-2.69 AUTOCONF="autoconf-2.69 -f" make -j1 MAKEINFO=true
}
src_install() {

View File

@ -1,18 +0,0 @@
SPDX-FileCopyrightText: 2022 Dor Askayo <dor.askayo@gmail.com>
SPDX-License-Identifier: GPL-3.0-or-later
Add missing AC_CONFIG_MACRO_DIR.
Required by autoreconf to create aclocal.m4 correctly.
--- /libiberty/configure.ac 2022-01-22 14:14:09.000000000 +0200
+++ libiberty/configure.ac 2022-09-04 00:01:02.941738129 +0300
@@ -2,6 +2,7 @@
AC_INIT
AC_CONFIG_SRCDIR([xmalloc.c])
+AC_CONFIG_MACRO_DIR(../config)
# This works around the fact that libtool configuration may change LD
# for this particular configuration, but some shells, instead of

View File

@ -1,17 +0,0 @@
SPDX-FileCopyrightText: 2022 Dor Askayo <dor.askayo@gmail.com>
SPDX-License-Identifier: GPL-3.0-or-later
Ensure i386-init.h dependencies are satisfied.
--- opcodes/Makefile.am 2022-01-22 14:14:09.000000000 +0200
+++ opcodes/Makefile.am 2022-09-13 21:09:04.353324699 +0300
@@ -575,7 +575,7 @@ i386-gen.o: i386-gen.c i386-opc.h $(srcd
$(srcdir)/i386-tbl.h: $(srcdir)/i386-init.h
@echo $@
-$(srcdir)/i386-init.h: @MAINT@ i386-gen$(EXEEXT_FOR_BUILD) i386-opc.tbl i386-reg.tbl i386-opc.h
+$(srcdir)/i386-init.h: i386-gen$(EXEEXT_FOR_BUILD) i386-opc.tbl i386-reg.tbl i386-opc.h
$(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \
< $(srcdir)/i386-opc.tbl \
| ./i386-gen$(EXEEXT_FOR_BUILD) --srcdir $(srcdir)

View File

@ -1 +0,0 @@
https://mirrors.kernel.org/gnu/binutils/binutils-2.38.tar.xz e316477a914f567eccc34d5d29785b8b0f5a10208d36bbacedcc39048ecfe024

View File

@ -11,11 +11,13 @@ src_prepare() {
# Remove unused generated files
rm etc/Makefile.in etc/configure
rm zlib/aclocal.m4 zlib/configure
# Remove gprofng
rm -r gprofng
# Regenerate autoconf
for dir in bfd binutils gas gold gprof intl ld libctf libiberty opcodes; do
for dir in bfd binutils gas gold gprof intl ld libctf libiberty libsframe opcodes; do
cd $dir
AUTOPOINT=true ACLOCAL=aclocal-1.15 AUTOMAKE=automake-1.15 autoreconf-2.69 -fi
cd ..
@ -26,9 +28,6 @@ src_prepare() {
pushd gold
automake-1.15 -fai testsuite/Makefile
popd
pushd bfd
automake-1.15 -fai doc/Makefile
popd
# Rebuild bison files
touch -- */*.y
@ -59,12 +58,14 @@ src_prepare() {
-delete
# Remove pregenerated opcodes files
rm opcodes/i386-init.h opcodes/i386-tbl.h
rm opcodes/i386-init.h opcodes/i386-tbl.h opcodes/i386-mnem.h
rm opcodes/ia64-asmtab.c
rm opcodes/z8k-opc.h
rm opcodes/aarch64-asm-2.c opcodes/aarch64-opc-2.c opcodes/aarch64-dis-2.c
rm $(grep -l 'MACHINE GENERATED' opcodes/*.c opcodes/*.h)
rm libiberty/functions.texi
# Regenerate MeP sections
./bfd/mep-relocs.pl
@ -73,7 +74,7 @@ src_prepare() {
}
src_configure() {
for dir in intl libctf libiberty opcodes bfd binutils gas gprof ld; do
for dir in intl libctf libiberty libsframe opcodes bfd binutils gas gprof ld; do
cd $dir
./configure \
@ -95,13 +96,13 @@ src_configure() {
src_compile() {
make -C bfd headers
for dir in libiberty bfd opcodes libctf binutils gas gprof ld; do
for dir in libiberty libsframe bfd opcodes libctf binutils gas gprof ld; do
make "${MAKEJOBS}" -C $dir tooldir=${PREFIX} CFLAGS="-std=c99"
done
}
src_install() {
for dir in libiberty bfd opcodes libctf binutils gas gprof ld; do
for dir in libiberty bfd opcodes libctf libsframe binutils gas gprof ld; do
make -C $dir tooldir=${PREFIX} DESTDIR="${DESTDIR}" install
done

View File

@ -17,7 +17,7 @@ src_prepare() {
ACLOCAL=aclocal-1.15 autoreconf-2.69 -fi
# Regenerate autoconf
for dir in bfd binutils gas gold gprof intl ld libctf libiberty opcodes; do
for dir in bfd binutils gas gold gprof intl ld libctf libiberty libsframe opcodes; do
cd $dir
ACLOCAL=aclocal-1.15 AUTOMAKE=automake-1.15 autoreconf-2.69 -fi
cd ..
@ -27,8 +27,10 @@ src_prepare() {
pushd gold
automake-1.15 -fai testsuite/Makefile
popd
pushd bfd
pushd gprofng
automake-1.15 -fai doc/Makefile
automake-1.15 -fai gp-display-html/Makefile
automake-1.15 -fai src/Makefile
popd
# intl/ Makefile is a bit broken because of new gettext
@ -67,12 +69,14 @@ src_prepare() {
-delete
# Remove pregenerated opcodes files
rm opcodes/i386-init.h opcodes/i386-tbl.h
rm opcodes/i386-init.h opcodes/i386-tbl.h opcodes/i386-mnem.h
rm opcodes/ia64-asmtab.c
rm opcodes/z8k-opc.h
rm opcodes/aarch64-asm-2.c opcodes/aarch64-opc-2.c opcodes/aarch64-dis-2.c
rm $(grep -l 'MACHINE GENERATED' opcodes/*.c opcodes/*.h)
rm libiberty/functions.texi
# Regenerate MeP sections
./bfd/mep-relocs.pl
@ -95,6 +99,7 @@ src_configure() {
--disable-nls \
--disable-multilib \
--disable-plugins \
--disable-gprofng \
--enable-threads \
--enable-64-bit-bfd \
--enable-gold \

View File

@ -0,0 +1,26 @@
SPDX-FileCopyrightText: 2023 fosslinux <fosslinux@aussies.space>
SPDX-License-Identifier: GPL-3.0-or-later
Ensure functions.texi dependencies are satisfied.
--- libiberty/Makefile.in 2023-12-08 15:18:57.985791235 +1100
+++ libiberty/Makefile.in 2023-12-08 15:19:15.391252344 +1100
@@ -368,12 +368,12 @@
libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
$(MAKEINFO) --no-split --html -I$(srcdir) -o $@ $<
-@MAINT@$(srcdir)/functions.texi : stamp-functions
-@MAINT@ @true
+$(srcdir)/functions.texi : stamp-functions
+ @true
-@MAINT@stamp-functions : $(CFILES:%=$(srcdir)/%) $(TEXIFILES:%=$(srcdir)/%) $(srcdir)/gather-docs Makefile
-@MAINT@@HAVE_PERL@ $(PERL) $(srcdir)/gather-docs $(srcdir) $(srcdir)/functions.texi $(CFILES) $(TEXIFILES)
-@MAINT@ echo stamp > stamp-functions
+stamp-functions : $(CFILES:%=$(srcdir)/%) $(TEXIFILES:%=$(srcdir)/%) $(srcdir)/gather-docs Makefile
+@HAVE_PERL@ $(PERL) $(srcdir)/gather-docs $(srcdir) $(srcdir)/functions.texi $(CFILES) $(TEXIFILES)
+ echo stamp > stamp-functions
INSTALL_DEST = @INSTALL_DEST@
install: install_to_$(INSTALL_DEST) install-subdir

View File

@ -0,0 +1,18 @@
SPDX-FileCopyrightText: 2022 Dor Askayo <dor.askayo@gmail.com>
SPDX-FileCopyrightText: 2023 fosslinux <fosslinux@aussies.space>
SPDX-License-Identifier: GPL-3.0-or-later
Ensure i386-tbl.h dependencies are satisfied.
--- opcodes/Makefile.am 2023-12-08 17:13:05.669136957 +1100
+++ opcodes/Makefile.am 2023-12-08 17:13:18.410480026 +1100
@@ -540,7 +540,7 @@
# i386-gen will generate all headers in one go. Use a pattern rule to properly
# express this, with the inner dash ('-') arbitrarily chosen to be the stem.
$(srcdir)/i386%tbl.h $(srcdir)/i386%init.h $(srcdir)/i386%mnem.h: \
- @MAINT@ i386-gen$(EXEEXT_FOR_BUILD) i386-opc.tbl i386-reg.tbl i386-opc.h
+ i386-gen$(EXEEXT_FOR_BUILD) i386-opc.tbl i386-reg.tbl i386-opc.h
$(AM_V_GEN)$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \
< $(srcdir)/i386-opc.tbl \
| ./i386-gen$(EXEEXT_FOR_BUILD) --srcdir $(srcdir)

View File

@ -0,0 +1 @@
https://mirrors.kernel.org/gnu/binutils/binutils-2.41.tar.xz ae9a5789e23459e59606e6714723f2d3ffc31c03174191ef0d015bdf06007450

View File

@ -1 +0,0 @@
http://ftp.mozilla.org/pub/security/nss/releases/NSS_3_88_1_RTM/src/nss-3.88.1.tar.gz 27d243edf87d1cf1bb9c861f03d387e0e9230ce5017f4308c941f558b54b3496

View File

@ -0,0 +1 @@
http://ftp.mozilla.org/pub/security/nss/releases/NSS_3_95_RTM/src/nss-3.95.tar.gz 469888e41e8a780051ce00edcd914e8a6bd38da88a82cfb84898dd388635822a

View File

@ -1,15 +0,0 @@
# SPDX-FileCopyrightText: 2023 fosslinux <fosslinux@aussies.space>
#
# SPDX-License-Identifier: GPL-3.0-or-later
# Save because linux deletes all distfiles to save space
cp "${DISTFILES}"/musl-1.2.4.tar.gz /tmp
cp "${DISTFILES}"/curl-7.88.1.tar.bz2 /tmp
# Clear up some RAM space
grep --no-filename '^build' "${SOURCES}"/run*.sh | grep -v musl-1.2.4 | sed "s/build //" | sed "s/ .*$//" | while read -r p ; do
rm -rf "${SOURCES:?}/${p:?}"
done
mv /tmp/musl-1.2.4.tar.gz "${DISTFILES}"
mv /tmp/curl-7.88.1.tar.bz2 "${DISTFILES}"

43
steps/improve/clean_sources.sh Executable file
View File

@ -0,0 +1,43 @@
# SPDX-FileCopyrightText: 2023 Eduardo Sánchez Muñoz <eduardosm-dev@e64.io>
#
# SPDX-License-Identifier: GPL-3.0-or-later
# Delete sources of packages before linux kernel
get_source_filename() {
local url="${1}"
local fname="${3}"
# Default to basename of url if not given
echo "${fname:-$(basename "${url}")}"
}
# List all packages from linux kernel onwards
# Ideally, we would use arrays here, but they are not supported by
# the bash version we have at this point.
pkgs="$(awk '/^build:/ { print $2 }' "${SRCDIR}/manifest" | awk '/^linux-[0-9]/,EOF { print $0 }')"
# Gather source names for all packages in pkgs, which we want to keep
keep_sources=""
for pkg in ${pkgs}; do
while read line; do
keep_sources="${keep_sources} $(get_source_filename ${line})"
done < "${SRCDIR}/${pkg}/sources"
done
for source in "${DISTFILES}/"*; do
source_name="$(basename "${source}")"
for keep_source in ${keep_sources}; do
if [ "${keep_source}" = "${source_name}" ]; then
# Countinue the outer loop to skip deletion
continue 2
fi
done
# Delete this source
rm "${source}"
done
unset get_source_filename
unset pkgs pkg line
unset keep_sources keep_source
unset source source_name

View File

@ -15,19 +15,6 @@ test -c "/dev/urandom" || mknod -m 444 "/dev/urandom" c 1 9
test -c "/dev/ptmx" || mknod -m 666 "/dev/ptmx" c 5 2
test -c "/dev/tty" || mknod -m 666 "/dev/tty" c 5 0
test -b "/dev/sda" || mknod -m 600 "/dev/sda" b 8 0
test -b "/dev/sda1" || mknod -m 600 "/dev/sda1" b 8 1
test -b "/dev/sda2" || mknod -m 600 "/dev/sda2" b 8 2
test -b "/dev/sda3" || mknod -m 600 "/dev/sda3" b 8 3
test -b "/dev/sdb" || mknod -m 600 "/dev/sdb" b 8 16
test -b "/dev/sdb1" || mknod -m 600 "/dev/sdb1" b 8 17
test -b "/dev/sdb2" || mknod -m 600 "/dev/sdb2" b 8 18
test -b "/dev/sdb2" || mknod -m 600 "/dev/sdb3" b 8 19
test -b "/dev/sdc" || mknod -m 600 "/dev/sdc" b 8 32
test -b "/dev/sdc1" || mknod -m 600 "/dev/sdc1" b 8 33
test -b "/dev/sdc2" || mknod -m 600 "/dev/sdc2" b 8 34
test -b "/dev/sdc3" || mknod -m 600 "/dev/sdc3" b 8 35
test -e "/dev/stdout" || ln -s "/proc/self/fd/1" "/dev/stdout"
if mount --version >/dev/null 2>&1; then
@ -37,4 +24,16 @@ fi
if [ "${CHROOT}" = False ]; then
test -c "/dev/console" || mknod -m 666 "/dev/console" c 5 1
test -b "/dev/sda" || mknod -m 600 "/dev/sda" b 8 0
test -b "/dev/sda1" || mknod -m 600 "/dev/sda1" b 8 1
test -b "/dev/sda2" || mknod -m 600 "/dev/sda2" b 8 2
test -b "/dev/sda3" || mknod -m 600 "/dev/sda3" b 8 3
test -b "/dev/sdb" || mknod -m 600 "/dev/sdb" b 8 16
test -b "/dev/sdb1" || mknod -m 600 "/dev/sdb1" b 8 17
test -b "/dev/sdb2" || mknod -m 600 "/dev/sdb2" b 8 18
test -b "/dev/sdb2" || mknod -m 600 "/dev/sdb3" b 8 19
test -b "/dev/sdc" || mknod -m 600 "/dev/sdc" b 8 32
test -b "/dev/sdc1" || mknod -m 600 "/dev/sdc1" b 8 33
test -b "/dev/sdc2" || mknod -m 600 "/dev/sdc2" b 8 34
test -b "/dev/sdc3" || mknod -m 600 "/dev/sdc3" b 8 35
fi

View File

@ -0,0 +1,7 @@
# SPDX-FileCopyrightText: 2023 Eduardo Sánchez Muñoz <eduardosm-dev@e64.io>
#
# SPDX-License-Identifier: GPL-3.0-or-later
pushd /external/repo
sha256sum -- * | tee "${SRCDIR}/SHA256SUMS.pkgs"
popd

View File

@ -16,6 +16,7 @@ SRCDIR=${SRCDIR}
MAKEJOBS=-j${JOBS}
export HOME=/tmp
export SOURCE_DATE_EPOCH=0
export KBUILD_BUILD_TIMESTAMP='@0'
export SHELL=/usr/bin/bash
DESTDIR=/tmp/destdir
EOF

7
steps/jump/break.sh Normal file
View File

@ -0,0 +1,7 @@
#!/bin/bash
#
# SPDX-FileCopyrightText: 2023 Gábor Stefanik <netrolller.3d@gmail.com>
#
# SPDX-License-Identifier: GPL-3.0-or-later
exit 0

View File

@ -6,14 +6,6 @@
# XXX: Fix package after builder-hex0
src_unpack() {
# Remove all previous source tarballs
mkdir /tmp/keep
for keep in deblob-4.9 ${pkg}.tar.gz musl-1.2.4.tar.gz curl-7.88.1.tar.bz2; do
mv "${DISTFILES}/${keep}" /tmp/keep
done
rm -r "${DISTFILES}/"*
mv /tmp/keep/* "${DISTFILES}"
mkdir "${pkg}"
mv "${DISTFILES}/deblob-4.9" "${pkg}/"
default || true # Predictable link errors - not a problem

View File

@ -16,6 +16,13 @@
# - jump: jump (usually) to a new kernel, executes a script with that name
# eg, jump: fiwix
#
# The following directives have special significance:
# - build directives beginning with "bash" (as well as jumps) trigger the generation of
# a new script
# - the first improve directive containing "network" is used by generator.py to deduce
# what source files need to be downloaded in advance (files referenced after that will
# be downloaded during bootstrap, unless --external-sources is given)
#
# Other features:
# - predicate; based on variables set in bootstrap.cfg, require for something to execute
# must be enclosed in brackets with spaces padded
@ -107,7 +114,9 @@ build: bc-1.07.1
define: BUILD_LINUX = ( CHROOT == False || BUILD_KERNELS == True )
build: kexec-linux-1.0.0 ( BUILD_LINUX == True )
build: kexec-tools-2.0.22 ( BUILD_LINUX == True )
improve: clean_sources
build: linux-4.9.10 ( BUILD_LINUX == True )
jump: break ( INTERNAL_CI == pass1 )
jump: linux ( CHROOT == False )
improve: finalize_fhs
build: musl-1.2.4
@ -135,7 +144,7 @@ build: dist-3.5-236
build: perl-5.32.1
build: libarchive-3.5.2
build: openssl-1.1.1l
build: ca-certificates-3.88.1
build: ca-certificates-3.95
build: curl-7.88.1
build: zlib-1.2.13
build: automake-1.16.3
@ -144,7 +153,7 @@ build: patch-2.7.6
build: gettext-0.21
build: texinfo-6.7
build: gcc-4.7.4
build: binutils-2.38
build: binutils-2.41
build: gperf-3.1
build: libunistring-0.9.10
build: libffi-3.3
@ -167,7 +176,9 @@ build: python-3.3.7
build: python-3.4.10
build: python-3.8.16
build: python-3.11.1
jump: break ( INTERNAL_CI == pass1 ) # scripts are generated in pass1
build: gcc-10.4.0
build: binutils-2.38
build: binutils-2.41
build: gcc-13.1.0
improve: null_time ( FORCE_TIMESTAMPS == True )
improve: update_checksums ( UPDATE_CHECKSUMS == True )

View File

@ -1,86 +0,0 @@
mes-0.25.tar.gz
nyacc-1.00.2.tar.gz
tcc-0.9.26.tar.gz
tcc-0.9.27.tar.bz2
fiwix-1.4.0-lb3.tar.gz
lwext4-1.0.0-lb1.tar.gz
make-3.82.tar.bz2
patch-2.5.9.tar.gz
gzip-1.2.4.tar.gz
tar-1.12.tar.gz
sed-4.0.9.tar.gz
bzip2-1.0.8.tar.gz
coreutils-5.0.tar.bz2
heirloom-devtools-070527.tar.bz2
bash-2.05b.tar.gz
flex-2.5.11.tar.gz
tcc-0.9.27.tar.bz2
musl-1.1.24.tar.gz
tcc-0.9.27.tar.bz2
musl-1.1.24.tar.gz
tcc-0.9.27.tar.bz2
sed-4.0.9.tar.gz
bzip2-1.0.8.tar.gz
m4-1.4.7.tar.gz
flex-2.6.4.tar.gz
bison-3.4.1.tar.gz
bison-3.4.1.tar.gz
bison-3.4.1.tar.gz
grep-2.4.tar.gz
diffutils-2.7.tar.gz
coreutils-5.0.tar.bz2
coreutils-6.10.tar.gz
gawk-3.0.4.tar.gz
perl-5.000.tar.gz
perl-5.003.tar.gz
perl5.004_05.tar.gz
perl5.005_03.tar.gz
perl-5.6.2.tar.gz
autoconf-2.52.tar.bz2
automake-1.6.3.tar.bz2
automake-1.6.3.tar.bz2
autoconf-2.53.tar.bz2
automake-1.7.tar.bz2
autoconf-2.54.tar.bz2
autoconf-2.55.tar.bz2
automake-1.7.8.tar.bz2
autoconf-2.57.tar.bz2
autoconf-2.59.tar.bz2
automake-1.8.5.tar.bz2
help2man-1.36.4.tar.gz
autoconf-2.61.tar.bz2
automake-1.9.6.tar.bz2
automake-1.10.3.tar.bz2
autoconf-2.64.tar.bz2
automake-1.11.2.tar.bz2
autoconf-2.69.tar.gz
libtool-2.2.4.tar.bz2
automake-1.15.1.tar.gz
binutils-2.30.tar.bz2
musl-1.1.24.tar.gz
tcc-0.9.27.tar.bz2
gcc-core-4.0.4.tar.bz2
automake-1.16.3.tar.gz
findutils-4.2.33.tar.gz
gnulib-8e128e.tar.gz
musl-1.2.4.tar.gz
gcc-core-4.0.4.tar.bz2
automake-1.16.3.tar.gz
util-linux-2.19.1.tar.gz
e2fsprogs-1.45.7.tar.gz
CaseFolding.txt
DerivedAge.txt
DerivedCombiningClass.txt
DerivedCoreProperties.txt
NormalizationCorrections.txt
NormalizationTest.txt
UnicodeData.txt
v10.0.1.tar.gz
kbd-1.15.tar.gz
make-3.82.tar.bz2
ed-1.4.tar.gz
bc-1.07.1.tar.gz
v2.0.22.tar.gz
linux-4.9.10.tar.gz
deblob-4.9
curl-7.88.1.tar.bz2