Make the final bootstrapped image bootable and support rebooting

This commit is contained in:
Googulator 2023-11-13 10:25:56 +01:00
parent 0bd2089010
commit 54747ca104

View file

@ -35,4 +35,168 @@ done
# add cd-rom drive # add cd-rom drive
mknod -m 600 /dev/sr0 b 11 0 mknod -m 600 /dev/sr0 b 11 0
. /usr/src/.env . /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 <andrius@stikonas.eu>
# SPDX-FileCopyrightText: 2021-22 fosslinux <fosslinux@aussies.space>
#
# 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 <fosslinux@aussies.space>
#
# 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