2013-06-05 07:27:23 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
## Script for creating a UEFI CD bootable ISO from existing Archboot ISO
|
2013-06-05 11:13:04 +02:00
|
|
|
## by Tobias Powalowski <tpowa@archlinux.org>
|
2013-06-05 07:27:23 +02:00
|
|
|
## Contributed by "Keshav Padram" <the ddoott ridikulus ddoott rat aatt geemmayil ddoott ccoomm>
|
|
|
|
## ${1} == PATH to ISO
|
|
|
|
|
|
|
|
### check for root
|
|
|
|
if ! [[ ${UID} -eq 0 ]]; then
|
|
|
|
echo "ERROR: Please run as root user!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2013-06-05 11:13:04 +02:00
|
|
|
FSIMG=$(mktemp -d)
|
|
|
|
ISOIMG=$(mktemp -d)
|
|
|
|
MOUNT_FSIMG=$(mktemp -d)
|
|
|
|
|
2013-06-05 07:27:23 +02:00
|
|
|
## Extract old ISO
|
2013-06-05 17:08:44 +02:00
|
|
|
bsdtar -C "${ISOIMG}" -xf "${1}"
|
2013-06-05 07:27:23 +02:00
|
|
|
# 7z x -o /tmp/ARCHBOOTISO/ "${1}"
|
|
|
|
|
2013-06-05 11:13:04 +02:00
|
|
|
## get size of boot x86_64 files
|
2013-06-05 12:35:18 +02:00
|
|
|
BOOTSIZE=$(LANG=EN_US du -bc ${ISOIMG}/{EFI,loader,boot/*x86_64*} | grep total | cut -f1)
|
2013-06-05 11:13:04 +02:00
|
|
|
IMGSZ=$(( (${BOOTSIZE}*102)/100/1024 + 1)) # image size in sectors
|
|
|
|
|
2013-06-05 17:08:44 +02:00
|
|
|
## Create cdefiboot.img
|
|
|
|
dd if=/dev/zero of="${FSIMG}"/cdefiboot.img bs="${IMGSZ}" count=1024
|
|
|
|
mkfs.vfat "${FSIMG}"/cdefiboot.img
|
|
|
|
LOOPDEV="$(losetup --find --show "${FSIMG}"/cdefiboot.img)"
|
2013-06-05 07:27:23 +02:00
|
|
|
|
2013-06-05 17:08:44 +02:00
|
|
|
## Mount cdefiboot.img
|
2013-06-05 11:13:04 +02:00
|
|
|
mount -t vfat -o rw,users "${LOOPDEV}" "${MOUNT_FSIMG}"
|
2013-06-05 07:27:23 +02:00
|
|
|
|
2013-06-05 17:08:44 +02:00
|
|
|
## Copy UEFI files fo cdefiboot.img
|
2013-06-05 11:13:04 +02:00
|
|
|
mkdir "${MOUNT_FSIMG}"/boot
|
|
|
|
cp -r "${ISOIMG}"/{EFI,loader} "${MOUNT_FSIMG}"
|
|
|
|
cp "${ISOIMG}"/boot/*x86_64* "${MOUNT_FSIMG}"/boot
|
2013-06-05 07:27:23 +02:00
|
|
|
|
2013-06-05 17:08:44 +02:00
|
|
|
## Unmount cdefiboot.img
|
2013-06-05 07:27:23 +02:00
|
|
|
umount "${LOOPDEV}"
|
|
|
|
losetup --detach "${LOOPDEV}"
|
2013-06-05 11:13:04 +02:00
|
|
|
rm -rf "${MOUNT_FSIMG}"
|
2013-06-05 07:27:23 +02:00
|
|
|
|
2013-06-05 17:08:44 +02:00
|
|
|
## Move updated cdefiboot.img to old ISO extracted dir
|
|
|
|
mkdir -p "${ISOIMG}"/CDEFI/
|
|
|
|
rm "${ISOIMG}"/CDEFI/cdefiboot.img
|
|
|
|
mv "${FSIMG}"/cdefiboot.img "${ISOIMG}"/CDEFI/cdefiboot.img
|
2013-06-05 11:13:04 +02:00
|
|
|
rm -rf "${FSIMG}"
|
2013-06-05 07:27:23 +02:00
|
|
|
|
|
|
|
## Create new ISO with BIOS, ISOHYBRID and UEFI support
|
|
|
|
xorriso -as mkisofs \
|
|
|
|
-iso-level 3 -rock -joliet \
|
|
|
|
-max-iso9660-filenames -omit-period \
|
|
|
|
-omit-version-number -allow-leading-dots \
|
|
|
|
-relaxed-filenames -allow-lowercase -allow-multidot \
|
|
|
|
-volid "ARCHBOOT" \
|
|
|
|
-preparer "prepared by archboot-uefi-cd.sh" \
|
|
|
|
-eltorito-boot boot/syslinux/isolinux.bin \
|
|
|
|
-eltorito-catalog boot/syslinux/boot.cat \
|
|
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
2013-06-05 17:08:44 +02:00
|
|
|
-eltorito-alt-boot -e CDEFI/cdefiboot.img \
|
2013-06-05 16:31:56 +02:00
|
|
|
-no-emul-boot \
|
2013-06-05 11:13:04 +02:00
|
|
|
-isohybrid-mbr "${ISOIMG}"/boot/syslinux/isohdpfx.bin \
|
|
|
|
-output ARCHBOOT.iso "${ISOIMG}"/ &> /tmp/xorriso.log
|
2013-06-05 07:27:23 +02:00
|
|
|
|
2013-06-05 11:13:04 +02:00
|
|
|
if [[ -e "ARCHBOOT.iso" ]]; then
|
|
|
|
echo "Updated ISO at ARCHBOOT.iso"
|
2013-06-05 07:27:23 +02:00
|
|
|
else
|
|
|
|
echo "ISO generation failed. See /tmp/xorriso.log for more info."
|
|
|
|
fi
|
|
|
|
|
|
|
|
## Delete old ISO extracted files
|
2013-06-05 11:13:04 +02:00
|
|
|
rm -rf "${ISOIMG}"
|