#!/usr/bin/env bash set -euo pipefail log() { printf '[make-rootfs] %s\n' "$*" } usage() { cat <<'EOF' Usage: ./scripts/make-rootfs.sh --kernel [--initrd ] [--modules ] [--size ] [--base-rootfs ] Builds build/manual/rootfs-docker.ext4 using scripts/customize.sh. If --base-rootfs is omitted, the first existing file is used: ./build/manual/rootfs-base.ext4 ./ubuntu-noble-rootfs/rootfs.ext4 ./ubuntu-lts/rootfs.ext4 EOF } SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" MANUAL_DIR="${BANGER_MANUAL_DIR:-$REPO_ROOT/build/manual}" OUT_ROOTFS="$MANUAL_DIR/rootfs-docker.ext4" SIZE_SPEC="6G" BASE_ROOTFS="" KERNEL_PATH="" INITRD_PATH="" MODULES_DIR="" while [[ $# -gt 0 ]]; do case "$1" in --size) SIZE_SPEC="${2:-}" shift 2 ;; --base-rootfs) BASE_ROOTFS="${2:-}" shift 2 ;; --kernel) KERNEL_PATH="${2:-}" shift 2 ;; --initrd) INITRD_PATH="${2:-}" shift 2 ;; --modules) MODULES_DIR="${2:-}" shift 2 ;; -h|--help) usage exit 0 ;; *) log "unknown option: $1" usage exit 1 ;; esac done if [[ -z "$BASE_ROOTFS" ]]; then if [[ -f "$MANUAL_DIR/rootfs-base.ext4" ]]; then BASE_ROOTFS="$MANUAL_DIR/rootfs-base.ext4" elif [[ -f "$REPO_ROOT/ubuntu-noble-rootfs/rootfs.ext4" ]]; then BASE_ROOTFS="$REPO_ROOT/ubuntu-noble-rootfs/rootfs.ext4" elif [[ -f "$REPO_ROOT/ubuntu-lts/rootfs.ext4" ]]; then BASE_ROOTFS="$REPO_ROOT/ubuntu-lts/rootfs.ext4" else log "no base rootfs found; pass --base-rootfs" exit 1 fi fi if [[ -z "$KERNEL_PATH" ]]; then log "kernel path is required; pass --kernel" exit 1 fi mkdir -p "$MANUAL_DIR" log "building $OUT_ROOTFS from $BASE_ROOTFS" args=( "$SCRIPT_DIR/customize.sh" "$BASE_ROOTFS" --out "$OUT_ROOTFS" --size "$SIZE_SPEC" --kernel "$KERNEL_PATH" --docker ) if [[ -n "$INITRD_PATH" ]]; then args+=(--initrd "$INITRD_PATH") fi if [[ -n "$MODULES_DIR" ]]; then args+=(--modules "$MODULES_DIR") fi exec "${args[@]}"