live-bootstrap/sysa/run.sh

262 lines
5.6 KiB
Bash
Raw Normal View History

2021-01-29 01:31:56 +00:00
#!/bin/bash
# SPDX-FileCopyrightText: 2022 Andrius Štikonas <andrius@stikonas.eu>
# SPDX-FileCopyrightText: 2021-22 fosslinux <fosslinux@aussies.space>
# SPDX-FileCopyrightText: 2021 Paul Dersey <pdersey@gmail.com>
#
2021-01-29 01:31:56 +00:00
# SPDX-License-Identifier: GPL-3.0-or-later
set -e
# shellcheck source=sysa/helpers.sh
2021-01-29 01:31:56 +00:00
. helpers.sh
2022-04-07 00:14:52 +01:00
# shellcheck disable=SC2154
export PREFIX="${prefix}"
# shellcheck disable=SC2154
export SOURCES="${sysa}"
export DISTFILES="${sysa}/distfiles"
2022-04-07 00:14:52 +01:00
export DESTDIR=/tmp/destdir
# shellcheck disable=SC2154
export SRCDIR="${srcdir}"
create_sysb() {
# Copy everything in
echo "Creating sysb rootfs"
2022-04-07 00:14:52 +01:00
mkdir -p "/sysb${PREFIX}"
for d in bin include lib libexec share src; do
# Minimise RAM (storage) use - use hard links
2022-04-07 00:14:52 +01:00
cp -rl "${PREFIX}/${d}" "/sysb${PREFIX}/${d}"
done
cp "${SOURCES}/helpers.sh" "${SOURCES}/SHA256SUMS.pkgs" "${SOURCES}/bootstrap.cfg" "/sysb/${SRCDIR}"
populate_device_nodes /sysb
echo "Creating sysb initramfs"
gen_initramfs_list.sh -o "${PREFIX}/boot/initramfs-sysb.cpio.gz" /sysb
rm -rf /sysb # Cleanup
}
go_sysb() {
# Mount proc for kexec
mkdir /proc /etc
mount -t proc proc /proc
# kexec time
echo "Loading kernel + sysb initramfs using kexec"
Update the linux kernel for sysb/c to 4.9.10. - We do not use latest 4.9.x because it relies on a new version of binutils, while older versions do not. (Note: we should be able to go a bit newer but I didn't bother testing >50 versions to figure this out). - We do not use newer kernel versions because they require one or more of (new perl, new binutils, new make, new gcc, new bison, new tar). - sysb and sysc are updated to use the SATA (libata) subsystem (aka sda) instead of IDE-emulating SATA subsystem (aka hda) which is now available to us. - While theoretically according to docs 4.9 should work OOTB with our version of binutils this is not the case, so we have to do a bit of (interesting) patching. But this does not break anything. - Thankfully serial support in 4.9 is not screwed over like it is in 2.6 so we can revert to that. - 4.9 has the linux-libre project at our disposal, instead of gNewSense. So we use this. Unfortunatley that takes forever because we have to use sed because our version of gawk is too old/buggy. :( I plan to introduce very shortly 1. parallelism 2. 'sysc snapshot' which will start from sysc to avoid this. I do not want to use linux-libre tarballs because they make modificiations directly from this script (aka not easily verifiable, use the source!) and this script allows for much greater flexibility. - We compile the initramfs ahead-of-build using the in-tree cpio generator instead of also building cpio to use less packages. We do NOT build the initramfs into the kernel like 2.6 (unsupported). - Oh and fix a kexec-tools checksum.
2021-08-04 03:56:07 +01:00
kexec -l "${PREFIX}/boot/linux-4.9.10" --console-serial \
--initrd="${PREFIX}/boot/initramfs-sysb.cpio.gz" \
Update the linux kernel for sysb/c to 4.9.10. - We do not use latest 4.9.x because it relies on a new version of binutils, while older versions do not. (Note: we should be able to go a bit newer but I didn't bother testing >50 versions to figure this out). - We do not use newer kernel versions because they require one or more of (new perl, new binutils, new make, new gcc, new bison, new tar). - sysb and sysc are updated to use the SATA (libata) subsystem (aka sda) instead of IDE-emulating SATA subsystem (aka hda) which is now available to us. - While theoretically according to docs 4.9 should work OOTB with our version of binutils this is not the case, so we have to do a bit of (interesting) patching. But this does not break anything. - Thankfully serial support in 4.9 is not screwed over like it is in 2.6 so we can revert to that. - 4.9 has the linux-libre project at our disposal, instead of gNewSense. So we use this. Unfortunatley that takes forever because we have to use sed because our version of gawk is too old/buggy. :( I plan to introduce very shortly 1. parallelism 2. 'sysc snapshot' which will start from sysc to avoid this. I do not want to use linux-libre tarballs because they make modificiations directly from this script (aka not easily verifiable, use the source!) and this script allows for much greater flexibility. - We compile the initramfs ahead-of-build using the in-tree cpio generator instead of also building cpio to use less packages. We do NOT build the initramfs into the kernel like 2.6 (unsupported). - Oh and fix a kexec-tools checksum.
2021-08-04 03:56:07 +01:00
--append="init=/init console=ttyS0"
echo "kexecing into sysb"
kexec -e
2021-02-27 12:22:22 +00:00
}
# Ask some questions
echo
echo "Now that bash has been built, there are potentially some questions for you!"
echo "To give your answer, type your answer, press Enter, and then Control-D."
echo
ask_chroot() {
read -r CHROOT_STRING
if [ "${CHROOT_STRING}" = "yes" ] || [ "${CHROOT_STRING}" = "y" ]; then
CHROOT=True
elif [ "${CHROOT_STRING}" = "no" ] || [ "${CHROOT_STRING}" = "n" ]; then
CHROOT=False
else
echo "Invalid response. Please give a yes/no answer."
ask_chroot
fi
}
if [ -z "${CHROOT}" ]; then
echo "Currently, it is unknown if live-bootstrap is running in a chroot"
echo "or not. Is it? (yes/no answer)"
ask_chroot
echo
echo "CHROOT=${CHROOT}" >> "${SOURCES}/bootstrap.cfg"
fi
ask_timestamps() {
read -r TIMESTAMPS_STRING
if [ "${TIMESTAMPS_STRING}" = "yes" ] || [ "${TIMESTAMPS_STRING}" = "y" ]; then
FORCE_TIMESTAMPS=True
elif [ "${TIMESTAMPS_STRING}" = "no" ] || [ "${TIMESTAMPS_STRING}" = "n" ]; then
FORCE_TIMESTAMPS=False
else
echo "Invalid response. Please give a yes/no answer."
ask_timestamps
fi
}
if [ -z "${FORCE_TIMESTAMPS}" ]; then
echo "Would you like all timestamps to be set to unix time 0"
echo "(Jan 1 1970 00:00) at the end of the bootstrap? This makes a"
echo "fully reproducible disk image. (yes/no answer)"
ask_timestamps
echo
echo "FORCE_TIMESTAMPS=${FORCE_TIMESTAMPS}" >> "${SOURCES}/bootstrap.cfg"
fi
echo "Thank you! All done."
echo "ARCH=${ARCH}" >> "${SOURCES}/bootstrap.cfg"
mkdir -p "${DESTDIR}" "${SRCDIR}/repo" /dev
2021-02-07 15:39:42 +00:00
build flex-2.5.11
2021-01-29 01:31:56 +00:00
2022-05-04 19:32:45 +01:00
build musl-1.1.24
2021-01-28 18:53:44 +00:00
# Rebuild tcc using musl
2022-05-04 19:32:45 +01:00
build tcc-0.9.27 tcc-musl-pass1.sh
2021-02-01 01:09:24 +00:00
# Rebuild musl using tcc-musl
2022-05-04 19:32:45 +01:00
build musl-1.1.24
2021-02-03 00:16:39 +00:00
# Rebuild tcc-musl using new musl
2022-05-04 19:32:45 +01:00
build tcc-0.9.27 tcc-musl-pass2.sh
2021-03-11 18:12:52 +00:00
# Rebuild sed using musl
2022-05-04 19:32:45 +01:00
build sed-4.0.9 sed-4.0.9.sh
2021-03-11 18:12:52 +00:00
# Rebuild bzip2 using musl
2022-05-04 19:32:45 +01:00
build bzip2-1.0.8 bzip2-1.0.8.sh
build m4-1.4.7
build flex-2.6.4
2022-05-04 19:32:45 +01:00
build bison-3.4.1 stage1.sh
build bison-3.4.1 stage2.sh
build bison-3.4.1 stage3.sh
2021-02-04 21:41:43 +00:00
2021-02-10 18:06:40 +00:00
build grep-2.4
2021-02-06 00:16:32 +00:00
build diffutils-2.7
# Rebuild coreutils using musl
build coreutils-5.0 coreutils-5.0.sh patches-musl
# Build only date, mktemp and sha256sum
build coreutils-6.10
2021-02-28 20:53:20 +00:00
2021-02-11 09:22:12 +00:00
build gawk-3.0.4
build perl-5.000
2021-02-14 15:36:05 +00:00
build perl-5.003
2021-02-16 23:20:34 +00:00
2022-05-04 19:32:45 +01:00
build perl5.004-05 '' '' perl5.004_05
2021-02-17 23:46:18 +00:00
2022-05-04 19:32:45 +01:00
build perl5.005-03 '' '' perl5.005_03
2021-02-18 23:19:09 +00:00
2021-02-24 01:02:10 +00:00
build perl-5.6.2
2021-02-27 12:22:22 +00:00
populate_device_nodes
2021-02-27 17:35:02 +00:00
build autoconf-2.52 stage1.sh
2021-02-21 21:09:47 +00:00
2021-03-17 00:24:37 +00:00
build automake-1.6.3 stage1.sh
build automake-1.6.3 stage2.sh
build automake-1.6.3 stage3.sh
build automake-1.4-p6
2021-02-27 17:08:17 +00:00
2021-02-27 17:35:02 +00:00
build autoconf-2.52 stage2.sh
2021-02-27 20:07:04 +00:00
build autoconf-2.13
2021-02-27 22:42:23 +00:00
build autoconf-2.12
2021-03-25 19:14:34 +00:00
build libtool-1.4
2021-03-12 00:28:29 +00:00
2021-02-24 14:38:10 +00:00
build binutils-2.14
2021-03-03 00:05:33 +00:00
# Build musl with fewer patches
2022-05-04 19:32:45 +01:00
build musl-1.1.24 binutils-rebuild.sh patches-pass3
2021-03-03 00:05:33 +00:00
2021-03-03 00:54:17 +00:00
# Rebuild tcc-musl using new musl
2022-05-04 19:32:45 +01:00
build tcc-0.9.27 tcc-musl-pass3.sh patches-musl-pass3
populate_device_nodes
2021-03-03 00:54:17 +00:00
2021-03-17 22:17:11 +00:00
build autoconf-2.53 stage1.sh
build autoconf-2.53 stage2.sh
2021-03-18 00:23:40 +00:00
build automake-1.7 stage1.sh
build autoconf-2.54 stage1.sh
build autoconf-2.54 stage2.sh
build automake-1.7 stage2.sh
2021-03-18 17:47:12 +00:00
build autoconf-2.55
2021-03-18 19:25:50 +00:00
build automake-1.7.8
2021-03-18 19:33:54 +00:00
build autoconf-2.57
2021-03-18 19:37:07 +00:00
build autoconf-2.59
2021-03-18 19:53:06 +00:00
build automake-1.8.5
2021-03-19 15:40:07 +00:00
build help2man-1.36.4
2021-03-19 20:00:43 +00:00
build autoconf-2.61 stage1.sh
build autoconf-2.61 stage2.sh
2021-03-21 16:10:53 +00:00
build automake-1.9.6 stage1.sh
build automake-1.9.6 stage2.sh
2021-03-25 17:52:31 +00:00
build findutils-4.2.33
2021-03-25 19:14:34 +00:00
build libtool-2.2.4
2021-03-25 20:39:08 +00:00
build automake-1.10.3
2021-06-30 18:43:33 +01:00
build autoconf-2.64
2021-03-25 21:35:43 +00:00
2022-05-04 19:32:45 +01:00
build gcc-4.0.4 pass1.sh
2021-03-21 16:10:53 +00:00
# This hack fixes a strange bug in mes libc bash
set -x
2022-05-04 19:32:45 +01:00
build linux-headers-5.10.41 '' '' linux-5.10.41
set +x
2022-05-12 00:41:17 +01:00
build musl-1.2.3
2021-03-21 16:10:53 +00:00
2022-05-04 19:32:45 +01:00
build gcc-4.0.4 pass2.sh
2021-03-21 16:10:53 +00:00
2021-08-04 03:45:39 +01:00
build util-linux-2.19.1
2021-06-22 11:11:23 +01:00
build e2fsprogs-1.45.7
2021-08-04 03:45:39 +01:00
build kbd-1.15
build make-3.82
2021-06-10 11:27:45 +01:00
2022-05-07 22:59:59 +01:00
build curl-7.83.0
# Clear up some RAM space
grep '^pkg=' /after.kaem | sed 's/pkg="//' | sed 's/"$//' | while read -r p ; do
rm -rf "${SOURCES:?}/${p:?}"
done
rm -rf "${SOURCES}/mes"
grep '^build' "${SOURCES}/run.sh" | sed "s/build //" | sed "s/ .*$//" | while read -r p ; do
rm -rf "${SOURCES:?}/${p:?}"
done
2021-08-04 03:45:39 +01:00
if [ "${CHROOT}" = False ]; then
build kexec-tools-2.0.22
Update the linux kernel for sysb/c to 4.9.10. - We do not use latest 4.9.x because it relies on a new version of binutils, while older versions do not. (Note: we should be able to go a bit newer but I didn't bother testing >50 versions to figure this out). - We do not use newer kernel versions because they require one or more of (new perl, new binutils, new make, new gcc, new bison, new tar). - sysb and sysc are updated to use the SATA (libata) subsystem (aka sda) instead of IDE-emulating SATA subsystem (aka hda) which is now available to us. - While theoretically according to docs 4.9 should work OOTB with our version of binutils this is not the case, so we have to do a bit of (interesting) patching. But this does not break anything. - Thankfully serial support in 4.9 is not screwed over like it is in 2.6 so we can revert to that. - 4.9 has the linux-libre project at our disposal, instead of gNewSense. So we use this. Unfortunatley that takes forever because we have to use sed because our version of gawk is too old/buggy. :( I plan to introduce very shortly 1. parallelism 2. 'sysc snapshot' which will start from sysc to avoid this. I do not want to use linux-libre tarballs because they make modificiations directly from this script (aka not easily verifiable, use the source!) and this script allows for much greater flexibility. - We compile the initramfs ahead-of-build using the in-tree cpio generator instead of also building cpio to use less packages. We do NOT build the initramfs into the kernel like 2.6 (unsupported). - Oh and fix a kexec-tools checksum.
2021-08-04 03:56:07 +01:00
build linux-4.9.10
2021-03-21 16:10:53 +00:00
create_sysb
go_sysb
fi
# In chroot mode transition directly into System C.
SYSC=/sysc
sys_transfer "${SYSC}" gzip patch
exec chroot "${SYSC}" /init