120 lines
2.2 KiB
Bash
Executable File

#!/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."
}
create_iso() {
echo "Creating Tuxflotte ISO..."
local output_iso="$OUTPUT_DIR/tuxflotte-provisioning-0.2.iso"
rm -f "$output_iso"
xorriso \
-indev "$SOURCE_ISO" \
-outdev "$output_iso" \
-compliance no_emul_toc \
-map "$REPO_DIR/grub/EFI-BOOT-grub.cfg" /EFI/BOOT/grub.cfg \
-map "$REPO_DIR/grub/boot-grub2-grub.cfg" /boot/grub2/grub.cfg \
-boot_image any replay
echo "ISO created: $output_iso"
}
main() {
check_input
check_dependencies
prepare_dirs
extract_iso
patch_grub
verify_workdir
create_iso
echo
echo "Build preparation complete."
echo "Work dir: $WORK_DIR"
echo
echo "ISO creation will be added in the next step."
}
main "$@"