#!/bin/bash # efi.img/grub2 is thanks to jamesbond # basic CD structure is the same as Fatdog64 # called from 3builddistro-Z . ../DISTRO_SPECS # make an UEFI iso mk_iso() { tmp_isoroot=$1 # input 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 mk_efi_img() { TGT=$1; GRUB=$2; 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 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 || \ (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` RESOURCES=`find ../sandbox3/rootfs-complete/usr/share/ -maxdepth 2 -type d -name 'grub2-efi'` ISOLINUX=`find ../sandbox3/rootfs-complete/usr -maxdepth 3 -type f -name 'isolinux.bin'` VESAMENU=`find ../sandbox3/rootfs-complete/usr -maxdepth 3 -type f -name 'vesamenu.c32'` FIXUSB=`find ../sandbox3/rootfs-complete/usr -maxdepth 2 -type f -name 'fix-usb.sh'` GRUBNAME=grubx64.efi NEWNAME=bootx64.efi GRUB2=`find ../sandbox3/rootfs-complete/usr/share -maxdepth 2 -type f -name "${GRUBNAME}*"` BUILD=../sandbox3/build HELP=${BUILD}/help MSG1=../boot/boot-dialog/help.msg MSG2=../boot/boot-dialog/help2.msg BOOTLABEL=puppy PPMLABEL=`which ppmlabel` TEXT="-text $DISTRO_VERSION" GEOM="-x 680 -y 380" UFLG=-uefi WOOF_OUTPUT="woof-output-${DISTRO_FILE_PREFIX}-${DISTRO_VERSION}${SCSIFLAG}${UFLG}${XTRA_FLG}" [ -d ../$WOOF_OUTPUT ] || mkdir -p ../$WOOF_OUTPUT OUT=../${WOOF_OUTPUT}/${DISTRO_FILE_PREFIX}-${DISTRO_VERSION}${SCSIFLAG}${UFLG}${XTRA_FLG}.iso [ -z "$ISOLINUX" ] && echo "Can't find isolinux" && exit 32 [ -z "$VESAMENU" ] && echo "Can't find vesamenu" && exit 33 [ -z "$GRUB2" ] && echo "Can't find Grub2" && exit 34 # custom backdrop pic=puppy case ${DISTRO_FILE_PREFIX} in [Tt]ahr*)pic=tahr;; [Ss]lacko*)pic=slacko;; [Xx]enial*)pic=xenial;; esac # update and transfer the skeleton files if [ -n "$PPMLABEL" ];then # label the image with version pngtopnm < ${RESOURCES}/${pic}.png | \ ${PPMLABEL} ${GEOM} ${TEXT} | \ pnmtopng > ${BUILD}/${pic}.png else cp -a ${RESOURCES}/${pic}.png $BUILD fi # cp -a ${RESOURCES}/efi.img $BUILD cp -a $ISOLINUX $BUILD cp -a $VESAMENU $BUILD [ -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 ret=$? if [ $ret -ne 0 ];then echo "An error occured and the program is aborting with $ret status." exit $ret fi # construct grub.cfg cat > ${BUILD}/grub.cfg <<GRUB 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 } GRUB # construct isolinux.cfg cat > ${BUILD}/isolinux.cfg <<ISO #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 ISO # build the iso sync mk_iso $BUILD $OUT sync (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)