alicelinux

A lightweight musl + clang/llvm + libressl + busybox distro
git clone https://codeberg.org/emmett1/alicelinux
Log | Files | Refs | README | LICENSE

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