live-bootstrap/sysa/run.sh

262 lines
5.6 KiB
Bash
Executable File

#!/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>
#
# SPDX-License-Identifier: GPL-3.0-or-later
set -e
# shellcheck source=sysa/helpers.sh
. helpers.sh
# shellcheck disable=SC2154
export PREFIX="${prefix}"
# shellcheck disable=SC2154
export SOURCES="${sysa}"
export DISTFILES="${sysa}/distfiles"
export DESTDIR=/tmp/destdir
# shellcheck disable=SC2154
export SRCDIR="${srcdir}"
create_sysb() {
# Copy everything in
echo "Creating sysb rootfs"
mkdir -p "/sysb${PREFIX}"
for d in bin include lib libexec share src; do
# Minimise RAM (storage) use - use hard links
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"
kexec -l "${PREFIX}/boot/linux-4.9.10" --console-serial \
--initrd="${PREFIX}/boot/initramfs-sysb.cpio.gz" \
--append="init=/init console=ttyS0"
echo "kexecing into sysb"
kexec -e
}
# 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
build flex-2.5.11
build musl-1.1.24
# Rebuild tcc using musl
build tcc-0.9.27 tcc-musl-pass1.sh
# Rebuild musl using tcc-musl
build musl-1.1.24
# Rebuild tcc-musl using new musl
build tcc-0.9.27 tcc-musl-pass2.sh
# Rebuild sed using musl
build sed-4.0.9 sed-4.0.9.sh
# Rebuild bzip2 using musl
build bzip2-1.0.8 bzip2-1.0.8.sh
build m4-1.4.7
build flex-2.6.4
build bison-3.4.1 stage1.sh
build bison-3.4.1 stage2.sh
build bison-3.4.1 stage3.sh
build grep-2.4
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
build gawk-3.0.4
build perl-5.000
build perl-5.003
build perl5.004-05 '' '' perl5.004_05
build perl5.005-03 '' '' perl5.005_03
build perl-5.6.2
populate_device_nodes
build autoconf-2.52 stage1.sh
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
build autoconf-2.52 stage2.sh
build autoconf-2.13
build autoconf-2.12
build libtool-1.4
build binutils-2.14
# Build musl with fewer patches
build musl-1.1.24 binutils-rebuild.sh patches-pass3
# Rebuild tcc-musl using new musl
build tcc-0.9.27 tcc-musl-pass3.sh patches-musl-pass3
populate_device_nodes
build autoconf-2.53 stage1.sh
build autoconf-2.53 stage2.sh
build automake-1.7 stage1.sh
build autoconf-2.54 stage1.sh
build autoconf-2.54 stage2.sh
build automake-1.7 stage2.sh
build autoconf-2.55
build automake-1.7.8
build autoconf-2.57
build autoconf-2.59
build automake-1.8.5
build help2man-1.36.4
build autoconf-2.61 stage1.sh
build autoconf-2.61 stage2.sh
build automake-1.9.6 stage1.sh
build automake-1.9.6 stage2.sh
build findutils-4.2.33
build libtool-2.2.4
build automake-1.10.3
build autoconf-2.64
build gcc-4.0.4 pass1.sh
# This hack fixes a strange bug in mes libc bash
set -x
build linux-headers-5.10.41 '' '' linux-5.10.41
set +x
build musl-1.2.3
build gcc-4.0.4 pass2.sh
build util-linux-2.19.1
build e2fsprogs-1.45.7
build kbd-1.15
build make-3.82
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
if [ "${CHROOT}" = False ]; then
build kexec-tools-2.0.22
build linux-4.9.10
create_sysb
go_sysb
fi
# In chroot mode transition directly into System C.
SYSC=/sysc
sys_transfer "${SYSC}" gzip patch
exec chroot "${SYSC}" /init