diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..d735a8b --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +set -euo pipefail + +SOURCE_ISO="${1:-}" + +REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +BASE_DIR="$(cd "$REPO_DIR/.." && pwd)" +BUILD_DIR="$BASE_DIR/build" +WORK_DIR="$BUILD_DIR/work" +OUTPUT_DIR="$BUILD_DIR/output" +MOUNT_DIR="/mnt/fedora-iso" + +usage() { + echo "Usage: $0 /path/to/source.iso" +} + +check_input() { + if [[ -z "$SOURCE_ISO" ]]; then + usage + exit 1 + fi + + if [[ ! -f "$SOURCE_ISO" ]]; then + echo "Error: ISO not found: $SOURCE_ISO" + exit 1 + fi +} + +check_dependencies() { + for cmd in rsync xorriso; do + if ! command -v "$cmd" >/dev/null 2>&1; then + echo "Error: missing dependency: $cmd" + exit 1 + fi + done +} + +prepare_dirs() { + mkdir -p "$BUILD_DIR" "$OUTPUT_DIR" + rm -rf "$WORK_DIR" + mkdir -p "$WORK_DIR" +} + +mount_iso() { + sudo mkdir -p "$MOUNT_DIR" + sudo mount -o loop "$SOURCE_ISO" "$MOUNT_DIR" +} + +unmount_iso() { + sudo umount "$MOUNT_DIR" || true +} + +extract_iso() { + echo "Extracting ISO..." + mount_iso + + trap unmount_iso EXIT + + sudo rsync -a "$MOUNT_DIR"/ "$WORK_DIR"/ + sudo chown -R "$(id -u):$(id -g)" "$WORK_DIR" + + unmount_iso + trap - EXIT +} + +patch_grub() { + echo "Installing Tuxflotte GRUB configuration..." + + cp "$REPO_DIR/grub/EFI-BOOT-grub.cfg" \ + "$WORK_DIR/EFI/BOOT/grub.cfg" + + cp "$REPO_DIR/grub/boot-grub2-grub.cfg" \ + "$WORK_DIR/boot/grub2/grub.cfg" +} + +verify_workdir() { + echo "Verifying workdir..." + + grep -q "Tuxflotte" "$WORK_DIR/EFI/BOOT/grub.cfg" + grep -q "Tuxflotte" "$WORK_DIR/boot/grub2/grub.cfg" + + echo "GRUB verification passed." +} + +main() { + check_input + check_dependencies + prepare_dirs + extract_iso + patch_grub + verify_workdir + + echo + echo "Build preparation complete." + echo "Work dir: $WORK_DIR" + echo + echo "ISO creation will be added in the next step." +} + +main "$@"