This commit is contained in:
2026-03-20 11:49:27 +01:00
parent 3cbe1e1f74
commit d66d544066
4 changed files with 174 additions and 27 deletions

View File

@@ -5,6 +5,7 @@
# Purpose: Create a loopback ext4 filesystem for the LFS build environment.
# This avoids repartitioning and uses free space on your root drive.
# The loopback file acts exactly like a real partition.
# If a previous build exists, tears it down and starts fresh.
# Inputs: None (uses defaults below, override via environment)
# Outputs: 50GB ext4 filesystem mounted at /mnt/darkforge
# Assumes: Running as root, ~50GB free on root filesystem
@@ -39,13 +40,17 @@ echo " Image size: ${LFS_SIZE}"
echo " Mount point: ${LFS}"
echo ""
# --- Check if already mounted ------------------------------------------------
# --- Tear down any existing build --------------------------------------------
if mountpoint -q "${LFS}" 2>/dev/null; then
ok "${LFS} is already mounted:"
df -h "${LFS}"
echo ""
echo "To start over: umount ${LFS} && rm ${LFS_IMAGE}"
exit 0
warn "Existing build found at ${LFS} — tearing down..."
umount -l "${LFS}" 2>/dev/null || true
ok "Unmounted ${LFS}"
fi
if [ -f "${LFS_IMAGE}" ]; then
warn "Removing old image: ${LFS_IMAGE}"
rm -f "${LFS_IMAGE}"
ok "Old image removed"
fi
# --- Check free space ---------------------------------------------------------
@@ -59,22 +64,17 @@ fi
ok "Free space check: ${AVAIL_GB}GB available, need ${NEED_GB}GB"
# --- Create the loopback image -----------------------------------------------
if [ -f "${LFS_IMAGE}" ]; then
warn "Image file already exists: ${LFS_IMAGE}"
echo " Reusing existing image."
else
echo ">>> Creating ${LFS_SIZE} image file (this takes a moment)..."
# Use fallocate for instant allocation (no slow dd)
fallocate -l "${LFS_SIZE}" "${LFS_IMAGE}" || {
warn "fallocate failed, falling back to truncate..."
truncate -s "${LFS_SIZE}" "${LFS_IMAGE}"
}
ok "Image created: ${LFS_IMAGE}"
echo ">>> Creating ${LFS_SIZE} image file..."
# Use fallocate for instant allocation (no slow dd)
fallocate -l "${LFS_SIZE}" "${LFS_IMAGE}" || {
warn "fallocate failed, falling back to truncate..."
truncate -s "${LFS_SIZE}" "${LFS_IMAGE}"
}
ok "Image created: ${LFS_IMAGE}"
echo ">>> Formatting as ext4..."
mkfs.ext4 -q -L darkforge "${LFS_IMAGE}"
ok "Formatted as ext4"
fi
echo ">>> Formatting as ext4..."
mkfs.ext4 -q -L darkforge "${LFS_IMAGE}"
ok "Formatted as ext4"
# --- Mount it -----------------------------------------------------------------
mkdir -p "${LFS}"
@@ -84,11 +84,7 @@ ok "Mounted ${LFS_IMAGE} at ${LFS}"
echo ""
df -h "${LFS}"
echo ""
ok "LFS build partition is ready."
echo ""
echo "Next steps:"
echo " export LFS=${LFS}"
echo " bash toolchain/scripts/000-env-setup.sh"
ok "LFS build partition is ready (fresh start)."
echo ""
echo "To remount after reboot:"
echo " sudo mount -o loop ${LFS_IMAGE} ${LFS}"

View File

@@ -14,7 +14,7 @@ set -euo pipefail
LFS="${LFS:-/mnt/darkforge}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_DIR="${SCRIPT_DIR}/../logs"
LOG_DIR="${LFS}/sources/logs"
mkdir -p "${LOG_DIR}"