#!/bin/bash set -euo pipefail ISO_PATH="" HTTP_ROOT="" MOUNT_DIR="" usage() { cat <<'EOF' Usage: sync_alma_tree.sh --iso FILE --http-root DIR [--mount-dir DIR] Mount an AlmaLinux ISO read-only and copy its contents into an HTTP-served install tree for PXE/Kickstart use. EOF } while [[ $# -gt 0 ]]; do case "$1" in --iso) ISO_PATH="$2" shift 2 ;; --http-root) HTTP_ROOT="$2" shift 2 ;; --mount-dir) MOUNT_DIR="$2" shift 2 ;; -h|--help) usage exit 0 ;; *) echo "Unknown option: $1" >&2 usage >&2 exit 1 ;; esac done if [[ -z "$ISO_PATH" || -z "$HTTP_ROOT" ]]; then usage >&2 exit 1 fi if [[ ! -f "$ISO_PATH" ]]; then echo "ISO not found: $ISO_PATH" >&2 exit 1 fi if [[ $EUID -ne 0 ]]; then echo "Re-running with sudo..." exec sudo "$0" "$@" fi if [[ -z "$MOUNT_DIR" ]]; then MOUNT_DIR="$(mktemp -d /tmp/alma-iso.XXXXXX)" fi cleanup() { if mountpoint -q "$MOUNT_DIR"; then umount "$MOUNT_DIR" fi rmdir "$MOUNT_DIR" 2>/dev/null || true } trap cleanup EXIT mkdir -p "$HTTP_ROOT" mount -o loop,ro "$ISO_PATH" "$MOUNT_DIR" rsync -aH --delete "$MOUNT_DIR"/ "$HTTP_ROOT"/ echo "Synced AlmaLinux tree to $HTTP_ROOT"