wip
This commit is contained in:
97
toolchain/scripts/000-setup-disk.sh
Executable file
97
toolchain/scripts/000-setup-disk.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# DarkForge Linux — Phase 0: Create LFS Build Partition (Loopback)
|
||||
# ============================================================================
|
||||
# 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.
|
||||
# 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
|
||||
# ============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# --- Configuration -----------------------------------------------------------
|
||||
LFS="${LFS:-/mnt/darkforge}"
|
||||
LFS_IMAGE="${LFS_IMAGE:-/opt/darkforge.img}"
|
||||
LFS_SIZE="${LFS_SIZE:-50G}"
|
||||
|
||||
# Color output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
ok() { echo -e "${GREEN}>>> $*${NC}"; }
|
||||
warn() { echo -e "${YELLOW}>>> $*${NC}"; }
|
||||
fail() { echo -e "${RED}>>> $*${NC}"; exit 1; }
|
||||
|
||||
# --- Verify running as root --------------------------------------------------
|
||||
[ "$(id -u)" -eq 0 ] || fail "This script must be run as root."
|
||||
|
||||
echo "============================================================"
|
||||
echo " DarkForge Linux — LFS Build Partition Setup"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
echo " Image file: ${LFS_IMAGE}"
|
||||
echo " Image size: ${LFS_SIZE}"
|
||||
echo " Mount point: ${LFS}"
|
||||
echo ""
|
||||
|
||||
# --- Check if already mounted ------------------------------------------------
|
||||
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
|
||||
fi
|
||||
|
||||
# --- Check free space ---------------------------------------------------------
|
||||
AVAIL_KB=$(df --output=avail / | tail -1 | tr -d ' ')
|
||||
AVAIL_GB=$((AVAIL_KB / 1024 / 1024))
|
||||
NEED_GB=$(echo "${LFS_SIZE}" | sed 's/G//')
|
||||
|
||||
if [ "${AVAIL_GB}" -lt "${NEED_GB}" ]; then
|
||||
fail "Not enough free space: ${AVAIL_GB}GB available, need ${NEED_GB}GB"
|
||||
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 ">>> Formatting as ext4..."
|
||||
mkfs.ext4 -q -L darkforge "${LFS_IMAGE}"
|
||||
ok "Formatted as ext4"
|
||||
fi
|
||||
|
||||
# --- Mount it -----------------------------------------------------------------
|
||||
mkdir -p "${LFS}"
|
||||
mount -o loop "${LFS_IMAGE}" "${LFS}"
|
||||
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"
|
||||
echo ""
|
||||
echo "To remount after reboot:"
|
||||
echo " sudo mount -o loop ${LFS_IMAGE} ${LFS}"
|
||||
echo ""
|
||||
echo "To add to /etc/fstab (auto-mount on boot):"
|
||||
echo " ${LFS_IMAGE} ${LFS} ext4 loop 0 0"
|
||||
Reference in New Issue
Block a user