From 54747ca104286fa25e75c031e1d64d28522720de Mon Sep 17 00:00:00 2001 From: Googulator Date: Mon, 13 Nov 2023 10:25:56 +0100 Subject: [PATCH] Make the final bootstrapped image bootable and support rebooting --- sysc/after.sh | 166 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 165 insertions(+), 1 deletion(-) diff --git a/sysc/after.sh b/sysc/after.sh index e10e27b8..b0b0a1b5 100755 --- a/sysc/after.sh +++ b/sysc/after.sh @@ -35,4 +35,168 @@ done # add cd-rom drive mknod -m 600 /dev/sr0 b 11 0 . /usr/src/.env -exec env - PATH="${PREFIX}/bin" PS1="\w # " bash -i + +mkdir /sysa +pushd /sysa + +tar xvjf ../sysa.tar.bz2 +cp -r /sysa/boot /boot + +cat > /sbin/init << 'INIT_END' +#!/usr/bin/bash + +# SPDX-FileCopyrightText: 2022 Andrius Štikonas +# SPDX-FileCopyrightText: 2021-22 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + +set -e + +PREFIX=/usr +LIBDIR="${PREFIX}/lib/i386-unknown-linux-musl" +SOURCES="${PREFIX}/src" +DESTDIR=/tmp/destdir +DISTFILES=/distfiles +SRCDIR="${SOURCES}" + +export PATH="${PREFIX}/bin:${PREFIX}/sbin" +export HOME=/tmp +export SOURCE_DATE_EPOCH=0 + +# shellcheck source=sysa/helpers.sh +. "${SOURCES}/helpers.sh" + +MAKEJOBS="-j${JOBS}" + +echo +echo "Installing packages into sysc" + +install_tar() { + echo "${1}: installing package" + src_apply "$@" +} + +# Begin sysc bootstrapping process +cd "${SOURCES}" +exec env -i bash rerun.sh +INIT_END + +chmod +x /sbin/init + +cat > "${SOURCES}/rerun.sh" << 'RERUN_END' +#!/usr/bin/bash + +# SPDX-FileCopyrightText: © 2023 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + +set -e + +# shellcheck source=/dev/null +. .env + +trap 'env - PATH=${PREFIX}/bin PS1="\w # " bash -i' EXIT + +# shellcheck source=sysa/helpers.sh +. "${SOURCES}/helpers.sh" + +umask 0022 + +create_fhs() { + # Add the rest of the FHS that we will use and is not created pre-boot + mkdir -p /etc /run /var + mkdir -p /proc && mount -t proc proc /proc + mkdir -p /sys && mount -t sysfs sysfs /sys + # Make /tmp a ramdisk (speeds up configure etc significantly) + mkdir -p /tmp && mount -t tmpfs tmpfs /tmp +} + +create_fhs + +# Activate our previously made some swap +swapon /swap + +# Obtain network connection +dhcpcd --waitip=4 + +cd /root +env - PATH="${PREFIX}/bin" PS1="\w # " HOME="/root" bash --login -i +reboot +RERUN_END + +chmod +x "${SOURCES}/rerun.sh" + +popd + +# TODO turn this into a proper build step +mkdir -p /usr/src/grub +pushd /usr/src/grub + +curl -O https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz +tar xf grub-2.06.tar.xz +cd grub-2.06 +autoreconf +CFLAGS=-Wno-error ./configure --prefix="${PREFIX}" +make ${MAKEJOBS} +make install +grub-install /dev/sda + +cat > /boot/grub/grub.cfg << 'GRUB_END' +# Config for GNU GRand Unified Bootloader (GRUB) +# /boot/grub/grub.cfg + +# Timeout for menu +set timeout=5 + +# Default boot entry +set default=0 + +# Menu Colours +set menu_color_normal=white/black +set menu_color_highlight=white/green + +menuentry 'Linux live-bootstrap (4.9.10, serial console)' { + insmod part_msdos + set root='hd0,msdos1' + linux /boot/linux-4.9.10 root=/dev/sda1 rw console=ttyS0 +} + +menuentry 'Linux live-bootstrap (4.9.10, graphical console)' { + vbeinfo + set gfxpayload=keep + set gfxmode=1024x768x32 + terminal_output gfxterm + insmod part_msdos + set root='hd0,msdos1' + linux /boot/linux-4.9.10 root=/dev/sda1 rw console=tty1 +} + +menuentry "Reboot" { + reboot +} +GRUB_END + +popd + +cat > /sbin/reboot << 'REBOOT_END' +echo 1 > /proc/sys/kernel/sysrq +echo s > /proc/sysrq-trigger +sleep 1 +echo u > /proc/sysrq-trigger +sleep 1 +echo b > /proc/sysrq-trigger +REBOOT_END + +chmod +x /sbin/reboot + +mkdir /root +cat > /root/.profile << 'PROFILE' +. /usr/src/.env +. "${SOURCES}/helpers.sh" +PROFILE + +sync + +cd "/root" +env - PATH="${PREFIX}/bin" PS1="\w # " HOME="/root" bash --login -i +reboot