#!/bin/bash # efi.img/grub2 is thanks to jamesbond # basic CD structure is the same as Fatdog64 # called from 3builddistro-Z source ../DISTRO_SPECS # make an UEFI iso proc mk_iso { setvar tmp_isoroot = "$1" # input setvar OUTPUT = "$2" # output mkisofs -iso-level 4 -D -R -o $OUTPUT -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table \ -eltorito-alt-boot -eltorito-platform efi -b efi.img -no-emul-boot $tmp_isoroot echo "Converting ISO to isohybrid." isohybrid -u $OUTPUT } # make a grub2 efi image proc mk_efi_img { setvar TGT = "$1"; setvar GRUB = "$2"; setvar NEW = "$3" mkdir -p /tmp/efi_img # mount point echo "making ${TGT}/efi.img" dd if=/dev/zero of=${TGT}/efi.img bs=512 count=8192 || return 1 echo "formatting ${TGT}/efi.img - vfat" mkdosfs ${TGT}/efi.img setvar FREE_DEV = $(losetup -f) echo "mounting ${TGT}/efi.img on /tmp/efi_img" losetup $FREE_DEV ${TGT}/efi.img || return 2 mount -t vfat $FREE_DEV /tmp/efi_img || \ shell {losetup -d $FREE_DEV;return 3} echo "copying files" mkdir -p /tmp/efi_img/EFI/boot/ || return 4 tar -xJvf $GRUB -C /tmp/efi_img/EFI/boot/ || return 5 mv /tmp/efi_img/EFI/boot/${GRUBNAME} /tmp/efi_img/EFI/boot/${NEW} \ || return 6 echo "unmounting /tmp/efi_img" umount /tmp/efi_img || return 7 losetup -a | grep -o -q ${FREE_DEV##*/} && losetup -d $FREE_DEV rm -r /tmp/efi_img return 0 } # RESOURCES=`find ../ -type d -name UEFI -maxdepth 2` setvar RESOURCES = $(find ../sandbox3/rootfs-complete/usr/share/ -maxdepth 2 -type d -name 'grub2-efi) setvar ISOLINUX = $(find ../sandbox3/rootfs-complete/usr -maxdepth 3 -type f -name 'isolinux.bin) setvar VESAMENU = $(find ../sandbox3/rootfs-complete/usr -maxdepth 3 -type f -name 'vesamenu.c32) setvar FIXUSB = $(find ../sandbox3/rootfs-complete/usr -maxdepth 2 -type f -name 'fix-usb.sh) setvar GRUBNAME = 'grubx64.efi' setvar NEWNAME = 'bootx64.efi' setvar GRUB2 = $(find ../sandbox3/rootfs-complete/usr/share -maxdepth 2 -type f -name "${GRUBNAME}*) setvar BUILD = "../sandbox3/build" setvar HELP = "${BUILD}/help" setvar MSG1 = "../boot/boot-dialog/help.msg" setvar MSG2 = "../boot/boot-dialog/help2.msg" setvar BOOTLABEL = 'puppy' setvar PPMLABEL = $(which ppmlabel) setvar TEXT = ""-text $DISTRO_VERSION"" setvar GEOM = ""-x 680 -y 380"" setvar UFLG = '-uefi' setvar WOOF_OUTPUT = ""woof-output-${DISTRO_FILE_PREFIX}-${DISTRO_VERSION}${SCSIFLAG}${UFLG}${XTRA_FLG}"" test -d ../$WOOF_OUTPUT || mkdir -p ../$WOOF_OUTPUT setvar OUT = "../${WOOF_OUTPUT}/${DISTRO_FILE_PREFIX}-${DISTRO_VERSION}${SCSIFLAG}${UFLG}${XTRA_FLG}.iso" test -z $ISOLINUX && echo "Can't find isolinux" && exit 32 test -z $VESAMENU && echo "Can't find vesamenu" && exit 33 test -z $GRUB2 && echo "Can't find Grub2" && exit 34 # custom backdrop setvar pic = 'puppy' case{ [Tt]ahr* {setvar pic = 'tahr'} [Ss]lacko* {setvar pic = 'slacko'} [Xx]enial* {setvar pic = 'xenial'} } # update and transfer the skeleton files if test -n $PPMLABEL{ # label the image with version pngtopnm < ${RESOURCES}/${pic}.png | \ ${PPMLABEL} ${GEOM} ${TEXT} | \ pnmtopng > ${BUILD}/${pic}.png } else { cp -a ${RESOURCES}/${pic}.png $BUILD } # cp -a ${RESOURCES}/efi.img $BUILD cp -a $ISOLINUX $BUILD cp -a $VESAMENU $BUILD test -n $FIXUSB && cp -a $FIXUSB $BUILD mkdir -p $HELP sed -e "s/DISTRO_FILE_PREFIX/${DISTRO_FILE_PREFIX}/g" \ -e "s/BOOTLABEL/${BOOTLABEL}/g"< $MSG1 > $HELP/help.msg sed "s/BOOTLABEL/${BOOTLABEL}/g" < $MSG2 > $HELP/help2.msg # build the efi image mk_efi_img $BUILD $GRUB2 $NEWNAME setvar ret = ""$? if test $ret -ne 0{ echo "An error occured and the program is aborting with $ret status." exit $ret } # construct grub.cfg cat > ${BUILD}/grub.cfg <<< """ insmod png background_image /${pic}.png set timeout=10 menuentry "Start $DISTRO_FILE_PREFIX" { linux /vmlinuz pmedia=cd initrd /initrd.gz } menuentry "Start $DISTRO_FILE_PREFIX - RAM only" { linux /vmlinuz pfix=ram pmedia=cd initrd /initrd.gz } menuentry "Start $DISTRO_FILE_PREFIX - No X" { linux /vmlinuz pfix=nox pmedia=cd initrd /initrd.gz } menuentry "Start $DISTRO_FILE_PREFIX - check filesystem" { linux /vmlinuz pfix=fsck pmedia=cd initrd /initrd.gz } menuentry "Start $DISTRO_FILE_PREFIX - No KMS" { linux /vmlinuz nomodeset initrd /initrd.gz } menuentry "Shutdown" { halt } menuentry "Reboot" { reboot } """ # construct isolinux.cfg cat > ${BUILD}/isolinux.cfg <<< """ #display help/boot.msg default $DISTRO_FILE_PREFIX prompt 1 timeout 100 #F1 help/boot.msg F2 help/help.msg F3 help/help2.msg ui vesamenu.c32 menu resolution 800 600 menu title $DISTRO_FILE_PREFIX Live menu background ${pic}.png menu tabmsg Press Tab to edit entry, F2 for help, Esc for boot prompt menu color border 37;40 #80ffffff #00000000 std menu color sel 7;37;40 #80ffffff #20ff8000 all menu margin 1 menu rows 20 menu tabmsgrow 26 menu cmdlinerow -2 menu passwordrow 19 menu timeoutrow 28 menu helpmsgrow 30 label ${DISTRO_FILE_PREFIX} linux vmlinuz initrd initrd.gz append pmedia=cd menu label ${DISTRO_FILE_PREFIX} text help Start ${DISTRO_FILE_PREFIX} normally. endtext label ${DISTRO_FILE_PREFIX}-fsck linux vmlinuz initrd initrd.gz append pfix=fsck pmedia=cd menu label ${DISTRO_FILE_PREFIX} filesystem check text help Start ${DISTRO_FILE_PREFIX} normally with save filesystem check. endtext label ${DISTRO_FILE_PREFIX}-ram linux vmlinuz initrd initrd.gz append pfix=ram pmedia=cd menu label $DISTRO_FILE_PREFIX with no savefile text help Start ${DISTRO_FILE_PREFIX} with no savefile RAM only. endtext label ${DISTRO_FILE_PREFIX}-nox linux vmlinuz initrd initrd.gz append pfix=nox pmedia=cd menu label ${DISTRO_FILE_PREFIX} without graphical desktop text help Start ${DISTRO_FILE_PREFIX} in command-line mode (Linux console). Graphical desktop later can be started by typing "xwin". endtext menu separator label ${DISTRO_FILE_PREFIX}-nokms linux vmlinuz initrd initrd.gz append pfix=ram,nox pmedia=cd menu label For machines with severe video problems text help Start ${DISTRO_FILE_PREFIX} without savefile, without KMS, and run xorgwizard to choose video resolutions before starting graphical desktop. endtext """ # build the iso sync mk_iso $BUILD $OUT sync shell {cd ../$WOOF_OUTPUT md5sum ${DISTRO_FILE_PREFIX}-${DISTRO_VERSION}${SCSIFLAG}${UFLG}${XTRA_FLG}.iso \ > ${DISTRO_FILE_PREFIX}-${DISTRO_VERSION}${SCSIFLAG}${UFLG}${XTRA_FLG}.iso.md5.txt sha256sum ${DISTRO_FILE_PREFIX}-${DISTRO_VERSION}${SCSIFLAG}${UFLG}${XTRA_FLG}.iso \ > ${DISTRO_FILE_PREFIX}-${DISTRO_VERSION}${SCSIFLAG}${UFLG}${XTRA_FLG}.iso.sha256.txt}