Try wget https://script.laptopministry.org/uploads/1750018766_32.sh from the console
#!/bin/bash
# Script to modify antiX ISO for 32-bit EFI compatibility on Arch Linux
# for early Intel Apple Products with 32bit EFI despite supporting 64bit
# operating systems.
# This script devised June 14th 2025 for the Laptop Ministry,
# laptopministry.org, copyleft 2025.
# Download the latest Antix Linux distro and execute this script with
# the name of the file download ISO.
# Variables
ISO_ORIGINAL="$1" # Path to original antiX ISO
ISO_MODIFIED="32bitEFI$1" # Output modified ISO name
WORK_DIR="/home/admin/Downloads/antix_iso_work"
MOUNT_DIR="/home/admin/Downloads/mnt"
ISO_DIR="/home/admin/Downloads/iso"
# Function to check command success
check_error() {
if [ $? -ne 0 ]; then
echo "Error: $1"
exit 1
fi
}
# Function to log debug info
log_debug() {
echo "DEBUG: $1"
}
# Step 1: Install required tools
log_debug "Checking for required packages..."
sudo pacman -S --needed grub cdrtools mtools dosfstools libisoburn || check_error "Failed to install packages"
# Step 2: Check xorriso version
log_debug "Checking xorriso version..."
xorriso --version > "$WORK_DIR/xorriso_version.txt"
cat "$WORK_DIR/xorriso_version.txt"
# Step 3: Create working directories
log_debug "Creating working directories..."
mkdir -p "$MOUNT_DIR" "$ISO_DIR" "$WORK_DIR/efi" || check_error "Failed to create directories"
# Step 4: Mount the original ISO
log_debug "Mounting original ISO: $ISO_ORIGINAL"
sudo mount -o loop "$ISO_ORIGINAL" "$MOUNT_DIR" || check_error "Failed to mount ISO"
# Step 5: Copy ISO contents to working directory
log_debug "Copying ISO contents from $MOUNT_DIR to $ISO_DIR..."
rsync -av "$MOUNT_DIR/" "$ISO_DIR/" || check_error "Failed to copy ISO contents"
# Step 6: Unmount the original ISO
log_debug "Unmounting original ISO..."
sudo umount "$MOUNT_DIR" || check_error "Failed to unmount ISO"
# Step 7: Find or create the EFI bootloader file
log_debug "Locating EFI bootloader file in $ISO_DIR/boot/efi/EFI..."
EFI_BOOT_PATH=$(find "$ISO_DIR/boot/efi/EFI" -type f -name "*.efi" -print -quit 2>/dev/null)
if [ -z "$EFI_BOOT_PATH" ]; then
log_debug "No EFI bootloader found. Creating 32-bit EFI GRUB bootloader..."
grub-mkimage -O i386-efi -o "$WORK_DIR/efi/bootia32.efi" -p /boot/grub \
normal fat iso9660 part_gpt part_msdos linux echo all_video test search || check_error "Failed to create bootia32.efi"
EFI_BOOT_PATH="$WORK_DIR/efi/bootia32.efi"
EFI_BOOT_FILE="bootia32.efi"
else
EFI_BOOT_FILE=$(basename "$EFI_BOOT_PATH")
log_debug "Found EFI bootloader: $EFI_BOOT_PATH (filename: $EFI_BOOT_FILE)"
fi
# Step 8: Copy EFI bootloader to ISO
log_debug "Copying EFI bootloader to $ISO_DIR/boot/efi/EFI/BOOT/$EFI_BOOT_FILE..."
mkdir -p "$ISO_DIR/boot/efi/EFI/BOOT" || check_error "Failed to create EFI directory"
cp "$EFI_BOOT_PATH" "$ISO_DIR/boot/efi/EFI/BOOT/$EFI_BOOT_FILE" || check_error "Failed to copy EFI bootloader"
# Step 9: Create EFI image for El Torito
log_debug "Creating EFI image: $WORK_DIR/efi.img..."
mkfs.vfat -C "$WORK_DIR/efi.img" 1440 || check_error "Failed to create efi.img"
mmd -i "$WORK_DIR/efi.img" ::/EFI ::/EFI/BOOT || check_error "Failed to create EFI directories in efi.img"
mcopy -i "$WORK_DIR/efi.img" "$ISO_DIR/boot/efi/EFI/BOOT/$EFI_BOOT_FILE" ::/EFI/BOOT/ || check_error "Failed to copy EFI bootloader to efi.img"
cp "$WORK_DIR/efi.img" "$ISO_DIR/efi.img" || check_error "Failed to copy efi.img to ISO"
log_debug "Verifying efi.img contents..."
mdir -i "$ISO_DIR/efi.img" ::/EFI/BOOT || check_error "Failed to verify efi.img contents"
# Step 10: Modify GRUB configuration
log_debug "Creating GRUB configuration at $ISO_DIR/boot/grub/grub.cfg..."
cat << EOF > "$ISO_DIR/boot/grub/grub.cfg"
set timeout=5
set default=0
menuentry "antiX Live" {
set root=(cd0)
linux /antiX/vmlinuz quiet
initrd /antiX/initrd.gz
}
EOF
check_error "Failed to create grub.cfg"
# Step 11: List boot files before building
log_debug "Listing boot files before building ISO..."
ls -l "$ISO_DIR/efi.img" "$ISO_DIR/boot/efi/EFI/BOOT/$EFI_BOOT_FILE" 2>/dev/null
# Step 12: Build the UEFI-only ISO with xorriso
log_debug "Building UEFI-only ISO: $ISO_MODIFIED..."
CONFIGURATIONS=(
"-eltorito-boot efi.img -no-emul-boot" # UEFI with efi.img
"-eltorito-boot boot/efi/EFI/BOOT/$EFI_BOOT_FILE -no-emul-boot" # Direct UEFI file
)
for CONFIG in "${CONFIGURATIONS[@]}"; do
log_debug "Attempting build with configuration: $CONFIG"
XORRISO_CMD="xorriso -as mkisofs -o \"$ISO_MODIFIED\" -J -R -V \"ANTIX_32EFI\" $CONFIG \"$ISO_DIR\" > \"$WORK_DIR/xorriso_log.txt\" 2>&1"
log_debug "Executing xorriso command: $XORRISO_CMD"
if eval "$XORRISO_CMD"; then
cat "$WORK_DIR/xorriso_log.txt"
break
else
log_debug "xorriso failed with configuration: $CONFIG. Log saved to $WORK_DIR/xorriso_log.txt"
cat "$WORK_DIR/xorriso_log.txt"
continue
fi
done
if [ $? -ne 0 ]; then
check_error "All xorriso UEFI configuration attempts failed. Check $WORK_DIR/xorriso_log.txt"
fi
# Step 13: Verify ISO boot structure
log_debug "Verifying ISO boot structure for $ISO_MODIFIED..."
xorriso -indev "$ISO_MODIFIED" -report_el_torito plain > "$WORK_DIR/el_torito_report.txt" || check_error "Failed to verify ISO boot structure"
cat "$WORK_DIR/el_torito_report.txt"
log_debug "Checking for boot image in El Torito catalog..."
grep -q "El Torito boot img" "$WORK_DIR/el_torito_report.txt" || log_debug "WARNING: No boot image found in El Torito catalog. ISO may not boot."
# Step 14: Clean up
log_debug "Cleaning up directories..."
rm -rf "$MOUNT_DIR" "$ISO_DIR" "$WORK_DIR" || check_error "Failed to clean up"
echo "Modified ISO created: $ISO_MODIFIED"
echo "Write to USB with: sudo dd if=$ISO_MODIFIED of=/dev/sdX bs=4M status=progress && sync"
BASH to Home