#!/bin/bash -e chroot_run() { mount_pseudofs cp -L /etc/resolv.conf $LFS/etc/ chroot $LFS $@ retval=$? umount_pseudofs return $retval } mount_pseudofs() { mount --bind /dev $LFS/dev mount -t devpts devpts $LFS/dev/pts -o gid=5,mode=620 mount -t proc proc $LFS/proc mount -t sysfs sysfs $LFS/sys mount -t tmpfs tmpfs $LFS/run } umount_pseudofs() { umount $LFS/dev/pts &>/dev/null umount $LFS/dev &>/dev/null umount $LFS/run &>/dev/null umount $LFS/proc &>/dev/null umount $LFS/sys &>/dev/null } interrupted() { die "Abort by user." } cleanup() { #rm -fr $LFS rm -fr $WDIR } die() { [ "$@" ] && printerror $@ umount_pseudofs cleanup exit 1 } printstep() { echo -e "\e[0;36m::\e[0m $*" } printerror() { echo -e "\e[0;31mERROR:\e[0m $*" } CWD=$PWD source $CWD/config isolinux_files="chain.c32 isolinux.bin ldlinux.c32 libutil.c32 reboot.c32 menu.c32 libcom32.c32 poweroff.c32" OUTPUT=$OUTPUT.iso rm -fr $WDIR mkdir -p $WDIR printstep "Preparing isolinux files..." mkdir -p $WDIR/{lfs,isolinux,boot} for file in $isolinux_files; do cp /usr/share/syslinux/$file $WDIR/isolinux done #cp isolinux/splash.png $WDIR/isolinux cp $FILEDIR/isolinux.cfg $WDIR/isolinux [ -d rootfs ] && cp -Ra rootfs $WDIR printstep "Make squash filesystem..." mksquashfs $LFS $WDIR/lfs/root.sfs \ -b 1048576 -comp xz -Xdict-size 100% \ -e $LFS/var/lib/pkg/src/* \ -e $LFS/var/lib/pkg/pkg/* \ -e $LFS/var/lib/pkg/work/* \ -e $LFS/tools/ \ -e $LFS/tmp/* 2>/dev/null || die "failed create squashed filesystem" printstep "Preparing kernel and initramfs..." cp $LFS/boot/vmlinuz-lfs $WDIR/boot/vmlinuz || die "failed copying kernel" cp files/livecd.hook $LFS/etc/mkinitramfs.d kernver=$(file $LFS/boot/vmlinuz-lfs | cut -d ' ' -f9) chroot_run mkinitramfs -k $kernver -a livecd -o /boot/initrd-lfs.img || die "failed create initramfs" mv $LFS/boot/initrd-lfs.img $WDIR/boot/initrd || die "failed copying initrd" printstep "Setup UEFI mode..." mkdir -p $WDIR/boot/{grub/{fonts,x86_64-efi},EFI} if [ -f /usr/share/grub/unicode.pf2 ];then cp /usr/share/grub/unicode.pf2 $WDIR/boot/grub/fonts fi if [ -f $WDIR/isolinux/splash.png ]; then cp $WDIR/isolinux/splash.png $WDIR/boot/grub/ fi echo "set prefix=/boot/grub" > $WDIR/boot/grub-early.cfg cp -a /usr/lib/grub/x86_64-efi/*.{mod,lst} $WDIR/boot/grub/x86_64-efi || die "Failed copying efi files" cp $FILEDIR/grub.cfg $WDIR/boot/grub/ grub-mkimage -c $WDIR/boot/grub-early.cfg -o $WDIR/boot/EFI/bootx64.efi -O x86_64-efi -p "" iso9660 normal search search_fs_file modprobe loop dd if=/dev/zero of=$WDIR/boot/efiboot.img count=4096 mkdosfs -n LFSLIVECD-UEFI $WDIR/boot/efiboot.img || die "Failed mkdosfs" mkdir -p $WDIR/boot/efiboot mount -o loop $WDIR/boot/efiboot.img $WDIR/boot/efiboot || die "Failed mount efiboot.img" mkdir -p $WDIR/boot/efiboot/EFI/boot cp $WDIR/boot/EFI/bootx64.efi $WDIR/boot/efiboot/EFI/boot umount $WDIR/boot/efiboot rm -fr $WDIR/boot/efiboot printstep "Making the iso..." rm -f $OUTPUT xorriso -as mkisofs \ -isohybrid-mbr /usr/share/syslinux/isohdpfx.bin \ -c isolinux/boot.cat \ -b isolinux/isolinux.bin \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -eltorito-alt-boot \ -e boot/efiboot.img \ -no-emul-boot \ -isohybrid-gpt-basdat \ -volid $LABEL \ -o $OUTPUT $WDIR || die "failed create iso" printstep "Cleaning up..." cleanup exit 0