eth0s/03-mkiso

153 lines
3.8 KiB
Text
Raw Normal View History

#!/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() {
2020-06-28 23:38:04 +08:00
unmount $LFS/dev/pts
unmount $LFS/dev
unmount $LFS/run
unmount $LFS/proc
unmount $LFS/sys
}
unmount() {
while true; do
mountpoint -q $1 || break
umount $1 2>/dev/null
done
}
interrupted() {
die "Abort by user."
}
cleanup() {
2021-04-18 08:19:42 +08:00
rm -fr $ISODIR
}
die() {
[ "$@" ] && printerror $@
umount_pseudofs
cleanup
exit 1
}
printstep() {
echo -e "\e[0;36m::\e[0m $*"
}
printerror() {
echo -e "\e[0;31mERROR:\e[0m $*"
}
2021-04-18 08:19:42 +08:00
if [ $(id -u) != 0 ]; then
echo "$0 script need to run as root!"
exit 1
fi
CWD=$PWD
2020-11-13 13:58:01 +08:00
if [ -f $CWD/config ]; then
source $CWD/config
fi
2021-04-18 08:19:42 +08:00
ISODIR="$CWD/iso"
2020-06-28 23:38:04 +08:00
LABEL="LFSLIVECD"
OUTPUT="lfs-livecd-$(date +"%Y%m%d").iso"
FILEDIR="$CWD/files"
2021-04-18 08:19:42 +08:00
LFS="${LFS:-$CWD/lfs-rootfs}"
2020-11-13 13:58:01 +08:00
PKGDIR="${PKGDIR:-$CWD/pkg}"
SRCDIR="${SRCDIR:-$CWD/src}"
2021-04-18 08:19:42 +08:00
WORKDIR="${WORKDIR:-$CWD/work}"
isolinux_files="chain.c32 isolinux.bin ldlinux.c32 libutil.c32 reboot.c32 menu.c32 libcom32.c32 poweroff.c32"
2021-04-18 08:19:42 +08:00
rm -fr $ISODIR
mkdir -p $ISODIR
printstep "Preparing isolinux files..."
2021-04-18 08:19:42 +08:00
mkdir -p $ISODIR/{lfs,isolinux,boot}
for file in $isolinux_files; do
2021-04-18 08:19:42 +08:00
cp $LFS/usr/share/syslinux/$file $ISODIR/isolinux || die "failed copying '$file'"
done
2021-04-18 08:19:42 +08:00
#cp isolinux/splash.png $ISODIR/isolinux
cp $FILEDIR/isolinux.cfg $ISODIR/isolinux
[ -d rootfs ] && cp -Ra rootfs $ISODIR
printstep "Make squash filesystem..."
2021-04-18 08:19:42 +08:00
mksquashfs $LFS $ISODIR/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"
2020-06-28 23:38:04 +08:00
printstep "Preparing kernel and initramfs..."
2021-04-18 08:19:42 +08:00
cp $LFS/boot/vmlinuz-lfs $ISODIR/boot/vmlinuz || die "failed copying kernel"
cp files/livecd.hook $LFS/etc/mkinitramfs.d
kernver=$(file $LFS/boot/vmlinuz-lfs | cut -d ' ' -f9)
2020-07-02 23:33:24 +08:00
chroot_run mkinitramfs -k $kernver -a livecd -o /boot/initrd-live.img || die "failed create initramfs"
2021-04-18 08:19:42 +08:00
mv $LFS/boot/initrd-live.img $ISODIR/boot/initrd || die "failed copying initrd"
2019-10-10 23:53:41 +08:00
printstep "Setup UEFI mode..."
2021-06-13 20:38:17 +08:00
mkdir -p $ISODIR/boot/grub/{fonts,x86_64-efi}
mkdir -p $ISODIR/efi/boot
2020-07-02 23:33:24 +08:00
if [ -f $LFS/usr/share/grub/unicode.pf2 ];then
2021-04-18 08:19:42 +08:00
cp $LFS/usr/share/grub/unicode.pf2 $ISODIR/boot/grub/fonts
2019-10-10 23:53:41 +08:00
fi
2021-04-18 08:19:42 +08:00
if [ -f $ISODIR/isolinux/splash.png ]; then
cp $ISODIR/isolinux/splash.png $ISODIR/boot/grub/
2019-10-10 23:53:41 +08:00
fi
2021-04-18 08:19:42 +08:00
echo "set prefix=/boot/grub" > $ISODIR/boot/grub-early.cfg
cp -a $LFS/usr/lib/grub/x86_64-efi/*.{mod,lst} $ISODIR/boot/grub/x86_64-efi || die "Failed copying efi files"
cp $FILEDIR/grub.cfg $ISODIR/boot/grub/
2019-10-10 23:53:41 +08:00
2021-06-13 20:38:17 +08:00
grub-mkimage -c $ISODIR/boot/grub-early.cfg -o $ISODIR/efi/boot/bootx64.efi -O x86_64-efi -p "" iso9660 normal search search_fs_file
2019-10-10 23:53:41 +08:00
modprobe loop
2021-04-18 08:19:42 +08:00
dd if=/dev/zero of=$ISODIR/boot/efiboot.img count=4096
mkdosfs -n LFS-UEFI $ISODIR/boot/efiboot.img || die "Failed mkdosfs"
mkdir -p $ISODIR/boot/efiboot
mount -o loop $ISODIR/boot/efiboot.img $ISODIR/boot/efiboot || die "Failed mount efiboot.img"
mkdir -p $ISODIR/boot/efiboot/EFI/boot
2021-06-13 20:38:17 +08:00
cp $ISODIR/efi/boot/bootx64.efi $ISODIR/boot/efiboot/EFI/boot
2021-04-18 08:19:42 +08:00
umount $ISODIR/boot/efiboot
rm -fr $ISODIR/boot/efiboot
2019-10-10 23:53:41 +08:00
printstep "Making the iso..."
rm -f $OUTPUT
xorriso -as mkisofs \
-isohybrid-mbr $LFS/usr/share/syslinux/isohdpfx.bin \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
2020-06-28 23:38:04 +08:00
-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 \
2021-04-18 08:19:42 +08:00
-o $OUTPUT $ISODIR || die "failed create iso"
printstep "Cleaning up..."
cleanup
exit 0