live-bootstrap/sysb/run.sh
Dor Askayo 3921660396 Avoid exporting variables in build scripts
Environment variables "pollute" the build environment of packages and
can affect their output.

This change results in the removal of some files from packages that
were not meant to be packaged. It also removes the need for a
workaround in automake 1.10.3 to manually remove such files.

Variables are now saved in an .env file for each system and included
in scripts that need them using the dot operation.
2023-01-27 22:19:52 +02:00

95 lines
2.6 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=/dev/null
. .env
# 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 "This disk may have pre-prepared sources on it."
echo "If there is no partition we will make one".
echo "Please provide in format sdxx (as you would find under /dev),"
echo "or sdx if it is a blank disk. An ext4 partition is expected on"
echo "existing disks."
echo "You can type 'list' to get a list of disks to help you figure"
echo "out which is the right disk."
echo "NO WARRANTY IS PROVIDED FOR BUGGY BEHAVIOUR, INCLUDING THAT"
echo "REGARDING DISKS & DATA."
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
# Is it a full disk, and not a partition
# shellcheck disable=SC2012
if [ $(($(ls -l "/dev/${DISK}" | sed "s/.*, *//" | sed "s/ .*//") % 8)) -eq 0 ]; then
if ! fdisk -l "/dev/${DISK}" | grep -qE "${DISK}p?[0-9]" ; then
echo "Creating partition table and partition"
echo ";" | sfdisk "/dev/${DISK}"
mkfs.ext4 "/dev/${DISK}1"
DISK="${DISK}1"
fi
fi
echo "export DISK=${DISK}" >> /usr/src/bootstrap.cfg
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}" /sysc_src 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