#!/usr/bin/env bash for i in mksquashfs cpio gzip sed grep xorriso tar file; do if [ ! -x "$(command -v ${i})" ]; then case ${i} in mksquashfs) a="squashfs-tools";; readelf) a="binutils";; *) a="${i}" esac echo "Please install ${a} package to run this tool" exit 1 fi done exec > >(tee -i /tmp/mlb.log) 2>&1 cd "$(dirname $(readlink -f ${0}))" || exit 1 cp -f config .config mapfile -t list < <(ls -A /boot | egrep "^bzImage*|*kernel*|^vmlinuz*" 2>/dev/null | grep -v "init") if [ ${#list[@]} -gt 1 ]; then n=0 echo -e "Please choose your kernel to proceed:\nChoose number from ${n} to ${#list[@]}\n-----\n" for a in "${list[@]}"; do echo "[${n}] - ${a}" ((n++)) done echo "-----" read kernel kernel="/boot/${list[${kernel}]}" unset list n else kernel="/boot/${list[0]}" fi set -x time ( echo "KERNEL=\"${kernel}\"" >>.config echo "LMK=\"/lib/modules/$(file -bL ${kernel} | grep -o 'version .*' | cut -d' ' -f2)\"" >>.config unset kernel top="$(pwd)" . .config workTmpDir="$(mktemp -d /tmp/Mlb_WorkDir_XXXXXXX)" DATA="${workTmpDir}/isoImage" INITRD="$(initrd/create)" ret="${?}" tmpRoot="${workTmpDir}/tmpRoot" trap "rm -rf ${workTmpDir} /tmp/MlbInitRd{,.img}&&exit 1" 2 6 15 mkdir -p ${DATA}/changes ${DATA}/${DISTRO}/modules rsync --force -aAP $(for i in $(awk '{print $2}' /proc/mounts) /tmp; do echo "--exclude=${i}/*"; done) / ${tmpRoot} chmod +x -R inc2sys cp -rf inc2sys/* ${tmpRoot} mknod ${tmpRoot}/dev/console c 5 1 mknod ${tmpRoot}/dev/null c 1 3 mknod ${tmpRoot}/dev/ram0 b 1 0 mknod ${tmpRoot}/dev/tty1 c 4 1 mknod ${tmpRoot}/dev/tty2 c 4 2 mknod ${tmpRoot}/dev/tty3 c 4 3 mknod ${tmpRoot}/dev/tty4 c 4 4 for i in zstd xz lzma bzip2 gzip; do mksquashfs ${tmpRoot} ${DATA}/${DISTRO}/system.sfs -comp ${i} -noappend [ -e ${DATA}/${DISTRO}/system.sfs ]&&break done mv -f ${INITRD} ${DATA}/initrd.img cp -rf bootfiles/* ${DATA} mv -f ${tmpRoot}/tmp/grub_efi.img ${DATA}/efi.img for i in ${DATA}/syslinux.cfg ${DATA}/boot/grub/grub.cfg; do sed -i -r "s/__DISTRO__/${DISTRO}/" ${i} done cp -f ${KERNEL} ${DATA}/vmlinuz cd ${DATA} utc="$(date +%s)" v="$(git -C ${top} rev-parse HEAD 2>/dev/null)"&&v="${v}:GIT"||v="INFINITY:LOCAL" cat <.MlbMeta # Built using Minimal-Linux-Booter technology. MLB_VERSION="${v}" MLB_NAME="${DISTRO}" MLB_UTC="${utc}" eot [[ ${ret} = 2 ]]&&echo "MLB_ELF_STATIC_INITRD=\"1\"" >>.MlbMeta||echo "MLB_ELF_STATIC_INITRD=\"0\"" >>.MlbMeta xorriso -as mkisofs -o /${DISTRO}-${utc}.iso -allow-limited-size -iso-level 3 -J -R -D -A ${DISTRO} -V ${DISTRO} -no-emul-boot -boot-info-table -boot-load-size 4 -b isolinux.bin -c isolinux.boot -eltorito-alt-boot -e /efi.img -no-emul-boot . isohybrid --version >/dev/null 2>&1&&isohybrid -u /${DISTRO}-${utc}.iso cd ${top} rm -rf ${workTmpDir} )