diff options
Diffstat (limited to 'utils/mkiso.sh')
| -rwxr-xr-x | utils/mkiso.sh | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/utils/mkiso.sh b/utils/mkiso.sh new file mode 100755 index 00000000..c6fc083d --- /dev/null +++ b/utils/mkiso.sh @@ -0,0 +1,194 @@ +#!/bin/sh -e + +msg() { echo "-> $@"; } +cleanup() { rm -rf $WORKDIR; } + +prepare_rootfs() { + [ -d $ROOTFS ] && return + basepkg="baselayout autils binutils bison busybox + bzip2 ca-certificates curl file flex gcc + git gmp initscripts linux-headers m4 make + mpc mpfr musl openssl patch spm xz zlib" + requiredpkg="linux grub syslinux efibootmgr" + extrapkg="pfetch sway swaybg swayidle swaylock wmenu mpv + foot firefox fff ranger dejavu-fonts-ttf wpa_supplicant dhcpcd + imv lm-sensors opendoas zstd rsync squashfs-tools" + mkdir -p $ROOTFS/var/lib/spm/db + APKG_NOPROMPT=1 APKG_ROOT=$ROOTFS apkg -I $basepkg $requiredpkg $extrapkg +} + +squashfs_rootfs() { + [ -f $ISODIR/boot/rootfs.sfs ] && return + mkdir -p $ISODIR/boot + + msg "squashing rootfs..." + mksquashfs \ + $ROOTFS \ + $ISODIR/boot/rootfs.sfs \ + -b 1048576 \ + -comp xz \ + -wildcards \ + -e tmp/* -e root/* -e sys/* -e dev/* -e proc/* -e run/* +} + +add_kmod() { + [ -f $INITRAMFSDIR/$KERNEL_MODULES_DIR/$1 ] && continue + mkdir -p $INITRAMFSDIR/$KERNEL_MODULES_DIR/${1%/*} + cp $ROOTFS/$KERNEL_MODULES_DIR/$1 $INITRAMFSDIR/$KERNEL_MODULES_DIR/${1%/*} + for d in $(grep $1: $ROOTFS/$KERNEL_MODULES_DIR/modules.dep | tr ' ' '\n' | tail -n+2); do + add_kmod $d + done +} + +make_initramfs() { + [ -f $ISODIR/boot/initrd ] && return + mkdir -p $INITRAMFSDIR/bin + cp $MKISOD/init $INITRAMFSDIR + chmod +x $INITRAMFSDIR/init + cp /bin/busybox $INITRAMFSDIR/bin + + KERNEL_VER=$(file $ROOTFS/boot/vmlinuz-linux | awk '{print $9}') + KERNEL_MODULES_DIR=lib/modules/$KERNEL_VER + + msg "copying kernel modules..." + ( cd $ROOTFS/$KERNEL_MODULES_DIR + for rk in $required_kmods; do + [ -d kernel/$rk ] || continue + for f in $(find kernel/$rk -type f); do + add_kmod $f + done + done + ) + + for i in order builtin builtin.modinfo; do + cp $ROOTFS/$KERNEL_MODULES_DIR/modules.$i $INITRAMFSDIR/lib/modules/$KERNEL_VER/ + done + depmod -b $INITRAMFSDIR $KERNEL_VER + + msg "generating live initrd..." + ( cd $INITRAMFSDIR ; find . | cpio -o -H newc | gzip -9 ) > $ISODIR/boot/initrd +} + +prepare_grub() { + [ -f $ISODIR/boot/efiboot.img ] && return + msg "preparing grub boot files..." + mkdir -p $ISODIR/boot/grub/x86_64-efi $ISODIR/boot/grub/fonts + echo "set prefix=/boot/grub" > $ISODIR/boot/grub-early.cfg + cp -a $ROOTFS/usr/lib/grub/x86_64-efi/*.mod $ISODIR/boot/grub/x86_64-efi + cp -a $ROOTFS/usr/lib/grub/x86_64-efi/*.lst $ISODIR/boot/grub/x86_64-efi + cp $ROOTFS/usr/share/grub/unicode.pf2 $ISODIR/boot/grub/fonts/unicode.pf2 + + # UEFI + rm -f $ISODIR/boot/efiboot.img + mkdir -p $ISODIR/efi/boot + 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 + modprobe loop + dd if=/dev/zero of=$ISODIR/boot/efiboot.img count=4096 + mkdosfs -n LIVE-UEFI $ISODIR/boot/efiboot.img + mkdir -p $ISODIR/boot/efiboot + mount -o loop $ISODIR/boot/efiboot.img $ISODIR/boot/efiboot + mkdir -p $ISODIR/boot/efiboot/EFI/boot + cp $ISODIR/efi/boot/bootx64.efi $ISODIR/boot/efiboot/EFI/boot + umount $ISODIR/boot/efiboot + rm -fr $ISODIR/boot/efiboot +} + +prepare_syslinux() { + [ -f $ISODIR/isolinux/isolinux.bin ] && return + msg "preparing syslinux boot files..." + mkdir -p $ISODIR/isolinux + cp $ROOTFS/usr/share/syslinux/ldlinux.c32 $ISODIR/isolinux + cp $ROOTFS/usr/share/syslinux/isolinux.bin $ISODIR/isolinux +} + +make_iso() { + cp $ROOTFS/boot/vmlinuz-linux $ISODIR/boot/vmlinuz + [ -f $MKISOD/live_script.sh ] && cp $MKISOD/live_script.sh $ISODIR/boot + touch $ISODIR/boot/livemedia + + if [ -d $MKISOD/include ]; then + echo "include rootfs files..." + ( + cd $MKISOD/include + chown -R 0:0 * + tar -czf $ISODIR/boot/rootfs.gz * + ) + fi + + cat << EOF > $ISODIR/isolinux/isolinux.cfg +#UI /isolinux/menu.c32 +DEFAULT silent +TIMEOUT 0 + +LABEL silent +LINUX /boot/vmlinuz +APPEND initrd=/boot/initrd +EOF + + cat << EOF > $ISODIR/boot/grub/grub.cfg +set default=0 +set timeout=3 +set timeout_style=hidden + +menuentry 'Alice Linux' { + linux /boot/vmlinuz + initrd /boot/initrd +} +EOF + + msg "generating iso..." + rm -f $OUTPUT + xorriso -as mkisofs \ + -isohybrid-mbr $ROOTFS/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 ALICE \ + -o $OUTPUT $ISODIR + + sha256sum $OUTPUT > $ISOSUM +} + +WORKDIR=/tmp/alice-iso +ROOTFS=$WORKDIR/rootfs +ISODIR=$WORKDIR/liveiso +INITRAMFSDIR=$WORKDIR/initramfs +MKISOD=$PWD/mkiso.d +OUTPUT=$PWD/alicelinux-$(date +%Y%m%d).iso +ISOSUM=$OUTPUT.sha256sum + +required_kmods="crypto + fs lib + drivers/block + drivers/md + drivers/ata + drivers/firewire + drivers/input/keyboard + drivers/input/mouse + drivers/scsi + drivers/message + drivers/pcmcia + drivers/virtio + drivers/usb/host + drivers/usb/storage + drivers/hid + drivers/cdrom" + +cleanup +prepare_rootfs +squashfs_rootfs +make_initramfs +prepare_grub +prepare_syslinux +make_iso +cleanup + +msg "making iso done" + +exit 0 |