commit
acfe6cc771
66
.cirrus.yml
66
.cirrus.yml
|
@ -9,10 +9,11 @@ pylint_task:
|
|||
deps_script:
|
||||
- apt-get -y update
|
||||
- apt-get -y dist-upgrade
|
||||
- apt-get -y install python3-requests pylint
|
||||
- apt-get -y install python3-pip python3-requests
|
||||
- apt-get -y clean
|
||||
- pip3 install pylint
|
||||
check_script:
|
||||
- pylint rootfs.py sysa.py lib/utils.py
|
||||
- pylint rootfs.py sysa.py sysb.py sysc.py lib/utils.py lib/sysgeneral.py --disable=duplicate-code
|
||||
|
||||
shell_lint_task:
|
||||
container:
|
||||
|
@ -23,7 +24,7 @@ shell_lint_task:
|
|||
- apt-get -y install shellcheck
|
||||
- apt-get -y clean
|
||||
check_script:
|
||||
- shellcheck sysa/run.sh sysa/helpers.sh
|
||||
- shellcheck sysa/run.sh sysb/run.sh sysc/run.sh sysc/run2.sh sysglobal/helpers.sh
|
||||
|
||||
reuse_lint_task:
|
||||
container:
|
||||
|
@ -37,32 +38,33 @@ reuse_lint_task:
|
|||
check_script:
|
||||
- reuse lint
|
||||
|
||||
run_task:
|
||||
timeout_in: 180m
|
||||
container:
|
||||
image: potyarkin/molecule:host-kvm
|
||||
kvm: true
|
||||
cpu: 2
|
||||
memory: 4G
|
||||
# Required background services
|
||||
dbus_background_script:
|
||||
- mkdir -p /var/run/dbus
|
||||
- /usr/bin/dbus-daemon --system --nofork --nopidfile
|
||||
virtlogd_background_script:
|
||||
- /usr/sbin/virtlogd
|
||||
libvirtd_background_script:
|
||||
- sleep 2 && /usr/sbin/libvirtd
|
||||
iptables_legacy_script:
|
||||
- update-alternatives --set iptables /usr/sbin/iptables-legacy
|
||||
deps_script:
|
||||
- apt-get -y update
|
||||
- apt-get -y dist-upgrade
|
||||
- apt-get -y install sudo git cpio linux-image-4.19.0-16-amd64 expect wget
|
||||
- apt-get -y clean
|
||||
submodule_script:
|
||||
- git submodule update --init --recursive
|
||||
kernel_script:
|
||||
- cp /boot/vmlinuz-4.19.0-16-amd64 ./kernel
|
||||
run_script:
|
||||
- ./.cirrus.expect | tee -a /tmp/run.log
|
||||
- grep -q 'Bootstrapping completed.' /tmp/run.log
|
||||
# XXX: Takes too long right now
|
||||
#run_task:
|
||||
# timeout_in: 180m
|
||||
# container:
|
||||
# image: potyarkin/molecule:host-kvm
|
||||
# kvm: true
|
||||
# cpu: 2
|
||||
# memory: 4G
|
||||
# # Required background services
|
||||
# dbus_background_script:
|
||||
# - mkdir -p /var/run/dbus
|
||||
# - /usr/bin/dbus-daemon --system --nofork --nopidfile
|
||||
# virtlogd_background_script:
|
||||
# - /usr/sbin/virtlogd
|
||||
# libvirtd_background_script:
|
||||
# - sleep 2 && /usr/sbin/libvirtd
|
||||
# iptables_legacy_script:
|
||||
# - update-alternatives --set iptables /usr/sbin/iptables-legacy
|
||||
# deps_script:
|
||||
# - apt-get -y update
|
||||
# - apt-get -y dist-upgrade
|
||||
# - apt-get -y install sudo git cpio linux-image-4.19.0-16-amd64 expect wget
|
||||
# - apt-get -y clean
|
||||
# submodule_script:
|
||||
# - git submodule update --init --recursive
|
||||
# kernel_script:
|
||||
# - cp /boot/vmlinuz-4.19.0-16-amd64 ./kernel
|
||||
# run_script:
|
||||
# - ./.cirrus.expect | tee -a /tmp/run.log
|
||||
# - grep -q 'Bootstrapping completed.' /tmp/run.log
|
||||
|
|
|
@ -7,3 +7,4 @@ tmp/
|
|||
kernel
|
||||
sources/
|
||||
__pycache__
|
||||
sysglobal/bootstrap.cfg
|
||||
|
|
|
@ -9,6 +9,6 @@ Source: https://github.com/fosslinux/live-bootstrap
|
|||
# Copyright: $YEAR $NAME <$CONTACT>
|
||||
# License: ...
|
||||
|
||||
Files: SHA256SUMS.sources sysa/pre-sha.sha256sums sysa/*/checksums sysa/*/checksums/*
|
||||
Files: SHA256SUMS.sources sysa/pre-sha.sha256sums sysa/*/checksums sysa/*/checksums/* sysc/*/checksums sysc/*/checksums/*
|
||||
Copyright: none
|
||||
License: MIT
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
27
README.rst
27
README.rst
|
@ -25,7 +25,10 @@ Get me started!
|
|||
a. Alternatively, run ``./rootfs.py --chroot`` to run it in a chroot.
|
||||
b. Alternatively, run ``./rootfs.py`` but don’t run the actual
|
||||
virtualization and instead copy sysa/tmp/initramfs to a USB or
|
||||
some other device and boot from bare metal.
|
||||
some other device and boot from bare metal. NOTE: we now require
|
||||
a hard drive. This is currently hardcoded as sda. You also need
|
||||
to put ``sysc/tmp/disk.img`` onto your sda on the bootstrapping
|
||||
machine.
|
||||
|
||||
5. Wait.
|
||||
6. If you can, observe the many binaries in ``/after/bin``! When the
|
||||
|
@ -129,4 +132,24 @@ sysa
|
|||
sysa is the first ‘system’ used in live-bootstrap. We move to a new
|
||||
system after a reboot, which often occurs after the movement to a new
|
||||
kernel. It is run by the seed Linux kernel provided by the user. It
|
||||
currently compiles everything.
|
||||
compiles everything we need to be able to compile our own Linux kernel.
|
||||
It runs fully in an initramfs and does not rely on disk support in the
|
||||
seed Linux kernel.
|
||||
|
||||
sysb
|
||||
~~~~
|
||||
|
||||
sysb is the second 'system' of live-bootstrap. This uses the Linux 4.9.10
|
||||
kernel compiled within sysa. As we do not rely on disk support in sysa, we
|
||||
need this intermediate system to be able to add the missing binaries to sysc
|
||||
before moving into it. This is executed through kexec from sysa. At this point,
|
||||
a SATA disk IS required.
|
||||
|
||||
sysc
|
||||
~~~~
|
||||
|
||||
sysc is the (current) last 'system' of live-bootstrap. This is a continuation
|
||||
from sysb, executed through util-linux's ``switch_root`` command which moves
|
||||
the entire rootfs without a reboot. Every package from here on out is compiled
|
||||
under this system, taking binaries from sysa. Chroot mode skips sysb, as it
|
||||
is obviously irrelevant for a chroot.
|
||||
|
|
|
@ -87,3 +87,22 @@ de23af78fca90ce32dff2dd45b3432b2334740bb9bb7b05bf60fdbfc396ceb9c tcc-0.9.27.tar
|
|||
988403c1542d15ad044600b909997ba3079b10e03224c61188117f3676b02caa texinfo-6.7.tar.xz
|
||||
166c48d2842519bc4f96333bff9e265f8cdda44d38e40594ef3f9bbb52890490 xz-5.0.5.tar.bz2
|
||||
4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066 zlib-1.2.11.tar.xz
|
||||
c40385e142989c91989413f3c5a31282b2ffdca16b69cd3ecfde537b8a474921 flex-2.5.33.tar.gz
|
||||
b10d7e9e354be72aee4e4911cf19dd27b5c527d4e7200857365b5fcdeea0dffb bison-2.3.tar.bz2
|
||||
0190f28cb155fedd22bf8558c3e8705eed9eacfb7ae29e7508d025a68eb90899 gnulib-b28236b.tar.gz
|
||||
9385f2c8c2ca8b1dc4a7c31903f1f8dc8f2ba867dc2a9e5c93012ed6b564e826 perl-5.10.1.tar.bz2
|
||||
54437ae4211867de7ad55723f68b94c29cb2f08a23f431e0bbbc9f34ee384f47 dist-3.5-236.tar.gz
|
||||
e40b8f018c1da64edd1cc9a6fce5fa63b2e707e404e20cad91fbae337c98a5b7 make-4.2.1.tar.gz
|
||||
27d05534699735dc69e86add5b808d6cb35900ad3fd63fa82e3eb644336abfa0 bison-3.4.2.tar.xz
|
||||
8cced51f89a950472473856f86e88f5daf97a2347756125ccdc8ee907deec570 gnulib-672663a.tar.gz
|
||||
57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 perl-5.32.1.tar.xz
|
||||
3ec396d97debb6c1a112c1c6ff58b03a55866b75cd4fe06b74295ac9c5fc5ff2 perl-5f2dc80.tar.bz2
|
||||
84d2079a20ba32f5e2d5bc79a5dcb1de94d0176c67d75d5a20d533ea6c90d691 linux-headers-5.10.41.tar.gz
|
||||
af618de7848142f204b57811f703de3ae7aa3f5bc5d52226db35800fa8fc4dff kexec-tools-2.0.22.tar.gz
|
||||
f694bee56099b8d72c3843d97e27f2306aa9946741e34a27391f6f6f19c7bcd0 util-linux-2.19.1.tar.gz
|
||||
203c93e004ac7ad0e50423ff54d89e40fa99f45b207b2b892a4d70211feebe05 kbd-1.15.tar.gz
|
||||
ff2bf7656c4d1c6fdda3b8bebb21f09153a736bcba169aaf65eab25fa113bf3a automake-1.16.3.tar.xz
|
||||
3d991b33e604187c5881a0abc2e102d5b9776da5569640e73778f85d617242e7 make-3.82.tar.gz
|
||||
97ff15f9550c6e85c25173b3cf5c7e89a2d39fb923112f2c8bc2729cf64bf6d8 linux-4.9.10.tar.gz
|
||||
db316ba381e5a9916ace64acf822f0de70a724df06f73c18d79c5d16385a0cf1 deblob-4.9
|
||||
62912c9e999cc25c8cf494533d5bab8c22d9e0ee081649d3c05197b3a096aa3b deblob-check
|
||||
|
|
|
@ -0,0 +1,164 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
This file contains a few functions to be shared by all Sys* classes
|
||||
"""
|
||||
|
||||
# SPDX-FileCopyrightText: 2021 fosslinux <fosslinux@aussies.space>
|
||||
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import os
|
||||
import hashlib
|
||||
import shutil
|
||||
import glob
|
||||
import subprocess
|
||||
|
||||
import requests
|
||||
|
||||
from lib.utils import mount, umount, get_target, copytree
|
||||
|
||||
class SysGeneral:
|
||||
"""
|
||||
A class from which all Sys* class are extended.
|
||||
Contains functions used in all Sys*
|
||||
"""
|
||||
|
||||
# All of these are variables defined in the individual Sys* classes
|
||||
preserve_tmp = None
|
||||
tmp_dir = None
|
||||
base_dir = None
|
||||
git_dir = None
|
||||
sys_dir = None
|
||||
initramfs_path = None
|
||||
|
||||
def __del__(self):
|
||||
if not self.preserve_tmp:
|
||||
print("Unmounting tmpfs from %s" % (self.tmp_dir))
|
||||
umount(self.tmp_dir)
|
||||
os.rmdir(self.tmp_dir)
|
||||
|
||||
def mount_tmpfs(self):
|
||||
"""Mount the tmpfs for this sysx"""
|
||||
if not os.path.isdir(self.tmp_dir):
|
||||
os.mkdir(self.tmp_dir)
|
||||
print("Mounting tmpfs on %s" % (self.tmp_dir))
|
||||
mount('tmpfs', self.tmp_dir, 'tmpfs', 'size=8G')
|
||||
|
||||
def check_file(self, file_name):
|
||||
"""Check hash of downloaded source file."""
|
||||
checksum_store = os.path.join(self.git_dir, 'SHA256SUMS.sources')
|
||||
with open(checksum_store, encoding="utf_8") as checksum_file:
|
||||
hashes = checksum_file.read().splitlines()
|
||||
for hash_line in hashes:
|
||||
if os.path.basename(file_name) in hash_line:
|
||||
# Hash is in store, check it
|
||||
expected_hash = hash_line.split()[0]
|
||||
|
||||
with open(file_name, "rb") as downloaded_file:
|
||||
downloaded_content = downloaded_file.read() # read entire file as bytes
|
||||
readable_hash = hashlib.sha256(downloaded_content).hexdigest()
|
||||
if expected_hash == readable_hash:
|
||||
return
|
||||
raise Exception("Checksum mismatch")
|
||||
|
||||
raise Exception("File checksum is not yet recorded")
|
||||
|
||||
def download_file(self, url, file_name=None):
|
||||
"""
|
||||
Download a single source archive.
|
||||
"""
|
||||
cache_dir = os.path.join(self.git_dir, 'sources')
|
||||
|
||||
# Automatically determine file name based on URL.
|
||||
if file_name is None:
|
||||
file_name = os.path.basename(url)
|
||||
abs_file_name = os.path.join(cache_dir, file_name)
|
||||
|
||||
# Create a cache directory for downloaded sources
|
||||
if not os.path.isdir(cache_dir):
|
||||
os.mkdir(cache_dir)
|
||||
|
||||
# Actually download the file
|
||||
if not os.path.isfile(abs_file_name):
|
||||
print("Downloading: %s" % (file_name))
|
||||
request = requests.get(url, allow_redirects=True)
|
||||
# pylint: disable=consider-using-with
|
||||
open(abs_file_name, 'wb').write(request.content)
|
||||
|
||||
# Check SHA256 hash
|
||||
self.check_file(abs_file_name)
|
||||
return abs_file_name
|
||||
|
||||
def get_file(self, url, mkbuild=False, output=None):
|
||||
"""
|
||||
Download and prepare source packages
|
||||
|
||||
url can be either:
|
||||
1. a single URL
|
||||
2. list of URLs to download. In this case the first URL is the primary URL
|
||||
from which we derive the name of package directory
|
||||
output can be used to override file name of the downloaded file(s).
|
||||
|
||||
mkbuild=True can be used to pre-create build directories before
|
||||
mkdir is available.
|
||||
"""
|
||||
# Single URL
|
||||
if isinstance(url, str):
|
||||
assert output is None or isinstance(output, str)
|
||||
file_name = url if output is None else output
|
||||
urls = [url]
|
||||
outputs = [output]
|
||||
# Multiple URLs
|
||||
elif isinstance(url, list):
|
||||
assert output is None or len(output) == len(url)
|
||||
file_name = url[0] if output is None else output[0]
|
||||
urls = url
|
||||
outputs = output if output is not None else [None] * len(url)
|
||||
else:
|
||||
raise TypeError("url must be either a string or a list of strings")
|
||||
# Determine installation directory
|
||||
target_name = get_target(file_name)
|
||||
target_src_dir = os.path.join(self.base_dir, target_name, 'src')
|
||||
# Install base files
|
||||
src_tree = os.path.join(self.sys_dir, target_name)
|
||||
copytree(src_tree, self.base_dir)
|
||||
if not os.path.isdir(target_src_dir):
|
||||
os.mkdir(target_src_dir)
|
||||
for i, _ in enumerate(urls):
|
||||
# Download files into cache directory
|
||||
tarball = self.download_file(urls[i], outputs[i])
|
||||
# Install sources into target directory
|
||||
shutil.copy2(tarball, target_src_dir)
|
||||
if mkbuild:
|
||||
os.mkdir(os.path.join(self.base_dir, target_name, 'build'))
|
||||
|
||||
def deploy_sysglobal_files(self):
|
||||
"""Deploy files common to all Sys*"""
|
||||
sysglobal_files = ['bootstrap.cfg', 'helpers.sh']
|
||||
for file in sysglobal_files:
|
||||
shutil.copy2(os.path.join(self.git_dir, 'sysglobal', file),
|
||||
self.base_dir)
|
||||
|
||||
def make_initramfs(self):
|
||||
"""Package binary bootstrap seeds and sources into initramfs."""
|
||||
self.initramfs_path = os.path.join(self.tmp_dir, 'initramfs')
|
||||
|
||||
# Create a list of files to go within the initramfs
|
||||
file_list = glob.glob(os.path.join(self.tmp_dir, '**'), recursive=True)
|
||||
|
||||
# Use built-in removeprefix once we can use Python 3.9
|
||||
def remove_prefix(text, prefix):
|
||||
if text.startswith(prefix):
|
||||
return text[len(prefix):]
|
||||
return text # or whatever
|
||||
|
||||
file_list = [remove_prefix(f, self.tmp_dir + os.sep) for f in file_list]
|
||||
|
||||
# Create the initramfs
|
||||
with open(self.initramfs_path, "w", encoding="utf_8") as initramfs:
|
||||
# pylint: disable=consider-using-with
|
||||
cpio = subprocess.Popen(
|
||||
["cpio", "--format", "newc", "--create",
|
||||
"--directory", self.tmp_dir],
|
||||
stdin=subprocess.PIPE, stdout=initramfs)
|
||||
cpio.communicate(input='\n'.join(file_list).encode())
|
15
lib/utils.py
15
lib/utils.py
|
@ -5,13 +5,13 @@ This file contains a few self-contained helper functions
|
|||
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
|
||||
# SPDX-FileCopyrightText: 2021 fosslinux <fosslinux@aussies.space>
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def run(*args, **kwargs):
|
||||
"""A small wrapper around subprocess.run"""
|
||||
arguments = [str(arg) for arg in args]
|
||||
|
@ -25,6 +25,19 @@ def run(*args, **kwargs):
|
|||
print("Bootstrapping failed")
|
||||
sys.exit(1)
|
||||
|
||||
def create_disk(image, disk_type, fs_type, size):
|
||||
"""Create a disk image, with a filesystem on it"""
|
||||
run('truncate', '-s', size, image)
|
||||
# First find the device we will use, then actually use it
|
||||
loop_dev = run('losetup', '-f', capture_output=True).stdout.decode().strip()
|
||||
run('sudo', 'losetup', loop_dev, image)
|
||||
# Create the partition
|
||||
run('sudo', 'parted', '--script', image, 'mklabel', disk_type, 'mkpart',
|
||||
'primary', 'ext4', '0%', '100%')
|
||||
run('sudo', 'partprobe', loop_dev)
|
||||
run('sudo', 'mkfs.' + fs_type, loop_dev + "p1")
|
||||
return loop_dev
|
||||
|
||||
def mount(source, target, fs_type, options='', **kwargs):
|
||||
"""Mount filesystem"""
|
||||
run('sudo', 'mount', source, target, '-t', fs_type, '-o', options, **kwargs)
|
||||
|
|
73
parts.rst
73
parts.rst
|
@ -535,6 +535,79 @@ gcc 4.0.4
|
|||
|
||||
Rebuild GCC with GCC and also against the latest musl.
|
||||
|
||||
util-linux 2.19.1
|
||||
=================
|
||||
|
||||
``util-linux`` contains a number of general system administration utilities.
|
||||
Most pressingly, we need these for being able to mount disks (for non-chroot
|
||||
mode, but it is built it in chroot mode anyway because it will likely be useful
|
||||
later). The latest version is not used because of autotools/GCC
|
||||
incompatibilities.
|
||||
|
||||
kbd-1.15
|
||||
========
|
||||
|
||||
``kbd`` contains ``loadkeys`` which is required for building the Linux kernel.
|
||||
The 2.x series is not used because it requires particular features of autotools
|
||||
that we do not have avaliable.
|
||||
|
||||
make 3.82
|
||||
=========
|
||||
|
||||
GNU Make is updated by .02. The most notable thing is this is now built properly
|
||||
using the build system and GCC, which means that it does not randomly segfault
|
||||
while building the Linux kernel.
|
||||
|
||||
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.
|
||||
|
||||
create_sysb
|
||||
===========
|
||||
|
||||
The next step is not a package, but the creation of the sysb rootfs, containing
|
||||
all of the scripts for sysb (which merely move to sysc). Again, this is only
|
||||
done in non-chroot mode, because sysb does not exist in chroot mode.
|
||||
|
||||
Linux kernel 4.9.10
|
||||
===================
|
||||
|
||||
A lot going on here. This is the first (and currently only) time the Linux kernel
|
||||
is built. Firstly, Linux kernel version 4.9.x is used because newer versions
|
||||
require much more stringent requirements on the make, GCC, binutils versions.
|
||||
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 arbitarily, 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
|
||||
to deblob the kernel. Unauditable, unbootstrappable binary blobs within our
|
||||
kernel are unacceptable. Our gawk is too buggy/old so we use sed instead for
|
||||
this operation. 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
|
||||
for the requirements of live-bootstrap, including compiler features, drivers,
|
||||
and removing modules. Speaking of which, modules cannot be used. These cannot
|
||||
be transferred to subsequent systems, and we do not have ``modprobe``. Lastly,
|
||||
the initramfs of sysb is generated in this stage, using ``gen_init_cpio`` within
|
||||
the Linux kernel tree. This avoids the compilation of ``cpio`` as well.
|
||||
|
||||
go_sysb
|
||||
=======
|
||||
|
||||
This is the last step of sysa, run for non-chroot mode. It uses kexec to load
|
||||
the new Linux kernel into RAM and execute it, moving into sysb.
|
||||
|
||||
sysb
|
||||
====
|
||||
|
||||
sysb is purely a transition to sysc, allowing binaries from sysa to get onto a
|
||||
disk (as sysa does not nessecarily have hard disk support in the kernel).
|
||||
It populates device nodes, mounts sysc, copies over data, and executes sysc.
|
||||
|
||||
bash 5.1
|
||||
========
|
||||
|
||||
|
|
89
rootfs.py
89
rootfs.py
|
@ -10,16 +10,28 @@ you can run bootstap inside chroot.
|
|||
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
|
||||
# SPDX-FileCopyrightText: 2021 Bastian Bittorf <bb@npl.de>
|
||||
# SPDX-FileCopyrightText: 2021 Melg Eight <public.melg8@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2021 fosslinux <fosslinux@aussies.space>
|
||||
|
||||
import argparse
|
||||
import glob
|
||||
import os
|
||||
import subprocess
|
||||
import shutil
|
||||
|
||||
from sysa import SysA
|
||||
from sysb import SysB
|
||||
from sysc import SysC
|
||||
from lib.utils import run
|
||||
|
||||
def create_configuration_file(args):
|
||||
"""
|
||||
Creates bootstrap.cfg file which would contain options used to
|
||||
customize bootstrap.
|
||||
"""
|
||||
config_path = os.path.join('sysglobal', 'bootstrap.cfg')
|
||||
with open(config_path, "w", encoding="utf_8") as config:
|
||||
config.write("FORCE_TIMESTAMPS=" + str(args.force_timestamps) + "\n")
|
||||
config.write("CHROOT=" + str(args.chroot) + "\n")
|
||||
config.write("DISK=sda1\n")
|
||||
|
||||
def main():
|
||||
"""
|
||||
A few command line arguments to customize bootstrap.
|
||||
|
@ -56,35 +68,20 @@ def main():
|
|||
if args.arch != "x86":
|
||||
raise ValueError("Only x86 is supported at the moment.")
|
||||
|
||||
system_a = SysA(arch=args.arch, preserve_tmp=args.preserve, tmpdir=args.tmpdir,
|
||||
force_timestamps=args.force_timestamps)
|
||||
initramfs_path = os.path.join(system_a.tmp_dir, "initramfs")
|
||||
create_configuration_file(args)
|
||||
|
||||
if not args.chroot:
|
||||
make_initramfs(system_a.tmp_dir, initramfs_path)
|
||||
system_b = SysB(arch=args.arch, preserve_tmp=args.preserve,
|
||||
tmpdir=args.tmpdir, chroot=args.chroot)
|
||||
system_a = SysA(arch=args.arch, preserve_tmp=args.preserve,
|
||||
tmpdir=args.tmpdir, chroot=args.chroot, sysb_tmp=system_b.tmp_dir)
|
||||
system_c = SysC(arch=args.arch, preserve_tmp=args.preserve,
|
||||
tmpdir=args.tmpdir, chroot=args.chroot)
|
||||
|
||||
bootstrap(args, system_a.tmp_dir, initramfs_path)
|
||||
bootstrap(args, system_a, system_b, system_c)
|
||||
|
||||
def make_initramfs(tmp_dir, initramfs_path):
|
||||
"""Package binary bootstrap seeds and sources into initramfs."""
|
||||
file_list = glob.glob(os.path.join(tmp_dir, '**'), recursive=True)
|
||||
|
||||
# Use built-in removeprefix once we can use Python 3.9
|
||||
def remove_prefix(text, prefix):
|
||||
if text.startswith(prefix):
|
||||
return text[len(prefix):]
|
||||
return text # or whatever
|
||||
|
||||
file_list = [remove_prefix(f, tmp_dir + os.sep) for f in file_list]
|
||||
|
||||
with open(initramfs_path, "w") as initramfs:
|
||||
cpio = subprocess.Popen(["cpio", "--format", "newc", "--create", "--directory", tmp_dir],
|
||||
stdin=subprocess.PIPE, stdout=initramfs)
|
||||
cpio.communicate(input='\n'.join(file_list).encode())
|
||||
|
||||
def bootstrap(args, tmp_dir, initramfs_path):
|
||||
def bootstrap(args, system_a, system_b, system_c):
|
||||
"""Kick off bootstrap process."""
|
||||
print("Bootstrapping %s" % (args.arch))
|
||||
print("Bootstrapping %s -- SysA" % (args.arch))
|
||||
if args.chroot:
|
||||
find_chroot = """
|
||||
import shutil
|
||||
|
@ -92,11 +89,19 @@ print(shutil.which('chroot'))
|
|||
"""
|
||||
chroot_binary = run('sudo', 'python3', '-c', find_chroot,
|
||||
capture_output=True).stdout.decode().strip()
|
||||
# sysa
|
||||
init = os.path.join(os.sep, 'bootstrap-seeds', 'POSIX', args.arch, 'kaem-optional-seed')
|
||||
run('sudo', 'env', '-i', 'PATH=/bin', chroot_binary, tmp_dir, init)
|
||||
return
|
||||
run('sudo', 'env', '-i', 'PATH=/bin', chroot_binary, system_a.tmp_dir, init)
|
||||
# Perform the steps for sysa -> sysc transition that would occur within
|
||||
# qemu if we were running not in chroot
|
||||
# We skip sysb as that is only pertinent to "hardware" (not chroot)
|
||||
system_c.chroot_transition(system_a.tmp_dir)
|
||||
# sysc
|
||||
print("Bootstrapping %s -- SysC" % (args.arch))
|
||||
init = os.path.join(os.sep, 'init')
|
||||
run('sudo', chroot_binary, system_c.tmp_dir, init)
|
||||
|
||||
if args.minikernel:
|
||||
elif args.minikernel:
|
||||
if os.path.isdir('kritis-linux'):
|
||||
shutil.rmtree('kritis-linux')
|
||||
|
||||
|
@ -111,19 +116,21 @@ print(shutil.which('chroot'))
|
|||
'--qemucpu', '486',
|
||||
'--kernel', '3.18.140',
|
||||
'--features', 'kflock,highrestimers',
|
||||
'--ramsize', str(args.qemu_ram) + 'M',
|
||||
'--initrd', initramfs_path,
|
||||
# Hack to add -hda /dev/blah
|
||||
'--ramsize', str(args.qemu_ram) + 'M -hda ' + system_b.dev_name,
|
||||
'--initrd', system_a.initramfs_path,
|
||||
'--log', '/tmp/bootstrap.log')
|
||||
return
|
||||
|
||||
run(args.qemu_cmd,
|
||||
'-enable-kvm',
|
||||
'-m', str(args.qemu_ram) + 'M',
|
||||
'-nographic',
|
||||
'-no-reboot',
|
||||
'-kernel', args.kernel,
|
||||
'-initrd', initramfs_path,
|
||||
'-append', "console=ttyS0")
|
||||
else:
|
||||
run(args.qemu_cmd,
|
||||
'-enable-kvm',
|
||||
'-m', str(args.qemu_ram) + 'M',
|
||||
'-no-reboot',
|
||||
'-hda', system_c.dev_name,
|
||||
'-kernel', args.kernel,
|
||||
'-initrd', system_a.initramfs_path,
|
||||
'-nographic',
|
||||
'-append', 'console=ttyS0')
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
266
sysa.py
266
sysa.py
|
@ -3,131 +3,40 @@
|
|||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
|
||||
# SPDX-FileCopyrightText: 2021 Melg Eight <public.melg8@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2021 fosslinux <fosslinux@aussies.space>
|
||||
|
||||
import hashlib
|
||||
import os
|
||||
from distutils.dir_util import copy_tree
|
||||
import shutil
|
||||
|
||||
import requests
|
||||
from lib.utils import copytree
|
||||
from lib.sysgeneral import SysGeneral
|
||||
|
||||
from lib.utils import mount, umount, copytree, get_target
|
||||
|
||||
|
||||
class SysA:
|
||||
# pylint: disable=consider-using-with
|
||||
class SysA(SysGeneral):
|
||||
"""
|
||||
Class responsible for preparing sources for System A.
|
||||
"""
|
||||
def __init__(self, arch, preserve_tmp, tmpdir, force_timestamps):
|
||||
# pylint: disable=too-many-instance-attributes,too-many-arguments
|
||||
def __init__(self, arch, preserve_tmp, tmpdir, chroot, sysb_tmp):
|
||||
self.git_dir = os.path.dirname(os.path.join(__file__))
|
||||
self.arch = arch
|
||||
self.preserve_tmp = preserve_tmp
|
||||
|
||||
self.sys_dir = os.path.join(self.git_dir, 'sysa')
|
||||
if tmpdir is None:
|
||||
self.tmp_dir = os.path.join(self.git_dir, 'sysa', 'tmp')
|
||||
self.tmp_dir = os.path.join(self.sys_dir, 'tmp')
|
||||
else:
|
||||
self.tmp_dir = tmpdir
|
||||
self.sysa_dir = os.path.join(self.git_dir, 'sysa')
|
||||
self.tmp_dir = os.path.join(tmpdir, 'sysa')
|
||||
os.mkdir(self.tmp_dir)
|
||||
self.after_dir = os.path.join(self.tmp_dir, 'after')
|
||||
self.force_timestamps = force_timestamps
|
||||
self.base_dir = self.after_dir
|
||||
self.sysb_tmp = sysb_tmp
|
||||
|
||||
self.prepare()
|
||||
|
||||
def __del__(self):
|
||||
if not self.preserve_tmp:
|
||||
print("Unmounting tmpfs from %s" % (self.tmp_dir))
|
||||
umount(self.tmp_dir)
|
||||
os.rmdir(self.tmp_dir)
|
||||
|
||||
def check_file(self, file_name):
|
||||
"""Check hash of downloaded source file."""
|
||||
checksum_store = os.path.join(self.git_dir, 'SHA256SUMS.sources')
|
||||
with open(checksum_store) as checksum_file:
|
||||
hashes = checksum_file.read().splitlines()
|
||||
for hash_line in hashes:
|
||||
if os.path.basename(file_name) in hash_line:
|
||||
# Hash is in store, check it
|
||||
expected_hash = hash_line.split()[0]
|
||||
|
||||
with open(file_name, "rb") as downloaded_file:
|
||||
downloaded_content = downloaded_file.read() # read entire file as bytes
|
||||
readable_hash = hashlib.sha256(downloaded_content).hexdigest()
|
||||
if expected_hash == readable_hash:
|
||||
return
|
||||
raise Exception("Checksum mismatch")
|
||||
|
||||
raise Exception("File checksum is not yet recorded")
|
||||
|
||||
def download_file(self, url, file_name=None):
|
||||
"""
|
||||
Download a single source archive.
|
||||
"""
|
||||
cache_dir = os.path.join(self.git_dir, 'sources')
|
||||
|
||||
# Automatically determine file name based on URL.
|
||||
if file_name is None:
|
||||
file_name = os.path.basename(url)
|
||||
abs_file_name = os.path.join(cache_dir, file_name)
|
||||
|
||||
# Create a cache directory for downloaded sources
|
||||
if not os.path.isdir(cache_dir):
|
||||
os.mkdir(cache_dir)
|
||||
|
||||
# Actually download the file
|
||||
if not os.path.isfile(abs_file_name):
|
||||
print("Downloading: %s" % (file_name))
|
||||
response = requests.get(url, allow_redirects=True, stream=True)
|
||||
if response.status_code == 200:
|
||||
with open(abs_file_name, 'wb') as target_file:
|
||||
target_file.write(response.raw.read())
|
||||
else:
|
||||
raise Exception("Download failed.")
|
||||
|
||||
# Check SHA256 hash
|
||||
self.check_file(abs_file_name)
|
||||
return abs_file_name
|
||||
|
||||
def get_file(self, url, output=None):
|
||||
"""
|
||||
Download and prepare source packages
|
||||
|
||||
url can be either:
|
||||
1. a single URL
|
||||
2. list of URLs to download. In this case the first URL is the primary URL
|
||||
from which we derive the name of package directory
|
||||
output can be used to override file name of the downloaded file(s).
|
||||
"""
|
||||
# Single URL
|
||||
if isinstance(url, str):
|
||||
assert output is None or isinstance(output, str)
|
||||
file_name = url if output is None else output
|
||||
urls = [url]
|
||||
outputs = [output]
|
||||
# Multiple URLs
|
||||
elif isinstance(url, list):
|
||||
assert output is None or len(output) == len(url)
|
||||
file_name = url[0] if output is None else output[0]
|
||||
urls = url
|
||||
outputs = output if output is not None else [None] * len(url)
|
||||
else:
|
||||
raise TypeError("url must be either a string or a list of strings")
|
||||
|
||||
# Determine installation directory
|
||||
target_name = get_target(file_name)
|
||||
target_src_dir = os.path.join(self.after_dir, target_name, 'src')
|
||||
|
||||
# Install base files
|
||||
src_tree = os.path.join(self.sysa_dir, target_name)
|
||||
copytree(src_tree, self.after_dir)
|
||||
if not os.path.isdir(target_src_dir):
|
||||
os.mkdir(target_src_dir)
|
||||
|
||||
for i, _ in enumerate(urls):
|
||||
# Download files into cache directory
|
||||
tarball = self.download_file(urls[i], outputs[i])
|
||||
|
||||
# Install sources into target directory
|
||||
shutil.copy2(tarball, target_src_dir)
|
||||
if not chroot:
|
||||
self.make_initramfs()
|
||||
|
||||
def prepare(self):
|
||||
"""
|
||||
|
@ -135,17 +44,23 @@ class SysA:
|
|||
We create an empty tmpfs, unpack stage0-posix.
|
||||
Rest of the files are unpacked into more structured directory /after
|
||||
"""
|
||||
if not os.path.isdir(self.tmp_dir):
|
||||
os.mkdir(self.tmp_dir)
|
||||
print("Mounting tmpfs on %s" % (self.tmp_dir))
|
||||
mount('tmpfs', self.tmp_dir, 'tmpfs', 'size=8G')
|
||||
self.mount_tmpfs()
|
||||
os.mkdir(self.after_dir)
|
||||
|
||||
self.stage0_posix()
|
||||
self.after()
|
||||
|
||||
# sysb must be added to sysa as it is another initramfs stage
|
||||
self.sysb()
|
||||
|
||||
def sysb(self):
|
||||
"""Copy in sysb files for sysb."""
|
||||
shutil.copytree(self.sysb_tmp, os.path.join(self.tmp_dir, 'sysb'),
|
||||
shutil.ignore_patterns('tmp'))
|
||||
|
||||
def stage0_posix(self):
|
||||
"""Copy in all of the stage0-posix"""
|
||||
stage0_posix_base_dir = os.path.join(self.sysa_dir, 'stage0-posix', 'src')
|
||||
stage0_posix_base_dir = os.path.join(self.sys_dir, 'stage0-posix', 'src')
|
||||
stage0_posix_arch_dir = os.path.join(stage0_posix_base_dir, self.arch)
|
||||
copy_tree(stage0_posix_arch_dir, self.tmp_dir)
|
||||
|
||||
|
@ -166,14 +81,14 @@ class SysA:
|
|||
copytree(mescc_tools_extra_dir, self.tmp_dir)
|
||||
|
||||
# bootstrap seeds
|
||||
bootstrap_seeds_dir = os.path.join(self.sysa_dir, 'stage0-posix', 'src', 'bootstrap-seeds')
|
||||
bootstrap_seeds_dir = os.path.join(self.sys_dir, 'stage0-posix', 'src', 'bootstrap-seeds')
|
||||
copytree(bootstrap_seeds_dir, self.tmp_dir)
|
||||
kaem_optional_seed = os.path.join(bootstrap_seeds_dir, 'POSIX',
|
||||
self.arch, 'kaem-optional-seed')
|
||||
shutil.copy2(kaem_optional_seed, os.path.join(self.tmp_dir, 'init'))
|
||||
|
||||
# stage0-posix hook to continue running live-bootstrap
|
||||
shutil.copy2(os.path.join(self.sysa_dir, 'after.kaem'),
|
||||
shutil.copy2(os.path.join(self.sys_dir, 'after.kaem'),
|
||||
os.path.join(self.tmp_dir, 'after.kaem'))
|
||||
|
||||
# create directories needed
|
||||
|
@ -190,25 +105,15 @@ class SysA:
|
|||
the stage0-posix one is hella messy.
|
||||
"""
|
||||
|
||||
self.create_configuration_file()
|
||||
self.deploy_extra_files()
|
||||
self.deploy_sysglobal_files()
|
||||
self.get_packages()
|
||||
|
||||
def create_configuration_file(self):
|
||||
"""
|
||||
Creates bootstrap.cfg file which would contain options used to
|
||||
customize bootstrap.
|
||||
"""
|
||||
os.mkdir(self.after_dir)
|
||||
config_path = os.path.join(self.after_dir, "bootstrap.cfg")
|
||||
with open(config_path, "w") as config:
|
||||
config.write("FORCE_TIMESTAMPS=" + str(self.force_timestamps))
|
||||
|
||||
def deploy_extra_files(self):
|
||||
"""Deploy misc files"""
|
||||
extra_files = ['helpers.sh', 'run.sh', 'run2.sh']
|
||||
extra_files = ['run.sh']
|
||||
for extra_file in extra_files:
|
||||
shutil.copy2(os.path.join(self.sysa_dir, extra_file), self.after_dir)
|
||||
shutil.copy2(os.path.join(self.sys_dir, extra_file), self.after_dir)
|
||||
|
||||
shutil.copy2(os.path.join(self.git_dir, 'SHA256SUMS.sources'), self.after_dir)
|
||||
|
||||
|
@ -367,100 +272,31 @@ class SysA:
|
|||
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.64.tar.bz2")
|
||||
|
||||
# gcc 4.0.4
|
||||
self.get_file("https://mirrors.kernel.org/gnu/gcc/gcc-4.0.4/gcc-core-4.0.4.tar.bz2",
|
||||
output="gcc-4.0.4.tar.bz2")
|
||||
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"])
|
||||
|
||||
# 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")
|
||||
|
||||
# musl 1.2.2
|
||||
self.get_file("https://musl.libc.org/releases/musl-1.2.2.tar.gz")
|
||||
|
||||
# bash 5.1
|
||||
self.get_file("https://mirrors.kernel.org/gnu/bash/bash-5.1.tar.gz")
|
||||
# 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")
|
||||
|
||||
# xz 5.0.5
|
||||
self.get_file("https://tukaani.org/xz/xz-5.0.5.tar.bz2")
|
||||
# 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")
|
||||
|
||||
# automake 1.11.2
|
||||
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.11.2.tar.bz2")
|
||||
# kbd 1.15
|
||||
self.get_file("https://mirrors.edge.kernel.org/pub/linux/utils/kbd/kbd-1.15.tar.gz")
|
||||
|
||||
# autoconf 2.69
|
||||
self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.69.tar.xz")
|
||||
# make 3.82
|
||||
self.get_file("http://ftp.gnu.org/gnu/make/make-3.82.tar.gz")
|
||||
|
||||
# automake 1.15.1
|
||||
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.15.1.tar.xz")
|
||||
|
||||
# tar 1.34
|
||||
self.get_file(["https://mirrors.kernel.org/gnu/tar/tar-1.34.tar.xz",
|
||||
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-30820c.tar.gz"])
|
||||
|
||||
# coreutils 8.32
|
||||
self.get_file(["https://git.savannah.gnu.org/cgit/coreutils.git/snapshot/coreutils-8.32.tar.gz",
|
||||
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-d279bc.tar.gz"])
|
||||
|
||||
# pkg-config 0.29.2
|
||||
self.get_file("https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz")
|
||||
|
||||
# make 4.2.1
|
||||
self.get_file("https://ftp.gnu.org/gnu/make/make-4.2.1.tar.gz")
|
||||
|
||||
# gmp 6.2.1
|
||||
self.get_file("https://mirrors.kernel.org/gnu/gmp/gmp-6.2.1.tar.xz")
|
||||
|
||||
# autoconf archive 2021.02.19
|
||||
self.get_file("https://mirrors.kernel.org/gnu/autoconf-archive/autoconf-archive-2021.02.19.tar.xz")
|
||||
|
||||
# mpfr 4.1.0
|
||||
self.get_file("https://mirrors.kernel.org/gnu/mpfr/mpfr-4.1.0.tar.xz")
|
||||
|
||||
# mpc 1.2.1
|
||||
self.get_file("https://mirrors.kernel.org/gnu/mpc/mpc-1.2.1.tar.gz")
|
||||
|
||||
# flex 2.5.33
|
||||
self.get_file("http://download.nust.na/pub2/openpkg1/sources/DST/flex/flex-2.5.33.tar.gz")
|
||||
|
||||
# bison 2.3
|
||||
self.get_file(["https://mirrors.kernel.org/gnu/bison/bison-2.3.tar.bz2",
|
||||
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-b28236b.tar.gz"])
|
||||
|
||||
# bison 3.4.2
|
||||
self.get_file(["https://mirrors.kernel.org/gnu/bison/bison-3.4.2.tar.xz",
|
||||
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-672663a.tar.gz"])
|
||||
|
||||
# perl 5.10.5
|
||||
self.get_file("https://www.cpan.org/src/5.0/perl-5.10.1.tar.bz2")
|
||||
|
||||
# dist 3.5-236
|
||||
# Debian's version is used because upstream is not to be found (dead?)
|
||||
self.get_file("https://salsa.debian.org/perl-team/interpreter/dist/-/archive/d1de81f/dist-d1de81f.tar.gz",
|
||||
output="dist-3.5-236.tar.gz")
|
||||
|
||||
# perl 5.32.1
|
||||
self.get_file(["https://www.cpan.org/src/5.0/perl-5.32.1.tar.xz",
|
||||
"https://salsa.debian.org/perl-team/interpreter/perl/-/archive/5f2dc80/perl-5f2dc80.tar.bz2"])
|
||||
|
||||
# automake 1.16.3
|
||||
self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.16.3.tar.gz")
|
||||
|
||||
# patch 2.7.6
|
||||
self.get_file(["https://mirrors.kernel.org/gnu/patch/patch-2.7.6.tar.xz",
|
||||
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-e017871.tar.gz"])
|
||||
|
||||
# gettext 0.21
|
||||
self.get_file(["https://mirrors.kernel.org/gnu/gettext/gettext-0.21.tar.xz",
|
||||
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-7daa86f.tar.gz"])
|
||||
|
||||
# texinfo 6.7
|
||||
self.get_file(["https://mirrors.kernel.org/gnu/texinfo/texinfo-6.7.tar.xz",
|
||||
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-b81ec69.tar.gz"])
|
||||
|
||||
# zlib 1.2.11
|
||||
self.get_file("https://www.zlib.net/zlib-1.2.11.tar.xz")
|
||||
|
||||
# gcc 4.7.4
|
||||
self.get_file("https://mirrors.kernel.org/gnu/gcc/gcc-4.7.4/gcc-4.7.4.tar.bz2")
|
||||
|
||||
# gperf 3.1
|
||||
self.get_file("https://mirrors.kernel.org/gnu/gperf/gperf-3.1.tar.gz")
|
||||
|
||||
# libunistring 0.9.10
|
||||
self.get_file(["https://mirrors.kernel.org/gnu/libunistring/libunistring-0.9.10.tar.xz",
|
||||
"https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-52a06cb3.tar.gz"])
|
||||
# linux kernel 2.6.16.62
|
||||
self.get_file(["https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.10.tar.gz",
|
||||
"http://linux-libre.fsfla.org/pub/linux-libre/releases/4.9.10-gnu/deblob-4.9",
|
||||
"http://linux-libre.fsfla.org/pub/linux-libre/releases/4.9.10-gnu/deblob-check"])
|
||||
|
|
|
@ -12,7 +12,7 @@ PATH=/bin
|
|||
|
||||
# Set commonly used variables
|
||||
sources=/after
|
||||
prefix=/image
|
||||
prefix=/usr
|
||||
bindir=${prefix}/bin
|
||||
libdir=${prefix}/lib
|
||||
incdir=${prefix}/include
|
||||
|
@ -23,8 +23,7 @@ NYACC_PKG=nyacc-1.00.2
|
|||
MES_PKG=mes
|
||||
MES_PREFIX=${sources}/${MES_PKG}/src/mes-m2-a7522f26ee020dc498219d0122ea1b7d345bcdd5
|
||||
GUILE_LOAD_PATH=${MES_PREFIX}/mes/module:${MES_PREFIX}/module:${sources}/${MES_PKG}/src/${NYACC_PKG}/module
|
||||
|
||||
mkdir ${bindir} ${libdir} ${incdir} ${tmpdir}
|
||||
mkdir ${prefix} ${bindir} ${libdir} ${incdir} ${tmpdir}
|
||||
cd ${prefix}
|
||||
|
||||
# Remove remaining dependencies on /bin (stage0-posix directory)
|
||||
|
@ -33,15 +32,14 @@ cp /bin/catm bin/catm
|
|||
cp /bin/chmod bin/chmod
|
||||
cp /bin/get_machine bin/get_machine
|
||||
cp /bin/hex2 bin/hex2
|
||||
cp /bin/kaem bin/kaem
|
||||
cp /bin/kaem ${bindir}/kaem
|
||||
cp /bin/M1 bin/M1
|
||||
cp /bin/M2-Planet bin/M2-Planet
|
||||
cp /bin/mkdir bin/mkdir
|
||||
cp /bin/sha256sum bin/sha256sum
|
||||
cp /bin/ungz bin/ungz
|
||||
cp /bin/untar bin/untar
|
||||
|
||||
cp /bin/cp ${prefix}/bin/cp
|
||||
cp /bin/cp bin/cp
|
||||
|
||||
chmod 755 bin/blood-elf
|
||||
chmod 755 bin/catm
|
||||
|
@ -57,7 +55,7 @@ chmod 755 bin/sha256sum
|
|||
chmod 755 bin/ungz
|
||||
chmod 755 bin/untar
|
||||
|
||||
PATH=${prefix}/bin
|
||||
PATH=${bindir}
|
||||
|
||||
cd ${sources}
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
af075793e3992c4da992814641e92f8dd5e7d0454f1ace58bcd6ed54fb86cfa9 /image/bin/bash
|
||||
4605c6f97ea53889b5b7bbdebbd8209f29142f1c8ec25c759ef8500b0501ca5e /usr/bin/bash
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
7b56621ecdc96fdde8863bea6e6ca903ab35619d0a453d906ed4dfc7d2c68e4d /image/bin/bash
|
|
@ -1,19 +1,19 @@
|
|||
a64dd48319724c048a7523b030068b6d82d231c9e993e936b9dda784bc59287d /image/bin/ar
|
||||
396a7acf5eb4c4a52acb61671979c3d7f3168e05498684a6a4e933e96776929d /image/bin/as
|
||||
3898cc265c6818f65e1ce84eb555d2b67e5ea68c717f08e216f22fa7b53d1304 /image/bin/c++filt
|
||||
a79a4a95e394e5521fe8ba426c1d9ffb7965f20767a7a25123072fc1056ffc4c /image/bin/gprof
|
||||
8e8c53332d444c4810631a0a304118878eacb1fd730aa978ef24d81a72cfa723 /image/bin/ld
|
||||
b1d0920558097413c45da60ac2e7210b8eaf97090d28211593b929a8e8ac56b7 /image/bin/nm
|
||||
3816b868f47e1812b50c2a887ff8fbebcf51eb143f78e79427750b097d1c6360 /image/bin/objcopy
|
||||
5ae33d450c5f9b993b979ff298ffd57b20cb316e21c16dfbca473dcc1a3dac24 /image/bin/objdump
|
||||
e49bba1ea6a61fb90f754e8de4692ed0810e7c68429f0b22fbf37670607a7807 /image/bin/od
|
||||
f909e690a1256861252c389a978e7561bba317415ae0805735a12ee1a92c16c2 /image/bin/ranlib
|
||||
e8dbc4ff1642541d0789a3accbe52c7b71888cd85ec9a9e82f50dc0b6bf8346f /image/bin/readelf
|
||||
c61846e74119fd105684cdcbc2f5e31aa47cf090dfe6bf4d1ba6101e75f5fe8c /image/bin/size
|
||||
d26d4b1fc92dbd16da852598caee35981283b52a00c0a9df5dadf3f91c75d2de /image/bin/strings
|
||||
015587bd00f9451a58e1fb26e38e52ab08e016da44e577276045742a1be76d71 /image/bin/strip
|
||||
a5d224d76b8604550917b0c5e17473054b175a0dc9ecd7055a4522ab3a06f2a1 /image/lib/musl/libbfd.a
|
||||
4e2bb9a8d3c4b377112f1299b1954764e5db63b83586a95d072ffd5e2efb45ae /image/lib/musl/libbfd.la
|
||||
2d1dba5dd076ebf57c68e4a7ae759d4ba50ca34d4f2731c6cfec914cfa923a44 /image/lib/musl/libiberty.a
|
||||
cf374d1cb063913333f586b1b51f865671e5527a9991db022739d2b9fe47a0f7 /image/lib/musl/libopcodes.a
|
||||
8f1fd8389fe5e28d20d91c50fd10ae210afe5730a8ae39d0cec600aca1fe614a /image/lib/musl/libopcodes.la
|
||||
85de1f0626450cf9002855c06be0e0da6bb55989f370e7ebd2054449bf53a0df /usr/bin/ar
|
||||
e1949d4d9fad1330bd0db1185aed915c4261d81f59d825208b77cfc7ef53a5d9 /usr/bin/as
|
||||
eb43f2a231a680bd8a41baaa766b23fdc98c33359b18271708b61dba12b39575 /usr/bin/c++filt
|
||||
54136ec4a3e957639e26b443acdda6a1b41da511ac44e8126c429b5be8b3137c /usr/bin/gprof
|
||||
a2f6c731542c5bbe554d369661be33f37d5017c2145d6848f33e43d80604ae93 /usr/bin/ld
|
||||
00d840cd3b0d5a4ec5a577b0ccd796ba42e569117f9827bcdbc388dcd2c04169 /usr/bin/nm
|
||||
893f9742bc2002c8175f33cdb9fb1e963faef74196bd68d9239f1de2b0211927 /usr/bin/objcopy
|
||||
997747e8321155d96a090f56f85aea1ef456c5f58d0a5f38a6a7021bfaea2379 /usr/bin/objdump
|
||||
e49bba1ea6a61fb90f754e8de4692ed0810e7c68429f0b22fbf37670607a7807 /usr/bin/od
|
||||
06e5089e14fa1b5413892b0f4ecc6fb9734ba0f59f6ba9506877d31b1c4ac653 /usr/bin/ranlib
|
||||
a24dd433dfad44c3045b512d8e4170e2fec309bbf66ddd6ac501709749d19920 /usr/bin/readelf
|
||||
ca55356ddddd58ac146a5073f114019354eccbfb761fd800265717c986b57d87 /usr/bin/size
|
||||
856a22fda1db00fb3ab785fd7255ba5e1d3389ae691327304ded03f19bb1af9e /usr/bin/strings
|
||||
66a92ba55f92b3db2b1229ced0144192ac4f3b36ba3d4fd0a2011c2fbd8127a2 /usr/bin/strip
|
||||
97ed2674127a3ff1201ee2b69bcd336a3e7f9396b58f0264d6cd6f08e3908e43 /usr/lib/musl/libbfd.a
|
||||
e1636c430ebe933462df742d9eec18e0e8ba73dafde763429a6b63ff70612afc /usr/lib/musl/libbfd.la
|
||||
8bfe163be82996810f105bcd158f9a207c61438db7a7c58306cfd80f2462c35a /usr/lib/musl/libiberty.a
|
||||
d39bbca00ea43af8a80d0b3f7e2aaabee1e571dd976d17ded01c5972fb5b4ff8 /usr/lib/musl/libopcodes.a
|
||||
3cb39a86c59f72affc6defe90d4e3c585ffedeb47a8f9bfc015be9b85a04ff7a /usr/lib/musl/libopcodes.la
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
5f32418b2681b9c26a845689d9761f0c28bbaadce32c58d6b203f4ad8ebe0234 /image/bin/bison-2.3
|
|
@ -1 +1 @@
|
|||
375c28f9c28072578cf423cb7e090a083beb142759ab5ea2e22a6f8c196e23c6 /image/bin/bison
|
||||
bf1386d70d56dd169e97bdeaa6282592de830d0e262db59de0451adfd0f9125b /usr/bin/bison
|
||||
|
|
|
@ -1 +1 @@
|
|||
6045f624843821108ebaf808e7e6abebb17a7353562e41c2514422035b8bd7c7 /image/bin/bison
|
||||
253ee303e001ee8faa25066e8259595e5dd85209aa1ec947c58a6880d7d86e1b /usr/bin/bison
|
||||
|
|
|
@ -1 +1 @@
|
|||
48f41785497a059ae4a565161f4b7226016055803a7c19bbe7600c67d3085550 /image/bin/bison
|
||||
dd14d6c43beb638a389e91d967589b193d0faf80572db044464440835f1040c6 /usr/bin/bison
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// SPDX-FileCopyrightText: 2020 Andrius Štikonas <andrius@stikonas.eu>
|
||||
// SPDX-FileCopyrightText: 2021 fosslinux <fosslinux@aussies.space>
|
||||
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
@ -9,7 +10,7 @@
|
|||
#define HAVE_SNPRINTF 1
|
||||
#define HAVE_STDINT_H 1
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define M4 "/image/bin/m4"
|
||||
#define M4 "/usr/bin/m4"
|
||||
#define M4_GNU_OPTION ""
|
||||
#define PACKAGE "bison"
|
||||
#define PACKAGE_BUGREPORT "bug-bison@gnu.org"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// SPDX-FileCopyrightText: 2020 Andrius Štikonas <andrius@stikonas.eu>
|
||||
// SPDX-FileCopyrightText: 2021 fosslinux <fosslinux@aussies.space>
|
||||
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#define LOCALEDIR "/image/share/locale"
|
||||
#define PKGDATADIR "/image/share/bison"
|
||||
#define LOCALEDIR "/usr/share/locale"
|
||||
#define PKGDATADIR "/usr/share/bison"
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
7659e6caa1c0f82722bc2d80b614a1fa500e531ce0f359c3a813b742738ad7c6 /image/bin/bison
|
|
@ -1 +1 @@
|
|||
053a7c3080ab19303bc6610ee6d7af2acd69c19d7d74554cfa3d912fa7feb537 /image/bin/bzip2
|
||||
6e93edb69a8089d5f0bd20ac29acf2ed1454c0bcb97e9aed085757b02f0f3756 /usr/bin/bzip2
|
||||
|
|
|
@ -1 +1 @@
|
|||
9bf6c960e7862cbe451e07fc80fc63b802962d981d39842c84ee133dc441bf08 /image/bin/bzip2
|
||||
9275f8bbefcb9ac683663c9eeaf575f1fe8c2a354de69791a039164807c1a436 /usr/bin/bzip2
|
||||
|
|
|
@ -1,54 +1,54 @@
|
|||
113a08baeaaaafd87295806756a5b5eee73a55347e86b4930e01c15d7220f74b /image/bin/install
|
||||
f6dd08d95b1ecdd32c7804afa226d734fb4efbe54e67532023deb3a95df2899d /image/bin/basename
|
||||
8bf26dadc87990c5ec5fe6551145049d52ded48640ce7ac47b05b458ff870cfa /image/bin/cat
|
||||
3cfdf2a0f1db912f1daa3015ceb99689f51970196c85a049a3e098bd96271b20 /image/bin/chmod
|
||||
994197dd07610b44608b388242c70adb9ec49bb2a643dcfdfb1e105529c2e379 /image/bin/cksum
|
||||
78c1187c2ce90fe24acc739eeb159363de70e06e239bac3ea096ee1cf3f9d273 /image/bin/cp
|
||||
a09aeffc07c868076aa034fd1650f8faca703379aa31d5b5fd911adf98901c82 /image/bin/csplit
|
||||
e3149e91b206a83b4e7341b5df6ddefddfe04be4b9859642b23e2ee684de0e2d /image/bin/cut
|
||||
39713a15ea9b4a46d01f8d0a2ca99fe83acab34980442cf4e26d0c495e63acd3 /image/bin/echo
|
||||
b9b229f0cfe7c2077c7f1ce30b91d07ae02794bb52520367053e4c5dae815617 /image/bin/expand
|
||||
79f91e16249f8f595fb4dd68a05413c8f28bd3a15f25ed07d602b504f745b33f /image/bin/factor
|
||||
a7071f0800ed49164535244ac82e6288ca7f4c9ef119ce722e809c965feba43e /image/bin/false
|
||||
c7c581160a28eaea971e1333b19e07b81e98897a251f05f8fe5fd1fd2c89ad2a /image/bin/fmt
|
||||
bfdeeba7192725dc6f5b4084f73e42d518a05900af05a062b4862fcb3b7a5a0d /image/bin/fold
|
||||
b914fce359292bd4134af0d0086c4d5920a6482e784c60483c60daa86ba3e2ca /image/bin/head
|
||||
142cd716a75921fc3d4f824c75515147f12b53e83f0a89a09f17aaaeaa9b1543 /image/bin/id
|
||||
890bd5186317a1da5309881ad12426e45144b059436b7045a18ab670ac34585b /image/bin/join
|
||||
c8d87edb84146d2c536be5cea326b5fe456eb9fb39511f535312e52577d1c229 /image/bin/kill
|
||||
5c827dc96610836ec41ced32fdff18584dfa7380431cf5f99960effcec16b6da /image/bin/link
|
||||
75da5a77d612a6c9ab2c63f52e0c53613917b46f243a6ca78a15edc1ab2322d2 /image/bin/ln
|
||||
e74bc32191c7f53b659c7b1937d9799e7e56a71f0d68a00a085df99d900ac71a /image/bin/logname
|
||||
fc1b745d7b10d84445fe6f4a42cb1893827f13029eb5ba93568c4668182ef0c3 /image/bin/mkfifo
|
||||
2aaba60b28b63c8fe0199202a364327bb235fb628424c70d85ddf1b011a603b9 /image/bin/mkdir
|
||||
541dfb8cddfc66fe7e2628012c6557d34eb071312af6ad9178c14ab374970ea0 /image/bin/mknod
|
||||
95cf6269ae7608960bf1eb1062cd8f1f9981534b8e66449c3076c2b270f02970 /image/bin/nl
|
||||
82109de6321e241128763333ba7e32db91d6fd07124dd3198fdd80f5c8679cf5 /image/bin/od
|
||||
89537a3ff8d001059b2875e49b02e64f5cc9e70ee0053b1407c9e13a949097cf /image/bin/paste
|
||||
876bf7b6743fb7a8b9967f9f8ae0ce7deabe9a109b5d8655e2042435c8dc9141 /image/bin/pathchk
|
||||
249eb2c58d2e82bc38a008c3fa6da4ece2c56f198396901ffb4667cd55bd6d29 /image/bin/printf
|
||||
0c7b355b1b81093b740efd5afdec417f1902edb3c4c7335320ad371aa67e66a5 /image/bin/ptx
|
||||
a5a7d59c3daddcd12a5a1f69710f970fba40f319baa6e8a2d7ee6da55936d046 /image/bin/pwd
|
||||
bb5be58fc44331fedc405f28d6bf9014105376db48ab6921de4468c26868b0cd /image/bin/readlink
|
||||
cf83e7cf46b52440d593d08c03859bf2354affd3d184d4975fb4d1ba0a9b5260 /image/bin/rmdir
|
||||
ed0e8f05df2f9a757a783a783d4d5efc4fc85d5f5ade8b61b6c32bd64047eaaf /image/bin/seq
|
||||
3a839fe7e32dff6a2597390660beb10ee15eabd2d1fe4531a58eed035fa0db5f /image/bin/sleep
|
||||
978bab078ddc398c8617697143265b5c0791d74730895243e11f30f208389095 /image/bin/split
|
||||
ee8532ca989f75ec263121c20f13474ad73aafa503bb2ae2f785708b0244c329 /image/bin/sum
|
||||
40d71b38897a5ceacd45a4c49a2d84dab4d175fff4e7fcf98785c31d2ec715f2 /image/bin/tail
|
||||
cb8ff79e7566d6fbfe0c5d384163585306a9ef7e9e525fea0bf0c8a5c2af8238 /image/bin/tee
|
||||
6ab10d4a009e2b134c7e854f2561da93d74b95701d538659284d5035bc88ff89 /image/bin/tr
|
||||
062e387534cc7661b11346524f84e38f5e64a4326819377b9bc3aa675fb6a409 /image/bin/tsort
|
||||
07103fb0d194c01576894c800eecc3be9588103e93c6e8b9c0e6063fb9dde5af /image/bin/unexpand
|
||||
054c7b8ef262065dc965b885baa858602165609322196515a6e9415b0f9a21e5 /image/bin/unlink
|
||||
545d17edd4994ab9d405b27b0ebd5d9ef1e3d4c1c172bc5c47112a740ce88e15 /image/bin/wc
|
||||
9464990ed84759efab8bc3b5b67cf6f77c03ccf988bbe6e571a12ea3d6b01cd9 /image/bin/whoami
|
||||
060e30b58112feba89aa3b90506d7c8f532837ab339b45f351ebe4a39aa36049 /image/bin/test
|
||||
0d1e615de04e3d99b5cfd9b86eac332113227eb87707e025748ddde134720596 /image/bin/touch
|
||||
af3a6577c63e79cd2bbabd3c966790ef006c2d5d2584573ba91667d45f80fec3 /image/bin/true
|
||||
0321a3302b2883914612d9e3dad00e5f338e5c9541651ef293bb38503a9ae39c /image/bin/yes
|
||||
84dd2d7cb8216eceaa3d53886832034c1b68f174239fe51adb68e2ec45901610 /image/bin/ls
|
||||
acb87cf7d9c1be94dde273bf3f9ab21115ff86a1cc783963dd7571729c4a82e8 /image/bin/md5sum
|
||||
039aa7005ce1280641e9828ea407e1e80994176a5c546d3bc6f88fd8d34f79c5 /image/bin/mv
|
||||
ba5655e1ae7be5b5655513b19d03d385840c707528bd0baa907dc2b117d35d97 /image/bin/rm
|
||||
330d475015d0d78af61789f44d636b14082d64a64dd7faf481677c014fb5a606 /image/bin/sha1sum
|
||||
113a08baeaaaafd87295806756a5b5eee73a55347e86b4930e01c15d7220f74b /usr/bin/install
|
||||
f6dd08d95b1ecdd32c7804afa226d734fb4efbe54e67532023deb3a95df2899d /usr/bin/basename
|
||||
8bf26dadc87990c5ec5fe6551145049d52ded48640ce7ac47b05b458ff870cfa /usr/bin/cat
|
||||
3cfdf2a0f1db912f1daa3015ceb99689f51970196c85a049a3e098bd96271b20 /usr/bin/chmod
|
||||
994197dd07610b44608b388242c70adb9ec49bb2a643dcfdfb1e105529c2e379 /usr/bin/cksum
|
||||
78c1187c2ce90fe24acc739eeb159363de70e06e239bac3ea096ee1cf3f9d273 /usr/bin/cp
|
||||
a09aeffc07c868076aa034fd1650f8faca703379aa31d5b5fd911adf98901c82 /usr/bin/csplit
|
||||
e3149e91b206a83b4e7341b5df6ddefddfe04be4b9859642b23e2ee684de0e2d /usr/bin/cut
|
||||
39713a15ea9b4a46d01f8d0a2ca99fe83acab34980442cf4e26d0c495e63acd3 /usr/bin/echo
|
||||
b9b229f0cfe7c2077c7f1ce30b91d07ae02794bb52520367053e4c5dae815617 /usr/bin/expand
|
||||
79f91e16249f8f595fb4dd68a05413c8f28bd3a15f25ed07d602b504f745b33f /usr/bin/factor
|
||||
a7071f0800ed49164535244ac82e6288ca7f4c9ef119ce722e809c965feba43e /usr/bin/false
|
||||
c7c581160a28eaea971e1333b19e07b81e98897a251f05f8fe5fd1fd2c89ad2a /usr/bin/fmt
|
||||
bfdeeba7192725dc6f5b4084f73e42d518a05900af05a062b4862fcb3b7a5a0d /usr/bin/fold
|
||||
b914fce359292bd4134af0d0086c4d5920a6482e784c60483c60daa86ba3e2ca /usr/bin/head
|
||||
142cd716a75921fc3d4f824c75515147f12b53e83f0a89a09f17aaaeaa9b1543 /usr/bin/id
|
||||
890bd5186317a1da5309881ad12426e45144b059436b7045a18ab670ac34585b /usr/bin/join
|
||||
c8d87edb84146d2c536be5cea326b5fe456eb9fb39511f535312e52577d1c229 /usr/bin/kill
|
||||
5c827dc96610836ec41ced32fdff18584dfa7380431cf5f99960effcec16b6da /usr/bin/link
|
||||
75da5a77d612a6c9ab2c63f52e0c53613917b46f243a6ca78a15edc1ab2322d2 /usr/bin/ln
|
||||
e74bc32191c7f53b659c7b1937d9799e7e56a71f0d68a00a085df99d900ac71a /usr/bin/logname
|
||||
fc1b745d7b10d84445fe6f4a42cb1893827f13029eb5ba93568c4668182ef0c3 /usr/bin/mkfifo
|
||||
2aaba60b28b63c8fe0199202a364327bb235fb628424c70d85ddf1b011a603b9 /usr/bin/mkdir
|
||||
541dfb8cddfc66fe7e2628012c6557d34eb071312af6ad9178c14ab374970ea0 /usr/bin/mknod
|
||||
95cf6269ae7608960bf1eb1062cd8f1f9981534b8e66449c3076c2b270f02970 /usr/bin/nl
|
||||
82109de6321e241128763333ba7e32db91d6fd07124dd3198fdd80f5c8679cf5 /usr/bin/od
|
||||
89537a3ff8d001059b2875e49b02e64f5cc9e70ee0053b1407c9e13a949097cf /usr/bin/paste
|
||||
876bf7b6743fb7a8b9967f9f8ae0ce7deabe9a109b5d8655e2042435c8dc9141 /usr/bin/pathchk
|
||||
0eb7a6d22a2a1daccd547e4f61090bf7a19ed63a3aec64076d9b6b14ad5ac873 /usr/bin/printf
|
||||
0c7b355b1b81093b740efd5afdec417f1902edb3c4c7335320ad371aa67e66a5 /usr/bin/ptx
|
||||
a5a7d59c3daddcd12a5a1f69710f970fba40f319baa6e8a2d7ee6da55936d046 /usr/bin/pwd
|
||||
bb5be58fc44331fedc405f28d6bf9014105376db48ab6921de4468c26868b0cd /usr/bin/readlink
|
||||
cf83e7cf46b52440d593d08c03859bf2354affd3d184d4975fb4d1ba0a9b5260 /usr/bin/rmdir
|
||||
ed0e8f05df2f9a757a783a783d4d5efc4fc85d5f5ade8b61b6c32bd64047eaaf /usr/bin/seq
|
||||
3a839fe7e32dff6a2597390660beb10ee15eabd2d1fe4531a58eed035fa0db5f /usr/bin/sleep
|
||||
978bab078ddc398c8617697143265b5c0791d74730895243e11f30f208389095 /usr/bin/split
|
||||
ee8532ca989f75ec263121c20f13474ad73aafa503bb2ae2f785708b0244c329 /usr/bin/sum
|
||||
40d71b38897a5ceacd45a4c49a2d84dab4d175fff4e7fcf98785c31d2ec715f2 /usr/bin/tail
|
||||
cb8ff79e7566d6fbfe0c5d384163585306a9ef7e9e525fea0bf0c8a5c2af8238 /usr/bin/tee
|
||||
6ab10d4a009e2b134c7e854f2561da93d74b95701d538659284d5035bc88ff89 /usr/bin/tr
|
||||
062e387534cc7661b11346524f84e38f5e64a4326819377b9bc3aa675fb6a409 /usr/bin/tsort
|
||||
07103fb0d194c01576894c800eecc3be9588103e93c6e8b9c0e6063fb9dde5af /usr/bin/unexpand
|
||||
054c7b8ef262065dc965b885baa858602165609322196515a6e9415b0f9a21e5 /usr/bin/unlink
|
||||
545d17edd4994ab9d405b27b0ebd5d9ef1e3d4c1c172bc5c47112a740ce88e15 /usr/bin/wc
|
||||
9464990ed84759efab8bc3b5b67cf6f77c03ccf988bbe6e571a12ea3d6b01cd9 /usr/bin/whoami
|
||||
060e30b58112feba89aa3b90506d7c8f532837ab339b45f351ebe4a39aa36049 /usr/bin/test
|
||||
0d1e615de04e3d99b5cfd9b86eac332113227eb87707e025748ddde134720596 /usr/bin/touch
|
||||
af3a6577c63e79cd2bbabd3c966790ef006c2d5d2584573ba91667d45f80fec3 /usr/bin/true
|
||||
0321a3302b2883914612d9e3dad00e5f338e5c9541651ef293bb38503a9ae39c /usr/bin/yes
|
||||
84dd2d7cb8216eceaa3d53886832034c1b68f174239fe51adb68e2ec45901610 /usr/bin/ls
|
||||
acb87cf7d9c1be94dde273bf3f9ab21115ff86a1cc783963dd7571729c4a82e8 /usr/bin/md5sum
|
||||
039aa7005ce1280641e9828ea407e1e80994176a5c546d3bc6f88fd8d34f79c5 /usr/bin/mv
|
||||
ba5655e1ae7be5b5655513b19d03d385840c707528bd0baa907dc2b117d35d97 /usr/bin/rm
|
||||
330d475015d0d78af61789f44d636b14082d64a64dd7faf481677c014fb5a606 /usr/bin/sha1sum
|
||||
|
|
|
@ -1,60 +1,60 @@
|
|||
fafa676fe85f662f753bb5257ba6575086c6d4d7b8b27a952624db08e136b1ac /image/bin/basename
|
||||
8b4e2b1ea346298b6534894e85cfa3ac4ee9bd1900da1d044a45c366d143dbf0 /image/bin/cat
|
||||
24b11f735c4dcbd28e0defcef6208f419ebb3a7f33a5f7addb41d7df9e021bc1 /image/bin/chmod
|
||||
8dd096b3a2973c4e3652e6bfffc30d2d85e8cb9b7f6cbbb2079cdb00a465589f /image/bin/cksum
|
||||
6e9c29ae39dc9cc13925fe4066ab1867d0623bc704b2b1be6e242dc27b6c8ea1 /image/bin/cp
|
||||
220ee0e1e19ad52403794872fd879619c25e2bf6b22d9616799250f76f8b9960 /image/bin/csplit
|
||||
15eea66971190c390da91bd8537c01b689e1cf24cc96cd256607ef437f07f41d /image/bin/cut
|
||||
567d079e9c0122410284414c0f2db2248e78686b403dabd9c7abd12c20ad9f89 /image/bin/dd
|
||||
c033f4ae4ca47c1ae267d9f983c35366f5bf803b53422a073fbdd60dd3c745a8 /image/bin/dirname
|
||||
0884b23703671535b882cffe99720d18f0f915b9323184dc20c0b7ef1af9ec4b /image/bin/echo
|
||||
4bb7dca4382da61d02331c6785f254e04789e9a26e034fd4bbc40b969bdc81a5 /image/bin/env
|
||||
76932efb69bc33a101a0a72424fc9dd50036b5f3fa09101d2d776a2e8aad7f3d /image/bin/expand
|
||||
aea616aaf5c8c63f564a77d4469cbc49088531920dc927db24c70e8c5872c97b /image/bin/expr
|
||||
6e082caf5494d14d8e8eb0c8284942389198ac0fff8646c08b3136039a8a1579 /image/bin/factor
|
||||
94132ca47c73ec70cc5f817a7d4c3de8ec37f7664564028c6daf27a1f2a75f37 /image/bin/false
|
||||
ee5f43940b667026f2152ccde76f8d09cb99eb8adbea29be782876d236ce3797 /image/bin/fmt
|
||||
5b4b347107c9eea9e984652ab9ebb8ed95a349a717fedc3e523195b69d7383ae /image/bin/fold
|
||||
1b49cc4b6f706c6da74831223c57251298c494b09ebf0e513df9b6536cfa84ab /image/bin/head
|
||||
c2af52d735a708ad30b7d493c19e2ef8a059bfc617af26a1e877077c7a25bf58 /image/bin/id
|
||||
3e9b0e09d1da2ce9f6a2d0f212f6211e9ff53767a60f5fac040488da97da43b7 /image/bin/join
|
||||
3aa7096a22e4056c7ae5329e71965a6e1f5eeb10c471cffd4b86f9de91684588 /image/bin/kill
|
||||
f6d99b9010578b4e3112c70131083c27bfcf731862b021df2995fd5738c52b99 /image/bin/link
|
||||
ae6e4cdad0a792a72674c487f3874f356a49a25d0d11ea0f9b2abdb466494a50 /image/bin/ln
|
||||
576ddcdde28a5d21b953976134f4b89dc0380e5ccfd8c9c489faf44db6d0506f /image/bin/logname
|
||||
cc82a9771ebfc62a744b3b5f8b05d7fe86944ff0e02d1a20ac959421238e19e4 /image/bin/mkfifo
|
||||
20d933c6787e1edfe47c30601e713fd9e6199852c55bb7af608722516aaaf699 /image/bin/mkdir
|
||||
e173f74b72fcfc6b17ae0653a5a88fc36f6ce42bf99e70de4245701bf2a45a50 /image/bin/mknod
|
||||
f98ea6c094c9fda45204d228a58bc52ceba02a8bf6e778e855d434387a43e1cb /image/bin/nl
|
||||
e49bba1ea6a61fb90f754e8de4692ed0810e7c68429f0b22fbf37670607a7807 /image/bin/od
|
||||
9ed0744237c4025a83ee4cc1d4fdf1135e6435899284c6e070b1ceb9b74e0203 /image/bin/paste
|
||||
8b03fcd11aba79282d571d1f8ac3ce8839051e3c059e1895cb05cf660901102b /image/bin/pathchk
|
||||
fda53239b3172ffdcd7989a79dcde19ed27c393c4cc82ba85315ed1a872d2654 /image/bin/printf
|
||||
293e7a730d7f746731deb9614b3afab805a097f9acf917d53e44acc3acd9cb4b /image/bin/ptx
|
||||
fa7ff4f943ca592c623e41a303e697114a420c0a3e5d91c779dfd57ab39b7053 /image/bin/pwd
|
||||
3550aefb0eee8a35b4aa46ac31322687e478cb0f03c833e6924e462963e2b0f5 /image/bin/readlink
|
||||
1543d06fdbe7fe2a28d6f2aa0a4d8ef69d4c06f6fe8ba605933fed51eda8c7fa /image/bin/rmdir
|
||||
291f7fdd7d43fc55da4a50d7c7ba9945568b31602e74fbb3ab94a8b25a039595 /image/bin/seq
|
||||
4b7609bd5da6de314b418be80f1be1a525bb4756efb1e9925f0ae7814c6eedef /image/bin/sleep
|
||||
c40dac27f90c5f793a1ed37e78bd1015e44688dc2179da209b1065d02ed0c6e3 /image/bin/sort
|
||||
5087a0f86f238062a85f2f6ca3e6b33ba6b3c8dd9700e314c1ae3b2af3331409 /image/bin/split
|
||||
533d8a75e4460e37714c50eed989a643dffe08e3ab4f7400b966f2241e28a60f /image/bin/sync
|
||||
35f681f7cc31a895f5c5e0db8b6a3c203b2ed9ce1771503f198614302e42c600 /image/bin/sum
|
||||
7272d4fb3313ad3e19c79393d8785d4b343a915e605332eebbc8f5ac5338e071 /image/bin/tail
|
||||
c2c6fae2cad8e29a75ff3f793ca7d059cc50ea4ee7d55f659e8f2d371f7763d6 /image/bin/tee
|
||||
643d2912f2055e70284ab036d6d154e4667120726486c3a3329fdb5115b452f2 /image/bin/tr
|
||||
75d4e74c03ad027b1b7738e6049ec5c01cfdd7a665ec82e0ecdf921d440e71a0 /image/bin/tsort
|
||||
c7d92d8291578de76afa58f1a1160f3373b5935b6b6f1dca63bd0d3d210ea161 /image/bin/uname
|
||||
0a51c8f6dc3ea15fd439e11a14d7c13d7094457e17129e7f5de51d886ed8f54e /image/bin/unexpand
|
||||
abda7abe33205cda90734216bd3f2cc1dcf859db166d2d6297665a4d178e6bac /image/bin/unlink
|
||||
f033207cf5de1eac8f4726b1926a33759b294050090932a6f7de6a6d98a8f9e8 /image/bin/wc
|
||||
46f35124f00bcee7ec557406228da3abd04239be7b0ef0c10403139f1e0f0dd7 /image/bin/whoami
|
||||
b8942c4ecd012efd53b74a8c5fec424020a7099356c4db017115499016237876 /image/bin/test
|
||||
8bc7be81630efacca243feb8ecdaa97bc1d0b5a4060e0decf96af49875a06b00 /image/bin/true
|
||||
84109c279ed6445c896fe04a397bf66e1f73f74200f8e58477e828aad7e43c92 /image/bin/yes
|
||||
6c2c4baa6e75c00896b01ceb4e2f0ef62b59a7f27184ac1c5bf85f6da2983ae5 /image/bin/install
|
||||
0f5fe59d628457041d4cb66ba6dfa27dd25c959aa65298db914c2524c9927d52 /image/bin/ls
|
||||
3f43cf65e4ea8b713096607ce7b28c835dacaa0d18bb27fd664156b43b02639a /image/bin/md5sum
|
||||
7fbafb8ac8aded995076404ea8c35392c3287a4ae92f7683baf445e321ba1a0c /image/bin/mv
|
||||
5bb0d9ac5acc086b1bbcbd9c2f77f124efcc93e5802194a6aabce05c368b86c4 /image/bin/rm
|
||||
c086a3b03be0da5fb7ffc5d3d666b9b8a340bc74c9d7c208123c55887c371147 /image/bin/sha1sum
|
||||
fafa676fe85f662f753bb5257ba6575086c6d4d7b8b27a952624db08e136b1ac /usr/bin/basename
|
||||
8b4e2b1ea346298b6534894e85cfa3ac4ee9bd1900da1d044a45c366d143dbf0 /usr/bin/cat
|
||||
24b11f735c4dcbd28e0defcef6208f419ebb3a7f33a5f7addb41d7df9e021bc1 /usr/bin/chmod
|
||||
8dd096b3a2973c4e3652e6bfffc30d2d85e8cb9b7f6cbbb2079cdb00a465589f /usr/bin/cksum
|
||||
6e9c29ae39dc9cc13925fe4066ab1867d0623bc704b2b1be6e242dc27b6c8ea1 /usr/bin/cp
|
||||
220ee0e1e19ad52403794872fd879619c25e2bf6b22d9616799250f76f8b9960 /usr/bin/csplit
|
||||
15eea66971190c390da91bd8537c01b689e1cf24cc96cd256607ef437f07f41d /usr/bin/cut
|
||||
567d079e9c0122410284414c0f2db2248e78686b403dabd9c7abd12c20ad9f89 /usr/bin/dd
|
||||
c033f4ae4ca47c1ae267d9f983c35366f5bf803b53422a073fbdd60dd3c745a8 /usr/bin/dirname
|
||||
0884b23703671535b882cffe99720d18f0f915b9323184dc20c0b7ef1af9ec4b /usr/bin/echo
|
||||
4bb7dca4382da61d02331c6785f254e04789e9a26e034fd4bbc40b969bdc81a5 /usr/bin/env
|
||||
76932efb69bc33a101a0a72424fc9dd50036b5f3fa09101d2d776a2e8aad7f3d /usr/bin/expand
|
||||
aea616aaf5c8c63f564a77d4469cbc49088531920dc927db24c70e8c5872c97b /usr/bin/expr
|
||||
6e082caf5494d14d8e8eb0c8284942389198ac0fff8646c08b3136039a8a1579 /usr/bin/factor
|
||||
94132ca47c73ec70cc5f817a7d4c3de8ec37f7664564028c6daf27a1f2a75f37 /usr/bin/false
|
||||
ee5f43940b667026f2152ccde76f8d09cb99eb8adbea29be782876d236ce3797 /usr/bin/fmt
|
||||
5b4b347107c9eea9e984652ab9ebb8ed95a349a717fedc3e523195b69d7383ae /usr/bin/fold
|
||||
1b49cc4b6f706c6da74831223c57251298c494b09ebf0e513df9b6536cfa84ab /usr/bin/head
|
||||
c2af52d735a708ad30b7d493c19e2ef8a059bfc617af26a1e877077c7a25bf58 /usr/bin/id
|
||||
3e9b0e09d1da2ce9f6a2d0f212f6211e9ff53767a60f5fac040488da97da43b7 /usr/bin/join
|
||||
3aa7096a22e4056c7ae5329e71965a6e1f5eeb10c471cffd4b86f9de91684588 /usr/bin/kill
|
||||
f6d99b9010578b4e3112c70131083c27bfcf731862b021df2995fd5738c52b99 /usr/bin/link
|
||||
ae6e4cdad0a792a72674c487f3874f356a49a25d0d11ea0f9b2abdb466494a50 /usr/bin/ln
|
||||
576ddcdde28a5d21b953976134f4b89dc0380e5ccfd8c9c489faf44db6d0506f /usr/bin/logname
|
||||
cc82a9771ebfc62a744b3b5f8b05d7fe86944ff0e02d1a20ac959421238e19e4 /usr/bin/mkfifo
|
||||
20d933c6787e1edfe47c30601e713fd9e6199852c55bb7af608722516aaaf699 /usr/bin/mkdir
|
||||
e173f74b72fcfc6b17ae0653a5a88fc36f6ce42bf99e70de4245701bf2a45a50 /usr/bin/mknod
|
||||
f98ea6c094c9fda45204d228a58bc52ceba02a8bf6e778e855d434387a43e1cb /usr/bin/nl
|
||||
e49bba1ea6a61fb90f754e8de4692ed0810e7c68429f0b22fbf37670607a7807 /usr/bin/od
|
||||
9ed0744237c4025a83ee4cc1d4fdf1135e6435899284c6e070b1ceb9b74e0203 /usr/bin/paste
|
||||
8b03fcd11aba79282d571d1f8ac3ce8839051e3c059e1895cb05cf660901102b /usr/bin/pathchk
|
||||
39c2d96e779d76562fcee782d82488310fa2c4daaaa54b1811f41ac1879d3009 /usr/bin/printf
|
||||
293e7a730d7f746731deb9614b3afab805a097f9acf917d53e44acc3acd9cb4b /usr/bin/ptx
|
||||
fa7ff4f943ca592c623e41a303e697114a420c0a3e5d91c779dfd57ab39b7053 /usr/bin/pwd
|
||||
3550aefb0eee8a35b4aa46ac31322687e478cb0f03c833e6924e462963e2b0f5 /usr/bin/readlink
|
||||
1543d06fdbe7fe2a28d6f2aa0a4d8ef69d4c06f6fe8ba605933fed51eda8c7fa /usr/bin/rmdir
|
||||
291f7fdd7d43fc55da4a50d7c7ba9945568b31602e74fbb3ab94a8b25a039595 /usr/bin/seq
|
||||
4b7609bd5da6de314b418be80f1be1a525bb4756efb1e9925f0ae7814c6eedef /usr/bin/sleep
|
||||
c40dac27f90c5f793a1ed37e78bd1015e44688dc2179da209b1065d02ed0c6e3 /usr/bin/sort
|
||||
5087a0f86f238062a85f2f6ca3e6b33ba6b3c8dd9700e314c1ae3b2af3331409 /usr/bin/split
|
||||
533d8a75e4460e37714c50eed989a643dffe08e3ab4f7400b966f2241e28a60f /usr/bin/sync
|
||||
35f681f7cc31a895f5c5e0db8b6a3c203b2ed9ce1771503f198614302e42c600 /usr/bin/sum
|
||||
7272d4fb3313ad3e19c79393d8785d4b343a915e605332eebbc8f5ac5338e071 /usr/bin/tail
|
||||
c2c6fae2cad8e29a75ff3f793ca7d059cc50ea4ee7d55f659e8f2d371f7763d6 /usr/bin/tee
|
||||
643d2912f2055e70284ab036d6d154e4667120726486c3a3329fdb5115b452f2 /usr/bin/tr
|
||||
75d4e74c03ad027b1b7738e6049ec5c01cfdd7a665ec82e0ecdf921d440e71a0 /usr/bin/tsort
|
||||
c7d92d8291578de76afa58f1a1160f3373b5935b6b6f1dca63bd0d3d210ea161 /usr/bin/uname
|
||||
0a51c8f6dc3ea15fd439e11a14d7c13d7094457e17129e7f5de51d886ed8f54e /usr/bin/unexpand
|
||||
abda7abe33205cda90734216bd3f2cc1dcf859db166d2d6297665a4d178e6bac /usr/bin/unlink
|
||||
f033207cf5de1eac8f4726b1926a33759b294050090932a6f7de6a6d98a8f9e8 /usr/bin/wc
|
||||
46f35124f00bcee7ec557406228da3abd04239be7b0ef0c10403139f1e0f0dd7 /usr/bin/whoami
|
||||
b8942c4ecd012efd53b74a8c5fec424020a7099356c4db017115499016237876 /usr/bin/test
|
||||
8bc7be81630efacca243feb8ecdaa97bc1d0b5a4060e0decf96af49875a06b00 /usr/bin/true
|
||||
84109c279ed6445c896fe04a397bf66e1f73f74200f8e58477e828aad7e43c92 /usr/bin/yes
|
||||
6c2c4baa6e75c00896b01ceb4e2f0ef62b59a7f27184ac1c5bf85f6da2983ae5 /usr/bin/install
|
||||
0f5fe59d628457041d4cb66ba6dfa27dd25c959aa65298db914c2524c9927d52 /usr/bin/ls
|
||||
3f43cf65e4ea8b713096607ce7b28c835dacaa0d18bb27fd664156b43b02639a /usr/bin/md5sum
|
||||
7fbafb8ac8aded995076404ea8c35392c3287a4ae92f7683baf445e321ba1a0c /usr/bin/mv
|
||||
5bb0d9ac5acc086b1bbcbd9c2f77f124efcc93e5802194a6aabce05c368b86c4 /usr/bin/rm
|
||||
c086a3b03be0da5fb7ffc5d3d666b9b8a340bc74c9d7c208123c55887c371147 /usr/bin/sha1sum
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
98124acfaf5cd8c1795d9557455607fb157a514867de5b908a9a3c8d00d88717 /image/bin/date
|
||||
fe8a8a6d39e35ca2d980ac0dfb57204f34c34aa2ec543bc15f93ff80bcbbd38a /image/bin/mktemp
|
||||
40289b9aae91f72a7d44bbc93616dcf2397b60d2532b549d053f3ce9b1040119 /image/bin/sha256sum
|
||||
98124acfaf5cd8c1795d9557455607fb157a514867de5b908a9a3c8d00d88717 /usr/bin/date
|
||||
fe8a8a6d39e35ca2d980ac0dfb57204f34c34aa2ec543bc15f93ff80bcbbd38a /usr/bin/mktemp
|
||||
40289b9aae91f72a7d44bbc93616dcf2397b60d2532b549d053f3ce9b1040119 /usr/bin/sha256sum
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
|
||||
# SPDX-FileCopyrightText: 2021 Paul Dersey <pdersey@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2021 fosslinux <fosslinux@aussies.space>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
@ -48,7 +49,7 @@ CFLAGS = -I . -I lib \
|
|||
-DHAVE_LOCALE_H=1 \
|
||||
-DTIME_WITH_SYS_TIME=1 \
|
||||
-DHAVE_STDINT_H=1 \
|
||||
-DLIBDIR=\"/image/lib\" \
|
||||
-DLIBDIR=\"/usr/lib\" \
|
||||
-DHAVE_DECL_WCWIDTH=0 \
|
||||
-DHAVE_SYS_STAT_H=1 \
|
||||
-DHAVE_INTTYPES_H=1 \
|
||||
|
|
|
@ -1,107 +0,0 @@
|
|||
4b1cb2c39577f107feb8def55982f789594ed26cac2440dbd794d0efc1060113 /image/bin/[
|
||||
226c2c0185f322f375bcdc0723fd306b2b68fe532168926b19fc90de4be3db60 /image/bin/b2sum
|
||||
9c4fe4ce411f086c3daaa0e85a96d15214482e1e8cbe66286594dc02620ddd97 /image/bin/base32
|
||||
fd6dcb61a183b9a0342276f77a310a4faf14b20e9aa58c8d9755d49db263aba3 /image/bin/base64
|
||||
fe7d1f2f778a2e4f1cb100e901472cdbf50bb66ed0e64ef0e0899198e9795464 /image/bin/basename
|
||||
40abb4ddaee9f983a38599d1a11816fe376a842e09194bd0c3708afc20185cb0 /image/bin/basenc
|
||||
5921f992032733277031c65ba4b5ac03a2168d731c90513e2cffd2f6defc013e /image/bin/cat
|
||||
cd2187495f4f5adf59e48b62ad92d01c8d7c8b3d4f5bb76fc7c790217ab9bcce /image/bin/chcon
|
||||
944e56b469d9dca8e888b0a6a8bb90d126279e6a19a40e71c077ce6fe668c0a2 /image/bin/chgrp
|
||||
6e7aa98b4f221282e1fef34d8e266239e095ee9c7e76847e3a91412ba2c0b7c8 /image/bin/chmod
|
||||
453cb0c1cba85966823d91dfcb79fe494736839656bd757b790de7c3b1403d8c /image/bin/chown
|
||||
6b90b8354b9fe3c8804384a8c028f01b6b04df764c3af5e8a8fbe1fa38aeca0c /image/bin/chroot
|
||||
1cf4e54e3bf96739b5cd184dad44f40ed19f3a8b0aafd19f72997cef9b473db6 /image/bin/cksum
|
||||
786a7661c0ab957e276218acdffc2b6dcbca521267b3857b7b9920e80da83fe1 /image/bin/comm
|
||||
8e1ef24a88b8e032c2e1af3186a206212e8939fe011ff9c6fe278bbae5536d47 /image/bin/cp
|
||||
d46f3c060d5edbea25a2fcf7c65dcbeed3d0084eb2f1a15c1b8f8eeed6642d67 /image/bin/csplit
|
||||
fb8faa5610e38b9e3c186aa9cdfcbe7ca07809c3569e3dafe3890678c36ebeac /image/bin/cut
|
||||
8146b6270016150120854b3eec6382d52d44e72f80abbde00c6c8238a78839b6 /image/bin/date
|
||||
2d70f5bda07a63a645db04b7c0908ca96873f075e8a1d89422b90f48bffb04fa /image/bin/dd
|
||||
7831d760c20670064963fa41b0939ac19932d8b04a4c7b56aabfd4d917962675 /image/bin/df
|
||||
44499ede5dc7080ffb123b87645b5c8a3b9b53bef1c2e0edd93e810d3d9a3d12 /image/bin/dir
|
||||
5601dc48fe224812071c2c1de6a73223aaf90921ec90c6575596f4fbeb92a570 /image/bin/dircolors
|
||||
2ba169c8791696adc37779dcc35eb689af5bebce3ea05ba46d3c1b667dc6bc04 /image/bin/dirname
|
||||
ce57fade16775a802e3b14643dd3e2d41db8bd6fe8a5005cc8ba2290c9d2be91 /image/bin/du
|
||||
1613e25b9b8ead7db666b9c77ec0e4f37239a5d847bb475ba89881231e8050c9 /image/bin/echo
|
||||
bb822886e49633840975978af4cada542a951522ac753dfc0b67b5054d5be0d8 /image/bin/env
|
||||
7240ea8a4139df493be025d41503d827c64b6051ac3651c0d2448694991f4051 /image/bin/expand
|
||||
10e7908eda22cf34ae2fb7b578497c60aca01adb9b93865af4b24659ed4731ad /image/bin/expr
|
||||
f21cd98cbae3c93ba86893cbde49177f068b097aa75b9dad63bc233b8c0eff55 /image/bin/factor
|
||||
2e31dcb31b02e1665d95948ef9fba420c3d03f77f15314b8dc39b82e09112821 /image/bin/false
|
||||