wip
This commit is contained in:
124
toolchain/bootstrap.sh
Normal file
124
toolchain/bootstrap.sh
Normal file
@@ -0,0 +1,124 @@
|
||||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# DarkForge Linux — Phase 0: Full Bootstrap
|
||||
# ============================================================================
|
||||
# Purpose: Single entry point that runs the entire Phase 0 bootstrap:
|
||||
# 1. Tear down & create fresh loopback filesystem
|
||||
# 2. Set up directory structure, lfs user, env files
|
||||
# 3. Download source tarballs
|
||||
# 4. Copy toolchain scripts to $LFS so lfs user can access them
|
||||
# 5. Launch build-all.sh as the lfs user
|
||||
#
|
||||
# Usage: sudo -E bash toolchain/bootstrap.sh
|
||||
# (run from the project root, e.g. /home/danny/darkforge)
|
||||
#
|
||||
# Inputs: LFS (default: /mnt/darkforge)
|
||||
# Outputs: A complete cross-toolchain and temporary tools on $LFS
|
||||
# Assumes: Running as root on Arch Linux, internet access
|
||||
# ============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# --- Configuration -----------------------------------------------------------
|
||||
export LFS="${LFS:-/mnt/darkforge}"
|
||||
|
||||
# Detect the project root (parent of toolchain/)
|
||||
BOOTSTRAP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(dirname "${BOOTSTRAP_DIR}")"
|
||||
SCRIPT_SRC="${BOOTSTRAP_DIR}/scripts"
|
||||
|
||||
# Color output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
ok() { echo -e "${GREEN}>>> $*${NC}"; }
|
||||
warn() { echo -e "${YELLOW}>>> $*${NC}"; }
|
||||
info() { echo -e "${CYAN}>>> $*${NC}"; }
|
||||
fail() { echo -e "${RED}>>> $*${NC}"; exit 1; }
|
||||
|
||||
# --- Verify running as root --------------------------------------------------
|
||||
[ "$(id -u)" -eq 0 ] || fail "This script must be run as root (use sudo -E)."
|
||||
|
||||
echo "============================================================"
|
||||
echo " DarkForge Linux — Phase 0 Full Bootstrap"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
echo " Project root: ${PROJECT_ROOT}"
|
||||
echo " LFS mount: ${LFS}"
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# Step 1: Create fresh loopback filesystem
|
||||
# =============================================================================
|
||||
info "STEP 1/5: Setting up build filesystem..."
|
||||
bash "${SCRIPT_SRC}/000-setup-disk.sh"
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# Step 2: Set up directory structure, lfs user, and env
|
||||
# =============================================================================
|
||||
info "STEP 2/5: Setting up environment..."
|
||||
bash "${SCRIPT_SRC}/000-env-setup.sh"
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# Step 3: Download all source tarballs
|
||||
# =============================================================================
|
||||
info "STEP 3/5: Downloading source tarballs..."
|
||||
bash "${SCRIPT_SRC}/000a-download-sources.sh"
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# Step 4: Copy toolchain scripts to $LFS/sources/toolchain-scripts/
|
||||
# =============================================================================
|
||||
info "STEP 4/5: Copying toolchain scripts to ${LFS}/sources/toolchain-scripts/..."
|
||||
SCRIPTS_DEST="${LFS}/sources/toolchain-scripts"
|
||||
rm -rf "${SCRIPTS_DEST}"
|
||||
mkdir -p "${SCRIPTS_DEST}"
|
||||
cp -v "${SCRIPT_SRC}/"*.sh "${SCRIPTS_DEST}/"
|
||||
chmod +x "${SCRIPTS_DEST}/"*.sh
|
||||
chown -R lfs:lfs "${SCRIPTS_DEST}"
|
||||
ok "Scripts copied and owned by lfs user"
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# Step 5: Run build-all.sh as lfs user
|
||||
# =============================================================================
|
||||
info "STEP 5/5: Building cross-toolchain as lfs user..."
|
||||
echo " This will take a while (30-60+ minutes on 32 threads)."
|
||||
echo " Logs will be in: ${LFS}/sources/logs/"
|
||||
echo ""
|
||||
|
||||
# Run build-all.sh as the lfs user with a clean environment
|
||||
# The build scripts source darkforge-env.sh internally, so we just
|
||||
# need LFS set and the lfs user's PATH to find basic tools.
|
||||
su -l lfs -c "
|
||||
export LFS=${LFS}
|
||||
source ${LFS}/sources/darkforge-env.sh
|
||||
bash ${SCRIPTS_DEST}/build-all.sh
|
||||
" || {
|
||||
fail "Build failed! Check logs in ${LFS}/sources/logs/"
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo -e "${GREEN} Phase 0 cross-compilation complete!${NC}"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
echo "Next steps (run as root):"
|
||||
echo ""
|
||||
echo " # Enter the chroot environment:"
|
||||
echo " sudo -E bash ${SCRIPTS_DEST}/023-chroot-setup.sh"
|
||||
echo ""
|
||||
echo " # Then inside chroot, run these in order:"
|
||||
echo " bash /sources/toolchain-scripts/024-chroot-essentials.sh"
|
||||
echo " bash /sources/toolchain-scripts/025-gettext.sh"
|
||||
echo " bash /sources/toolchain-scripts/026-bison.sh"
|
||||
echo " bash /sources/toolchain-scripts/027-perl.sh"
|
||||
echo " bash /sources/toolchain-scripts/028-python.sh"
|
||||
echo " bash /sources/toolchain-scripts/029-texinfo.sh"
|
||||
echo " bash /sources/toolchain-scripts/030-util-linux.sh"
|
||||
echo " bash /sources/toolchain-scripts/031-cleanup.sh"
|
||||
Reference in New Issue
Block a user