128 lines
3.3 KiB
Bash
Executable file
128 lines
3.3 KiB
Bash
Executable file
#!/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"
|
|
|
|
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"
|
|
cp $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
|