live-bootstrap/sysb/run.sh
Dor Askayo fcea28eb38 Don't export variables from bootstrap.cfg
These variables should only affect live-bootstrap's scripts, yet they
currently "pollute" the build environment of most packages during the
bootstrap unnecessarily.

This change also makes bootstrap.cfg keep the same format between the
different bootstrap stages, which simplifies the input to each step.
2022-05-15 18:15:30 +03:00

77 lines
1.9 KiB
Bash
Executable file

#!/usr/bin/bash
# SPDX-FileCopyrightText: 2021-22 fosslinux <fosslinux@aussies.space>
#
# SPDX-License-Identifier: GPL-3.0-or-later
set -e
# shellcheck source=sysa/helpers.sh
. helpers.sh
# Unload the current kernel before things go weird
kexec -u
create_hdx() {
# Create all of the sd{a,b,c..}
minor=0
alpha="a b c d e f g h i j k l m n o p" # 16 disks -- more than enough
# For each disk...
for a in ${alpha}; do
mknod -m 600 "/dev/sd${a}" b 8 "$((minor++))"
# For each partition...
for p in $(seq 15); do
mknod -m 600 "/dev/sd${a}${p}" b 8 "$((minor++))"
done
done
}
# All the various structures that don't exist but needed to mount
mkdir -p /etc /dev
populate_device_nodes ""
create_hdx
ask_disk() {
echo
echo "What disk would you like to use for live-bootstrap?"
echo "(live-bootstrap assumes you have pre-prepared the disk)."
echo "Please provide in format sdxx (as you would find under /dev)."
echo "You can type 'list' to get a list of disks to help you figure"
echo "out which is the right disk."
echo
read -r DISK
if [ "${DISK}" = "list" ]; then
fdisk -l
ask_disk
elif [ -z "${DISK}" ] || ! [ -e "/dev/${DISK}" ]; then
echo "Invalid."
ask_disk
fi
}
if [ -z "${DISK}" ] || ! [ -e "/dev/${DISK}" ]; then
echo "You did not provide a valid disk in the configuration file."
ask_disk
echo "DISK=${DISK}" >> /usr/src/bootstrap.cfg
fi
PREFIX=/usr
SOURCES="${PREFIX}/src"
SYSC=/sysc
# Otherwise, add stuff from sysa to sysb
echo "Mounting sysc"
mkdir /sysc
mount -t ext4 "/dev/${DISK}" /sysc
# Copy over appropriate data
echo "Copying data into sysc"
sys_transfer "${SYSC}" gzip patch
sync
# switch_root into sysc 1. for simplicity 2. to avoid kexecing again
# spouts a few errors because we don't have /proc /sys or /dev mounted
echo "Switching into sysc"
exec switch_root /sysc /init