mirror of
https://github.com/fosslinux/live-bootstrap.git
synced 2026-03-04 18:35:24 +01:00
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.
95 lines
2.6 KiB
Bash
Executable file
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
|