mkiso.sh (5022B)
1 #!/bin/sh -e 2 3 msg() { echo "-> $@"; } 4 cleanup() { rm -rf $WORKDIR; } 5 6 prepare_rootfs() { 7 [ -d $ROOTFS ] && return 8 basepkg="baselayout autils binutils bison busybox 9 bzip2 ca-certificates curl file flex gcc 10 git gmp initscripts linux-headers m4 make 11 mpc mpfr musl openssl patch spm xz zlib" 12 requiredpkg="linux grub syslinux efibootmgr" 13 extrapkg="pfetch sway swaybg swayidle swaylock wmenu mpv 14 foot firefox fff ranger dejavu-fonts-ttf wpa_supplicant dhcpcd 15 imv lm-sensors opendoas zstd rsync squashfs-tools" 16 mkdir -p $ROOTFS/var/lib/spm/db 17 APKG_NOPROMPT=1 APKG_ROOT=$ROOTFS apkg -I $basepkg $requiredpkg $extrapkg 18 } 19 20 squashfs_rootfs() { 21 [ -f $ISODIR/boot/rootfs.sfs ] && return 22 mkdir -p $ISODIR/boot 23 24 msg "squashing rootfs..." 25 mksquashfs \ 26 $ROOTFS \ 27 $ISODIR/boot/rootfs.sfs \ 28 -b 1048576 \ 29 -comp xz \ 30 -wildcards \ 31 -e tmp/* -e root/* -e sys/* -e dev/* -e proc/* -e run/* 32 } 33 34 add_kmod() { 35 [ -f $INITRAMFSDIR/$KERNEL_MODULES_DIR/$1 ] && continue 36 mkdir -p $INITRAMFSDIR/$KERNEL_MODULES_DIR/${1%/*} 37 cp $ROOTFS/$KERNEL_MODULES_DIR/$1 $INITRAMFSDIR/$KERNEL_MODULES_DIR/${1%/*} 38 for d in $(grep $1: $ROOTFS/$KERNEL_MODULES_DIR/modules.dep | tr ' ' '\n' | tail -n+2); do 39 add_kmod $d 40 done 41 } 42 43 make_initramfs() { 44 [ -f $ISODIR/boot/initrd ] && return 45 mkdir -p $INITRAMFSDIR/bin 46 cp $MKISOD/init $INITRAMFSDIR 47 chmod +x $INITRAMFSDIR/init 48 cp /bin/busybox $INITRAMFSDIR/bin 49 50 KERNEL_VER=$(file $ROOTFS/boot/vmlinuz-linux | awk '{print $9}') 51 KERNEL_MODULES_DIR=lib/modules/$KERNEL_VER 52 53 msg "copying kernel modules..." 54 ( cd $ROOTFS/$KERNEL_MODULES_DIR 55 for rk in $required_kmods; do 56 [ -d kernel/$rk ] || continue 57 for f in $(find kernel/$rk -type f); do 58 add_kmod $f 59 done 60 done 61 ) 62 63 for i in order builtin builtin.modinfo; do 64 cp $ROOTFS/$KERNEL_MODULES_DIR/modules.$i $INITRAMFSDIR/lib/modules/$KERNEL_VER/ 65 done 66 depmod -b $INITRAMFSDIR $KERNEL_VER 67 68 msg "generating live initrd..." 69 ( cd $INITRAMFSDIR ; find . | cpio -o -H newc | gzip -9 ) > $ISODIR/boot/initrd 70 } 71 72 prepare_grub() { 73 [ -f $ISODIR/boot/efiboot.img ] && return 74 msg "preparing grub boot files..." 75 mkdir -p $ISODIR/boot/grub/x86_64-efi $ISODIR/boot/grub/fonts 76 echo "set prefix=/boot/grub" > $ISODIR/boot/grub-early.cfg 77 cp -a $ROOTFS/usr/lib/grub/x86_64-efi/*.mod $ISODIR/boot/grub/x86_64-efi 78 cp -a $ROOTFS/usr/lib/grub/x86_64-efi/*.lst $ISODIR/boot/grub/x86_64-efi 79 cp $ROOTFS/usr/share/grub/unicode.pf2 $ISODIR/boot/grub/fonts/unicode.pf2 80 81 # UEFI 82 rm -f $ISODIR/boot/efiboot.img 83 mkdir -p $ISODIR/efi/boot 84 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 85 modprobe loop 86 dd if=/dev/zero of=$ISODIR/boot/efiboot.img count=4096 87 mkdosfs -n LIVE-UEFI $ISODIR/boot/efiboot.img 88 mkdir -p $ISODIR/boot/efiboot 89 mount -o loop $ISODIR/boot/efiboot.img $ISODIR/boot/efiboot 90 mkdir -p $ISODIR/boot/efiboot/EFI/boot 91 cp $ISODIR/efi/boot/bootx64.efi $ISODIR/boot/efiboot/EFI/boot 92 umount $ISODIR/boot/efiboot 93 rm -fr $ISODIR/boot/efiboot 94 } 95 96 prepare_syslinux() { 97 [ -f $ISODIR/isolinux/isolinux.bin ] && return 98 msg "preparing syslinux boot files..." 99 mkdir -p $ISODIR/isolinux 100 cp $ROOTFS/usr/share/syslinux/ldlinux.c32 $ISODIR/isolinux 101 cp $ROOTFS/usr/share/syslinux/isolinux.bin $ISODIR/isolinux 102 } 103 104 make_iso() { 105 cp $ROOTFS/boot/vmlinuz-linux $ISODIR/boot/vmlinuz 106 [ -f $MKISOD/live_script.sh ] && cp $MKISOD/live_script.sh $ISODIR/boot 107 touch $ISODIR/boot/livemedia 108 109 if [ -d $MKISOD/include ]; then 110 echo "include rootfs files..." 111 ( 112 cd $MKISOD/include 113 chown -R 0:0 * 114 tar -czf $ISODIR/boot/rootfs.gz * 115 ) 116 fi 117 118 cat << EOF > $ISODIR/isolinux/isolinux.cfg 119 #UI /isolinux/menu.c32 120 DEFAULT silent 121 TIMEOUT 0 122 123 LABEL silent 124 LINUX /boot/vmlinuz 125 APPEND initrd=/boot/initrd 126 EOF 127 128 cat << EOF > $ISODIR/boot/grub/grub.cfg 129 set default=0 130 set timeout=3 131 set timeout_style=hidden 132 133 menuentry 'Alice Linux' { 134 linux /boot/vmlinuz 135 initrd /boot/initrd 136 } 137 EOF 138 139 msg "generating iso..." 140 rm -f $OUTPUT 141 xorriso -as mkisofs \ 142 -isohybrid-mbr $ROOTFS/usr/share/syslinux/isohdpfx.bin \ 143 -c isolinux/boot.cat \ 144 -b isolinux/isolinux.bin \ 145 -no-emul-boot \ 146 -boot-load-size 4 \ 147 -boot-info-table \ 148 -eltorito-alt-boot \ 149 -e boot/efiboot.img \ 150 -no-emul-boot \ 151 -isohybrid-gpt-basdat \ 152 -volid ALICE \ 153 -o $OUTPUT $ISODIR 154 155 sha256sum $OUTPUT > $ISOSUM 156 } 157 158 WORKDIR=/tmp/alice-iso 159 ROOTFS=$WORKDIR/rootfs 160 ISODIR=$WORKDIR/liveiso 161 INITRAMFSDIR=$WORKDIR/initramfs 162 MKISOD=$PWD/mkiso.d 163 OUTPUT=$PWD/alicelinux-$(date +%Y%m%d).iso 164 ISOSUM=$OUTPUT.sha256sum 165 166 required_kmods="crypto 167 fs lib 168 drivers/block 169 drivers/md 170 drivers/ata 171 drivers/firewire 172 drivers/input/keyboard 173 drivers/input/mouse 174 drivers/scsi 175 drivers/message 176 drivers/pcmcia 177 drivers/virtio 178 drivers/usb/host 179 drivers/usb/storage 180 drivers/hid 181 drivers/cdrom" 182 183 cleanup 184 prepare_rootfs 185 squashfs_rootfs 186 make_initramfs 187 prepare_grub 188 prepare_syslinux 189 make_iso 190 cleanup 191 192 msg "making iso done" 193 194 exit 0